Salesbot – это бот, который можно запрограммировать на выполнение определенных действий. Он помогает получать от пользователей данные через мессенджеры (Telegram, Facebook Messenger, VK, Viber).
Для начала работы вам необходимо подключить интеграцию с чатами в левой колонке Digital воронки. Инструкцию для каждого из мессенджеров вы найдете в окне настроек. После подключения интеграции с чатами вы можете активировать Salesbot для обработки входящих новых чатов, а также настроить ботов на определенные статусы.
Salesbot можно подключить двумя способами: 1) Раздел “Сделки” – “Настроить” – выбираем этап – “Добавить триггер” – выбираем “Salesbot”
Далее выбираем “Создать нового бота”. При открытии модального окна можно выбрать типовой шаблон или создать нового бота.
2) Раздел “Настройки”- вкладка “Чаты и мессенджеры” – “Список Salesbot” – “Создать нового бота или импортировать”
При открытии модального окна с шагами Salesbota, чтобы посмотреть код бота, можно нажать “Показать код”
Внимание! Сделки попавшие в статус до появления действия в Digital воронке будут проигнорированы.
Раздел “Сделки” – “Настроить” – в левой колонке нажимаем “Добавить” – в появившемся окне ищем “Виджеты” – добавляем нужный виджет. Больше информации об интеграции виджета в Salesbot можно прочитать здесь
Языком управления Salesbot является структурированный JSON объект с определенными ключами. Пример ниже задаст вопрос “Сообщите, пожалуйста, ваш номер телефона и e-mail” и проставит тег сделке Salesbot. После ответа пользователя он провалидирует данные и ответит одним из указанных сообщений. Подробней про пресеты читайте в следующем разделе.
[
{
"question": [
{
"handler": "show",
"params": {
"type": "text",
"value": "Сообщите,пожалуйста, вашномер телефона иe-mail"
}
},
{
"handler": "action",
"params": {
"name": "set_tag",
"params": {
"type": 2,
"value": "salesbot"
}
}
}
],
"answer": [
{
"handler": "preset",
"params": {
"name": "contacts.validate_base_info",
"params": {
"empty_email": "Пришлите,пожалуйста, вашe-mail",
"empty_phone": "Пришлите,пожалуйста, вашномер телефона",
"invalid_phone": "Нам кажется, что вномере телефонаошибка",
"success": "Спасибо"
}
}
}
]
}
]
В объекте должен быть ключ question, answer или finish. Данные в объекте question отвечают за действия, которые будут происходить при отправке сообщения пользователю. Данные в объекте answer отвечают за действия, которые будут происходить при ответе пользователя. Данные в объекте finish отвечают за действия, которые будут происходить при завершении бота.
Ключей question, answer или finish может быть более одного. Однако, существует ограничение на размер JSON, не более 64Кб.
В объекте question, answer и finish должны находится обработчки. Обработчиком является объект с ключами handler и params.
Перед добавлением JSON объекта в бота, проверьте его на валидность. Также валидный объект можно получить, используя PHP. Вам необходимо создать массив Salesbot, а затем применить функцию json_encode c флагами JSON_PRETTY_PRINT и JSON_UNESCAPED_UNICODE.
$bot_text = 'Привет мир!';
$salesbot = [
[
'question' =>
[
[
'handler' =>
'show',
'params' => [
'type' => 'text',
'value' => $bot_text,
],
],
],
'answer' =>
[
[
'handler' =>
'preset',
'params' => [
'name' =>
'contacts.get_base_info',
],
],
],
],
];
echo json_encode($salesbot, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
Результатом выполнения кода выше будет валидный JSON объект, готовый для вставки в Salesbot’а Digital воронки.
Если сообщение от Бота не может быть доставлено клиенту, например когда клиент заблокировал сообщения из этого чата. Бот может обработать ошибку, и выполнить какие либо обработчики.
{
"0": {
"question": [
...
],
"answer": [
...
]
},
"error": [
{
"handler": "action",
"params": {
"name": "change_status",
"params": {
"value": 142
}
}
}
]
}
Код | Описание |
---|---|
show | Отправляет сообщение с текстом |
buttons | Обработка ответа, полученного от кнопок из мессенджеров (VK не поддерживает отображение кнопок) |
action | Действие |
meta | Обработка мета-данных |
condition | Условие |
validations | Проверка |
preset | Обрабатывает данные по определенному алгоритму |
goto | Переход сценария к определенному шагу |
wait_answer | Ожидание ответа |
find | Поиск |
filter | Фильтрация |
send_internal | Отправить внутреннее сообщение |
widget_request | Отправка WebHook |
stop | Действие при завершении бота |
Внимание! Данный обработчик принимает неразобранное, в случае, если настроен в Salesbot’е входящих заявок.
Обработчик show отправляет сообщение или кнопки в чат с клиентом Любой отправляемый текст на данный момент поддерживает следующие элементы разметки:
Маркер | Описание |
---|---|
{{contact.name}} , {{name}} |
имя контакта |
{{lead.id}} |
id сделки |
{{contact.id}} |
id контакта |
{{customer.id}} |
id покупателя |
{{origin}} |
источник сделки (telegram, vk, viber, facebook) |
{{lead.source_id}} |
id источника сделки |
{{message_text}} |
полученное сообщение клиента в логическом блоке ответа |
{{lead.cf.#custom_field_id#}} , {{customer.cf.#custom_field_id#}} , {{contact.cf.#custom_field_id#}} , {{company.cf.#custom_field_id#}} |
значение кастомного поля сущности, вместо #custom_field_id# подставьте id дополнительного поля |
{{rand}} |
случайная строка |
{{short_rand}} |
короткая случайная строка |
{{short_rand_num}} |
случайное число из диапазона 1111 – 9999 |
{{message_text.email}} |
email, если он есть в сообщении клиента |
{{message_text.phone}} |
телефон, если он есть в сообщении клиента |
{{regexp./([1-9]+) вещей/}} |
значение по регулярному выражению из ответа пользователя. Подставитcя значение из круглых скобок. Может быть использовано в блоке answer |
{{lead.price}} |
бюджет сделки |
{{current_date}} |
текущая дата |
{{lead.status_id}} |
id статуса сделки |
{{customer.groups_subscribers}} |
id групп подписанных на чат покупателя, к которому привязан контакт |
{{lead.groups_subscribers}} |
id групп подписанных на чат сделки, к которой привязан контакт |
{{customer.users_subscribers}} |
id пользователей подписанных на чат покупателя, к которому привязан контакт |
{{lead.users_subscribers}} |
id пользователей подписанных на чат сделки, к которой привязан контакт |
{{cf.talk.nps}} |
оценка диалога |
{{lead.responsible.id}} , {{customer.responsible.id}} , {{contact.responsible.id}} , {{company.responsible.id}} |
id ответственного за сущность пользователя |
{{lead.responsible.name}} , {{customer.responsible.name}} , {{contact.responsible.name}} , {{company.responsible.name}} |
имя ответственного за сущность пользователя |
{{lead.responsible.email}} , {{customer.responsible.email}} , {{contact.responsible.email}} , {{company.responsible.email}} |
email ответственного за сущность пользователя |
Для маркеров contact используется либо основной контакт сделки/покупателя, либо контакт с чатом, в котором ведется общение с клиентом.
Параметры обработчика для отправки текста
{
"handler": "show",
"params": {
"type": "text",
"value": "Сообщите, пожалуйста, ваш номер телефона и e-mail",
"quick_replies": [
"user_phone_number",
"user_email"
]
}
}
Параметр | Тип | Описание |
---|---|---|
type | text | Отправка текста или кнопок или кнопок со ссылками |
value | string | Текст, который будет отправлен пользователю |
quick_replies | array | Массив элементов (на данный момент доступны “user_phone_number” и “user_email”), отправляющий кнопки быстрых ответов. Доступно только для facebook – отображаются кнопки, содержащие информацию facebook аккаунта пользователя (телефон, email) |
Параметры обработчика для отправки кнопок
{
"handler": "show",
"params": {
"type": "buttons",
"value": "Выберите, пожалуйста, тип участия:",
"buttons": [
"Личное присутствие",
"Онлайн"
]
}
}
Параметр | Тип | Описание |
---|---|---|
type | text | Отправка текста или кнопок или кнопок со ссылками |
value | string | Текст, который будет отправлен пользователю (В Messenger текст длинее 80 символов будет обрезан) |
buttons | array | Массив, элементами которого являются тексты кнопок, которые будут отправленны |
accept_unsorted | bool | Установить в false, если не нужно разбирать неразобранное при первом ответе |
Параметры обработчика для отправки кнопок со ссылками на внешние ресурсы
{
"handler": "show",
"params": {
"type": "buttons_url",
"value": "Кнопки со ссылками",
"buttons": [
{
"text": "Яндекс",
"url": "https://yandex.ru"
},
{
"text": "Google",
"url": "https://google.ru"
}
]
}
}
Параметр | Тип | Описание |
---|---|---|
type | text | Отправка текста или кнопок или кнопок со ссылками |
value | string | Текст, который будет отправлен пользователю (В Messenger текст длиннее 80 символов будет обрезан) |
buttons | array | Массив, элементами которого являются тексты кнопок, которые будут отправлены |
Если вы хотите отправить ссылки на социальные сети и что бы произошла автосклейка, ссылки должны быть следующего формата:
Обработчик buttons предназначен для вставки в логический блок ответа и позволяет обрабатывать ответ с отправленных кнопок или ответ по точному совпадению
{
"handler": "buttons",
"params": [
{
"value": "Личное присутствие",
"params": [
{
"handler": "...",
"params": {
...
}
}
]
},
{
"value": "Онлайн",
"params": [
{
"handler": "...",
"params": {
...
}
}
]
}
]
}
Обработчик buttons ожидает на вход в параметры массив объектов, в которых можно вызвать любой из обработчиков, указанных на этой странице
Обработчик goto позволяет перейти к нужному шагу в сценарию, например если вам нужно циклично выполнять какие то действия. Обращаем внимание, что отсчет этапов ведется с 0.
{
"handler": "goto",
"params": {
"type": "question",
"step": 3
}
}
Параметр | Тип | Описание |
---|---|---|
type | string | В какой блок будет совершен переход. Возможные значения “question”, “answer” и “finish” |
step | int | На какой шаг бота будет совершен переход |
Используется для ожидания ответа от пользователя на заданный вопрос. Он позволяет задать вопрос пользователю и дождаться ответа перед тем, как продолжить выполнение дальнейших действий.
{
"handler": "wait_answer",
"params": {
"type": "question",
"step": 2
}
}
Параметр | Тип | Описание |
---|---|---|
type | string | В какой блок будет совершен переход. Возможные значения “question” и “answer” |
step | int | На какой шаг бота будет совершен переход |
Обработчик find позволяет найти сущность и использовать ее данные. Если найден элемент, можно использовать маркеры:
{{founded_id}}
– если найден элемент каталога
{{contact_double.*}}
– если найден дубль контакта, можно обратиться к его полям по аналогии с маркерами {{contact.*}}
из SHOW
{
"handler": "find",
"params": {
"type": "contact_double",
"params": {
"type": "name",
"actions": [
{
"handler": "show",
"params": {
"type": "buttons",
"value": "Это ваш номер {{contact_double.cf.3574}}?",
"buttons": [
"Да",
"Нет"
]
}
}
]
}
}
}
Параметр | Тип | Описание |
---|---|---|
type | string | contact_double – поиск дубля текущего контакта catalog_elements – поиск элемента каталога |
params | array | type – может быть name (поиск доступен по имени), actions – действия, которые надо выполнить если сущность была найдена |
value | string | Слово которое ищем, могут быть использованы маркеры из блока SHOW |
catalog_id | int | Id каталога – в котором ищем элементы |
Обработчик filter позволяет найти сущность и использовать ее данные. Если найден элемент, можно использовать в маркерах по кастомным полям external_lead и external_contact
{
"handler": "filter",
"params": {
"type": 2,
"value": "{{lead.cf.111}}",
"custom_fields_id": 222,
"actions": [
{
"handler": "action",
"params": {
"name": "set_custom_fields",
"params": {
"type": 1,
"value": "{{external_contact.cf.333}}",
"custom_fields_id": 444,
"enum": "WORK"
}
}
}
]
}
}
Параметр | Тип | Описание |
---|---|---|
type | int | Тип сущности по которой проихсодит фильтр: 1 – контакт, 2 – сделка, 12 – покупатель |
value | string | Слово по которому фильтруем, могут быть использованы маркеры из блока SHOW |
custom_fields_id | int | Id кастомного поля, по которому будет произведен фильтр |
Обработчик send_internal позволяет отправить внутреннее сообщение в чат сделки или покупателя.
Внимание! Если одновременно указаны group_id и user_id, то сообщение будет отправлено группе пользователей.
{
"handler": "send_internal",
"params": {
"entity_id": "{{customer.id}}",
"entity_type": 12,
"message": "Всем привет"
}
}
Параметр | Тип | Описание |
---|---|---|
entity_id | int | Id сущности, в которую будет отправлено сообщение. Могут быть использованы маркеры {{customer.id}} , {{lead.id}} |
entity_type | int | Тип сущности, в которую будет отправлено сообщение: 2 – сделка, 12 – покупатель |
message | string | Строка с сообщением |
group_id | int | Необязательный параметр, идентификатор группы пользователей, в которую необходимо отправить сообщение |
user_id | int | Необязательный параметр, идентификатор пользователя, которому необходимо отправить сообщение |
Обработчик action позволяет выполнить одно из возможных действий
Код | Описание |
---|---|
unsorted | Действия к неразобранному |
change_status | Смена статуса |
set_tag | Установка тега |
unset_tag | Удаление тега |
set_custom_fields | Установка значений полей сделки/контакта |
subscribe | Подписка пользователей на чат в сущности |
unsubscribe | Отписк пользователей от чата в сущности |
add_lead_contact | Добавление сделки и контакта, связанных между собой |
set_budget | Установка бюджета сделки |
add_linked_company | Добавление компании |
add_note | Добавление примечания |
link | Связывает элементы |
change_responsible_user | Меняет ответственного |
link_to_unsorted | Создаёт контакт из неразобранного и связывает его с сущностью |
Действие unsorted позволяет принять или отклонить неразобранное
{
"handler": "action",
"params": {
"name": "unsorted",
"params": {
"value": "accept"
}
}
}, {
"handler": "action",
"params": {
"name": "unsorted",
"params": {
"value": "decline"
}
}
}
Параметр | Тип | Описание |
---|---|---|
value | string | accept/decline для принятия/отклонения |
Действие change_status позволяет сменить статус сделки
{
"handler": "action",
"params": {
"name": "change_status",
"params": {
"value": 142
}
}
}
Параметр | Тип | Описание |
---|---|---|
value | int | id статуса, в который будет переведена сделка |
entity | int | не обязательный параметр, может быть double, если перед этим использовалась функция find, тогда статус изменится у сделки найденного конаткта, если она есть |
Действие set_tag установит сделке или контакту тег, имеет поддержку разметки {{origin}}
, которая проставит источник сделки
{
"handler": "action",
"params": {
"name": "set_tag",
"params": {
"type": 2,
"value": "Salesbot"
}
}
},
{
"handler": "action",
"params": {
"name": "set_tag",
"params": {
"type": 2,
"value": "{{origin}}"
}
}
}
Параметр | Тип | Описание |
---|---|---|
type | int | Тип сущности, которой будет установлен тег (1 – контакт, 2 – сделка) |
value | string | Название тега |
Действие unset_tag удалит тег у сделки или контакта
{
"handler": "action",
"params": {
"name": "unset_tag",
"params": {
"type": 2,
"value": "Salesbot"
}
}
}
get_base_info
Параметр | Тип | Описание |
---|---|---|
type | int | Тип сущности, у которой будет удален тег (1 – контакт, 2 – сделка) |
value | string, array | Название тега, который будет удален, для удаления нескольких тегов можно передать массив |
Действие set_custom_fields установит сделке или контакту значения кастомных полей. ID полей можно узнать в разделе Настройки->Поля или используя метод получения списка полей сущности В значение поля можно использовать маркеры описанные в разделе “Обработчик show”
{
"handler": "action",
"params": {
"name": "set_custom_fields",
"params": {
"type": 2,
"value": "Значение поля",
"custom_fields_id": 123,
"option": "add"
}
}
},
{
"handler": "action",
"params": {
"name": "set_custom_fields",
"params": {
"type": 2,
"value": "{{message_text}}",
"custom_fields_id": 987
}
}
},
{
"handler": "action",
"params": {
"name": "set_custom_fields",
"params": {
"type": "lead",
"value": "{{last_validation_result}}",
"custom_field": "{{cf.talk.nps}}"
}
}
}
Параметр | Тип | Описание |
---|---|---|
type | int | Тип сущности, которой будут заданы кастомные поля (1 – контакт, 2 – сделка) |
value | string | Значение поля, которое будет установлено, могут быть использованы маркеры из блока SHOW. После хэндлера validations допустимо использовать маркер {{last_validation_result}} , тогда в качестве значения будут использованны распознанные данные из последнего истинного условия. Например, если было использовано условие “содержит email”, то найденный email будет подставлен в качестве значения. |
custom_fields_id | int | id поля, в которое будет установлено значение |
custom_field | string | Идентификатор изменяемого поля, могут быть использованы: {{lead.price}} – бюджет сделки, {{lead.name}} – название сделки, {{contact.name}} – имя контакта, {{customer.next_price}} – сумма следующей покупки покупателя, {{cf.talk.nps}} – оценка текущего диалога |
calculated | bool | Нужно ли попытаться посчитать значение этого кастомного поля по формуле, например {{lead.cf.123}}*{{lead.cf.456}} |
option | string | Опция – “add” позволяет добавить значение к полю (типы поддерживаемых полей: телефон, email, мультисписок) |
Действие subscribe подпишет пользователей на чат
{
"handler": "action",
"params": {
"name": "subscribe",
"params": {
"type": "user",
"value": "{{lead.responsible_user_id}}"
}
}
}
Параметр | Тип | Описание |
---|---|---|
type | string | group, user |
value | int | ID группы пользователей или ID пользователя |
entity_type | int | Необязательный параметр, указывающий в чат какой сущности нужно привязать пользователей: 2 – сделка, 12 – покупатель. Если не указать, то по умолчанию entity_type = 2 |
Действие unsubscribe отпишет пользователей от чата
{
"handler": "action",
"params": {
"name": "unsubscribe",
"params": {
"type": "user",
"value": "{{lead.responsible_user_id}}"
}
}
}
Параметр | Тип | Описание |
---|---|---|
type | string | group, user, all (отписать всех) |
value | int | ID группы пользователей или ID пользователя (необязательный параметр, если передан тип all) |
entity_type | int | Необязательный параметр, указывающий от чата какой сущности нужно отвязать пользователей: 2 – сделка, 12 – покупатель. Если не указать, то по умолчанию entity_type = 2 |
Действие add_lead_contact добавит сделку и контакт и свяжет их между собой. Все поля сделки и контакта можно настроить. В значениях кастомных полей поддерживается разметка, такая же как в обработчике show. Так же поддерживается пресет, что бы контакт и сделка создавались только в случае, если от клиента поступило сообщение или телефон.
{
"handler": "action",
"params": {
"name": "add_lead_contact",
"params": {
"preset": "contacts.require_email_or_phone",
"lead": {
"name": "Lead name",
"status_id": 142,
"responsible_user_id": 123,
"price": 2000,
"tags": "",
"custom_fields": [
{
"id": 77744111,
"values": [
{
"value": "{{contact.name}}"
}
]
},
{
"id": 77744222,
"values": [
{
"value": "{{lead.cf.77744222}}"
}
]
}
]
},
"contact": {
"name": "Contactname",
"responsible_user_id": 123,
"tags": "",
"custom_fields": [
{
"id": 77744333,
"values": [
{
"value": "{{rand}}"
}
]
},
{
"id": 77744444,
"values": [
{
"value": "{{message_text.email}}",
"enum": "WORK"
}
]
},
{
"id": 77744555,
"values": [
{
"value": "{{message_text.phone}}",
"enum": "WORK"
}
]
}
]
}
}
}
}
Параметр | Тип | Описание |
---|---|---|
lead | object | Набор полей сделки |
contact | object | набор полей контакта |
preset | string | Не обязательный параметр. Поддерживается один пресет contacts.require_email_or_phone, который проверяет передан ли телефон или email в сообщении от клиента |
Действие set_budget установит бюджет для сделки
{
"handler": "action",
"params": {
"name": "set_budget",
"params": {
"value": "{{lead.cf.555123}}*{{lead.cf.555321}}"
}
}
}
Параметр | Тип | Описание |
---|---|---|
value | string | Число, которое будет записано в бюджет сделки. Так же поле может быть вычисляемым, в выражения можно подставлять любые маркеры из блока SHOW. Доступные операции: +, -, *, /, так же можно использовать скобки например: ({{lead.cf.555123}} + 1) * {{lead.cf.555321}} |
Действие add_linked_company Добавит компания привязанную к сделке и контакту
{
"handler": "action",
"params": {
"name": "add_linked_company",
"params": {
"name": "{{message_text}}"
}
}
}
Параметр | Тип | Описание |
---|---|---|
name | string | Название компании, могут использоваться маркеры из блока SHOW |
Действие add_note добавит примечание
{
"handler": "action",
"params": {
"name": "add_note",
"params": {
"element_type": 1,
"note_type": 4,
"text": "Текст примечания"
}
}
}
Параметр | Тип | Описание |
---|---|---|
element_type | int | Сущность, к которой будет прикрепленно примечание: 1 – контакт, 2 – сделка |
note_type | int | Тип примечания: 4 – обычное примечание 10 – Примечание входящего звонка 11 – Примечание исходящего звонка 102 – Примечание входящего смс сообщения 103 – Примечание исходящего смс сообщения 25 – Сервисное примечание |
text | string | Текст примечания, в нем могут быть использованы маркеры из блока SHOW |
Действие link Связывает элементы
{
"handler": "action",
"params": {
"name": "link",
"params": {
"from": 2,
"to": 11,
"to_id": "{{founded_id}}",
"to_catalog_id": 123
}
}
}
Параметр | Тип | Описание |
---|---|---|
from | int | Сущность, к которой будет производится прикрепление: 1 – контакт, 2 – сделка |
from_id | int | Не обязательный параметр. Id сущности, к которой будет производится прикрепление. Если не указан, то будет использован id текущей сущности. Можно использовать маркеры из раздела SHOW |
to | int | Сущность, которую нужно прикрепить прикрепеление: 1 – контакт, 2 – сделка, 11 – элемент каталога, 3 – компания |
to_id | string | Id элемента который нужно прикрепить, можно использовать маркеры из раздела SHOW |
to_catalog_id | int | Не обязательный параметр, id каталога – если привязывается элемент каталога |
quantity | string | Не обязательный параметр, количество элементов каталога, которое будет привязано к сущности. Можно использовать маркеры из раздела SHOW |
Действие change_responsible_user меняет ответственного у сделки или связанного с ней контакта
{
"handler": "action",
"params": {
"name": "change_responsible_user",
"params": {
"value": 123,
"type": 2
}
}
}
Параметр | Тип | Описание |
---|---|---|
value | int | id пользователя, которого нужно сделать ответственным |
type | int | Не обязательный параметр, тип сущности, у которой меняем ответственного: 1 – контакт, 2 – сделка, если не передан – по умолчанию – 2 |
Действие link_to_unsorted связывает чат из неразобранного с указанным контактом в сделке/покупателе. Если указанный контакт отсутствует в сделке/покупателе, то привязка не произойдёт. Если не указать contact_id, то в указанной сделке/покупателе создастся контакт.
{
"handler": "action",
"params": {
"name": "link_to_unsorted",
"params": {
"entity_type": 2,
"entity_id": "12345"
}
}
}
Параметр | Тип | Описание |
---|---|---|
entity_type | int | Тип сущности: 2 – сделка, 12 – покупатель |
entity_id | string | Id сущности к которой должен привязаться контакт. Можно использовать маркеры, например, если использовался обработчик filter, {{external_lead.id}} , {{external_customer.id}} |
contact_id | string | Не обязательный параметр. Id контакта к которому должен привязаться чат. Контакт должен находиться в указанной сделке. Можно использовать маркеры, например, если использовался обработчик filter, {{external_contact.id}} |
Обработчик meta предназначен для обработки дополнительных данных, которые передаются при запуске чата
Подробней о передаче meta-данных читайте в документации мессенджеров:
{
"handler": "meta",
"params": {
"delimiter": "-",
"values": [
"lead.tags",
"lead.custom_fields.123",
"lead.custom_fields.124",
"lead.tags"
]
}
}
Параметр | Тип | Описание |
---|---|---|
delimiter | string | Символ, по которому будет разделен входящий контент на элементы |
values | array | Массив значений, в которые будут записаны элементы входящей информации. Значения можно записать в теги или поля сделки |
Обработчик condition предназначен для создания логических условий
{
"handler": "condition",
"params": {
"term1": "lead.tags",
"term2": "telegram",
"operation": "=",
"result": [
{
"handler": "action",
"params": {
"name": "change_status",
"params": {
"value": 123
}
}
}
]
}
}
Параметры | Тип | Описание |
---|---|---|
term1 | string | Условие 1 может быть lead.tags – который возвращает список тегов, chat.origin – который возвращает источник откуда пришла заявка(vk, facebook, telegram, viber) любой обработчик из блока описанного в разделе SHOW, например {{contact.name}} |
term2 | string, object | Условие 2, для оператора range необходимо передать объект с параметрами, в ином случае строку либо маркеры из блока SHOW |
term2.from | int | Значение диапазона “от” |
term2.to | int | Значение диапазона “до” |
operation | string | Операторы сравнения (‘=’, ‘!=’), ‘in’, ‘not_in’, ‘in_range’ |
result | array | При успешном сравнении, массив обработчиков |
Оператор | Описание |
---|---|
in | Берёт строки из term1 и term2 , разбивает на значения по запятым и ищет вхождения значений из term2 в term1 . Если хотя бы одно совпадение есть, то будут выполнены обработчики result |
not_in | “не in “ |
in_range | Находит в term1 все целые числа, если хотя бы одно из этих чисел находится в диапазоне term2 , то будет выполнен массив обработчиков result |
Обработчик validations предназначен для создания логических условий
{
"handler": "validations",
"params": {
"logic": "and",
"conditions": [
{
"client_value": "{{message_text}}",
"type": "regex",
"condition_value": "/[0-9]+/",
"operation": "contains"
},
{
"client_value": "{{message_text}}",
"type": "simple",
"condition_value": "654",
"operation": "equal"
},
{
"client_value": "{{message_text}}",
"type": "range_numbers",
"condition_value": {
"from": 123,
"to": 321
},
"operation": "contains"
},
{
"client_value": "{{message_text}}",
"type": "email",
"condition_value": "",
"operation": "contains"
}
],
"result": [
{
"handler": "goto",
"params": {
"type": "question",
"step": 3
}
}
]
}
}
Параметры | Тип | Описание |
---|---|---|
logic | "and" , "or" |
Логика проверки условий, если указано “and”, то все условия должны быть истинными, если указано “or” – то хотя бы одно из условий. |
conditions | array | Список условий для проверки, описание ниже |
result | array | При успешной проверке, массив обработчиков |
Простое условие проверки на равно или не равно
{
"client_value": "{{message_text}}",
"type": "simple",
"condition_value": "654",
"operation": "equal"
}
Параметры | Тип | Описание |
---|---|---|
client_value | string | Проверяемым значением может быть обработчик из блока описанного в разделе SHOW, например {{contact.name}} . |
type | "simple" |
Тип условия, всегда “simple” |
condition_value | string | Текстом условия может быть обработчик из блока описанного в разделе SHOW, например {{contact.name}} , либо собственное значение |
operation | "equal" , "not_equal" |
Если выбран оператор “equal”, то условие будет истинным, если client_value равно condition_value. Если выбран оператор “not_equal”, то условие будет истинным, если client_value не равно condition_value |
Проверка на длину строки
{
"client_value": "{{message_text}}",
"type": "simple",
"condition_value": "321",
"operation": "length"
}
Параметры | Тип | Описание |
---|---|---|
client_value | string | Проверяемым значением может быть обработчик из блока описанного в разделе SHOW, например {{contact.name}} . |
type | "simple" |
Тип условия, всегда “simple” |
condition_value | string | Текстом условия может быть обработчик из блока описанного в разделе SHOW, например {{contact.name}} , либо собственное значение |
operation | "length" |
Условие будет истинным, если длина строки client_value будет равна condition_value |
Проверка, содержит ли строка номер телефона или email
{
"client_value": "{{message_text}}",
"type": "email",
"condition_value": "",
"operation": "contains"
}
Параметры | Тип | Описание |
---|---|---|
client_value | string | Проверяемым значением может быть обработчик из блока описанного в разделе SHOW, например {{contact.name}} |
type | "email" , "phone" |
Тип условия, может быть “email” для поиска email-а или “phone” для поиска номера телефона |
condition_value | "" |
Текст условия оставляем пустым |
operation | "contains" , "not_contains" |
Если выбран оператор “contains”, условие будет истинным, если client_value содержит email или телефон. Если выбран оператор “not_contains”, условие будет истинным, если client_value не содержит email или телефон |
Проверка, содержит ли строка регулярное выражение
{
"client_value": "{{message_text}}",
"type": "regex",
"condition_value": "/[0-9]+/",
"operation": "contains"
}
Параметры | Тип | Описание |
---|---|---|
client_value | string | Проверяемым значением может быть обработчик из блока описанного в разделе SHOW, например {{contact.name}} |
type | "regex" |
Тип условия, всегда “regex” |
condition_value | string | Текст условия |
operation | "contains" , "not_contains" |
Если выбран оператор “contains”, условие будет истинным, если client_value содержит указанное регулярное выражение. Если выбран оператор “not_contains”, условие будет истинным, если client_value не содержит указанное регулярное выражение |
Проверка, содержит ли строка число в диапазоне
{
"client_value": "{{message_text}}",
"type": "range_numbers",
"condition_value": {
"from": 123,
"to": 321
},
"operation": "contains"
}
Параметры | Тип | Описание |
---|---|---|
client_value | string | Проверяемым значением может быть обработчик из блока описанного в разделе SHOW, например {{contact.name}} |
type | "range_numbers" |
Тип условия, всегда “range_numbers” |
condition_value | object | Диапазон, на который проверяем все числа в client_value |
condition_value.from | string, number | значение диапазона “от”, можно указать обработчик из блока описанного в разделе SHOW, например {{lead.price}} , либо собственное значение |
condition_value.to | string, number | значение диапазона “до”, можно указать обработчик из блока описанного в разделе SHOW, например {{lead.price}} , либо собственное значение |
operation | "contains" , "not_contains" |
Если выбран оператор “contains”, условие будет истинным, если client_value содержит число в указанном диапазоне. Если выбран оператор “not_contains”, условие будет истинным, если client_value не содержит число в указанном диапазоне |
Обработчик preset предназначен для обработки входящих сообщений по предустановленным шаблонам
Параметр | Тип | Описание |
---|---|---|
name | string | Название обработчика |
params | array | Параметры обработчика |
Обработчик widget_request предназначен для отправки webhook на внешние адреса из Salesbot
{
"handler": "widget_request",
"params": {
"url": "https://example.com/endpoint",
"data": {
"contact": "{{contact.name}}",
"from": "widget"
}
}
}
Параметры | Тип | Описание |
---|---|---|
url | string | URL эндпоинта внешнего сервера |
data | array | Массив любых данных, содержащих строки и/или обработчики из блока описанного в разделе SHOW, например {{contact.name}} |
На эндпоинт придёт POST запрос, для отметки, что хук принят, вам необходимо ответить на него в течении 2 секунд с HTTP-кодом ответа 200.
{
"token": "JWT_TOKEN",
"data": [
"contact": "Имя контакта",
"from": "widget"
],
"return_url": "https://subdomain.amocrm.ru/api/v4/salesbot/321/continue/123"
}
JWT Token нужен для валидации данных присланных запросом, он подписывается секретным ключем клиента. Кроме базовых iss, aud, iat, nbf и exp полей в нем также присылаются доп поля.
Параметр | Описание |
---|---|
account_id | ID аккаунта, в котором был выполнен handler salesbot’а |
subdomain | Субдомен аккаунта, в котором был выполнен handler salesbot’а |
entity_type | Тип сущности, с которой работал бот (lead, contact, customer) |
entity_id | ID сущности, с которой работал бот |
Для возобновления работы бота смотрите необходимо сделать запрос с данными. Подробней о запросе тут. Текущий бот не продолжит работу, пока не получит запрос. Также вы не сможете продолжить выполнения бота, если уже будет запущен другой бот по сущности.
Пресет contacts.validate_base_info позволяет получить и проверить информацию от пользователя, а затем дозапросить недостающую
{
"handler": "preset",
"params": {
"name": "contacts.validate_base_info",
"params": {
"empty_email": "Пришлите, пожалуйста, ваш e-mail",
"empty_phone": "Пришлите, пожалуйста, ваш номер телефона",
"invalid_phone": "Нам кажется, что в номере телефона ошибка",
"success": "Спасибо",
"empty_all": "Пришлите, пожалуйста, ваш номер телефона и e-mail",
"empty_all": "Пришлите, пожалуйста, ваш номер телефона и e-mail",
"check_doubles": true,
"phone_doubles": "Данный номер телефона уже используется. Введите другой номер ",
"email_doubles": "Данный email уже используется. Введите другой email ",
"all_doubles": "Данный номер телефона и email уже используются. Введите другие контактные данные ",
"use_quick_replies": true
}
}
}
Параметр | Тип | Описание |
---|---|---|
empty_email | string | Сообщение при отсутсвии email у контакта |
empty_phone | string | Сообщение при отсутсвии телефона у контакта |
invalid_phone | string | Сообщение при получении невалидного телефона |
success | string | Сообщение после получения всех данных |
empty_all | string | Сообщение при отсутсвии всех данных |
check_doubles | bool | Параметр, отвечающий за включение поиска дублей контактов по email и номеру телефона. Если включен, то при нахождении дубля контакта, будут повторно запрошены контактные данные. true – включен, false или отсутствует – выключен. |
phone_doubles | string | Сообщение, которое отобразится, если найден дубль контакта по номеру телефона |
email_doubles | string | Сообщение, которое отобразится, если найден дубль контакта по email |
all_doubles | string | Сообщение, которое отобразится, если найдены дубли контакта по номеру телефона и email |
use_quick_replies | bool | Параметр, отправляющий при отсутствии email и/или телефона у контакта кнопки быстрых ответов. Доступно только для facebook – отображаются кнопки, содержащие информацию facebook аккаунта пользователя (телефон, email). Для включения необходимо задать значение true |
Пресет contacts.get_base_info позволяет получить информацию, данный пресет не задает дополнительных вопросов
{
"handler": "preset",
"params": {
"name": "contacts.get_base_info"
}
}
Обработчик stop предназначен для выполнения действий по завершению бота
{
"finish": [
{
"handler": "stop",
"params": {
"action": "talk-close"
}
},
{
"handler": "stop",
"params": {
"action": "salesbot-start",
"bot": 7049
}
}
]
}
Параметр | Тип | Описание |
---|---|---|
action | "talk-close" , "salesbot-start" |
Действие, которое необходимо выполнить. talk-close – завершить беседу. Если выполняется внутри бота NPS, то беседа будет закрыта, в противном случае – запустится NPS бот. salesbot-start – запустить другого бота |
bot | int | Параметр обязателен в случае, если в качестве action выбран “salesbot-start”. Идентификатор бота, который должен быть запущен |
Подписка группы пользователей на чат.
[
{
"question": [
{
"handler": "action",
"params": {
"name": "subscribe",
"params": {
"type": "group",
"value": 111
}
}
}
]
}
]
Перевод сделки в нужный статус.
[
{
"question": [
{
"handler": "action",
"params": {
"name": "change_status",
"params": {
"value": 142
}
}
}
]
}
]
Отправка клиенту любого текста.
[
{
"question": [
{
"handler": "show",
"params": {
"type": "text",
"value": "Здравствуйте"
}
}
]
}
]
Отправка сообщения с кнопками выбора.
[
{
"question": [
{
"handler": "show",
"params": {
"type": "buttons",
"value": "Выберите, пожалуйста, тип участия: ",
"buttons": [
"Личное присутствие",
"Онлайн"
]
}
}
],
"answer": [
{
"handler": "buttons",
"params": [
{
"regex": "/личное/iu",
"params": [
{
"handler": "action",
"params": {
"name": "set_custom_fields",
"params": {
"type": 1,
"value": "Личное присутствие",
"custom_fields_id": 4242
}
}
}
]
},
{
"regex": "/онлайн/iu",
"params": [
{
"handler": "action",
"params": {
"name": "set_custom_fields",
"params": {
"type": 1,
"value": "Онлайн",
"custom_fields_id": 4242
}
}
}
]
}
]
}
]
}
]
Установка тега для сделки.
[
{
"question": [
{
"handler": "action",
"params": {
"name": "set_tag",
"params": {
"type": 2,
"value": "salesbot"
}
}
}
]
}
]
Установка значения дополнительному полю.
[
{
"question": [
{
"handler": "action",
"params": {
"name": "set_custom_fields",
"params": {
"type": 2,
"custom_fields_id": 123,
"value": "Значение поля"
}
}
}
]
}
]
Сохранение метаданных в карточку сделки.
[
{
"question": [
{
"handler": "meta",
"params": {
"delimiter": "-",
"values": [
"lead.tags",
"lead.custom_fields.123",
"lead.custom_fields.124",
"lead.tags"
]
}
}
]
}
]
Запрос email и телефона, запись в карточку только из первого ответа.
[
{
"question": [
{
"handler": "show",
"params": {
"type": "text",
"value": "Сообщите, пожалуйста, ваш номер телефона и e-mail"
}
}
],
"answer": [
{
"handler": "preset",
"params": {
"name": "contacts.get_base_info"
}
}
]
}
]
Использование оператора ‘in’ в сравнении
[
{
"question": [
{
"handler": "condition",
"params": {
"term1": "{{customer.groups_subscribers}}",
"term2": "0,12345",
"operation": "in",
"result": [
{
"handler": "show",
"params": {
"type": "text",
"value": "Одна из двух групп подписана на чат в покупателе"
}
}
]
}
}
]
}
]
Использование оператора ‘in_range’ в сравнении
[
{
"question": [
{
"handler": "condition",
"params": {
"term1": "{{cf.talk.nps}}",
"term2": { "from": 7 },
"operation": "in_range",
"result": [
{
"handler": "show",
"params": {
"type": "text",
"value": "Спасибо, что так высоко оценили наш сервис!"
}
}
]
}
}
]
}
]