> For the complete documentation index, see [llms.txt](https://chatme-ai-4.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chatme-ai-4.gitbook.io/docs/proekty-na-platforme/proekt-i-ego-soderzhimoe/agenty-na-platforme/kak-postroit-scenarii-agenta/kak-sozdavat-i-nastraivat-sloty/rassylki-v-whatsapp-or-slot-notification/rassylki-v-360dialog.md).

# Рассылки в 360dialog

В этой статье вы узнаете, как запустить рассылки через канал 360dialog (Whatsapp).Первым делом перед созданием Слота необходимо создать Канал Проекта 360dialog (Whatsapp) или 360dialog (cloud). Подробнее об этом: 360dialog (WhatsApp), 360dialog (cloud)

## Создание шаблона рассылки

Шаблоны — это сообщения, с помощью которых Бот в WhatsApp стартует Чат с Собеседником. Чтобы произвести рассылку по Собеседникам в WhatsApp, необходимо создать шаблон, отправить на согласование, в случае неуспеха переформулировать и отправить новый шаблон, а в случае согласования инициировать рассылку с помощью Слота Notification.Подробнее: Создание и согласование шаблонов рассылочных сообщений в 360dialog

## Создание слота

После создания шаблона рассылки, создайте Слот Notification и заполните поля Слота на всех вкладках.

### Вкладка General

Вкладка General содержит основные настройки Слота.

1. Вид вкладки:\
   ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-Tv1QwYFeUM/dad8235499d97bb1d75e04992ca88286cccf03779efe9b4c2724b02213bbe432fe0c94a9d26e123fbcc95c58be2f9ceb93c3c3a46292d0d03b4469ac971949d2da699f3c0cc1bf8fc53312056e8cfe0b44cb0b62f8ec7d586e3c3eed65d41df1e0605f54)
2. Элементы и поля вкладки:
3. 1. Name\* — название Слота, которое будет отображено в Дерево сценария. Максимальная длина значения поля — 40 символов.
   2. Destination channel\* — Конечный канал, через который будет осуществляться рассылка.
   3. Chatbot webhook — вебхук, на который Агент будет получать Запрос на рассылку.\
      Значение появится в поле после сохранения и повторного  открытия Слота. Вебхук начнет работать после Обучение Агента.\
      ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-dkJFbufnBf/bb1445a9bd3547a8a75de9675a6e272437cd3ba1a1d765cc8e67af9eb985f0621174fdcb55165cbbed5a14afa1ad2a9037a9830c3b3dcfa19cb23741e11f1c7fb1749f6e34e2ce814735b694cbc1bc3e15a253028018dae8e8166108ef9528ea10ad4498)
   4. Кнопка копирования вебхука.
   5. 1. По нажатию кнопки адрес вебхука копируется в буфер обмена.\
         ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-p9OPTwIDXF/261c797f3a13f9296726de7e4cfea98c8b9674fed5586c8242a146c0d3752755a00359b2795b3c1c013b3204de5749a2ef238a01f5f67511fd6238d58599dd2dc759b197a0c34ae6cd03fa15bc0b57e44900167a040594192ede7ac885af5b3377c0d9e9)
      2. Кнопка становится доступной к нажатию, только когда поле Chatbot webhook заполнено значением вебхука.
   6. Кнопка GENERATE NEW WEBHOOK.
   7. 1. Кнопка становится доступной к нажатию, только когда поле Chatbot webhook заполнено значением вебхука.
      2. По нажатию кнопки происходит генерация нового вебхука.
      3. Изменения после перегенерации вебхука вступают в силу после переобучения Агента.

### Вкладка Incoming Data   &#x20;

Вкладка Incoming Data предназначена для настроек парсинга тела Запрос на рассылку для последующего использования полученных данных в Сценарий агента.

1. Вид вкладки:\
   ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-o2t4MnjbIc/9e63b8f8db0a6cd2c274778bb4633e3b748421813c8bfe5f946335ca6b90e1fd29baa79bdca2f6500d329013a309c71e71ff3dc84cf741a61e20b78689096e8436a6036fe0201f721831e22efd4279d31e570d17c94c0647581002d329f404923b0bf672)
