כדי ליצור חשבון לקוח חדש, שולחים אובייקט Customer עם נתונים מוכנים מראש באמצעות השיטה CreateCustomerClient ב-CustomerService.
בניגוד ליצירת ישות רגילה (כמו יצירת קמפיינים באמצעות קריאות ל-mutate), צריך לציין בבקשה את מספר הלקוח של חשבון הניהול ולא את המזהה של הלקוח שנוצר.
שדות של בקשה ולקוח
כשקוראים ל-CustomerService.CreateCustomerClient, מגדירים את CreateCustomerClientRequest ואת האובייקט המקונן שלו Customer כמו שמוצג בטבלה הבאה:
| שדה או כותרת | דרישה | יכולת שינוי ותיאור |
|---|---|---|
customer_id |
חובה | מספר הלקוח בן 10 הספרות (ללא מקפים) של חשבון הניהול הראשי הישיר שבו נוצר חשבון הלקוח החדש. |
login-customer-id (כותרת) |
משפטי תנאי | חובה בכותרות הבקשה אם המשתמש המאומת ניגש לחשבון הניהול הראשי (customer_id) דרך חשבון ניהול קודם שנמצא גבוה יותר בהיררכיה. |
customer_client.descriptive_name |
חובה | ניתן לשינוי: השם המוצג של החשבון החדש (לדוגמה, "Acct Created with CustomerService"). אפשר לעדכן אותו מאוחר יותר באמצעות CustomerService.MutateCustomer. |
customer_client.currency_code |
חובה | לא ניתן לשינוי אחרי היצירה: קוד מטבע לחיוב בן 3 אותיות לפי תקן ISO 4217 (לדוגמה, USD או EUR). ראו קודי מטבע נתמכים. |
customer_client.time_zone |
חובה | אי אפשר לשנות אחרי היצירה: מזהה אזור הזמן של החשבון (לדוגמה, America/New_York). מידע נוסף על אזורי זמן נתמכים. |
email_address וגם access_role |
אופציונלי (רשימת היתרים בלבד) | הזמנת משתמש (ADMIN, STANDARD, READ_ONLY או EMAIL_ONLY) לחשבון שנוצר במהלך היצירה. בחשבונות שלא נמצאים ברשימת ההיתרים, צריך להזמין משתמשים אחרי היצירה באמצעות CustomerUserAccessInvitationService. |
validate_only |
אופציונלי | כש-true מאמת את פרמטרי הבקשה ואת הזכאות של חשבון הניהול בלי ליצור את החשבון. |
קוד לדוגמה
בדוגמה הבאה אפשר לראות איך יוצרים חשבון לקוח במסגרת חשבון ניהול קיים:
Java
private void runExample(GoogleAdsClient googleAdsClient, Long managerId) { // Formats the current date/time to use as a timestamp in the new customer description. String dateTime = ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME); // Initializes a Customer object to be created. Customer customer = Customer.newBuilder() .setDescriptiveName("Account created with CustomerService on '" + dateTime + "'") .setCurrencyCode("USD") .setTimeZone("America/New_York") // Optional: Sets additional attributes of the customer. .setTrackingUrlTemplate("{lpurl}?device={device}") .setFinalUrlSuffix("keyword={keyword}&matchtype={matchtype}&adgroupid={adgroupid}") .build(); // Sends the request to create the customer. try (CustomerServiceClient client = googleAdsClient.getLatestVersion().createCustomerServiceClient()) { CreateCustomerClientResponse response = client.createCustomerClient(managerId.toString(), customer); System.out.printf( "Created a customer with resource name '%s' under the manager account with" + " customer ID '%d'.%n", response.getResourceName(), managerId); } }
C#
public void Run(GoogleAdsClient client, long managerCustomerId) { // Get the CustomerService. CustomerServiceClient customerService = client.GetService(Services.V26.CustomerService); Customer customer = new Customer() { DescriptiveName = $"Account created with CustomerService on '{DateTime.Now}'", // For a list of valid currency codes and time zones see this documentation: // https://developers.google.com/google-ads/api/reference/data/codes-formats#codes_formats. CurrencyCode = "USD", TimeZone = "America/New_York", // The below values are optional. For more information about URL // options see: https://support.google.com/google-ads/answer/6305348. TrackingUrlTemplate = "{lpurl}?device={device}", FinalUrlSuffix = "keyword={keyword}&matchtype={matchtype}&adgroupid={adgroupid}" }; try { // Create the account. CreateCustomerClientResponse response = customerService.CreateCustomerClient( managerCustomerId.ToString(), customer); // Display the result. Console.WriteLine($"Created a customer with resource name " + $"'{response.ResourceName}' under the manager account with customer " + $"ID '{managerCustomerId}'"); } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } }
PHP
public static function runExample(GoogleAdsClient $googleAdsClient, int $managerCustomerId) { $customer = new Customer([ 'descriptive_name' => 'Account created with CustomerService on ' . date('Ymd h:i:s'), // For a list of valid currency codes and time zones see this documentation: // https://developers.google.com/google-ads/api/reference/data/codes-formats. 'currency_code' => 'USD', 'time_zone' => 'America/New_York', // The below values are optional. For more information about URL // options see: https://support.google.com/google-ads/answer/6305348. 'tracking_url_template' => '{lpurl}?device={device}', 'final_url_suffix' => 'keyword={keyword}&matchtype={matchtype}&adgroupid={adgroupid}' ]); // Issues a mutate request to create an account $customerServiceClient = $googleAdsClient->getCustomerServiceClient(); $response = $customerServiceClient->createCustomerClient( CreateCustomerClientRequest::build($managerCustomerId, $customer) ); printf( 'Created a customer with resource name "%s" under the manager account with ' . 'customer ID %d.%s', $response->getResourceName(), $managerCustomerId, PHP_EOL ); }
Python
def main(client: GoogleAdsClient, manager_customer_id: str) -> None: """The main method that creates all necessary entities for the example. Args: client: an initialized GoogleAdsClient instance. manager_customer_id: a manager client customer ID. """ customer_service: CustomerServiceClient = client.get_service( "CustomerService" ) customer: Customer = client.get_type("Customer") now: str = datetime.today().strftime("%Y%m%d %H:%M:%S") customer.descriptive_name = f"Account created with CustomerService on {now}" # For a list of valid currency codes and time zones see this documentation: # https://developers.google.com/google-ads/api/reference/data/codes-formats customer.currency_code = "USD" customer.time_zone = "America/New_York" # The below values are optional. For more information about URL # options see: https://support.google.com/google-ads/answer/6305348 customer.tracking_url_template = "{lpurl}?device={device}" customer.final_url_suffix = ( "keyword={keyword}&matchtype={matchtype}&adgroupid={adgroupid}" ) response: CreateCustomerClientResponse = ( customer_service.create_customer_client( customer_id=manager_customer_id, customer_client=customer ) ) print( f'Customer created with resource name "{response.resource_name}" ' f'under manager account with ID "{manager_customer_id}".' )
Ruby
def create_customer(manager_customer_id) # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new customer = client.resource.customer do |c| c.descriptive_name = "Account created with CustomerService on #{(Time.new.to_f * 1000).to_i}" # For a list of valid currency codes and time zones, see this documentation: # https://developers.google.com/google-ads/api/reference/data/codes-formats c.currency_code = "USD" c.time_zone = "America/New_York" # The below values are optional. For more information about URL options, see: # https://support.google.com/google-ads/answer/6305348 c.tracking_url_template = "{lpurl}?device={device}" c.final_url_suffix = "keyword={keyword}&matchtype={matchtype}&adgroupid={adgroupid}" end response = client.service.customer.create_customer_client( customer_id: manager_customer_id, customer_client: customer ) puts "Created a customer with resource name #{response.resource_name} under" + " the manager account with customer ID #{manager_customer_id}." end
Perl
sub create_customer { my ($api_client, $manager_customer_id) = @_; # Initialize a customer to be created. my $customer = Google::Ads::GoogleAds::V26::Resources::Customer->new({ descriptiveName => "Account created with CustomerService on #" . uniqid(), # For a list of valid currency codes and time zones, see this documentation: # https://developers.google.com/google-ads/api/reference/data/codes-formats currencyCode => "USD", timeZone => "America/New_York", # The below values are optional. For more information about URL options, see: # https://support.google.com/google-ads/answer/6305348 trackingUrlTemplate => "{lpurl}?device={device}", finalUrlSuffix => "keyword={keyword}&matchtype={matchtype}&adgroupid={adgroupid}" }); # Create the customer client. my $create_customer_client_response = $api_client->CustomerService()->create_customer_client({ customerId => $manager_customer_id, customerClient => $customer }); printf "Created a customer with resource name '%s' under the manager account " . "with customer ID %d.\n", $create_customer_client_response->{resourceName}, $manager_customer_id; return 1; }
curl
# Creates a customer client. # # Variables: # API_VERSION, # MANAGER_CUSTOMER_ID, # OAUTH2_ACCESS_TOKEN: # See https://developers.google.com/google-ads/api/rest/auth#request_headers # for details. # curl -f --request POST \ "https://googleads.googleapis.com/v${API_VERSION}/customers/${MANAGER_CUSTOMER_ID}:createCustomerClient" \ --header "Content-Type: application/json" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data @- <<EOF { "customerClient": { "descriptiveName": "Account created with CustomerService #${RANDOM}", "currencyCode": "USD", "timeZone": "America/New_York" } } EOF
תשובה והשלבים הבאים
אם הפעולה בוצעה בהצלחה, CreateCustomerClient מחזיר CreateCustomerClientResponse שמכיל את resource_name (customers/{new_customer_id}) של החשבון החדש שנוצר (וגם invitation_link אם email_address ו-access_role נכללו על ידי חשבון ניהול ברשימת ההיתרים). לאחר מכן תוכלו להשתמש בשם המשאב או במספר הלקוח כדי לאמת את החשבון בהיררכיה, להעניק למשתמש גישה, להגדיר חיוב או לאכלס קמפיינים.
אימות החשבון שנוצר בהיררכיית הניהול
מריצים שאילתה על מקור המידע customer_client בחשבון הניהול (customer_id) באמצעות GoogleAdsService.SearchStream כדי לבדוק את חשבון המשנה החדש שנוצר:
SELECT
customer_client.id,
customer_client.resource_name,
customer_client.client_customer,
customer_client.descriptive_name,
customer_client.currency_code,
customer_client.time_zone,
customer_client.manager,
customer_client.level,
customer_client.status
FROM customer_client
WHERE customer_client.level = 1
AND customer_client.id = {new_customer_id}
הזמנת משתמשים לחשבון החדש
אם חשבון הניהול שלכם לא נמצא ברשימת ההיתרים להגדרה של email_address ו-access_role ישירות ב-CreateCustomerClientRequest, שלחו הזמנת גישה ל-new_customer_id החדש שנוצר באמצעות MutateCustomerUserAccessInvitation ב-CustomerUserAccessInvitationService. כשמבצעים אימות דרך חשבון הניהול הראשי, צריך לכלול את login-customer-id: {manager_customer_id} בכותרות של בקשת ה-HTTP:
POST https://googleads.googleapis.com/v26/customers/{new_customer_id}/customerUserAccessInvitations:mutate
{
"operation": {
"create": {
"emailAddress": "user@example.com",
"accessRole": "ADMIN"
}
}
}
טיפול בשגיאות
הקריאות ל-CreateCustomerClient יכולות להחזיר את השגיאות הבאות:
-
CustomerError: מציין הגבלות על יצירת חשבונות ברמת החשבון, כמוCREATION_DENIED_INELIGIBLE_MCC(חשבון הניהול לא עומד בדרישות ליצירת חשבונות חדשים) אוCREATION_DENIED_FOR_POLICY_VIOLATION(יצירת הלקוח נדחתה בגלל הפרת מדיניות). -
ManagerLinkError: מציין אילוצים בהיררכיה או במגבלות החשבון, כמוTOO_MANY_ACCOUNTS,TOO_MANY_ACCOUNTS_AT_MANAGERאוMAX_DEPTH_EXCEEDED. -
AccessInvitationError: מוחזר אם סופקemail_addressאופציונלי (יחד עםaccess_role, שזמין רק לחשבונות ברשימת ההיתרים) ב-CreateCustomerClientRequestכדי להזמין משתמש לחשבון החדש, וההזמנה נכשלה (לדוגמה,INVALID_EMAIL_ADDRESS, GOOGLE_CONSUMER_ACCOUNT_NOT_ALLOWEDאוEMAIL_DOMAIN_POLICY_VIOLATED). בחשבונות שלא נמצאים ברשימת ההיתרים צריך להזמין משתמשים אחרי יצירת החשבון באמצעותCustomerUserAccessInvitationService. -
CurrencyCodeError.UNSUPPORTEDאוTimeZoneError.INVALID_TIME_ZONE: מוחזרת כשהערך שצוין בשדהcurrency_codeאוtime_zoneבאובייקטCustomerלא תקין או לא נתמך.