Общие сведения о сервисе списков электронных адресов для программ лояльности

В этом руководстве рассказывается, как использовать сервис списков электронных адресов в Merchant API. Этот сервис позволяет продавцам и сторонним поставщикам программ лояльности, действующим от имени продавцов, управлять данными о программах лояльности, например идентификаторами пользователей и информацией об уровнях, для органической персонализации в Google Поиске без активного аккаунта Google Рекламы.

Обзор

Используйте сервис списков электронных адресов для программ лояльности, чтобы загружать данные о программах лояльности, которые затем используются для предоставления функций персонализации для программ лояльности в Google Поиске, например для показа цен, доступных только участникам программы. С помощью ManageLoyaltyCustomerMatch специального метода вы можете связывать клиентов с уровнями программы лояльности, чтобы добавлять, изменять или удалять их статус в программе на основе идентификаторов пользователей.

Основные понятия

  • Единый интерфейс. Уникальная конечная точка для добавления, изменения и удаления данных об уровнях программы лояльности.
  • Конфиденциальность. Чтобы защитить конфиденциальность пользователей и предотвратить несанкционированный доступ к аккаунтам, API не поддерживает операции GET и LIST. Это позволяет управлять данными без их извлечения или аудита.
  • Гибкая идентификация. Сопоставляйте пользователей, используя хотя бы один действительный идентификатор, например адрес электронной почты, почтовый адрес или номер телефона.
  • Обработка на основе согласия. Сервис хранит и использует данные клиента только в том случае, если конечный пользователь дал необходимое согласие Google. Чтобы защитить аккаунт от попыток узнать, существует ли он, или статус согласия, сервис возвращает сообщение об успешном выполнении, если совпадение не найдено или согласие не предоставлено.

Требования

Чтобы использовать сервис списков электронных адресов для программ лояльности, соблюдайте следующие требования:

  • Настройка аккаунта. Убедитесь, что у вас есть активный аккаунт Merchant Center (или авторизованный доступ к аккаунту продавца, если вы сторонний поставщик услуг по программам лояльности). Чтобы использовать сервис списков электронных адресов для программ лояльности, создавать аккаунт Google Рекламы не нужно.
  • Настройка программы лояльности. Включите программу лояльности в аккаунте Merchant Center и убедитесь, что вы задали уровни участия в ней.
  • Порядок уровней. Учитывайте порядок, в котором уровни программы лояльности определены в интерфейсе Merchant Center. API использует именно эту последовательность для сопоставления перечислений.

Метод ManageLoyaltyCustomerMatch

Метод ManageLoyaltyCustomerMatch – это основной интерфейс для управления связями с программами лояльности. На основе предоставленных данных сервис автоматически определяет, нужно ли добавить, изменить или удалить статус уровня программы лояльности клиента. Операция идемпотентна: повторные идентичные запросы имеют тот же эффект, что и один запрос.

В следующем запросе показано, как управлять связями с программами лояльности клиентов с помощью API:

POST https://merchantapi.googleapis.com/{API_VERSION}/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage

В этом запросе определены следующие обязательные параметры пути:

  • API_VERSION – версия API, например v1.
  • ACCOUNT_ID – идентификатор аккаунта Merchant Center.

Включите объект loyaltyCustomer в тело запроса.

{
    "userIdentifier": {
      "emailAddress": "string",
      "address": {
        "addressLines": ["string"],
        "locality": "string",
        "administrativeArea": "string",
        "postalCode": "string",
        "regionCode": "string"
      },
      "phoneNumber": "string"
    },
    "loyaltyTier": "LoyaltyTier",
    "pointBalance": "integer"
  }

Поля loyaltyCustomer

  • userIdentifier – набор идентификаторов, используемых для сопоставления клиента. В userIdentifier должно быть указано хотя бы одно действительное поле.
  • loyaltyTier – уровень программы лояльности, который нужно связать с клиентом. Соответствует порядку уровней в настройках Merchant Center. Подробнее о сопоставлении loyaltyTier… Используйте значение NON_MEMBER, чтобы удалить существующую связь.
  • pointBalance – текущий баланс баллов клиента.

Поля userIdentifier

Укажите хотя бы одно из следующих полей:

  • emailAddress – адрес электронной почты клиента.
  • address – физический адрес клиента. Требуется указать почтовый индекс.
  • phoneNumber – номер телефона клиента. Рекомендуется использовать формат E.164.

Как работает сопоставление loyaltyTier

