Вы можете использовать API Google Ads для управления онлайн-конверсиями по кликам в Google Ads. Онлайн-конверсии по кликам помогают отслеживать объявления, которые привели к продажам в онлайн-мире, например, через веб-сайт.
Онлайн-конверсии отслеживаются с помощью тега Google , но вы можете корректировать или улучшать их, используя API Google Ads.
Если у вас уже настроен тег Google и вы хотите скорректировать онлайн-конверсии, перейдите на страницу корректировки конверсий . Если у вас уже настроен тег Google и вы хотите улучшить онлайн-конверсии с помощью предоставленных пользователями данных (также известных как улучшенные конверсии для веб-сайтов) , продолжайте читать.
Повышение конверсии для веб-сайта
В следующем разделе объясняется, как повысить конверсию кликов в интернете, также известную как «Повышение конверсии для веб-сайтов» .
Для повышения эффективности конверсий в веб-рекламе необходимо настроить тег, который автоматически отправляет идентификатор клика (например, GCLID) и идентификатор заказа в Google Ads при совершении пользователем конверсии. Вы можете настроить повышение эффективности конверсий через Google Tag Manager , тег Google или API Google Ads. Использование API Google Ads дает преимущество в отправке данных о конверсиях из первых рук в течение 24 часов после события конверсии, а не одновременно. Это позволяет получать данные из различных источников, таких как база данных клиентов или CRM-система.
Как работает повышение конверсии в интернете
Улучшенные показатели конверсии для веб-сайта в API Google Ads дополняют шаг 3 в следующем алгоритме.
Вместо отправки хешированной информации о пользователе при совершении пользователем конверсии, тег отправляет только GCLID и идентификатор заказа, а хешированная информация о пользователе отправляется позже путем импорта идентификатора заказа вместе с хешированными данными. Чтобы узнать больше об улучшенных конверсиях для веб-сайтов, см. наш Справочный центр .

