Схема работы сервиса - создание блоков
В этой статье более подробно рассмотрим создание типовых блоков.
Если ты не знаешь, что это и на каком этапе они появляются, то тебе сюда


В нашем конструкторе, есть разные виды блоков. Блок = одно сообщение/ или действие.
Виды блоков

Смысловые (эти сообщения видит клиент):
‎• Отправка сообщения
‎• Отправка меню
‎• Ввод данных
‎• Перевод на оператора

Дополнительные (позволяют вносить дополнительные изменения в смысловые блоки):
‎• Задержка
‎• Случайное распределение

Интеграционные (нужны для передачи данных и интеграций):
‎• Запрос API
‎• Условный блок
‎• Запись поля
‎• Шаблонизируемое меню

Блок "‎Отправка сообщения"
Этот блок просто отправляет сообщение пользователю :)
Если сделать несколько таких блоков подряд, они будут отправляться друг за другом без остановки.
Бот после такого блока не ждёт сообщение от клиента, да и вообще никаких действий от клиента.
Подходит для самого первого сообщения, для информативных сообщений и рассылок.

Элементы блока "Отправка сообщения":
Название – видите только вы, назовите так, чтобы было понятно о чем это
Описание – видите только вы, детализация названия блока, необязательный элемент
Сообщение – сообщение, которое увидит ваш подписчик. Тут вы можете прикрепить картинку (в формате jpeg), смайлик или координаты.
Следующий блок – какой блок будет следовать после этого

Блок "Отправка меню"
Это те самые "кнопки" или пункты меню.
Этот блок мы используем, когда хотим задать вопрос пользователю с выбором ответа.
В нем так же мы отправляем клиенту сообщение. Обычно уже с вопросом в конце. И он выбирает "кнопками", что ему интересно.
Именно этим блоком мы "разводим" пользователей по разным веткам сценария.
В этом случае бот после отправки меню, ждёт от пользователя выбор и нажатия на конкретную кнопку. Без нажатия дальше по сценарию человек пойти никак не сможет.

Элементы блока "Отправка меню":
Название – видите только вы, назовите так, чтобы было понятно о чем это
Описание – видите только вы, детализация названия блока, необязательный элемент
Сообщение – сообщение, которое увидит ваш подписчик. Тут вы можете прикрепить картинку (в формате jpeg), смайлик или координаты.
Добавить пункт меню – добавьте сами пункты меню.
У каждого пункта есть 2 параметра – текст пункта и следующий блок при выборе этого пункта меню.
В примере ниже показано 2 пункта меню, из которых 1 идет на Сообщение 1, а второй – на конец диалога:
Пример использования блока "Отправка меню":

Блок "Ввод данных"
Этот блок мы используем, когда хотим задать вопрос пользователю без выбора ответа.
Клиент отвечает на вопрос.
И бот его записывает и потом отражает в информации о подписчике.

Элементы блока "Ввод данных":
Название – видите только вы, назовите так, чтобы было понятно о чем это
Описание – видите только вы, детализация названия блока, необязательный элемент
Сообщение – сообщение, которое увидит ваш подписчик. Тут вы можете прикрепить картинку (в формате jpeg), смайлик или координаты.
Поле – необходимо выбрать из списка созданных дополнительных полей поле, куда будут записываться данные ответа, обязательный элемент.
Если вы не создали доп. поле заранее, то вам нужно это сделать на вкладке Доп. поля.
Как создать доп. поле для записи данных?
Сообщение при ошибке – что покажется подписчику, если он введет данные, которые НЕ могут быть записаны в данный тип поля. Например, мы создали дополнительное поле "Номер заказа" и выбрали, что это поле может содержать только числа. В случае если подписчик введет другие данные, он увидит сообщение об ошибке. Такая же валидация есть для всех типов доп. полей, кроме типа "строка", для него нет валидации. Детальнее о типах доп. полей


Блок "Перевод на оператора"
Этот блок используется, когда нам нужно подключить живого человека для помощи подписчику.

Элементы блока "Перевод на оператора":
Название – видите только вы, назовите так, чтобы было понятно о чем это
Описание – видите только вы, детализация названия блока, необязательный элемент
Настройки операторских сессия – какие сообщения увидит пользователь при подключении, отключении оператора, когда нет операторов на связи.
Детальнее о настройках операторских сессий
Операторы –
вы можете выбрать на кого из операторов будет направлено сообщение подписчика, при подключении оператора. Операторов вы можете приглашать через раздел "Персонал"

После использования этого блока сообщения подписчика будут отображаться на вкладке
"Мои чаты"
Детальнее о работе вкладки "Мои чаты"

