Рассылки в WhatsApp| Слот Notification

Назначение и общая информация

Слот Notification предназначен для отправки рассылочных сообщений. Слот позволяет отправить сообщение в случае, когда Чат с Собеседником еще не создан, или Чат создан, но Агенту нельзя писать в Чат первым после определенного таймаута (ограничение некоторых каналов).Слот Notification принимает Запрос на рассылку с данными для рассылки из внешней системы (CRM, например), формирует и отправляет запрос в Канал Проекта, затем получает ответ из Конечный канал и в зависимости от полученного статуса рассылки Общение переходит в один из Подслотов.Корректный Запрос на рассылку через Слот Notification создаст Чат, если его нет в Платформа, даже в случае, когда Собеседника не существует в Конечный канал (например, номер телефона адресата в Запрос на рассылку корректный, но человек не зарегистрирован в WhatsApp)Слот Notification является комплексным Слотом и не может существовать без трех Дочерний слотов Notification fail, Notification no account и Notification success, которые начинают собственные ветки, в которые будет осуществлен переход после получения статуса рассылки.Добавить другие дочерние слоты невозможно.

Подслот Notification fail предназначен для продолжения Сценарий агента, если не удалось отправить рассылку в Конечный канал.

Подслот Notification no account предназначен для продолжения Сценарий агента после рассылки, которая была успешно отправлена в Конечный канал, но Конечный канал сообщил, что получатель не найден (например, у получателя нет аккаунта WhatsApp при рассылках через WhatsApp).

Подслот Notification success предназначен для продолжения Сценарий агента после рассылки, которая была успешно отправлена в Конечный канал и был получен успешный статус либо ответ Собеседника.

Поддерживаемый канал
Иконка в шапке слота
Ключевой идентификатор собеседника в конечном канале
Ключ идентификатора в теле запроса на рассылку
Валидация Идентификатор собеседника в запросе на рассылку
Пример входящего запроса на рассылку
Notification success
Notification fail
Notification no account
Поддержка метода проверки наличия аккаунта Проверка наличия Чата в Whatsapp (360dialog) 360dialog предоставляет специальный метод, позволяющий проверить наличие аккаунта: 1. Если метод возвращает информацию об отсутствии аккаунта, то Сценарий идет по ветке Подслота Notification no account: 1. в Контекстная переменная notification_raw_status записывается {‘description’:’no account on <номер телефона\ключевой идентификатор собеседника>’, ‘channel_response’: тело ответа от канала as is (объект) }(если application/json = объект, если text = str; в иных cлучаях записывается null). 2. в Контекстная переменная notification_status записывается ‘no_account’. 3. В выгрузке истории сообщений будет записано Check account <номер телефона>: No account. 2. Если аккаунт найден, то выполняется рассылка. Проверка наличия Чата в Whatsapp (360dialog) 360dialog предоставляет специальный метод, позволяющий проверить наличие аккаунта: 1. Если метод возвращает информацию об отсутствии аккаунта, то Сценарий идет по ветке Подслота Notification no account: 1. в Контекстная переменная notification_raw_status записывается {‘description’:’no account on <номер телефона\ключевой идентификатор собеседника>’, ‘channel_response’: тело ответа от канала as is (объект) }(если application/json = объект, если text = str; в иных cлучаях записывается null). 2. в Контекстная переменная notification_status записывается ‘no_account’. 3. В выгрузке истории сообщений будет записано Check account <номер телефона>: No account. 2. Если аккаунт найден, то выполняется рассылка.

360dialog (Whatsapp)

Номер телефона в формате

phone_number

  1. Поле типа “текст”;

  2. От 10 до 18 цифр (от 11 до 19 с учетом +);

  3. Допускается знак + в начале.

POST <URL>headers: {"Content-Type": "application/json"}body: {"phone_number": "79291642944","is_urgent": true,"extra": {"foo": 42}}

В виду особенностей работы 360dialog, порядок получения статусов-ответов на рассылку может быть спутан, либо статусы прийти после ответа собеседника, поэтому для перехода в ветку Notification success учитываем первое из следующих событий, поступившее из канала после отправки рассылки

  • статус sent на рассылку

  • статус delivered на рассылку

  • статус read на рассылку

  • Сообщение собеседника

Из-за особенностей 360dialog, если до ответа Собеседника на рассылку Агент попытается отправить новые сообщения методом обычной отправки, а не рассылки (если после Подслота Notification success стоят Слоты Text, Attachment, Button Menu), то канал ответит ошибкой и не примет их.