2. Поля вкладки:
3. 1. PARSE REQUEST BODY — массив пар Context key — Request key.
   2. 1. Context key — имя Контекстная переменная для парсинга;
      2. Request key — ключ из тела Запрос на рассылку, значение которого будет записано в Context key либо Выражение.
      3. > Важно: обращение к ключу объекта, если его имя совпадает с именем Зарезервированные методы объектов происходит через квадратные скобки и кавычки.
      4. > Пример: {{ data\["keys"] }}

### Вкладка Destination

На вкладке Destination происходит настройка отправки рассылочных сообщений в выбранный на вкладке General Конечный канал, исходя из его требований.

1. Вид вкладки:\
   ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-tHeVHDdYFz/31559ff6bd11252a0bc7e65f68e081341973589b04e0a380187c59a9bda7d1059fca1d8ae9767d8c37f698d1bdcacdb7fe8f2e33008716a616806268804356803ee747a3ca8c99483b385284459209c66cdf1329b5fcf55a07413e99dcdaf1253e76ae89)
2. Поля вкладки:
3. 1. GENERAL PARAMETERS — общие настройки для отправки сообщения:
   2. 1. Template name\* — название шаблона в 360dialog, по которому происходит рассылка (поле Name в аккаунте Whatsapp (360dialog). Подробнее: Создание и согласование шаблонов рассылочных сообщений в 360dialog )
      2. 1. Допустимые значения:
         2. 1. Строка;
            2. Выражение в синтаксисе.
         3. Валидация: по нажатию кнопки CREATE (при создании слота) или SAVE (при редактировании слота) проверяется наличие значения в поле:
         4. 1. при отсутствии значения в поле выводится ошибка Please enter text.
      3. Namespace\* — название из параметра в аккаунте в 360dialog (поле Namespace), требуемое в Запрос на рассылку.&#x20;
      4. 1. Допустимые значения:
         2. 1. Строка;
            2. Выражение в синтаксисе.
         3. Валидация: по нажатию кнопки CREATE (при создании слота) или SAVE (при редактировании слота) проверяется наличие значения в поле:
         4. 1. при отсутствии значения в поле выводится ошибка Please enter text.
      5. Language code\* — название из параметра “язык шаблона” (поле Languages) в аккаунте в 360dialog, требуемое в Запрос на рассылку.&#x20;
      6. 1. Допустимые значения:
         2. 1. Строка;
            2. Выражение в синтаксисе.
         3. Валидация: по нажатию кнопки CREATE (при создании слота) или SAVE (при редактировании слота) проверяется наличие значения в поле:
         4. 1. при отсутствии значения в поле выводится ошибка Please enter text.
   3. TEMPLATE PARAMETERS — параметры для подстановки в шаблон рассылки, указанный в поле Template name\*, массив пар Template parameter — Value:\
      ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-wO7yCdfaQ1/8065ec60e3597aad11e818fb62b32b951094e98abd3b0d56c8c121be6d6b9c06959f05d84f1cf67497f7fd0d1534ff2105544dea1d0b083155ffc5e0fdeda44c7309b92ea09fe4d34f075b1d848d64350c54b48cde086c1537073e09aa7530c1969e36f9)
   4. 1. Синтаксис соответствует документации WhatsApp.
      2. Template parameter — тип параметров. Порядок указания параметров в Слоте должен соответствовать порядку параметров в шаблоне.
      3. 1. Возможные значения поля:
         2. 1. Параметры для подстановки медиа в шаблон:\
               ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-w1mhaoWZNp/ae7dd5cf23273482f7a6c00e41284894e47e9fe7286e843813b97cc119fc7960e73dbc3abf72f235bbd6db61e34418ff284bf030b6f93fd536a073623b9f66a94808fe2968b94c99cd9fe111b369be6d3495dffe4de0efc70ce4e03e99bc641a394e7873)
            2. 1. image — для подстановки изображения;
               2. document — для подстановки документа;
               3. video — для подстановки видео.
               4. В шаблоне допустим только 1 параметр медиа.
            3. Параметры для подстановки текста и кнопок в шаблон:
            4. 1. body — для подстановки текстовых данных.
               2. Количество параметров данного типа не ограничено.\
                  ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-LzF_aF2YxR/135b94ebb5964d94313e175bfbf97c7f623a7441873172d83897323cc1743f2de02263cf620e8f31ee37f70484d22bc4e34133d5adacee6bdf3ddcac9462b3096c8c541454790f3b9a54f46f119b4044eb28f8755f5f5445fefcfe3e50b2fbd1d18eb62c)
               3. button\_url — для подстановки ссылки или номера телефона в кнопку.
               4. Максимальное количество кнопок, содержащих ссылку — 1.
               5. Максимальное количество, содержащих номер телефона — 1.  Номер телефона подставляется в формате wa.me/+79831249701)
      4. Value — точное значение, Выражение или  Контекстная переменная, которая должна быть подставлено в шаблон.
      5. 1. Возможно использование переменных из поля Context key  вкладки  Incoming Data , так как парсинг данных выполняется перед формированием запроса в Конечный канал
         2. > Важно: обращение к ключу объекта, если его имя совпадает с именем Зарезервированные методы объектов происходит через квадратные скобки и кавычки.
         3. > Пример: {{ data\["keys"] }}