API не использует пользовательские имена. Значения перечисления loyaltyTier (от TIER1 до TIER7) – это семантические ярлыки. В них не используются специальные названия (например, "Золотые бонусы") или метки (например, "золотой уровень"), которые вы задали в интерфейсе Merchant Center. Они строго соответствуют порядку, в котором вы задали уровни в настройках программы лояльности в Merchant Center:

  • TIER1 – первый уровень, указанный в настройках программы лояльности в Merchant Center.
  • TIER2 – соответствует второму уровню, указанному в настройках программы лояльности в Merchant Center.
  • TIER3–TIER7 – соответствуют третьему–седьмому уровням, указанным в настройках программы лояльности в Merchant Center.

Пример

Если в вашей программе лояльности в Merchant Center уровни заданы в следующем порядке:

  1. Название уровня: "Серебряный статус", ярлык уровня: "silver".
  2. Название уровня: "Золотой участник", метка уровня: "gold".
  3. Название уровня: "Platinum Elite", метка уровня: "platinum".

Затем в accounts.loyaltyCustomers.manage вызовах API:

  • Чтобы назначить клиенту статус Silver, необходимо использовать loyaltyTier: TIER1.
  • Чтобы назначить клиенту статус Золотой участник, необходимо использовать loyaltyTier: TIER2.
  • Чтобы назначить клиенту уровень Platinum Elite, необходимо использовать loyaltyTier: TIER3.

Значения перечисления LoyaltyTier

  • TIER1
  • TIER2
  • TIER3
  • TIER4
  • TIER5
  • TIER6
  • TIER7
  • NON_MEMBER (используется для удаления связи с программой лояльности клиента)

Как устроен ответ ManageLoyaltyCustomerMatch

Метод ManageLoyaltyCustomerMatch возвращает объект ManageLoyaltyCustomerMatchResponse:

{
  "loyaltyCustomer": {
    // loyaltyCustomer object from the request
  }
}

Важные примечания об ответах

  • Успешное обновление или добавление данных. Чтобы успешно сохранить или обновить данные о связи уровня лояльности с клиентом, должны быть выполнены следующие условия:

    • вы сопоставляете пользователя Google с предоставленным значением userIdentifier;
    • вы задали для параметра loyaltyTier в запросе действительное значение, отличное от NON_MEMBER;
    • пользователь, с которым было установлено соответствие, дал согласие на использование данных о программе лояльности;

Ответ содержит объект loyaltyCustomer из вашего запроса, указывающий на то, что сервис успешно обработал и сохранил данные:

{
  "loyaltyCustomer": {
    "userIdentifier": {
     "emailAddress": "customer@example.com"
    },
    "loyaltyTier": "TIER2",
    "pointBalance": 1500
    }
}
  • Успешное удаление. Чтобы удалить связь с программой лояльности для клиента, должны быть выполнены следующие условия:
    • вы сопоставляете пользователя Google с предоставленным значением userIdentifier;
    • вы задали для параметра loyaltyTier в запросе значение NON_MEMBER;

Ответ представляет собой пустой объект JSON:

{}
  • Нет совпадений или согласия (успешное выполнение без уведомления). Если предоставленный userIdentifier не соответствует аккаунту Google или если пользователь, с которым найдено совпадение, не дал согласия на использование данных о программе лояльности, API возвращает статус HTTP 200 OK с пустым объектом JSON: {}. Это происходит как при попытке вставить или обновить данные, так и при попытке удалить их.

Примеры

TIER1 соответствует первому уровню (например, Basic), а TIER2 – второму (например, Premium).

Чтобы добавить клиента в группу TIER2 или изменить его статус, используя адрес электронной почты, отправьте следующий запрос:

POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage"
  -d '{
      "userIdentifier": {
        "emailAddress": "customer@example.com"
      },
      "loyaltyTier": "TIER2",
      "pointBalance": 1500
  }'

Если пользователь успешно сопоставлен и дал согласие, API возвращает следующий ответ:

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "emailAddress": "customer@example.com"
    },
    "loyaltyTier": "TIER2",
    "pointBalance": 1500
  }
}

Если совпадений нет или пользователь не дал согласия, API возвращает следующий ответ:

{}

Чтобы удалить связь с программой лояльности по номеру телефона, отправьте следующий запрос:

POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage" \
  -d '{
      "userIdentifier": {
        "phoneNumber": "+18005550132"
      },
      "loyaltyTier": "NON_MEMBER"
  }'

Независимо от того, существовала ли запись, API возвращает следующий успешный ответ:

{}

Чтобы добавить или обновить клиента, используя несколько идентификаторов, отправьте следующий запрос:

POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage" \
  -d '{
      "userIdentifier": {
        "emailAddress": "user@example.com",
        "address": {
          "postalCode": "94043",
          "regionCode": "US"
        }
      },
      "loyaltyTier": "TIER1"
  }'

Ответ похож на первый пример, но зависит от соответствия и согласия.

Обработка ошибок

В API используются стандартные коды HTTP. Вот несколько распространенных строк ошибок:

Код HTTP Строка ошибки Описание
400 INVALID_ARGUMENT Отсутствует user_identifier или loyalty_tier, либо идентификатор пуст.
401 UNAUTHENTICATED Неверные или отсутствующие учетные данные.
403 PERMISSION_DENIED У аутентифицированного пользователя нет доступа к указанному аккаунту Merchant Center.
404 NOT_FOUND Указанная метка уровня программы лояльности не существует в вашей конфигурации.
412 FAILED_PRECONDITION В вашем аккаунте не настроена программа лояльности.
429 RESOURCE_EXHAUSTED Достигнуто ограничение по квоте.

Примеры ошибок

Пример для 404 NOT_FOUND:

Любой действительный запрос к идентификатору аккаунта, в котором не настроена программа лояльности.

API возвращает следующий ответ об ошибке:

{
  "error": {
    "code": 404,
    "message": "The loyalty program is not found for account: {ACCOUNT_ID}.",
    "status": "NOT_FOUND",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "notFound",
        "domain": "merchantapi.googleapis.com",
        "metadata": {
          "ACCOUNT_ID": "{ACCOUNT_ID}",
          "REASON": "NOT_FOUND_LOYALTY_PROGRAM"
        }
      }
    ]
  }
}

Причина. В аккаунте продавца, указанном в пути, не включена программа лояльности.

Примеры ошибки 400 INVALID_ARGUMENT

Если в запросе указано недопустимое значение для поля loyaltyTier, возникает ошибка:

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "emailAddress": "customer@example.com"
    },
    "loyaltyTier": "TIER11",
    "pointBalance": 100
  }
}

API возвращает следующий ответ об ошибке:

{
  "error": {
    "code": 400,
    "message": "Invalid value at 'loyalty_customer.loyalty_tier' (type.googleapis.com/google.shopping.merchant.loyaltycustomers.v1.LoyaltyCustomer.LoyaltyTier), \"TIER11\"",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "field": "loyalty_customer.loyalty_tier",
            "description": "Invalid value at 'loyalty_customer.loyalty_tier' (type.googleapis.com/google.shopping.merchant.loyaltycustomers.v1.LoyaltyCustomer.LoyaltyTier), \"TIER11\""
          }
        ]
      }
    ]
  }
}

Причина: TIER11 – недопустимое значение перечисления для параметра "loyaltyTier". Та же ошибка может возникнуть, если вы попытаетесь указать TIER2, когда доступен только один уровень.

Если в теле запроса отсутствует обязательное поле loyaltyTier, возникает ошибка:

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "emailAddress": "customer@example.com"
    },
    "pointBalance": 100
  }
}

API возвращает следующий ответ об ошибке:

{
  "error": {
    "code": 400,
    "message": "[loyalty_customer.loyalty_tier] Required field not provided: loyalty_customer.loyalty_tier",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "required",
        "domain": "merchantapi.googleapis.com",
        "metadata": {
          "FIELD_LOCATION": "loyalty_customer.loyalty_tier",
          "REASON": "MISSING_REQUIRED_FIELD"
        }
      }
    ]
  }
}

Причина. Поле loyaltyTier является обязательным.

Если идентификатор адреса неполный, например отсутствует поле postalCode, возникает ошибка:

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "address": {
        "locality": "Sunnyvale",
        "administrativeArea": "CA",
        "regionCode": "US"
      }
    },
    "loyaltyTier": "TIER1",
    "pointBalance": 100
  }
}

API возвращает следующий ответ об ошибке:

{
  "error": {
    "code": 400,
    "message": "[loyalty_customer.user_identifier] The format of loyalty_customer.user_identifier does not match the expected format ... Value: at least one valid user identifier should be provided.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "invalid",
        "domain": "merchantapi.googleapis.com",
        "metadata": {
          "FIELD_NAME": "loyalty_customer.user_identifier",
          "REASON": "INVALID_VALUE"
        }
      }
    ]
  }
}

Причина. Указан адрес, но в нем отсутствует обязательное поле postalCode, поэтому он не считается действительным идентификатором.

Если вы запросите индекс уровня, который выходит за пределы настроенной программы, произойдет ошибка:

Сценарий. В Merchant Center настроен только один уровень.

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "emailAddress": "customer@example.com"
    },
    "loyaltyTier": "TIER2",
    "pointBalance": 100
  }
}