Реализация Слота позволяет прописать в поле Content текст, не соответствующий согласованному шаблону рассылки. При отправке рассылки с таким сообщением, если есть Активный диалог, то придет текст и success, а если такого нет, то ошибка и ветка failed

Проверка наличия Чата в Whatsapp (360dialog) 360dialog предоставляет специальный метод, позволяющий проверить наличие аккаунта:

  1. Если метод возвращает информацию об отсутствии аккаунта, то Сценарий агента идет по ветке Подслота Notification no account:

    1. в Контекстная переменная notification_raw_status записывается {‘description’:’no account on <номер телефона\ключевой идентификатор собеседника>’, ‘channel_response’: тело ответа от канала as is (объект) }(если application/json = объект, если text = str; в иных cлучаях записывается null).

    2. в Контекстная переменная notification_status записывается ‘no_account’.

    3. В выгрузке истории сообщений будет записано Check account <номер телефона>: No account.

  2. Если аккаунт найден, то выполняется рассылка.

Номер телефона в формате

phone_number

  1. Поле типа “текст”;

  2. От 10 до 18 цифр (от 11 до 19 с учетом +);

  3. Допускается знак + в начале.

POST <https://admin.chatme.ai/api/notification/42282::0a04b116e59032ef014d649602cc0b54/chat'> headers: {"Content-Type": "application/json"} body: { "phone_number": "79291642944", "is_urgent": true }

В виду особенностей работы Edna, порядок получения статусов-ответов на рассылку может быть спутан, либо статусы прийти после ответа собеседника, поэтому для перехода в ветку Notification success учитываем первое из следующих событий, поступившее из канала после отправки рассылки

  • статус sent на рассылку

  • статус delivered на рассылку

  • статус read на рассылку

  • Сообщение собеседника

Из-за особенностей Edna, если до ответа Собеседника на рассылку Агент попытается отправить новые сообщения методом обычной отправки, а не рассылки (если после Подслота Notification success стоят Слоты Text, Attachment, Button Menu), то канал ответит ошибкой и не примет их.

В случае, если в поле Content слота указаны данные несуществующего или несогласованного шаблона рассылки и при этом:

  • нет Активный диалог с получателем рассылки: в ответе придет: ‘status’: ‘UNDELIVERED’, ‘error’: ‘not-template-match’, произойдет выход в Notification fail.

  • есть Активный диалог: получателю придет текст, указанный в поле Content и произойдет выход в Notification success

Проверка наличия Чата в Whatsapp (360dialog) 360dialog предоставляет специальный метод, позволяющий проверить наличие аккаунта:

  1. Если метод возвращает информацию об отсутствии аккаунта, то Сценарий агента идет по ветке Подслота Notification no account:

    1. в Контекстная переменная notification_raw_status записывается {‘description’:’no account on <номер телефона\ключевой идентификатор собеседника>’, ‘channel_response’: тело ответа от канала as is (объект) }(если application/json = объект, если text = str; в иных cлучаях записывается null).

    2. в Контекстная переменная notification_status записывается ‘no_account’.

    3. В выгрузке истории сообщений будет записано Check account <номер телефона>: No account.

  2. Если аккаунт найден, то выполняется рассылка.

Номер телефона в формате

phone_number

  1. Поле типа “текст”;

  2. От 10 до 18 цифр (от 11 до 19 с учетом +);

  3. Допускается знак + в начале.

POST <https://admin.chatme.ai/api/notification/42282::0a04b116e59032ef014d649602cc0b54/chat'> headers: {"Content-Type": "application/json","Authorization: 3cb81e05cf1679e1af9e5d9164ab89"}Токен авторизации берется из личного кабинета Chat2Deskbody: { "phone_number": "79291642944", "is_urgent": true }

На данный момент в канале Chat2Desk не реализован метод проверки наличия аккаунта WhatsApp. Если на указанном номере нет зарегистрированного аккаунта WhatsApp, Сценарий агента идет по ветке Notification fail

Создание и настройки слота

Настройки Слота отличаются в зависимости от Конечный канал, подробную информацию том, как создать Слот Notification и настроить рассылки в разных Конечный канал читайте в статьях:

Рассылки в 360dialog Рассылки в Edna Pulse Рассылки в Edna Chat Center Рассылки в Chat2Desk