Важно! Переход на следующий блок чат-карты осуществляется, когда оператор закрывает чат с клиентом в "Мои чаты". Попросите операторов закрывать чаты после ответов, чтобы подписчики имели возможность вернуться в главное меню или продолжить использование бота.

Пример настроек блока "Перевод на оператора":

Блок "Задержка"
Этот блок используется, когда нам нужно перед следующим блоком подождать какое-то время.
Например, вы хотите отправить несколько сообщений при подписке.
1 сообщение = 1 день.
Для этого вам нужно использовать блок "Задержка" между сообщениями

Элементы блока "Задержка":
Название – видите только вы, назовите так, чтобы было понятно о чем это
Описание – видите только вы, детализация названия блока, необязательный элемент
Время задержки (секунды) – сколько времени нужно ждать для перехода в следующий блок.
1 час = 3600 секунд
1 день = 86400 секунд

Обратите внимание!
При времени задержки пользователь бота не сможет никак с ним взаимодействовать: ничего писать, выбирать пункты меню.
Поэтому длительную задержку делать не рекомендуем
Если вам нужно отправить большую серию писем при подписке, то можно использовать отправку триггерных сообщений

При этом массовые рассылки в период задержки будут приходить пользователю, а так же триггерные рассылки. То есть задержка касается только текущей чат-карты.

Пример использования блока "Задержка" между двумя сообщениями:

Блок "Случайное распределение"

Этот блок используется, когда нам нужно разделить рандомом пользователей бота на разные ветки.

Для чего такой блок может быть нужен?
- отправлять разные приветственные сообщения для главного меню каждый раз, чтобы имитировать живое общение
- протестировать несколько вариантов сообщений, чтобы понять, какое из них принесет больше переходов на сайт (для ссылок рекомендуем использовать utm-метки в таком случае)
- перераспределить нагрузку на операторов определенным образом

Элементы блока "Случайное распределение":
Название – видите только вы, назовите так, чтобы было понятно о чем это
Описание – видите только вы, детализация названия блока, необязательный элемент
Выходы – какие блоки должны быть следующими.
Количество выходов = количество рандомных вариантов перехода.
То есть, если вы делаете 2 выхода, то пользователь бота с вероятностью 50% попадет в 1 из них.
Если вы делаете 4 выхода, то с вероятностью 25%.
Вы можете сделать любое число выходов (в рамках здравого смысла :)

Если вы на 2 из 6 выходов зададите один и тот же блок, то у пользователя повысится в 2 раза вероятность попасть именно на него.

Пример заполнения блока "Случайное распределение":

Блок "Запрос API"

Этот блок используется, когда нам нужно сделать запрос во внешнюю базу, в другой сервис или запросить откуда-то данные о клиенте, заказах, меню и прочем.
Позволяет интегрироваться с любым сервисом.

Если вам не понятно, как работать с данным блоком – напишите нам в поддержку или своим разработчикам, они поймут (скорее всего :) )

Примеры использования блока "Запрос API":
- отправить смс пользователю на номер телефона, который он ввел в боте, чтобы авторизовать его
- отправить запрос во внутреннюю базу компании, чтобы получить данные о статусе заказа по номеру, который пользователь ввел
- отправить запрос, чтобы узнать количество бонусных баллов
- отправить запрос, чтобы показать текущие актуальные акции компании
- отправить запрос, чтобы записать во внутреннюю базу данные нового подписчика
- отправить запрос, чтобы узнать, покупал ли клиент с введенным номером телефона раннее
- отправить запрос, чтобы отправилось письмо менеджерам с отзывом о компании, который подписчик ввел в боте
- отправить запрос, чтобы пришло уведомление в Slack о новом запросе в поддержку
- любая другая задача, где нужно отправить или получить данные

Элементы блока "Запрос API":
Название – видите только вы, назовите так, чтобы было понятно о чем это
Описание – видите только вы, детализация названия блока, необязательный элемент
URL запроса – какие блоки должны быть следующими.
HTTP-метод – какой тип запроса нужно использовать: GET, POST, PUT, DELETE, OPTIONS, HEAD
Заголовки (requestHeaders) – тут обычно указываются данные для авторизации, API-ключи (или в url запроса), тип разметки и прочая техническая информация о запросе.
Тело запроса – какие данные вы хотите передать.
Вы можете отправлять в теле запроса переменные о клиенте, боте и прочее.


Пример заполнения блока "Запрос API":
В данном случае отправляем уведомление в Slack на созданный вебхук-запрос о том, что пользователь выбрал переход на оператора.
Обратите внимание, в заголовках используется Content-Type = application/json
Как использовать данные из ответа на API-запрос в чат-карте после блока с запросом?

