Веб-хук — это указанный партнёром URL-адрес, куда платформа RCS for Business отправляет сообщения и события . Этот URL-адрес выступает в качестве конечной точки, принимающей HTTPS POST-запросы, содержащие данные о событиях. Это означает, что данные безопасно передаются в ваше приложение по протоколу HTTPS.
URL веб-перехватчика может выглядеть примерно так: https://[your company name].com/api/rbm-events . После настройки веб-перехватчика вы сможете начать получать сообщения и события.
Веб-хуки партнеров и веб-хуки агентов
Вы можете настроить веб-перехватчик либо на уровне партнера, либо на уровне агента.
- Ваш партнерский веб-перехватчик применяется ко всем вашим агентам. Если ваши агенты ведут себя схожим образом или если у вас только один агент, используйте партнерский веб-перехватчик .
- Веб-хуки агентов применяются к отдельным агентам. Если вы используете несколько агентов с различным поведением, вы можете установить отдельный веб-хук для каждого агента .
Если вы настроили как веб-перехватчик партнера, так и веб-перехватчик агента, то веб-перехватчик агента будет иметь приоритет для своего конкретного агента, в то время как веб-перехватчик партнера будет применяться ко всем агентам, у которых нет собственного веб-перехватчика.
Настройте веб-перехватчик агента.
Сообщения, отправленные вашему агенту, поступают через веб-перехватчик вашего партнера. Если вы хотите, чтобы сообщения для конкретного агента поступали через другой веб-перехватчик, настройте веб-перехватчик для агента.
- Откройте консоль разработчика Business Communications и войдите в систему, используя свою партнерскую учетную запись Google RCS for Business.
- Выберите своего агента.
- Нажмите «Интеграции» .
- Для настройки веб-перехватчика нажмите «Настроить».
- В поле «URL-адрес конечной точки веб-перехватчика» введите URL-адрес вашего веб-перехватчика, начинающийся с «https://».
- Запишите значение вашего
clientToken. Оно необходимо для подтверждения того, что получаемые вами сообщения поступают от Google . Настройте свой веб-перехватчик так, чтобы он принимал
POSTзапрос с указанным параметромclientTokenи отправлял ответ200 OK, содержащий в теле ответа текстовое значение параметраsecret.Например, если ваш веб-хук получает
POSTзапрос со следующим содержимым тела запроса{ "clientToken":"SJENCPGJESMGUFPY", "secret":"1234567890" }В этом случае ваш веб-хук должен подтвердить значение
clientTokenи, еслиclientTokenверен, вернуть ответ200 OKс телом ответа1234567890:// clientToken from Configure const myClientToken = "SJENCPGJESMGUFPY"; // Example endpoint app.post("/rbm-webhook", (req, res) => { const msg = req.body; if (msg.clientToken === myClientToken) { res.status(200).send(msg.secret); return; } res.send(400); });В консоли разработчика нажмите «Проверить» . После того, как RCS for Business проверит ваш веб-перехватчик, диалоговое окно закроется.
Проверка входящих сообщений
Поскольку веб-хуки могут получать сообщения от любого отправителя, перед обработкой содержимого сообщения следует убедиться, что входящие сообщения были отправлены Google.
Чтобы убедиться, что Google отправил полученное вами сообщение, выполните следующие действия:
- Извлеките заголовок
X-Goog-Signatureсообщения. Это хешированная, закодированная в base64 копия содержимого тела сообщения. - Декодируйте полезную нагрузку RCS for Business с помощью Base-64 в элементе
message.bodyзапроса. - Используя токен клиента вашего веб-перехватчика (который вы указали при настройке веб-перехватчика) в качестве ключа, создайте HMAC-скрипт SHA512 из байтов декодированной в base64 полезной нагрузки сообщения и закодируйте результат в base64.
- Сравните хеш
X-Goog-Signatureс хешем, который вы создали.- Если хеши совпадают, значит, вы подтвердили, что сообщение было отправлено Google.
Если хеши не совпадают, проверьте процесс хеширования на заведомо корректном сообщении.
Если процесс хеширования работает корректно, но вы получаете сообщение, которое, по вашему мнению, было отправлено вам мошенническим путем, свяжитесь с нами .
Node.js
if ((requestBody.hasOwnProperty('message')) && (requestBody.message.hasOwnProperty('data'))) { // Validate the received hash to ensure the message came from Google RBM let userEventString = Buffer.from(requestBody.message.data, 'base64'); let hmac = crypto.createHmac('sha512', CLIENT_TOKEN); let data = hmac.update(userEventString); let genHash = data.digest('base64'); let headerHash = req.header('X-Goog-Signature'); if (headerHash === genHash) { let userEvent = JSON.parse(userEventString); console.log('userEventString: ' + userEventString); handleMessage(userEvent); } else { console.log('hash mismatch - ignoring message'); } } res.sendStatus(200);
Обработка сообщений
Возвращение веб-хука с кодом, отличным от 200 OK , считается ошибкой доставки.
Разработчикам следует помнить, что отправка сообщений с высокой частотой приведет к генерации большого количества уведомлений через веб-перехватчики, и поэтому необходимо проектировать свой код таким образом, чтобы обрабатывать уведомления с ожидаемой частотой. Разработчикам важно учитывать ситуации, которые могут привести к ошибкам, включая ответы 500 от веб-контейнера, тайм-ауты или сбои в вышестоящих системах. Следует учитывать следующие моменты:
- Убедитесь, что ваши средства защиты от DDoS-атак настроены на обработку ожидаемого количества уведомлений от веб-перехватчиков.
- Убедитесь, что ресурсы, такие как пулы соединений с базой данных, не исчерпываются и не приводят к таймаутам или ответам с кодом
500.
Разработчикам следует проектировать свои системы таким образом, чтобы обработка событий RBM происходила асинхронно и не препятствовала возврату веб-перехватчиком кода 200 OK .

Важно не обрабатывать событие RBM непосредственно в веб-хуке. Любая ошибка или задержка во время обработки может повлиять на код возврата веб-хука:

Поведение при сбое доставки
Если ваш веб-хук возвращает что-либо, кроме статуса 200 OK , платформа RCS for Business использует механизм задержки и повторной попытки для повторной доставки данных. Это означает, что система постепенно увеличивает задержку между каждой попыткой доставки, в конечном итоге достигая максимальной частоты одной повторной попытки каждые 10 минут для каждого ожидающего сообщения. Цикл повторных попыток продолжается в течение семи дней, после чего сообщение удаляется навсегда.
Последствия использования веб-хуков на уровне агентов.
RCS for Business помещает сообщения для партнера в одну очередь. Все агенты, работающие под одной учетной записью партнера, используют одну очередь. Из-за этого сбой в одном веб-хуке может заблокировать всю очередь, препятствуя доставке событий пользователей для всех агентов партнеру.
Несколько неподтвержденных сообщений могут вызвать резкий скачок числа повторных попыток. Например, если агент не подтвердит 1600 уведомлений о доставке, и частота повторных попыток достигнет 10-минутного лимита, это может привести к возникновению примерно 230 000 потенциальных ошибок в день:
1600 сообщений × 6 повторных попыток в час × 24 часа в сутки = приблизительно 230 000 ошибок в день
Такое количество повторных попыток может заблокировать общую очередь Pub/Sub и вызвать значительные задержки в получении событий пользователей для всех кампаний партнера.
Передовые методы
Для обеспечения надежности производственного трафика и предотвращения блокировок очередей следуйте этим рекомендациям:
- Немедленно вернуть код 200 OK : веб-хук должен получить сообщение, сохранить его в локальной очереди и вернуть ответ
200 OKменее чем за пять секунд. - Разделение обработки : Используйте отдельные фоновые процессы для обработки логики сообщений из локальной очереди.
- Отслеживайте работу тестовых агентов : рассматривайте агенты разработки как агенты производственной среды, поскольку они также могут блокировать общую очередь партнеров в случае сбоя.
- Выделенные учетные записи для тестирования : Желательно использовать одну учетную запись разработчика для агентов, работающих в производственной среде, и выделенную учетную запись разработчика для агентов тестирования.
- Проверка трафика Google : используйте обратное DNS-запрос или заголовок
X-Goog-Signatureвместо фиксированного списка разрешенных IP-адресов, поскольку Google использует динамические IP-адреса anycast. Для получения дополнительной информации о ручной проверке и определении диапазонов IP-адресов Google см. документацию по проверке запросов Google , а именно файлы JSON для запросов, инициируемых пользователем , и запросов Google, инициируемых пользователем .
Следующие шаги
После настройки веб-хука ваш агент сможет получать сообщения с тестовых устройств . Отправьте сообщение для проверки правильности настройки.