Запрос на рассылку на вебхук слота Notification

  1. Запрос на рассылку должен обязательно включать идентификатор Собеседника в конечном канале на первом уровне JSON-а, случае c WhatsApp, это номер телефона. По этому идентификатору Платформа вычислит Чат или в случае, если он не существует, создаст новый Чат для отправки запроса. Название ключа зависит от Конечный канал.

    1. Формат идентификатора:

      1. поле типа “текст”;

      2. От 10 до 18 цифр (от 11 до 19 с учетом +);

      3. Допускается знак + в начале.

  2. Запрос на рассылку может быть срочным или несрочным (параметр "is_urgent"):

    1. значение true — для срочного Запрос на рассылку — выполняется незамедлительно и прерывает Активный диалог.

    2. значение false — для несрочного Запрос на рассылку — выполняется после закрытия Диалога.

    3. если ключ is_urgent не найден, используется значение по умолчанию false.

  3. Запрос на рассылку должен быть POST-запросом с валидным телом JSON и заголовком "Content-Type": "application/json"

  4. Лимит на запросы на рассылку по умолчанию — 20 запросов в секунду на Компания. Лимит можно изменить через техподдержку.

  5. Пример Запрос на рассылку в 360dialog (Whatsapp): POST <http://localhost:10040/notification/13::9de6d0fbc9a547659457a0f7a0e21eda/chat> headers: {"Content-Type": "application/json"} body: { "phone_number": "79291642944", "is_urgent": true, "extra": { "foo": 42 } }

  6. Пример Запрос на рассылку в Edna Chat Center и Edna Pulse : POST <https://admin.chatme.ai/api/notification/42282::0a04b116e59032ef014d649602cc0b54/chat'> headers: {"Content-Type": "application/json"} body: { "phone_number": "79291642944", "is_urgent": true }

  7. Пример Запрос на рассылку в Chat2Desk: POST <https://admin.chatme.ai/api/notification/42282::0a04b116e59032ef014d649602cc0b54/chat'> headers: {"Content-Type": "application/json", "Authorization: 3cb81e05cf1679e1af9e5d9164ab89"} Токен авторизации берется из личного кабинета Chat2Desk body: { "phone_number": "79291642944", "is_urgent": true }

Работа слота

Работа слота начинается с момента получения Платформа Запрос на рассылку из внешней системы.

1. Обработка входящего запроса на рассылку

В процессе обработки входящего запроса на рассылку выполняется ряд операций. По итогу выполнения операций вы можете получить один из указанных в таблице статусов:

Ответ, полученный на запроса на рассылку
Расшифровка ответа

HTTP status: 429

Превышение Лимит на запросы на рассылку для Компания

HTTP status: 405

Запрос на рассылку не с POST-методом

HTTP status: 400

  • в Запрос на рассылку нет заголовка content-type: application/json

  • невалидный JSON в теле Запрос на рассылку

HTTP status: 404

Не найдена Компания, связанная с Идентификатор рассылки (он содержится в вебхуке в поле Chatbot webhook)

HTTP status: 400 invalid BODY: “status”: “Recipient ID not found or invalid.”

идентификатор Собеседника не был найден или он невалидный

HTTP status: 404 Not Found BODY: “status”: “Notification not found”

нет обученного Агента со Слотом с таким вебхуком

HTTP status: 404 Not Found BODY: “status”: “There is no active channel for received event”

Канал Проекта данного слота Notification удален\неактивен

HTTP status: 200 OK BODY: “status”: “Accepted for execution” “task_id”:

Запрос на рассылку поставлен в очередь на выполнение