Вы можете использовать ответ, который приходит с внешней базы дальше в чат-карте.
Для этого у нас существует переменная {{last_api_response}} в которую записывается последний API-запрос, который касается этого пользователя чат-карты.

Переменная {{last_api_response}} может хранить информацию с ответа только в рамках одной чат-карты и только до последующего запроса.
Для того, чтобы передать данные в эту переменную они должны быть в форматах JSON или XML

Например, мы делаем запрос во внутреннюю базу данных, чтобы понять, из тех данных, которые у нас есть по клиенту с данным номером телефона, сколько у него было заказов.
И хотим записать результаты запроса в поле "Количество заказов".
Для этого в ответе по API нам нужно передавать переменную со значением, например, number_orders = 5
А для того, чтобы данные после этого сохранить это значение в доп. поле контакта нужно создать доп. поле, создать сразу после блока с API-запросом блок "Запись поля" и в поле "Присваемое значение" в настройках поля "Запись поля" ввести такую конструкцию:
{{last_api_response.НАЗВАНИЕ_ПЕРЕМЕННОЙ}}

То есть, в нашем примере это будет {{last_api_response.number_orders}} и в эту переменную подставится число 5, которое пришло в последнем API запросе об этом пользователе.

Last api response парсит JSON или XML, который ответил сервер, например:
Если сервер ответил { data: [1, 2, 3], name: 'User' }, то будут доступны такие переменные:
last_api_response.data[0]
last_api_response.data[1]
last_api_response.data[2]
last_api_response.name


Блок "Условный блок"

Этот блок создает логику ЕСЛИ, ТО для чат-карты.
Позволяет проверять наличие или значение какого-либо дополнительного поля у клиента.

Примеры использования блока "Условный блок":
- если доп. поле "Пол" = ж, то показать акцию с женскими товарами
- если доп. поле "Количество заказов" = 0, то показать промокод для новых клиентов.

Элементы блока "Условный блок":
Название – видите только вы, назовите так, чтобы было понятно о чем это
Описание – видите только вы, детализация названия блока, необязательный элемент
Условие – какие поля проверяем и значения в них
Переход, если ДА – какой будет следующий блок, если пользователь соответствует условию
Переход, если НЕТ – какой будет следующий блок, если пользователь НЕ соответствует условию


Пример использования блока "Условный блок":
Если нужно сделать показ разного текста в ОДНОМ блоке в зависимости от значения доп. полей
Вместо блока "Условный блок" можно использовать конструкции с IF ELSE прямо в тексте сообщений
Чтобы показать какой-то текст в сообщении, если в доп. поле определенное значение.

Например:
{% profile.data.СИСТЕМНОЕ_ИМЯ_ПЕРЕМЕННОЙ== 'ЗНАЧЕНИЕ' %}Текст, который нужно добавить в сообщение, если ваша переменная соответствует заданному значению{% endif %}

Пример: если переменная Пол с системным именем "gender" заполнена как "ж", то вывести в текст сообщения "Новая коллекция женских купальников!

{% profile.data.gender== 'ж' %}Новая коллекция женских купальников! {% endif %}

Мы используем в качестве шаблонизатора Jinja.
По ссылке вы можете ознакомиться с примерами синтаксиса для него.
Если это не о чем вам не говорит и сложно разобраться – напишите в поддержку, мы поможем решить вашу задачу.

Блок "Запись поля"

Этот блок используется для записи какого-либо значения в дополнительное поле контакта.

Примеры использования блока "Запись поля":
- если выбрал в меню кнопку "Женская рассылка", то в доп. поле "Пол" записать значение "ж"
- если после API-запроса пришел ответ о количестве заказов клиента в этот момент, то его можно записать в доп. поле "Количество заказов"

Элементы блока "Запись поля":
Название – видите только вы, назовите так, чтобы было понятно о чем это
Описание – видите только вы, детализация названия блока, необязательный элемент
Поле подписчика для записи – в какое доп. поле записывать данные
Присваемое значение – что именно записывать в это доп. поле

Помимо статических данных можно записывать в это поле данные с переменной {{last_api_response}} после блока "API-запрос". То есть, сделать запрос во внутреннюю базу или отдельный сервис, получить ответ и его записать в доп. поле с помощью блока "Запись поля"


Пример использования блока "Запись поля":

Блок "Шаблонизируемое меню"

