Salesbot

Оглавление

Начало работы с Salesbot

Salesbot – это бот, который можно запрограммировать на выполнение определенных действий. Он помогает получать от пользователей данные через мессенджеры (Telegram, Facebook Messenger, VK, Viber).

Для начала работы вам необходимо подключить интеграцию с чатами в левой колонке Digital воронки. Инструкцию для каждого из мессенджеров вы найдете в окне настроек. После подключения интеграции с чатами вы можете активировать Salesbot для обработки входящих новых чатов, а также настроить ботов на определенные статусы.

Подключение Salesbot

Salesbot можно подключить двумя способами:
1) Раздел "Сделки" – "Настроить" – выбираем этап – "Добавить триггер" – выбираем "Salesbot"

Далее выбираем "Создать нового бота". При открытии модального окна можно выбрать типовой шаблон или создать нового бота.

2) Раздел "Настройки"- вкладка "Чаты и мессенджеры" – "Список Salesbot" – "Создать нового бота или импортировать"

При открытии модального окна с шагами Salesbota, чтобы посмотреть код бота, можно нажать "Показать код"

Внимание! Сделки попавшие в статус до появления действия в Digital воронке будут проигнорированы.

Подключение интеграции к Salesbot

Раздел "Сделки" – "Настроить" – в левой колонке нажимаем "Добавить" – в появившемся окне ищем "Виджеты" – добавляем нужный виджет. Больше информации об интеграции виджета в Salesbot можно прочитать здесь

Язык 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 воронки.

Обработчик ошибок Salesbot

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

Пример

{
  "0": {
    "question": [
      ...
    ],
    "answer": [
      ...
    ]
  },
  "error": [
    {
      "handler": "action",
      "params": {
        "name": "change_status",
        "params": {
          "value": 142
        }
      }
    }
  ]
}

Обработчики Salesbot

Код Описание
show Отправляет сообщение с текстом
buttons Обработка ответа, полученного от кнопок из мессенджеров (VK не поддерживает отображение кнопок)
action Действие
meta Обработка мета-данных
condition Условие
validations Проверка
preset Обрабатывает данные по определенному алгоритму
goto Переход сценария к определенному шагу
wait_answer Ожидание ответа
find Поиск
filter Фильтрация
send_internal Отправить внутреннее сообщение
widget_request Отправка WebHook
stop Действие при завершении бота

Обработчик show

Внимание! Данный обработчик принимает неразобранное, в случае, если настроен в 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

Обработчик buttons предназначен для вставки в логический блок ответа и позволяет обрабатывать ответ с отправленных кнопок или ответ по точному совпадению

Пример

{
  "handler": "buttons",
  "params": [
    {
      "value": "Личное присутствие",
      "params": [
        {
          "handler": "...",
          "params": {
            ...
          }
        }
      ]
    },
    {
      "value": "Онлайн",
      "params": [
        {
          "handler": "...",
          "params": {
            ...
          }
        }
      ]
    }
  ]
}

Обработчик buttons ожидает на вход в параметры массив объектов, в которых можно вызвать любой из обработчиков, указанных на этой странице

Обработчик goto

Обработчик goto позволяет перейти к нужному шагу в сценарию, например если вам нужно циклично выполнять какие то действия. Обращаем внимание, что отсчет этапов ведется с 0.

Пример

{
  "handler": "goto",
  "params": {
    "type": "question",
    "step": 3
  }
}
Параметр Тип Описание
type string В какой блок будет совершен переход. Возможные значения "question", "answer" и "finish"
step int На какой шаг бота будет совершен переход

Обработчик wait_answer

Используется для ожидания ответа от пользователя на заданный вопрос. Он позволяет задать вопрос пользователю и дождаться ответа перед тем, как продолжить выполнение дальнейших действий.

Пример

{
  "handler": "wait_answer",
  "params": {
    "type": "question",
    "step": 2
  }
}
Параметр Тип Описание
type string В какой блок будет совершен переход. Возможные значения "question" и "answer"
step int На какой шаг бота будет совершен переход

Обработчик find

Обработчик 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

Обработчик 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

Обработчик 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

Обработчик 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

Действие unsorted позволяет принять или отклонить неразобранное

Пример

{
  "handler": "action",
  "params": {
    "name": "unsorted",
    "params": {
      "value": "accept"
    }
  }
}, {
  "handler": "action",
  "params": {
    "name": "unsorted",
    "params": {
      "value": "decline"
    }
  }
}
Параметр Тип Описание
value string accept/decline для принятия/отклонения

Действие change_status

Действие change_status позволяет сменить статус сделки

Пример

{
  "handler": "action",
  "params": {
    "name": "change_status",
    "params": {
      "value": 142
    }
  }
}
Параметр Тип Описание
value int id статуса, в который будет переведена сделка
entity int не обязательный параметр, может быть double, если перед этим использовалась функция find, тогда статус изменится у сделки найденного конаткта, если она есть

Действие set_tag

Действие 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

Действие 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

Действие 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

Действие 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

Действие 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

Действие 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

Действие 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

Действие add_linked_company Добавит компания привязанную к сделке и контакту

Пример

{
  "handler": "action",
  "params": {
    "name": "add_linked_company",
    "params": {
      "name": "{{message_text}}"
    }
  }
}
Параметр Тип Описание
name string Название компании, могут использоваться маркеры из блока SHOW

Действие add_note

Действие 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

Действие 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 предназначен для обработки дополнительных данных, которые передаются при запуске чата

Подробней о передаче meta-данных читайте в документации мессенджеров:

Пример

{
  "handler": "meta",
  "params": {
    "delimiter": "-",
    "values": [
      "lead.tags",
      "lead.custom_fields.123",
      "lead.custom_fields.124",
      "lead.tags"
    ]
  }
}
Параметр Тип Описание
delimiter string Символ, по которому будет разделен входящий контент на элементы
values array Массив значений, в которые будут записаны элементы входящей информации. Значения можно записать в теги или поля сделки

Обработчик condition

Обработчик 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

Обработчик 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 При успешной проверке, массив обработчиков
Условие simple

Простое условие проверки на равно или не равно

Пример
{
  "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
Условие length

Проверка на длину строки

Пример
{
  "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

Проверка, содержит ли строка номер телефона или 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 или телефон
Условие regex

Проверка, содержит ли строка регулярное выражение

Пример
{
  "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 не содержит указанное регулярное выражение
Условие range_numbers

Проверка, содержит ли строка число в диапазоне

Пример
{
  "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

Обработчик preset предназначен для обработки входящих сообщений по предустановленным шаблонам

Параметр Тип Описание
name string Название обработчика
params array Параметры обработчика

Обработчик widget_request

Обработчик 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’а

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

Пресет 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

Пресет contacts.get_base_info позволяет получить информацию, данный пресет не задает дополнительных вопросов

Пример

{
  "handler": "preset",
  "params": {
    "name": "contacts.get_base_info"
  }
}

Обработчик stop

Обработчик 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": "Спасибо, что так высоко оценили наш сервис!"
              }
            }
          ]
        }
      }
    ]
  }
]