Была поставлена задача сделать отправку офлайн-конверсий в Google Campaign Manager 360 (далее GCM). Тот что DoubleClick. Думал, что может быть проще, чем дернуть пару методов API от Google. Работа растянулась на 3 недели. Хочу поделиться опытом, вдруг кому пригодится. Схема работы такова: Пользователь приходит на сайт. По рекламе или прямым заходом; В GCM отправляется лид с frontend-части; Пользователь что-то делает. Например, оформляет заказ, оставляет заявку или делает звонок; С сервера отправляется offline-конверсия. Т.е. пользователь достиг цели, о чем нужно уведомить GCM, чтобы иметь полноценную картинку в отчетах и аналитике. Авторизация Для взаимодействия с любым API от Google нужен авторизационный токен, который выдается приложению, зарегистрированному в панели разработчика. Если не зарегистрированы – зарегистрируйтесь. Если нет приложения – создайте. Заходим в раздел OAuth consent screen и по шагам настраиваем экран авторизации, который будет видеть пользователь. На странице приложения сверху есть кнопка «Enable APIs and services». Нажав на нее, переходим в библиотеку API. В поиске вбиваем «campaign manager 360 api», кликаем по единственному элементу. И жмем Enable. Возвращаемся в раздел «APIs and services» и создаем реквизиты для OAuth2. Жмем «Create credentials» и выбираем «OAuth client ID». И указываем все что просит. Тип приложения (у меня это Web application) и URL для переадресации. В итоге у нас есть Client ID и Client secret. Чтобы самостоятельно не реализовывать всю логику авторизации и другой работы с API, можно взять одну из готовых библиотек. Т.к. у меня система на PHP, беру https://github.com/googleapis/google-api-php-client. Сразу создаем клиент: Массив $options содержит настройки, полученные в консоли разработчика Google. Сначала получаем URL, на который нужно будет переадресовать пользователя, чтобы он выдал разрешения нашему приложению. Как только пользователь выдал разрешения, его переадресует на URL из настроек приложения с параметром code. По этому параметру нужно получить токен (AccessToken). Результатом выполнения будет объект, содержащий параметры: Авторизационный токен - AccessToken Токен для обновления авторизационного – RefreshToken Дата, до которой действует авторизационный токен Все эти параметры надо где-то сохранить. За временем жизни токена нужно следить. Если время истекло, необходимо его обновить с помощью refresh-токена. Клиентская часть Теперь нужно организовать отправку лида с клиента, с нашего сайта. Есть два варианта. Первый, думаю, наиболее правильный, добавить событий в DataLayer. Второй – вставить пиксель в код страницы. Есть несколько вариантов сопоставления лидов с фронта и офлайн-конверсий. Про них можно почитать в документации. Я выбрал самый простой – использовать свой ID, который передается в параметре match_id. У меня это id сессии, который закрепляется за посетителем. Если есть регистрация, то можно передавать id пользователя. Серверная часть Нам нужно отправить offline-конверсию в том случае, когда пользователь достиг некоторой цели. Отправил заявку, позвонил, оформил заказ и т.д. Делаем это с помощью той же библиотеки, что использовалась в авторизации. Предопределенные настройки: $profileId – ID профиля пользователя $floodlightActivityId $matchId – ID пользователя/ID сессии. То, что передавали с фронта Свои собственные переменные u1...uN можно передавать или нет. Передаются так: В общем-то и все. Выглядит не сложно. Но есть нюанс. К сожалению, в документации не увидел предупреждения, что лиды обрабатываются GCM-ом примерно за 15-20 минут. Пока лид не обработан, будем получать ошибку и сообщение, что пользователь не найден. По истечении некоторого времени GCM все примет и в ответе ошибок не будет. Обнаружил это экспериментальным путем. Web-разработчик