Этот блок используется показа меню, которое формируется с помощью API-запроса полностью.
То есть, мы не знаем, сколько пунктов будет в этом меню, какие данные в нем будут содержаться.
Оно формируется сразу для конкретного пользователя в конкретный момент чат-карты на основании данных с ответа API-запроса.

Логика работы блока "Шаблонизируемое меню":
Блок "Шаблонизируемое меню" используется после блока "API-запрос" и использует ответ на запрос для формирования меню.

То есть, схема работы "Шаблонизированного меню" выглядит примерно так:
Примеры использования блока "Шаблонизируемое меню":
- вывести индивидуальные предложения и акции для конкретного клиента
- вывести список ближайщих адресов розничной сети в виде меню

Элементы блока "Шаблонизируемое меню":
Название – видите только вы, назовите так, чтобы было понятно о чем это
Описание – видите только вы, детализация названия блока, необязательный элемент
Сообщение – что мы просим пользователя выбрать в этом меню, аналогично обычному меню.
Например, "Выберите блишайший магазин"
Путь в last_api_response до массива – нужно указать путь до списка с вариантам (last_api_response).
В путь можно вообще ничего не указывать, если last_api_response с нулевой вложенностью, то есть просто [{"label": "кнопка1", "value": "1"}, {"label": "кнопка2", "value": "2"}]
Это необязательное поле
Ключ, по которому достается текст кнопки – как подписана переменная, в которой у нас будет название кнопки. В ответе [{"label": "кнопка1", "value": "1"}, {"label": "кнопка2", "value": "2"}] название кнопки будет подписано как label
Ключ, по которому достается значение – как подписана переменная, в которой будет храниться значение выбора подписчика. В ответе [{"label": "кнопка1", "value": "1"}, {"label": "кнопка2", "value": "2"}] название значения будет подписано как value
Поле подписчика для записи – в какое поле нам записывать значение, сам выбор клиента в меню.

То есть, при ответе API [{"label": "кнопка1", "value": "1"}, {"label": "кнопка2", "value": "2"}] подписчик увидит меню с кнопками кнопка1 и кнопка2 и после нажатия в выбранное поле подписчика для записи будет записано значение 1 или 2.

Покажем работу блока на примере с получением и вывода линий Московского метро по API в виде меню.
1) Блок 1. У нас есть API запрос, который по урл http://solutions.popmechanic.ru/common/metro/msk/
запрашивает список линий метро.
2) Блок 2: Шаблонизированное меню, которое этот список выводит.

Ответ на API-запрос выглядит так:
{"data": [
{"name": "Калининская (Жёлтая)", "value": "1"}, 
{"name": "Замоскворецкая (Зелёная)", "value": "2"}, 
{"name": "Калужско-Рижская (Оранжевая)", "value": "2"}, 
{"name": "Сокольническая (Красная)", "value": "4"}, 
{"name": "Арбатско-Покровская (Синяя)", "value": "5"}, 
{"name": "Филевская (Голубая)", "value": "6"}, 
{"name": "Серпуховско-Тимирязевская (Серая)", "value": "7"},
 {"name": "Таганско-Краснопресненская (Фиолетовая)", "value": "8"}, 
{"name": "Кольцевая (Коричневая)", "value": "9"},
 {"name": "Люблинско-Дмитровская (Салатовая)", "value": "10"}, 
{"name": "Каховская (Бирюзовая)", "value": "11"}, 
{"name": "Бутовская (Серо-голубая)", "value": "12"}, 
{"name": "Солнцевская (Жёлтая)", "value": "13"},
 {"name": "МЦК", "value": "14"},
 {"name": "Монорельс", "value": "15"}, 
{"name": "Большая кольцевая линия", "value": "16"},
 {"name": "Некрасовская (Розовая)", "value": "17"}, 
{"name": "МЦД - 1", "value": "18"}, 
{"name": "МЦД - 2", "value": "19"}]}
А настройки блока "Шаблонизированное меню" вот так, в соотвествии с ответом API:
То есть, в примере выше подписчику покажется меню с 19 кнопками. При выборе "Некрасовская (Розовая)" подписчику в доп. поле "Линия метро" будет записано значение 17.
Как сделать разные следующие блоки для разных пунктов Шаблонизированного меню?
Если в стандартном блоке "Отправка меню" у нас есть разные точки выхода для разных пунктов меню, то тут мы можем только записать выбор в доп. поле.
Потому как не знаем до запроса, сколько этих пунктов меню может быть.
То есть, если вам нужно с Шаблонизированного меню сделать разные точки выхода, то запишите разные значения в доп. поле.
Следующим поставьте Условный блок и задайте фильтрацию по этому доп. полю.




Вам была полезна эта статья?