API возвращает следующий ответ об ошибке:

{
  "error": {
    "code": 400,
    "message": "[loyalty_customer.loyalty_tier] The format of loyalty_customer.loyalty_tier does not match the expected format `valid LoyaltyTier`. Value: TIER2.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "invalid",
        "domain": "merchantapi.googleapis.com",
        "metadata": {
          "FIELD_NAME": "loyalty_customer.loyalty_tier",
          "PATTERN": "valid LoyaltyTier",
          "FIELD_VALUE": "TIER2",
          "REASON": "INVALID_VALUE"
        }
      }
    ]
  }
}

Причина. Запрошен уровень TIER2, но в программе лояльности, связанной с аккаунтом, не задан второй уровень.

Если в запросе содержится неправильно сформированный элемент emailAddress, возникает ошибка:

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "emailAddress": "customer@google"
    },
    "loyaltyTier": "TIER1",
    "pointBalance": 100
  }
}

API возвращает следующий ответ об ошибке:

{
  "error": {
    "code": 400,
    "message": "[loyalty_customer.user_identifier] The format of loyalty_customer.user_identifier does not match the expected format `email_address: \t \"customer@google\"\n`. Value: at least one valid user identifier should be provided.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "invalid",
        "domain": "merchantapi.googleapis.com",
        "metadata": {
          "FIELD_NAME": "loyalty_customer.user_identifier",
          "REASON": "INVALID_VALUE"
        }
      }
    ]
  }
}

Причина: недействительный формат адреса электронной почты.

Если объект userIdentifier пуст, возникает ошибка:

{
  "loyaltyCustomer": {
    "userIdentifier": {},
    "loyaltyTier": "TIER1",
    "pointBalance": 100
  }
}

API возвращает следующий ответ об ошибке:

{
  "error": {
    "code": 400,
    "message": "[loyalty_customer.user_identifier] Required field not provided: loyalty_customer.user_identifier",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "required",
        "domain": "merchantapi.googleapis.com",
        "metadata": {
          "FIELD_LOCATION": "loyalty_customer.user_identifier",
          "REASON": "MISSING_REQUIRED_FIELD"
        }
      }
    ]
  }
}

Причина. Объект userIdentifier присутствует, но не содержит полей идентификаторов.

Примечание. Проверка идентификатора.

  • API выполняет базовые проверки формата идентификаторов (например, структуры адреса электронной почты, наличия postalCodeсимвола "@" в адресах).
  • Однако некоторые идентификаторы, прошедшие первоначальную проверку, могут не соответствовать ни одному аккаунту Google или быть представлены в формате, который не распознается внутренней системой сопоставления. В таких случаях вы получите пустой ответ {} с кодом статуса HTTP 200 OK.

Рекомендации

Чтобы оптимизировать интеграцию, следуйте приведенным ниже рекомендациям.

  • Для крупномасштабной интеграции. Поскольку API работает на основе запросов, для достижения необходимой производительности при работе с большими наборами данных требуется клиентский параллелизм. При разработке интеграции учитывайте, что она должна обрабатывать несколько одновременных запросов. Информацию о том, как структурировать реализацию для обработки больших объемов данных с помощью параллелизации, можно найти в нашем руководстве о том, как отправлять несколько запросов.

  • Управление квотами. Квота по умолчанию – 1 000 000 запросов в день и 10 000 запросов в минуту. Чтобы узнать, как отслеживать и проверять квоты, ознакомьтесь со статьей Квоты и ограничения.

  • Укажите адрес электронной почты. По возможности добавьте emailAddress клиента в userIdentifier. Адреса электронной почты обычно являются наиболее точным и надежным идентификатором для сопоставления пользователей с их аккаунтами Google.

  • Обрабатывайте пустые ответы. Спроектируйте приложение так, чтобы оно правильно интерпретировало пустые ответы {} как успешные. Это означает, что данные не были сохранены из-за требований конфиденциальности (нет совпадений или согласия). Не повторяйте запрос.

  • Проверьте порядок уровней лояльности. Всегда проверяйте порядок уровней лояльности в интерфейсе Merchant Center, чтобы убедиться, что в вызовах API используются правильные значения перечисления TIER1–TIER7. Сопоставление выполняется на основе порядка, заданного в интерфейсе, а не названий.

  • Отслеживайте ошибки. Регистрируйте и отслеживайте ответы API, обращая внимание на ошибки 4xx, чтобы выявлять проблемы с интеграцией, особенно ошибки 404, которые могут указывать на несоответствие в понимании уровней.