/
add_lead_form_extension.py
executable file
·212 lines (179 loc) · 7.86 KB
/
add_lead_form_extension.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#!/usr/bin/env python
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Creates a lead form and a lead form extension for a campaign.
Run add_campaigns.py to create a campaign.
"""
import argparse
import sys
from uuid import uuid4
from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.errors import GoogleAdsException
def main(client, customer_id, campaign_id):
"""Creates a lead form and lead form extension for the given campaign.
Args:
client: An initialized GoogleAdsClient instance.
customer_id: The Google Ads customer ID.
campaign_id: The ID for a Campaign belonging to the given customer.
"""
lead_form_asset_resource_name = create_lead_form_asset(client, customer_id)
create_lead_form_extension(
client, customer_id, campaign_id, lead_form_asset_resource_name
)
# [START add_lead_form_extension]
def create_lead_form_asset(client, customer_id):
"""Creates a lead form asset using the given customer ID.
Args:
client: An initialized GoogleAdsClient instance.
customer_id: The Google Ads customer ID.
Returns:
A str of the resource name for the newly created lead form asset.
"""
asset_service = client.get_service("AssetService")
asset_operation = client.get_type("AssetOperation")
asset = asset_operation.create
asset.name = f"Interplanetary Cruise #{uuid4()} Lead Form"
asset.final_urls.append("http://example.com/jupiter")
# Creates a new LeadFormAsset instance.
lead_form_asset = asset.lead_form_asset
# Specify the details of the extension that the users will see.
lead_form_asset.call_to_action_type = (
client.enums.LeadFormCallToActionTypeEnum.BOOK_NOW
)
lead_form_asset.call_to_action_description = "Latest trip to Jupiter!"
# Define the form details.
lead_form_asset.business_name = "Interplanetary Cruise"
lead_form_asset.headline = "Trip to Jupiter"
lead_form_asset.description = (
"Our latest trip to Jupiter is now open for booking."
)
lead_form_asset.privacy_policy_url = "http://example.com/privacy"
# Define the fields to be displayed to the user.
input_type_enum = client.enums.LeadFormFieldUserInputTypeEnum
lead_form_field_1 = client.get_type("LeadFormField")
lead_form_field_1.input_type = input_type_enum.FULL_NAME
lead_form_asset.fields.append(lead_form_field_1)
lead_form_field_2 = client.get_type("LeadFormField")
lead_form_field_2.input_type = input_type_enum.EMAIL
lead_form_asset.fields.append(lead_form_field_2)
lead_form_field_3 = client.get_type("LeadFormField")
lead_form_field_3.input_type = input_type_enum.PHONE_NUMBER
lead_form_asset.fields.append(lead_form_field_3)
lead_form_field_4 = client.get_type("LeadFormField")
lead_form_field_4.input_type = input_type_enum.PREFERRED_CONTACT_TIME
lead_form_field_4.single_choice_answers.answers.extend(
["Before 9 AM", "Anytime", "After 5 PM"]
)
lead_form_asset.fields.append(lead_form_field_4)
# Optional: You can also specify a background image asset.
# To upload an asset, see misc/upload_image.py.
# lead_form_asset.background_image_asset = "INSERT_IMAGE_ASSET_HERE"
# Optional: Define the response page after the user signs up on the form.
lead_form_asset.post_submit_headline = "Thanks for signing up!"
lead_form_asset.post_submit_description = (
"We will reach out to you shortly. Visit our website to see past trip "
"details."
)
lead_form_asset.post_submit_call_to_action_type = (
client.enums.LeadFormPostSubmitCallToActionTypeEnum.VISIT_SITE
)
# Optional: Display a custom disclosure that displays along with the Google
# disclaimer on the form.
lead_form_asset.custom_disclosure = (
"Trip may get cancelled due to meteor shower"
)
# Optional: Define a delivery method for the form response. See
# https://developers.google.com/google-ads/webhook/docs/overview for more
# details on how to define a webhook.
delivery_method = client.get_type("LeadFormDeliveryMethod")
delivery_method.webhook.advertiser_webhook_url = (
"http://example.com/webhook"
)
delivery_method.webhook.google_secret = "interplanetary google secret"
delivery_method.webhook.payload_schema_version = 3
lead_form_asset.delivery_methods.append(delivery_method)
asset_service = client.get_service("AssetService")
response = asset_service.mutate_assets(
customer_id=customer_id, operations=[asset_operation]
)
resource_name = response.results[0].resource_name
print(f"Asset with resource name {resource_name} was created.")
return resource_name
# [END add_lead_form_extension]
# [START add_lead_form_extension_1]
def create_lead_form_extension(
client, customer_id, campaign_id, lead_form_asset_resource_name
):
"""Creates the lead form extension.
Args:
client: An initialized GoogleAdsClient instance.
customer_id: The Google Ads customer ID.
campaign_id: The ID for a Campaign belonging to the given customer.
"""
campaign_service = client.get_service("CampaignService")
campaign_asset_service = client.get_service("CampaignAssetService")
campaign_asset_operation = client.get_type("CampaignAssetOperation")
campaign_asset = campaign_asset_operation.create
campaign_asset.asset = lead_form_asset_resource_name
campaign_asset.field_type = client.enums.AssetFieldTypeEnum.LEAD_FORM
campaign_asset.campaign = campaign_service.campaign_path(
customer_id, campaign_id
)
response = campaign_asset_service.mutate_campaign_assets(
customer_id=customer_id, operations=[campaign_asset_operation]
)
for result in response.results:
print(
"Created campaign asset with resource name "
f'"{result.resource_name}" for campaign with ID {campaign_id}'
)
# [END add_lead_form_extension_1]
if __name__ == "__main__":
# GoogleAdsClient will read the google-ads.yaml configuration file in the
# home directory if none is specified.
googleads_client = GoogleAdsClient.load_from_storage(version="v11")
parser = argparse.ArgumentParser(
description="This code example creates a lead form and a lead form "
"extension for a campaign. Run add_campaigns.py to create a "
"campaign."
)
# The following argument(s) should be provided to run the example.
parser.add_argument(
"-c",
"--customer_id",
type=str,
required=True,
help="The Google Ads customer ID.",
)
parser.add_argument(
"-i",
"--campaign_id",
type=str,
required=True,
help="The ID of a Campaign belonging to the given customer.",
)
args = parser.parse_args()
try:
main(googleads_client, args.customer_id, args.campaign_id)
except GoogleAdsException as ex:
print(
f'Request with ID "{ex.request_id}" failed with status '
f'"{ex.error.code().name}" and includes the following errors:'
)
for error in ex.failure.errors:
print(f'\tError with message "{error.message}".')
if error.location:
for field_path_element in error.location.field_path_elements:
print(f"\t\tOn field: {field_path_element.field_name}")
sys.exit(1)