# Рассылки в Chat2Desk

В этой статье вы узнаете, как запустить рассылки через канал Chat2Desk.Первым делом перед созданием Слота необходимо создать Канал Проекта Chat2Desk. Подробнее об этом: Chat2Desk

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

Шаблоны — это сообщения, с помощью которых Бот в WhatsApp стартует Чат с Собеседником. Чтобы произвести рассылку по Собеседникам в WhatsApp, необходимо создать шаблон, отправить на согласование, в случае неуспеха переформулировать и отправить новый шаблон, а в случае согласования инициировать рассылку с помощью Слота Notification.Подробнее: <https://chat2desk.com/en/knowledge-base/features/templates/how-to-set-up-templates>

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

После создания шаблона рассылки, создайте Слот 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-mUklW-EY-_/6f3fd9f522c15878f7da43f9944663fd56fd8692b49cd37c10c45789ad59d7902c610d2c1965e7bf1c518fdf22542340ccdfb32e476edcad64f2d5caae8f359770ce3b57d4b6cf335503302868705d867c5af95308f5ed2e8d940c1471e38917a16aa950)
2. Поля вкладки:
3. 1. Channel id\* — id канала. Получается из API Chat2Desk с помощью запроса GET channels. &#x20;
   2. Transport\* — значение поля всегда равно wa\_dialog.
   3. Attachment URL — URL вложения в шаблоне рассылки, если есть.
   4. Content\* — информация о шаблоне рассылки. Формат:
   5. 1. Без параметров в шаблоне:\
         @HSM@\
         <название шаблона>|<код языка>\
         код языка берется в аккаунте в Chat2Desk\
         Пример:\
         @HSM@\
         test\_simple|ru
      2. С параметрами в шаблоне:\
         @HSM@\
         test\_simple|ru\
         {{ var1 }}\
         {{ var2 }}

<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 <[https://admin.chatme.ai/api/notification/42282::0a04b116e59032ef014d649602cc0b54/chat'>\\](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                                                                                        | <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. 1. Если в настройках канала указан ID оператора, то в тело запроса на рассылку подставляется поле operator\_id, пример:
   2. { ... "operator\_id": 123}
   3. Если в настройках канала не указан ID оператора, то в тело запроса на рассылку подставляется поле open\_dialog со значением false:, при этом новый Диалог в Платформа не открывается. Пример:\
      {\
      &#x20;...\
      &#x20;"open\_dialog": false\
      }
4. По итогу выполнения данного шага вы можете получить один из указанных в таблице результатов:

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET 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-chat2desk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