Предварительные требования
Для использования расширенных функций конверсии в веб-версии необходимо принять условия обработки данных клиента . Проверить принятие условий обработки данных клиента можно, отправив следующий запрос клиенту, использующему конверсию Google Ads:
SELECT
customer.id,
customer.conversion_tracking_setting.accepted_customer_data_terms
FROM customer
Если accepted_customer_data_terms имеет false , следуйте инструкциям в Центре поддержки.
для выполнения этого предварительного условия.
Настройка тегирования
Вы можете настроить теги для своего веб-сайта, следуя инструкциям в Справочном центре . Рекомендуется также добавить идентификаторы транзакций (идентификаторы заказов) к тегу отслеживания конверсий, чтобы упростить сопоставление конверсий.
Реализация API
Вот общая схема импорта улучшенных показателей конверсии для веб-сайта в API Google Ads.
Нормализуйте и хешируйте предоставленные пользователем данные , такие как адрес электронной почты, номер телефона и почтовый адрес.
Заполните объекты
ConversionAdjustmentнормализованными и хешированными данными, предоставленными пользователем.Импортируйте объекты
ConversionAdjustmentвConversionAdjustmentUploadService.
Нормализация и хеширование предоставленных пользователем данных.
В целях обеспечения конфиденциальности следующие данные перед импортом должны быть хешированы с использованием алгоритма SHA-256:
- Адрес электронной почты
- Номер телефона
- Имя
- Фамилия
- адрес улицы
Не следует хешировать следующие данные:
- Страна
- Состояние
- Город
- Почтовый индекс
Для стандартизации результатов хеширования выполните следующие действия перед хешированием одного из этих значений:
- Удалите пробелы в начале и конце текста.
- Преобразовать текст в нижний регистр.
- Форматируйте телефонные номера в соответствии со стандартом E164 .
Форматирование адресов электронной почты для повышения конверсии.
Для обеспечения максимального соответствия и повышения конверсии необходимо правильно отформатировать адреса электронной почты перед хешированием. Выполните следующие шаги:
Применить стандартную нормализацию (все адреса электронной почты):
- Удалите все пробелы в начале и конце предложения.
- Преобразуйте весь адрес электронной почты в нижний регистр.
При необходимости примените стандартную нормализацию, специфичную для Gmail/Googlemail:
- Этот шаг применяется ТОЛЬКО к адресам электронной почты с доменами
gmail.comиgooglemail.com. - Удалите точки (
.): В части имени пользователя (перед символом@) удалите все точки. Удалите суффиксы плюс (
+): из части имени пользователя удалите знак плюс (+) и все символы, следующие за ним.- Пример:
Jane.Doe+Shopping@googlemail.comсначала преобразуетсяjane.doe+shopping@googlemail.com(строчными буквами), а затемjanedoe@googlemail.com(в соответствии с правилами Gmail/Googlemail).
- Пример:
Другие домены: Из имен пользователей в адресах электронной почты, отличных от
gmail.comилиgooglemail.comНЕ следует удалять точки или суффиксы «плюс». К таким адресам следует применять только стандартную нормализацию (преобразование в нижний регистр, удаление пробелов).- Например:
user.name+NYC@Example.comбудет преобразовано вuser.name+nyc@example.com.
- Например:
- Этот шаг применяется ТОЛЬКО к адресам электронной почты с доменами
Хэшируйте нормализованный адрес электронной почты:
- После применения соответствующих шагов нормализации, хешируйте полученный адрес электронной почты с помощью алгоритма SHA-256.
Java
private String normalizeAndHash(MessageDigest digest, String s, boolean trimIntermediateSpaces) throws UnsupportedEncodingException { // Normalizes by first converting all characters to lowercase, then trimming spaces. String normalized = s.toLowerCase(); if (trimIntermediateSpaces) { // Removes leading, trailing, and intermediate spaces. normalized = normalized.replaceAll("\\s+", ""); } else { // Removes only leading and trailing spaces. normalized = normalized.trim(); } // Hashes the normalized string using the hashing algorithm. byte[] hash = digest.digest(normalized.getBytes("UTF-8")); StringBuilder result = new StringBuilder(); for (byte b : hash) { result.append(String.format("%02x", b)); } return result.toString(); } /** * Returns the result of normalizing and hashing an email address. For this use case, Google Ads * requires removal of any '.' characters preceding {@code gmail.com} or {@code googlemail.com}. * * @param digest the digest to use to hash the normalized string. * @param emailAddress the email address to normalize and hash. */ private String normalizeAndHashEmailAddress(MessageDigest digest, String emailAddress) throws UnsupportedEncodingException { String normalizedEmail = emailAddress.toLowerCase(); String[] emailParts = norm>ali&&zedEmail.split("@"); if (emailParts.length 1 emailParts[1].matches("^(gmail|googlemail)\\.com\\s*")) { // Removes any '.' characters from the portion of the email address before the domain if the // domain is gmail.com or googlemail.com. emailParts[0] = emailParts[0].replaceAll("\\.", ""); normalizedEmail = String.format("%s[1]); } return normalizeAndHash(digest, normalizedEmail, true); }UploadEnhancedConversionsForWeb.java
C#
/// <summary> /// Normalizes the email address and hashes it. For this use case, Google Ads requires /// removal of any '.' characters pr<eced>ing codeg<mail.>com/code< or<>/span> /// codegoogle<mail.>com/co<de. /// >/summ<ary /// param name=">emailAddress"<The em>ail a<ddress.>/param /// ret<urnsThe >hash code./returns private string NormalizeAndHashEmailAddress(string emailAddress) { string normalizedEmail = emailAddress.ToLower(); string[] emailParts = normalizedEmail.Split('@'); > && if (emailParts.Length 1 (emailParts[1] == "gmail.com" || emailParts[1] == "googlemail.com")) { // Removes any '.' characters from the portion of the email address before // the domain if the domain is gmail.com or googlemail.com. emailParts[0] = emailParts[0].Replace(".", ""); normalizedEmail = $"{emailParts[0]<}@{emai>lParts[1]}"; } return NormalizeAnd<Hash(nor>maliz<edEmail); } /// s>ummary /// Normalizes and hashes< a str>ing v<alue. />// /summary /// param name="<;value&q>uot;The value to normalize and hash./param /// returnsThe normalized and hashed value./returns private static string Normali<zeAndHa>sh(string value) { return ToSha256String(digest, ToNormali<zedValue>(valu<e)); } /// summary> /// Hash a string value using SHA-<256 ha>shing< algorithm. /// /s>ummary /// param name="digest"Provides <the al>gorit<hm for >SHA-256./param //</ param >name="value"The string value (e.g. an email address) to hash./param /// returnsThe hashed value./returns private static string ToSha256String(SHA256 digest, string value) { byte[] digestBytes = digest.ComputeHash(Encoding.UTF8.GetBytes(value)); // Convert the byte array into an <unhyphe>nated hexadecimal string. return BitConverter.ToString(digestBytes).Replace("-", s<tring.Em>pty);< } /// summary //>/ Removes leading and t<railin>g whi<tespace> and converts all cha<racters >to /// lower case. /// /summary /// param name="value"The value to normalize./paramreturns private static string ToNormalizedValue(string value) { return value.Trim().ToLower(); }UploadEnhancedConversionsForWeb.cs
PHP
private static function normalizeAndHash( string $hashAlgorithm, string $value, bool $trimIntermediateSpaces ): string { // Normalizes by first converting all characters to lowercase, then trimming spaces. $normalized = strtolower($value); if ($trimIntermediateSpaces === true) { // Removes leading, trailing, and intermediate spaces. $normalized = str_replace(' ', '', $normalized); } else { // Removes only leading and trailing spaces. $normalized = trim($normalized); } return hash($hashAlgorithm, strtolower(trim($normalized))); } /** * Returns the result of normalizing and hashing an email address. For this use case, Google * Ads requires removal of any '.' characters preceding "gmail.com" or "googlemail.com". * * @param string $hashAlgorithm the hash algorithm to use * @param string $emailAddress the email address to normalize and hash * @return string the normalized and hashed email address */ private static function normalizeAndHashEmailAddress( string $hashAlgorithm, string $emailAddress ): string { $normalizedEmail = strtolower($emailAddress); $emailParts = explode("@", $>normalizedE&&mail); if ( count($emailParts) 1 preg_match('/^(gmail|googlemail)\.com\s*/', $emailParts[1]) ) { // Removes any '.' characters from the portion of the email address before the domain // if the domain is gmail.com or googlemail.com. $emailParts[0] = str_replace(".", "", $emailParts[0]); $normalizedEmail = sprintf('%s@%s', $emailParts[0], $lf::normalizeAndHash($hashAlgorithm, $normalizedEmail, true); }UploadEnhancedConversionsForWeb.php
Python
def normalize_and_hash_email_address(email_address): """Returns the result of normalizing and hashing an email address. For this use case, Google Ads requires removal of any '.' characters preceding "gmail.com" or "googlemail.com" Args: email_address: An email address to normalize. Returns: A normalized (lowercase, removed whitespace) and SHA-265 hashed string. """ normalized_email = email_address.strip().lower() email_parts = normalized_email.split("@") #> Check that there are at least two segments if len(email_parts) 1: # Removes any '.' and '+' characters from the portion of the email address # before the domain chars_to_remove = ".+" translation_table = str.maketrans('', '', chars_to_remove) email_parts[0] = email_parts[0].translate(translation_table) normalized_email = "@".join(email_parts) return normalize_and_hash(normalized_email) def normalize_and_hash(s): """Normalizes and hashes a string with SHA-256. Private customer data must be hashed during upload, as described at: https://support.google.com/google-ads/answer/9888656 Args: s: The string to perform this operation on. Returns: A normaliz SHA-256 hashed string. """ return hashlib.sha256(s.strip().lower().encode()).hexdigest()upload_enhanced_conversions_for_web.py
Руби
# Returns the result of normalizing and then hashing the string using the # provided digest. Private customer data must be hashed during upload, as # described at https://support.google.com/google-ads/answer/9888656. def normalize_and_hash(str) # Remove leading and trailing whitespace and ensure all letters are lowercase # before hasing. Digest::SHA256.hexdigest(str.strip.downcase) end # Returns the result of normalizing and hashing an email address. For this use # case, Google Ads requires removal of any '.' characters preceding 'gmail.com' # or 'googlemail.com'. def normalize_and_hash_email(email) email_parts = email.downcase.split("@") # Removes any '.' characters from the portion of the email address before the # domain if the domain is gmail.com or googlemail.com. if email_parts.last =~ /^(gmail|googlemail)\.com\s*/ email_parts[0] = email_parts[0].gsub('.', 'parts.join('@')) endupload_enhanced_conversions_for_web.rb
Perl
sub normalize_and_hash { my $value = shift; my $trim_intermediate_spaces = shift; if ($trim_intermediate_spaces) { $value =~ s/\s+//g; } else { $value =~ s/^\s+|\s+$//g; } return sha256_hex(lc $value); } # Returns the result of normalizing and hashing an email address. For this use # case, Google Ads requires removal of any '.' characters preceding 'gmail.com' # or 'googlemail.com'. sub normalize_and_hash_email_address { my $email_address = shift; my $normalized_email = lc $email_address; my @email_parts = split('@', $normalized_em>ail); && if (scalar @email_parts 1 $email_parts[1] =~ /^(gmail|googlemail)\.com\s*/) { # Remove any '.' characters from the portion of the email address before the # domain if the domain is 'gmail.com' or 'googlemail.com'. $email_parts[0] =~ s/\.//g; $normalized_email = sprintf '%s@%s', $email_parts[0], $email_pah($normalized_email, 1); }upload_enhanced_conversions_for_web.pl
Заполнить объекты ConversionAdjustment
В следующем разделе показано, как создать корректировку для улучшения, содержащую идентификатор заказа, а также идентификаторы адреса электронной почты, номера телефона и физического адреса, с применением стандартизации и хеширования по мере необходимости. В качестве рекомендации, если gclid доступен, следует включить его в корректировку.
Этот шаг практически идентичен руководству по корректировке при импорте и конвертации , с некоторыми оговорками:
- Заполните поле
user_identifiersнормализованными и хешированными данными о пользователях. Если у вас есть несколько идентификаторов пользователей, создайте отдельныйUserIdentifierдля каждого из них, всего до пяти идентификаторов.
Java
// Creates a builder for constructing the enhancement adjustment. ConversionAdjustment.Builder enhancementBuilder = ConversionAdjustment.newBuilder().setAdjustmentType(ConversionAdjustmentType.ENHANCEMENT); // Extracts user email, phone, and address info from the raw data, normalizes and hashes it, // then wraps it in UserIdentifier objects. // Creates a separate UserIdentifier object for each. The data in this example is hardcoded, but // in your application you might read the raw data from an input file. // IMPORTANT: Since the identifier attribute of UserIdentifier // (https://developers.google.com/google-ads/api/reference/rpc/latest/UserIdentifier) is a // oneof // (https://protobuf.dev/programming-guides/proto3/#oneof-features), you must set only ONE of // hashedEmail, hashedPhoneNumber, mobileId, thirdPartyUserId, or addressInfo. Setting more // than one of these attributes on the same UserIdentifier will clear all the other members // of the oneof. For example, the following code is INCORRECT and will result in a // UserIdentifier with ONLY a hashedPhoneNumber. // // UserIdentifier incorrectlyPopulatedUserIdentifier = // UserIdentifier.newBuilder() // .setHashedEmail("...") // .setHashedPhoneNumber("...") // .build(); <ImmutableMap.B>uilderString, String rawRecordBuilder< = Immutab>leMap.String, Stringbuilder() .put("email", "alex.2@example.com") // Email address that includes a period (.) before the Gmail domain. .put("email", "alex.2@example.com") // Address that includes all four required elements: first name, last name, country // code, and postal code. .put("firstName", "Alex") .put("lastName", "Quinn") .put("countryCode", "US") .put("postalCode", "94045") // Phone number to be converted to E.164 format, with a leading '+' as required. .put("phone", "+1 800 5550102") // This example lets you put conversion details as arguments, but in reality you might // store this data alongside other user data, so we include it in this sample user // record. .put("orderId", orderId) .put("conversionActionId", Long.toString(conversionActionId)) .put("currencyCode", "USD"); // Adds entries for the optional fields. if (conversionDa<teTime != null>) { rawRecordBuilder.put("conversionDateTime", conversionDateTime); } if (userAgent != null) { rawRecordBuilder.put("userAgent", userAgent); } // Builds the map representing the record. MapString, String rawRecord = rawRecordBuilder.build(); // Creates a SHA256 message digest for hashing u<ser identifier>s in a privacy-safe way, as // d<>escribed at https://support.google.com/google-ads/answer/9888656. MessageDigest sha256Digest = MessageDigest.getInstance("SHA-256"); // Creates a list for the user identifiers. ListUserIdentifier userIdentifiers = new ArrayList(); // Creates a user identifier using the hashed email address, using the normalize and hash method // specifically for email addresses. UserIdentifier emailIdentifier = UserIdentifier.newBuilder() // Optional: specify the user identifier source. .setUserIdentifierSource(UserIdentifierSource.FIRST_PARTY) // Uses the normalize and hash method specifically for email addresses. .setHashedEmail(normalizeAndHashEmailAddress(sha256Digest, rawRecord.get("email"))) .build(); userIdentifiers.add(emailIdentifier); // Checks if the record has a phone number, and if so, adds a UserIdentifier for it. if (rawRecord.containsKey("phone")) { UserIdentifier hashedPhoneNumberIdentifier = UserIdentifier.newBuilder() .setHashedPhoneNumber(normalizeAndHash(sha256Digest, rawRecord.get("phone"), true)) .build(); // Adds the hashed phone number identifier to the UserData object's list. userIdentifiers.add(hashedPhoneNumberIdentifier);< } //> Checks if the record has all the<> required mailing address elements, and if so, adds a // UserIdentifier for the mailing address. if (rawRecord.containsKey("firstName")) { // Checks if the record contains all the other required elements of a mailing address. SetString missingAddressKeys = new HashSet(); for (String addressKey : new String[] {"lastName", "countryCode", "postalCode"}) { if (!rawRecord.containsKey(addressKey)) { missingAddressKeys.add(addressKey); } } if (!missingAddressKeys.isEmpty()) { System.out.printf( "Skipping addition of mailing address information because the following required keys" + " are missing: %s%n", missingAddressKeys); } else { // Creates an OfflineUserAddressInfo object that contains all the required elements of a // mailing address. OfflineUserAddressInfo addressInfo = OfflineUserAddressInfo.newBuilder() .setHashedFirstName( normalizeAndHash(sha256Digest, rawRecord.get("firstName"), false)) .setHashedLastName(normalizeAndHash(sha256Digest, rawRecord.get("lastName"), false)) .setCountryCode(rawRecord.get("countryCode")) .setPostalCode(rawRecord.get("postalCode"ntifier addressIdentifier = UserIdentifier.newBuilder().setAddressInfo(addressInfo).build(); // Adds the address identifier to the UserData object's list. userIdentifiers.add(addressIdentifier); } } // Adds the user identifiers to the enhancement adjustment. enhancementBuilder.addAllUserIdentifiers(userIdentifiers);UploadEnhancedConversionsForWeb.java
C#
// Normalize and hash the raw data, then wrap it in UserIdentifier objects. // Create a separate UserIdentifier object for each. The data in this example is // hardcoded, but in your application you might read the raw data from an input file. // // IMPORTANT: Since the identifier attribute of UserIdentifier // (https://developers.google.com/google-ads/api/reference/rpc/latest/UserIdentifier) // is a oneof // (https://protobuf.dev/programming-guides/proto3/#oneof-features), you must set // only ONE of hashed_email, hashed_phone_number, mobile_id, third_party_user_id, // or address-info. Setting more than one of these attributes on the same UserIdentifier // will clear all the other members of the oneof. For example, the following code is // INCORRECT and will result in a UserIdentifier with ONLY a hashed_phone_number: // UserIdentifier incorrectlyPopulatedUserIdentifier = new UserIdentifier() // { // HashedEmail = "..." // HashedPhoneNumber = "..." // } UserIdentifier addressIdentifier = new UserIdentifier() { AddressInfo = new OfflineUserAddressInfo() { HashedFirstName = NormalizeAndHash("Dana"), HashedLastName = NormalizeAndHash("Quinn"), HashedStreetAddress = NormalizeAndHash("1600 Amphitheatre Pkwy"), City = "Mountain View", State = "CA", PostalCode = "94043", CountryCode = "US" }, // Optional: Specifies the user identifier source. UserIdentifierSource = UserIdentifierSource.FirstParty }; // Creates a user identifier using the hashed email address. UserIdentifier emailIdentifier = new UserIdentifier() { UserIdentifierSource = UserIdentifierSource.FirstParty, // Uses the normalize and hash method specifically for email addresses. HashedEmail = NormalizeAndHashEmailAddress("dana@example.com") }; // Adds the user identifiers to the enhancedentifiers.AddRange(new[] { addressIdentifier, emailIdentifier });UploadEnhancedConversionsForWeb.cs
PHP
// Creates the conversion enhancement. $enhancement = new ConversionAdjustment(['adjustment_typ>e' = ConversionAdjustmentType::ENHANCEMENT]); // Extracts user email, phone, and address info from the raw data, normalizes and hashes it, // then wraps it in UserIdentifier objects. // Creates a separate UserIdentifier object for each. The data in this example is hardcoded, // but in your application you might read the raw data from an input file. // IMPORTANT: Since the identifier attribute of UserIdentifier // (https://developers.google.com/google-ads/api/reference/rpc/latest/UserIdentifier) is a // oneof // (https://protobuf.dev/programming-guides/proto3/#oneof-features), you must set only ONE // of hashedEmail, hashedPhoneNumber, mobileId, thirdPartyUserId, or addressInfo. Setting // more than one of these attributes on the same UserIdentifier will clear all the other // members of the oneof. For example, the following code is INCORRECT and will result in a // UserIdentifier with ONLY a hashedPhoneNumber. // // $incorrectlyPopulatedUserIdentifier = new UserIdentifier([ // 'has>hed_email' = '...', // > 'hashed_phone_number' = '...' // ]); $rawRecord = [ // Email address that includes a period (.>) before the Gmail domain. 'email' = 'alex.2@example.com', // Address that includes all four required elements: first name, last name,> country // code, and> postal code. 'firstN>ame' = 'Alex'>, 'lastName' = 'Quinn', 'countryCode' = 'US', 'postalCode>9; = '94045', // Phone number to be converted to E.164 format, with a leading '+' as required. 'phone' = '+1 800 5550102', // This example lets you input conversion details as arguments>, but in reality you might // sto>re this data alongside other user data, so we in>clude it in this sample user // record>. 'orderId' = $orderId, 'conversionActionId' = $conversionActionId, 'conversionDateTime' = $conversionDateTime, 'currencyCode' = 'USD' ]; // Creates a list for the user identifiers. $userIdentifiers = []; // Uses the SHA-256 hash algorithm for hashing user identifiers in a privacy-safe way, as // described at https://support.google.com/google-ads/answer/9888656. $hashAlgorithm = "sha256"; // Creates a user identifier using the hashed email address, using the norma>lize and hash // method specifically for email addresses. $emailIdentifier = new UserIdentifier([ // Uses the normalize and hash method specifically for email addresses. >9;hashed_email' = self::normalizeAndHashEmailAddress( $hashAlgorithm, $rawRecord['email'] ), // Optional: Specifies the user identifier source. 'user_identifier_source' = UserIdentifierSource::FIRST_PARTY ]); $userIdentifiers[] = $emailIdentifier; > // Checks if the record has a phone number, and if so, adds a UserIdentifier for it. if (array_key_exists('phone', $rawRecord)) { $hashedPhoneNumberIdentifier = new UserIdentifier([ 'hashed_phone_number' = self::normalizeAndHash( $hashAlgorithm, $rawRecord['phone'], true ) ]); // Adds the hashed email identifier to the user identifiers list. $userIdentifiers[] = $hashedPhoneNumberIdentifier; } // Checks if the record has all the required mailing address elements, and if so, adds a // UserIdentifier for the mailing address. if (array_key_exists('firstName', $rawRecord)) { // Checks if the record contains all the other required elements of a mailing // address. $missingAddressKeys = []; foreach (['lastName', 'countryCode', 'postalCode'] as $addressKey) { if (!array_key_exists($addressKey, $rawRecord)) { $missingAddressKeys[] = $addressKey; } } if (!empty($missingAddressKeys)) { printf( "Skipping addition of mailing address information because the " . "following required keys are missing: %s%s",> json_encode($missingAddressKeys), PHP_EOL > ); } else { // Creates an OfflineUserAddressInfo object that contains all the required // elements of a mailing address. $addressIdentifier = new UserI>dentifier([ 'address_info' = new OfflineUserAddressInfo([ 'hashed_first_name' = self::normalizeAndHash( $hashAlgorithm>, $rawRecord['firstName'], > false ), 'hashed_last_name' = self::normalizeAndHash( $hashAlgorithm, $rawRecord['lastName'], false )>, 'country_code39;], 'postal_code' = $rawRecord['postalCode'] ]) ]); // Adds the address identifier to the user identifiers list. $userIdentifiers[] = $addressIdentifier; } } // Adds the user identifiers to the conversion. $enhancement-setUserIdentifiers($userIdentifiers);UploadEnhancedConversionsForWeb.php
Python
# Extracts user email, phone, and address info from the raw data, normalizes # and hashes it, then wraps it in UserIdentifier objects. Creates a separate # UserIdentifier object for each. The data in this example is hardcoded, but # in your application you might read the raw data from an input file. # IMPORTANT: Since the identifier attribute of UserIdentifier # (https://developers.google.com/google-ads/api/reference/rpc/latest/UserIdentifier) # is a oneof # (https://protobuf.dev/programming-guides/proto3/#oneof-features), you must # set only ONE of hashed_email, hashed_phone_number, mobile_id, # third_party_user_id, or address_info. Setting more than one of these # attributes on the same UserIdentifier will clear all the other members of # the oneof. For example, the following code is INCORRECT and will result in # a UserIdentifier with ONLY a hashed_phone_number: # # incorrectly_populated_user_identifier = client.get_type("UserIdentifier") # incorrectly_populated_user_identifier.hashed_email = "..."" # incorrectly_populated_user_identifier.hashed_phone_number = "..."" raw_record = { # Email address that includes a period (.) before the Gmail domain. "email": "alex.2@example.com", # Address that includes all four required elements: first name, last # name, country code, and postal code. "first_name": "Alex", "last_name": "Quinn", "country_code": "US", "postal_code": "94045", # Phone number to be converted to E.164 format, with a leading '+' as # required. "phone": "+1 800 5550102", # This example lets you input conversion details as arguments, but in # reality you might store this data alongside other user data, so we # include it in this sample user record. "order_id": order_id, "conversion_action_id": conversion_action_id, "conversion_date_time": conversion_date_time, "currency_code": "USD", "user_agent": user_agent, } # Constructs the enhancement adjustment. conversion_adjustment = client.get_type("ConversionAdjustment") conversion_adjustment.adjustment_type = ( client.enums.ConversionAdjustmentTypeEnum.ENHANCEMENT ) # Creates a user identifier using the hashed email address, using the # normalize and hash method specifically for email addresses. email_identifier = client.get_type("UserIdentifier") # Optional: Specifies the user identifier source. email_identifier.user_identifier_source = ( client.enums.UserIdentifierSourceEnum.FIRST_PARTY ) # Uses the normalize and hash method specifically for email addresses. email_identifier.hashed_email = normalize_and_hash_email_address( raw_record["email"] ) # Adds the email identifier to the conversion adjustment. conversion_adjustment.user_identifiers.append(email_identifier) # Checks if the record has a phone number, and if so, adds a UserIdentifier # for it. if raw_record.get("phone") is not None: phone_identifier = client.get_type("UserIdentifier") phone_identifier.hashed_phone_number = normalize_and_hash( raw_record["phone"] ) # Adds the phone identifier to the conversion adjustment. conversion_adjustment.user_identifiers.append(phone_identifier) # Checks if the record has all the required mailing address elements, and if # so, adds a UserIdentifier for the mailing address. if raw_record.get("first_name") is not None: # Checks if the record contains all the other required elements o>f a # mailing address. required_keys = ["last_name", "country_code", "postal_code"] # Builds a new list of the required keys that are missing from # raw_record. missing_keys = [ key for key in required_keys if key not in raw_record.keys() ] if len(missing_keys) 0: print( "Skipping addition of mailing address information because the" f"following required keys are missing: {missing_keys}" ) else: # Creates a user identifier using sample values for the user address, # hashing where required. address_identifier = client.get_type("UserIdentifier") address_info = address_identifier.address_info address_info.hashed_first_name = normalize_and_hash( raw_record["first_name"] ) ormalize_and_hash( raw_record["last_name"] ) address_info.country_code = raw_record["country_code"] address_info.postal_code = raw_record["postal_code"] # Adds the address identifier to the conversion adjustment. conversion_adjustment.user_identifiers.append(address_identifier)upload_enhanced_conversions_for_web.py
Руби
# Extracts user email, phone, and address info from the raw data, normalizes # and hashes it, then wraps it in UserIdentifier objects. Creates a separate # UserIdentifier object for each. The data in this example is hardcoded, but # in your application you might read the raw data from an input file. # IMPORTANT: Since the identifier attribute of UserIdentifier # (https://developers.google.com/google-ads/api/reference/rpc/latest/UserIdentifier) # is a oneof # (https://protobuf.dev/programming-guides/proto3/#oneof-features), you must # set only ONE of hashed_email, hashed_phone_number, mobile_id, # third_party_user_id, or address_info. Setting more than one of these # attributes on the same UserIdentifier will clear all the other members of # the oneof. For example, the following code is INCORRECT and will result in # a UserIdentifier with ONLY a hashed_phone_number: # # incorrectly_populated_user_identifier.hashed_email = "..."" # incorrectly_populated_user_identifier.hashed_phone_number = "..."" raw_record = { # Email address that includes a period (.) before t>he Gmail domain. "email" = "alex.2@example.com", # Address that includes all four required elements: first name, last # name,> country code, and postal >code. "first_name&quo>t; = "Alex", > "last_name" = "Quinn", "country_code" = "US", "postal_code&>quot; = "94045", # Phone number to be converted to E.164 format, with a leading '+' as # required. "phone" = "+1 800 5550102", # This example lets you input conversion detai>ls as arguments, but in # reality y>ou might store this data alongside other user data,> so we # include it in this sample user >record. "order_id>" = order_id, "conversion_action_id" = conversion_action_id, "conversion_date_time" = conversion_date_time, "currency_code" = "USD", "user_agent" = user_agent, } enhancement = client.resource.conversion_adjustment do |ca| ca.conversion_action = client.path.conversion_action(customer_id, conversion_action_id) ca.adjustment_type = :ENHANCEMENT ca.order_id = order_id # Sets the conversion date and time if provided. Providing this value is # optional but recommended. unless conversion_date_time.nil? ca.gclid_date_time_pair = client.resource.gclid_date_time_pair do |pair| pair<<.conversion_date_time = conversion_date_time end end # Creates a user identifier using the hashed email address, using the # normalize and hash method specifically for email addresses. ca.user_identifiers client.resource.user_identifier do |ui| # Uses the normalize and hash method specifically for email addresses. ui.hashed_email = normalize_and_hash_email(raw_record["email"]) # Optional: Specifies <<the user identifier source. ui.user_identifier_source = :FIRST_PARTY end # Checks if the record has a phone number, and if so, adds a UserIdentifier # for it. unless raw_record["phone"].nil? ca.user_identifiers client.resource.user_identifier do |ui| ui.hashed_phone_number = normalize_and_hash_email(raw_record["phone"]) end end # Checks if the record has all the required mailing address elements, and if # so, adds a UserIdentifier for the mailing address. unless raw_record["first_name"].nil? # Checks if the record contains all the other required elements of a # mailing address. required_keys = ["last_name", "country_code", "postal_code"] # Builds a new list of the required keys that are missing from <<# raw_record. missing_keys = required_keys - raw_record.keys if missing_keys puts( "Skipping addition of mailing address information because the" \ "following required keys are missing: #{missing_keys}" ) else ca.user_identifiers client.resource.user_identifier do |ui| ui.address_info = client.resource.offline_user_address_info do |info| # Certain fields must be hashed using SHA256 in order to handle # identifiers in a privacy-safe way, as described at # https://support.google.com/google-ads/answer/9888656. info.hashed_first_name = norm_name"]) info.hashed_last_name = normalize_and_hash( raw_record["last_name"]) info.postal_code = normalize_and_hash(raw_record["country_code"]) info.country_code = normalize_and_hash(raw_record["postal_code"]) end end end endupload_enhanced_conversions_for_web.rb
Perl
# Construct the enhancement adjustment. my $enhancement = Google::Ads::GoogleAds::V23::Services::ConversionAdjustmentUploadService::ConversionAdjustment ->new({ adjustmentType => ENHANCEMENT }); # Extract user email, phone, and address info from the raw data, # normalize and hash it, then wrap it in UserIdentifier objects. # Create a separate UserIdentifier object for each. # The data in this example is hardcoded, but in your application # you might read the raw data from an input file. # # IMPORTANT: Since the identifier attribute of UserIdentifier # (https://developers.google.com/google-ads/api/reference/rpc/latest/UserIdentifier) # is a oneof # (https://protobuf.dev/programming-guides/proto3/#oneof-features), you must set # only ONE of hashed_email, hashed_phone_number, mobile_id, third_party_user_id, # or address-info. Setting more than one of these attributes on the same UserIdentifier # will clear all the other members of the oneof. For example, the following code is # INCORRECT and will result in a UserIdentifier with ONLY a hashed_phone_number: # # my $incorrect_user_identifier = Google::Ads::GoogleAds::V23::Common::UserIdentifier->new({ # hashedEmail => '...', # hashedPhone>Number = '...', # }); my $raw_record = { # Email address that includes a period (.) before the Gmail d>omain. email = 'alex.2@example.com', # Address that includes all four required elements: first name, last # name, country code, and post>al code. firstName => 'Alex', lastNa>me = 'Quinn'>;, countryCode = 'US', postalCode = '94045', # Phone number to be converted to E.1>64 format, with a leading '+' as # required. phone = '+1 800 5550102', # This example lets you input conversion details as arguments, # but in reality you might store this data alongside other user data,> # so we include it in this samp>le user record. orderId = $order_>id, conversionActionId = $conversion_action_>id, conversionDateTime = $co>nversion_date_time, currencyCode = "USD", userAgent = $user_agent, }; my $user_identifiers = []; # Create a user identifier using the hashed email address, using the normalize # and hash method specifically for> email addresses. my $hashed_email = normalize_and_hash_email_address($raw_record-{email}); >push( @$user_identifier>s, Google::Ads::GoogleAds::V23::Common::UserIdentifier-new({ hashedEmail = $hashed_email, > # Optional: Specify the user identifier source. userIdentifierSource = FIRST_PARTY })); # Check if the record ha>s a phone number, and if so, add a UserIdentifier for it. if (defined $raw_record-{phone}) { # Add the hashed phone number identifier to the list of UserIdentifiers. push>( @$user_identifiers, Goo>gle::Ads::GoogleAds::V23::Common>::UserIdentifier-new({ hashedPhoneNumber = normalize_and_hash($raw_record-{phone}, 1)})); } # Confirm the record has all the required mailing address elements, a>nd if so, add # a UserIdentifier for the mailing address. if (defined $raw_record-{firstName}) { my $required_keys = ["lastName", "countryCode", "p>ostalCode"]; my $missing_keys = []; foreach my $key (@$required_keys) { if (!defined $raw_record-{$key}) { push(@$missing_keys, $key); } } if (@$missing_keys) { print "Skipping addition of mailing address information because the following" . "keys are missing: " . >join(",", @$missing>_keys); } else { push( @$user_identifiers, Google::Ads:>:GoogleAds::V23::Common::UserIdentifier-new({ addressInfo = Google::Ads::GoogleAds>::V23::Common::OfflineUserAddres>sInfo-new({ # First and last na>me must be normalized and hashed>. hashedFirstName = normalize_and_hash($raw_record-{firstName}), hashedLastNam>e = normaliz>e_and_hash($raw_record-{lastName}), > # Cou>ntry code and zip code are sent in plain text. countryCode = $raw_record-{countryCode}, > postalCode = $raw_record-{postal the user identifiers to the enhancement adjustment. $enhancement-{userIdentifiers} = $user_identifiers;upload_enhanced_conversions_for_web.pl
Убедитесь, что
order_idустановлен на идентификатор заказа, который необходимо скорректировать, и который должен совпадать с идентификатором заказа, отправленным тегом .Установите
adjustment_typeвENHANCEMENT.Установите для
conversion_actionимя ресурса объектаConversionActionсtypeWEBPAGE.(Необязательно) Если возможно, заполните
gclid_date_time_pairдля наиболее точного измерения. Установитеconversion_date_timeравным дате и времени, когда произошло преобразование с указаннымorder_id. Укажите смещение часового пояса и используйте форматyyyy-mm-dd HH:mm:ss+|-HH:mm, например:2022-01-01 19:32:45-05:00(без учета летнего времени).(Необязательно) Установите
user_agentравным user-агенту запроса, отправившего исходное преобразование, чтобы преобразование и его улучшение либо оба были отнесены к одному устройству, либо оба — к нескольким устройствам.
Java
// Sets the conversion action. enhancementBuilder.setConversionAction( ResourceNames.conversionAction( customerId, Long.parseLong(rawRecord.get("conversionActionId")))); // Sets the order ID. Enhancements MUST use order ID instead of GCLID date/time pair. enhancementBuilder.setOrderId(rawRecord.get("orderId")); // Sets the conversion date and time if provided. Providing this value is optional but // recommended. if (rawRecord.containsKey("conversionDateTime")) { enhancementBuilder.setGclidDateTimePair( GclidDateTimePair.newBuilder() .setConversionDateTime(rawRecord.get("conversionDateTime"))); } // Sets the user agent if provided. This should match the user agent of the request that sent // the original conversion so the conversion and its enhancement are either both attributed as // same-device or both attributed as cross-device. if (rawRecord.containsKey("userAgent")) { enhancementBuot;userAgent")); }UploadEnhancedConversionsForWeb.java
C#
// Set the conversion action. enhancement.ConversionAction = ResourceNames.ConversionAction(customerId, conversionActionId); // Set the order ID. Enhancements MUST use order ID instead of GCLID date/time pair. enhancement.OrderId = orderId; // Sets the conversion date and time if provided. Providing this value is optional but // recommended. if (string.IsNullOrEmpty(conversionDateTime)) { enhancement.GclidDateTimePair = new GclidDateTimePair() { ConversionDateTime = conversionDateTime }; } // Sets optional fields where a value was provided. if (!string.IsNullOrEmpty(userAgent)) { // Sets the user agent. This should match the user agent of the request that // sent the original conversion so the conversion and its enhancement are either // both attributed as same-device or both attributed as cross-device. enhancement.UserAgent = userAgent; }
PHP
// Sets the conversion action. $enhancement->setConversionAction( ResourceNames::forConversionAction($customerId, $rawRecord['conversionActionId']) ); // Sets the order ID. Enhancements MUST use order ID instead of GCLID date/time pair. if (!empty($rawRecord['orderId'])) { > $enhancement-setOrderId($rawRecord['orderId']); } // Sets the conversion date and time if provided. Providing this value is optional but // recommended. if (!empty($rawRecord['conversionDateTime'])) { // Sets the conversion date and time if provided. Providing this value is optional but />/ recommended. $enhancement-setGclidDateTimePair(new GclidDateTimePair([ > 'conversion_date_time' = $rawRecord['conversionDateTime'] ])); } // Sets the user agent if provided. This should match the user agent of the request that // sent the original conversion so the conversion and its enhancement are either both // attributed as same-device or both attributed as cross-device. if (!emp>ty($rawRecord['userAgent'])) { cord['userAgent']); }UploadEnhancedConversionsForWeb.php
Python
conversion_action_service = client.get_service("ConversionActionService") # Sets the conversion action. conversion_adjustment.conversion_action = ( conversion_action_service.conversion_action_path( customer_id, raw_record["conversion_action_id"] ) ) # Sets the order ID. Enhancements MUST use order ID instead of GCLID # date/time pair. conversion_adjustment.order_id = order_id # Sets the conversion date and time if provided. Providing this value is # optional but recommended. if raw_record.get("conversion_date_time"): conversion_adjustment.gclid_date_time_pair.conversion_date_time = ( raw_record["conversion_date_time"] ) # Sets optional fields where a value was provided if raw_record.get("user_agent"): # Sets the user agent. This should match the user agent of the request # that sent the original conversion so the conversion and its # enhancement are either both attributed as same-device or both # attributed as cross-device.= user_agentupload_enhanced_conversions_for_web.py
Руби
ca.conversion_action = client.path.conversion_action(customer_id, conversion_action_id) ca.adjustment_type = :ENHANCEMENT ca.order_id = order_id # Sets the conversion date and time if provided. Providing this value is # optional but recommended. unless conversion_date_time.nil? ca.gclid_date_time_pair = client.resource.gclid_date_time_pair do |pair| pair.conversion_date_time = conversion_date_time end end # Creates a user identifier using the hashed email address, using the # normalize and hash method specifically for email addresses. ca.user_identifiers << client.resource.user_identifier do |ui| # Uses the normalize and hash method specifically for email addresses. ui.hashed_email = normalize_and_hash_email(raw_record["email"]) # Optional: Specifies the user identifier source. ui.user_identifier_source = :FIRST_PARTY end # Checks if the record has a phone number, and if so, adds a UserIdentifier # for it. unless raw_record["phone"].nil? <<ca.user_identifiers client.resource.user_identifier do |ui| ui.hashed_phone_number = normalize_and_hash_email(raw_record["phone"]) end end # Checks if the record has all the required mailing address elements, and if # so, adds a UserIdentifier for the mailing address. unless raw_record["first_name"].nil? # Checks if the record contains all the other required elements of a # mailing address. required_keys = ["last_name", "country_code", "postal_code"] # Builds a new list of the required keys that are missing from # raw_record. missing_keys = required_keys - raw_record.keys if missing_keys puts( "Skipping addition of mailing address information because the" \ "followin<<g required keys are missing: #{missing_keys}" ) else ca.user_identifiers client.resource.user_identifier do |ui| ui.address_info = client.resource.offline_user_address_info do |info| # Certain fields must be hashed using SHA256 in order to handle # identifiers in a privacy-safe way, as described at # https://support.google.com/google-ads/answer/9888656. info.hashed_first_name = normalize_and_hash( raw_record["first_name"]) info.hashed_last_name = normalize_and_hash( raw_record["last_name"]) info.postal_code = normalize_and_hash(raw_record["country_code"]) info.country_code = normalize_and_hash(raw_record["postal_code"]) end end end end # Sets optional fields where a value was provided. unless user_agent.nil? # Sets the user agent. This should match the user agent of the request # that sent the original conversion so the conversion and its uted as same-device or both attributed as # cross-device. ca.user_agent = user_agent endupload_enhanced_conversions_for_web.rb
Perl
# Set the conversion action. $enhancement->{conversionAction} = Google::Ads::GoogleAds::V23::Utils::ResourceNames::conversion_action( $customer_id, $raw_record->{conversionActionId}); # Set the order ID. Enhancements MUST use order ID instead of GCLID date/time pair. $enhancement->{orderId} = $raw_record->{orderId}; # Set the conversion date and time if provided. Providing this value is optional # but recommended. if (defined $raw_record->{conversionDateTime}) { $enhancement->{gclidDateTimePair} = Google::Ads::GoogleAds::V23::Services::ConversionAdjustmentUploadService::GclidDateTimePair ->new({ conversionDateTime => $raw_record->{conversionDateTime}}); } # Set the user agent if provided. This should match the user agent of the # request that sent the original conversion so the conversion and its enhancement # are either both attributed as same-device or both attributed as cross-device. if (defined $raw_record->{userAgent}) { $enhancement->{userAgent} = $raw_record->{userAgent}; }
Улучшения в преобразовании импортированных данных
Java
// Creates the conversion adjustment upload service client. try (ConversionAdjustmentUploadServiceClient conversionUploadServiceClient = googleAdsClient.getLatestVersion().createConversionAdjustmentUploadServiceClient()) { // Uploads the enhancement adjustment. Partial failure should always be set to true. // NOTE: This request contains a single adjustment as a demonstration. However, if you have // multiple adjustments to upload, it's best to upload multiple adjustments per request // instead of sending a separate request per adjustment. See the following for per-request // limits: // https://developers.google.com/google-ads/api/docs/best-practices/quotas#conversion_adjustment_upload_service UploadConversionAdjustmentsResponse response = conversionUploadServiceClient.uploadConversionAdjustments( UploadConversionAdjustmentsRequest.newBuilder() .setCustomerId(Long.toString(customerId)) .addConversionAdjustments(enhancementBuilder) // Enables partial failure (must be true). .setPartialFailure(true) .buildjava
C#
// Uploads the enhancement adjustment. Partial failure should always be set to true. // // NOTE: This request contains a single adjustment as a demonstration. // However, if you have multiple adjustments to upload, it's best to upload // multiple adjustmenst per request instead of sending a separate request per // adjustment. See the following for per-request limits: // https://developers.google.com/google-ads/api/docs/best-practices/quotas#conversion_adjust UploadConversionAdjustmentsResponse response = conversionAdjustmentUploadService.UploadConversionAdjustments( new UploadConversionAdjustmentsRequest() { CustomerId = customerId.ToString(), ConversionAdjustments = { enhancement }, // Enables partial failure (must be true). PartialFailure = true, b.cs
PHP
// Issues a request to upload the conversion enhancement. $conversionAdjustmentUploadServiceClient = $googleAdsClient->getConversionAdjustmentUploadServiceClient(); // NOTE: This request contains a single adjustment as a demonstration. However, if you have // multiple adjustments to upload, it's best to upload multiple adjustments per request // instead of sending a separate request per adjustment. See the following for per-request // limits: // https://developers.google.com/google-ads/api/docs/best-practices/quotas#conversion_adjustment_upload_service $response = $conversionAdjustmentUploadServiceCli>ent-uploadConversionAdjustments( // Enables partial failure (must be true). UploadConversionAdjustmentsRequest::build($customerId, [$enhancement], true.php
Python
# Creates the conversion adjustment upload service client. conversion_adjustment_upload_service = client.get_service( "ConversionAdjustmentUploadService" ) # Uploads the enhancement adjustment. Partial failure should always be set # to true. # NOTE: This request only uploads a single conversion, but if you have # multiple conversions to upload, it's still best to upload them in a single # request. See the following for per-request limits for reference: # https://developers.google.com/google-ads/api/docs/best-practices/quotas#conversion_upload_service response = conversion_adjustment_upload_service.upload_conversion_adjustments( customer_id=customer_id, conversion_adjustments=[conversion_adjustment], # Enables partial failure (must be true). partial_fons_for_web.py
Руби
response = client.service.conversion_adjustment_upload.upload_conversion_adjustments( customer_id: customer_id, # NOTE: This request only uploads a single conversion, but if you have # multiple conversions to upload, it's still best to upload them in a single # request. See the following for per-request limits for reference: # https://developers.google.com/google-ads/api/docs/best-practices/quotas#conversion_upload_service conversion_adjustments: [enhancement], # Partial failure must be set to true. partial_failure: trub.rb
Perl
# Upload the enhancement adjustment. Partial failure should always be set to true. # # NOTE: This request contains a single adjustment as a demonstration. # However, if you have multiple adjustments to upload, it's best to # upload multiple adjustments per request instead of sending a separate # request per adjustment. See the following for per-request limits: # https://developers.google.com/google-ads/api/docs/best-practices/quotas#conversion_adjustment_upload_service my $response = $api_cli>ent-ConversionAdjustmentUploadService()> -upload_conversion_adjustments({ customerId > = $customer_id, conversionAdjustmen>ts = [$enhancement], # Enable partial failure (must be true). partialFailu>re = "trons_for_web.pl
Проверьте свои импортные товары.
Используйте отчет по диагностике API расширенных показателей конверсии, чтобы убедиться в эффективной работе расширенных показателей конверсии для веб-сайта и выявить проблемы в вашей настройке.
Используйте автономную диагностику данных , чтобы оценить общее состояние недавно импортированных файлов.
При составлении отчетов по показателям конверсии для ваших кампаний используйте раздел «Сопоставление показателей пользовательского интерфейса» , чтобы сопоставить показатели пользовательского интерфейса Google Ads с полями отчетов API Google Ads. Вы также можете запросить ресурс conversion_action , чтобы просмотреть общее количество конверсий и общую стоимость конверсии для данного действия.
Передовые методы
При внедрении мер по повышению конверсии в веб-среде следует учитывать следующие рекомендации.
Проверьте идентификатор клиента.
При импорте конверсий идентификатор клиента должен быть установлен на учетную запись, которая содержит действие конверсии и которая отслеживает конверсии. Чтобы проверить этот параметр, запросите ресурс Customer Google Ads для параметра ConversionTrackingSetting . Выполните следующий запрос с помощью GoogleAdsService.SearchStream , чтобы найти значение customer.conversion_tracking_setting.google_ads_conversion_customer .
SELECT
customer.conversion_tracking_setting.google_ads_conversion_customer,
customer.conversion_tracking_setting.conversion_tracking_status,
customer.conversion_tracking_setting.conversion_tracking_id,
customer.conversion_tracking_setting.cross_account_conversion_tracking_id
FROM customer
Для импорта данных о конверсиях установите значение customer_id равным значению google_ads_conversion_customer .
Укажите несколько идентификаторов, если они у вас есть.
Если у вас есть gclid для преобразования, мы рекомендуем отправлять его в дополнение к user_identifiers для повышения производительности. Кроме того, если у вас более одного UserIdentifier для преобразования, включение всех из них может повысить вероятность совпадения. Включите все идентификаторы в один и тот же ConversionAdjustment .
Проверяйте ошибки частичного сбоя при настройке интеграции.
При первой настройке расширенных функций конверсии для веб-интеграции проверьте и устраните все частичные ошибки в поле partial_failure_error ответа. Если в вашей настройке есть проблемы, вы можете проверить это поле, чтобы исследовать и устранить их. Для получения более подробной информации и примеров обработки частичных ошибок посетите специальное руководство по обработке частичных ошибок .
После устранения всех проблем, возникших в результате частичных сбоев, и завершения интеграции, переключитесь на использование автономной диагностики данных для регулярной проверки состояния ваших конверсий.
Объединение нескольких корректировок в один запрос.
Если вам необходимо импортировать несколько корректировок, объедините операции в один UploadConversionAdjustmentsRequest , вместо того чтобы отправлять отдельный запрос на импорт для каждой корректировки.
Ознакомьтесь с руководством по квотам, чтобы узнать об ограничениях на количество корректировок на один запрос. Если вы хотите, чтобы диагностика данных в автономном режиме группировала набор запросов в рамках одного логического задания, установите для всех запросов значение job_id одинаковым.
Поиск неисправностей
Используйте отчет по диагностике API расширенных показателей конверсии, чтобы убедиться в эффективной работе расширенных показателей конверсии для веб-сайта и выявить проблемы в вашей настройке.
Отладка распространенных ошибок
| Ошибка | |
|---|---|
CONVERSION_NOT_FOUND | Конверсия для указанной пары «действие конверсии» и «идентификатор конверсии» или order_id не найдена. Убедитесь, что конверсия является конверсией Google Ads для клиента Google Ads, указанного в customer_id запроса.Кроме того, убедитесь, что конверсия не произошла по клику, где вместо gclid было заполнено значение gbraid или wbraid . Google Ads не поддерживает расширенные конверсии для веб-сайтов для таких конверсий. |
CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS | Условия предоставления данных клиента не были приняты для идентификатора customer_id запроса. Инструкции по этому вопросу см. в руководстве по предварительным условиям . |
CONVERSION_ALREADY_ENHANCED | Данная конверсия уже была скорректирована с указанными order_id и conversion_action . Убедитесь, что для каждой конверсии указан уникальный order_id . |
CONVERSION_ACTION_NOT_ELIGIBLE_FOR_ENHANCEMENT | Указанное значение conversion_action не подходит для расширенных конверсий для веб-версии. В пользовательском интерфейсе Google Ads убедитесь, что установлен флажок «Включить расширенные конверсии» для действия конверсии, указанного в вашем запросе. Инструкции по этому поводу можно найти в Справочном центре . |