2. Выполнение задачи на рассылку

  1. Слот Notification собирает запрос в Конечный канал из параметров на вкладке Destination и идентификатора собеседника (phone_number).

  2. Далее слот Notification выполняет отправку запроса на рассылку в выбранный в поле Destination Channel Конечный канал.

    1. В случае Chat2Desk:

      1. Если в настройках канала указан ID оператора, то в тело запроса на рассылку подставляется поле operator_id, пример:

      2. { ... "operator_id": 123}

      3. Если в настройках канала не указан ID оператора, то в тело запроса на рассылку подставляется поле open_dialog со значением false:, при этом новый Диалог в Платформа не открывается. Пример: { ... "open_dialog": false

  3. По итогу выполнения данного шага вы можете получить один из указанных в таблице результатов:

Событие
Что записывается в переменную notification_raw_status
Что записывается в переменную notification_status
Переход по Сценарию Агента
Канал

Не удалось составить запрос по какой-либо причине, например, не удалось спарсить и создать переменную, которая используется в id шаблона

{‘description’:’failed to build request’}

‘failed’

переход в ветку Notification fail

Edna Chat Center,Edna Pulse,360dialog (Whatsapp),360dialog (cloud),Chat2Desk

Конечный канал принял запрос и ответил успешным ответом

{‘description’:’received by channel’, ‘channel_response’: тело ответа от канала (объект)}(если application/json = объект, если text = str; в иных cлучаях записывается null).

‘sent’

Агент ожидает статуса обработки рассылки от Конечный канал

Edna Chat Center,Edna Pulse,360dialog (Whatsapp),360dialog (cloud),Chat2Desk

Запрос в Конечный канал ушел, но в ответ получен response с кодом 4хх или 5хх

{‘description’:’channel error <код ответа> ’channel_response’: тело ответа от канала}Если в ответе на запуск рассылки пришел JSON-объект, то в ’channel_response’ сохраняется этот JSON-объект. Если в ответе пришел текст, то сохраняется текст. В ином случае сохраняется None.

‘failed’

переход в ветку Notification fail

Edna Chat Center,Edna Pulse,360dialog (Whatsapp),360dialog (cloud),Chat2Desk

Не удалось выполнить запрос в Конечный канал (канал недоступен, пинг не идет и т.д.)

{‘description’:’channel inaccessible’}

‘failed’

переход в ветку Notification fail

Edna Chat Center,Edna Pulse,360dialog (Whatsapp),360dialog (cloud),Chat2Desk

В поле Content слота указаны данные несуществующего или несогласованного шаблона рассылки, при этом нет Активный диалог с получателем рассылки

{‘status’: ‘UNDELIVERED’, ‘error’: ‘not-template-match’}

переход в ветку Notification fail

Edna Chat Center,Edna Pulse

В поле Content слота указаны данные несуществующего или несогласованного шаблона рассылки, при этом естьАктивный диалог с получателем рассылки

получателю придет текст, указанный в поле Content, переход в ветку Notification success

Edna Chat Center,Edna Pulse

3. Переход в ветки подслотов и ответы из канала

После того как Конечный канал принял запрос на рассылку, происходит переход в один из Подслотов:

Переход в Подслот
Причины
Что записывается в переменную notification_raw_status
Что записывается в переменную notification_status
Канал

Переход в ветку Notification Fail

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

{‘description’:’channel couldn’t sent message’, ‘channel_response’: тело ответа от канала}Если в ответе на запуск рассылки пришел JSON-объект, то в ’channel_response’ сохраняется этот JSON-объект. Если в ответе пришел текст, то сохраняется текст. В ином случае сохраняется None

‘failed’

Edna Chat Center,Chat2Desk,Edna Pulse,360dialog (Whatsapp),360dialog (cloud)

Переход в ветку Notification no account

Отсутствие аккаунта на данном идентификаторе Собеседника (в случае WhatsApp — номере телефона)

не создается в Контекст Чата

‘no_account’

360dialog (Whatsapp),360dialog (cloud)

Переход в ветку Notification no account

Отсутствие аккаунта на данном идентификаторе Собеседника (в случае WhatsApp — номере телефона)

{‘description’:’no account on <номер телефона\ключевой идентификатор собеседника>’, ‘channel_response’: тело ответа от канала as is (объект)} (если application/json = объект, если text = str; в иных cлучаях записывается null).

‘no_account’

Edna Chat Center,Chat2Desk,Edna Pulse

Переход в ветку Notification Success

Получение статуса отправки, доставки или прочтения сообщения Собеседником

{‘description’:’success’,‘channel_response’: тело ответа от канала (объект)} (если application/json = объект, если text = str; в иных cлучаях записывается null).

‘delivered’

Edna Chat Center,Chat2Desk,Edna Pulse,360dialog (Whatsapp),360dialog (cloud)

Переход в ветку Notification Success

получение Сообщение собеседника

{‘description’:’success’, ‘channel_response’: тело принятного запроса от канала (объект), откуда распарсили текст Сообщение собеседника} (если application/json = объект, если text = str; в иных cлучаях записывается null).

‘delivered’

Edna Chat Center,Chat2Desk,Edna Pulse,360dialog (Whatsapp),360dialog (cloud)

Last updated