<br>

## Запуск рассылки

После того, как Канал Проекта создан, шаблон рассылки создан и согласован, а Слот Notification настроен, можно запускать рассылку. Для этого необходимо отправит запрос на рассылку.

### Формат запроса на рассылку

1. Запрос на рассылку должен обязательно включать идентификатор Собеседника в конечном канале на первом уровне JSON-а, случае c WhatsApp, это номер телефона. По этому идентификатору Платформа вычислит Чат или в случае, если он не существует, создаст новый Чат для отправки запроса. Название ключа зависит от Конечный канал.
2. 1. Формат идентификатора:
   2. 1. поле типа “текст”;
      2. От 10 до 18 цифр (от 11 до 19 с учетом +);
      3. Допускается знак + в начале.
3. Запрос на рассылку может быть срочным или несрочным (параметр "is\_urgent"):
4. 1. значение true — для срочного Запрос на рассылку — выполняется незамедлительно и прерывает Активный диалог.
   2. значение false — для несрочного Запрос на рассылку — выполняется после закрытия Диалога.
   3. если ключ is\_urgent не найден, используется значение по умолчанию false.
5. Запрос на рассылку должен быть POST-запросом с валидным телом JSON и заголовком "Content-Type": "application/json"
6. Лимит на запросы на рассылку по умолчанию — 20 запросов в секунду на Компания. Лимит можно изменить через техподдержку.
7. Пример запроса на рассылку:\
   POST <[http://localhost:10040/notification/13::9de6d0fbc9a547659457a0f7a0e21eda/chat>\\](http://localhost:10040/notification/13::9de6d0fbc9a547659457a0f7a0e21eda/chat>\\)
   headers: {"Content-Type": "application/json"}\
   body: {\
   "phone\_number": "79291642944",\
   "is\_urgent": true,\
   "extra": {\
   "foo": 42\
   }\
   }

## Работа слота

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

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

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

| Ответ, полученный на запроса на рассылку                                                                | Расшифровка ответа                                                                                                                    |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| HTTP status: 429                                                                                        | Превышение  Лимит на запросы на рассылку для Компания                                                                                 |
| HTTP status: 405                                                                                        | Запрос на рассылку не с POST-методом                                                                                                  |
| HTTP status: 400                                                                                        | <ul><li>в Запрос на рассылку нет заголовка content-type: application/json</li><li>невалидный JSON в теле Запрос на рассылку</li></ul> |
| HTTP status: 404                                                                                        | Не найдена  Компания, связанная с Идентификатор рассылки  (он содержится в вебхуке в поле Chatbot webhook)                            |
| <p>HTTP status: 400 invalid<br>BODY:<br>“status”: “Recipient ID not found or invalid.”</p>              | идентификатор Собеседника не был найден или он невалидный                                                                             |
| <p>HTTP status: 404 Not Found<br>BODY:<br>“status”: “Notification not found”</p>                        | нет обученного Агента со Слотом с таким вебхуком                                                                                      |
| <p>HTTP status: 404 Not Found<br>BODY:<br>“status”: “There is no active channel for received event”</p> | Канал Проекта данного слота Notification удален\неактивен                                                                             |
| <p>HTTP status: 200 OK<br>BODY:<br>“status”: “Accepted for execution”<br>“task\_id”:  </p>              | Запрос на рассылку поставлен в очередь на выполнение                                                                                  |

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

1. Слот Notification собирает запрос в Конечный канал из параметров на вкладке Destination  и идентификатора собеседника (phone\_number).\
   ![image.png](https://codahosted.io/docs/_pM7PjYCmj/blobs/bl-aPAt12wNYc/ea8740a583c7a0ed1163990cd2331ccf092df25299deb4dd4d6249a5211e92d033d3a5697461dd49200695fe757b7b7573054893a7d4d2cc868a36823a26fe8247a3f6a2e22757cf12ab5cfa12a36595d71a40f4d3b7e184471054472f620ba313dc7a35)
2. Далее слот Notification выполняет отправку запроса на рассылку в выбранный в поле Destination Channel Конечный канал.
3. По итогу выполнения данного шага вы можете получить один из указанных в таблице результатов:

| Событие                                                                                                                                  | Что записывается в переменную notification\_raw\_status                                                                                                                                                                                                                             | Что записывается в переменную notification\_status | Переход по Сценарию Агента                                 |
| ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ---------------------------------------------------------- |
| Не удалось составить запрос по какой-либо причине, например, не удалось спарсить и создать переменную, которая используется в id шаблона | {‘description’:’failed to build request’}                                                                                                                                                                                                                                           | ‘failed’                                           | переход в ветку Notification fail                          |
| Конечный канал принял запрос и ответил успешным ответом                                                                                  | <p>{‘description’:’received by channel’,<br>‘channel\_response’: тело ответа от канала (объект)}(если application/json = объект, если text = str; в иных cлучаях записывается null).</p>                                                                                            | ‘sent’                                             | Агент ожидает статуса обработки рассылки от Конечный канал |
| Запрос в Конечный канал ушел, но в ответ получен response с кодом 4хх или 5хх                                                            | {‘description’:’channel error <код ответа> ’channel\_response’: тело ответа от канала}Если в ответе на запуск рассылки пришел JSON-объект, то в ’channel\_response’ сохраняется этот JSON-объект. Если в ответе пришел текст, то сохраняется текст. В ином случае сохраняется None. | ‘failed’                                           | переход в ветку Notification fail                          |
| Не удалось выполнить запрос в Конечный канал (канал недоступен, пинг не идет и т.д.)                                                     | {‘description’:’channel inaccessible’}                                                                                                                                                                                                                                              | ‘failed’                                           | переход в ветку Notification fail                          |

<br>

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

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

| Переход в Подслот                       | Причины                                                                                                                            | Что записывается в переменную notification\_raw\_status                                                                                                                                                                                                                                 | Что записывается в переменную notification\_status |
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| Переход в ветку Notification Fail       | Любые проблемы, относящиеся к данной конкретной задаче на рассылку, кроме отсутствия аккаунта на данном идентификаторе Собеседника | {‘description’:’channel couldn’t sent message’, ‘channel\_response’: тело ответа от канала}Если в ответе на запуск рассылки пришел JSON-объект, то в ’channel\_response’ сохраняется этот JSON-объект. Если в ответе пришел текст, то сохраняется текст. В ином случае сохраняется None | ‘failed’                                           |
| Переход в ветку Notification no account | Отсутствие аккаунта на данном идентификаторе Собеседника (в случае WhatsApp — номере телефона)                                     | не создается в Контекст Чата                                                                                                                                                                                                                                                            | ‘no\_account’                                      |
| Переход в ветку Notification Success    | Получение статуса отправки, доставки или прочтения сообщения Собеседником                                                          | {‘description’:’success’,‘channel\_response’: тело ответа от канала (объект)} (если application/json = объект, если text = str; в иных cлучаях записывается null).                                                                                                                      | ‘delivered’                                        |
| Переход в ветку Notification Success    | получение Сообщение собеседника                                                                                                    | {‘description’:’success’, ‘channel\_response’: тело принятного запроса от канала (объект), откуда распарсили текст Сообщение собеседника} (если application/json = объект, если text = str; в иных cлучаях записывается null).                                                          | ‘delivered’                                        |
