В LeadBack предусмотрен вариант интеграции через настройку исходящего webhook. Это позволяет получать данные из сервиса (обратные звонки и чаты) в реальном времени. Информация о том что заказан обратный звонок будет передена на ваш URL-обработчик (он же webhook) в момент когда звонок состоится. Тоже самое относится и к информации по чатам на сайте.
Этот механизм удобно использовать для интеграции с внешней системой (например CRM).
Настройка Webhook
Для настройки вебхука нужно зайти в профиль нужного аккаунта LeadBack и найти подраздел API. В поле URL-адрес обработчика указать адрес куда будут отправляться события.
Обратите внимание, чтобы настройки вебхук сохранились, адрес вы должны указать действующий адрес URL-обработчика. В момент сохранения, адрес проверяется на доступность (отправляется тестовый http-запрос). Если ваш обработчик вернет http-статус отличный от 200, настройки не будут сохранены.
Безопасность при использовании Webhook
Чтобы вы могли однозначно понимать что запрос на обработчик пришел от Leadback, используйте секретный параметр в URL (пример URL-обработчика с секретным параметром: https://myserver.com/webhook/leaback.php?key=WsETKhVTeNpiF4uNy2KfDYjMy). В коде обработчика вы будете проверять параметр key на соответствие заданному вами значению и если значение верное, то запрос на обработчик пришел от LeadBack.
Для обеспечения дополнительной безопастности (от перехвата данных) мы рекомендуем использовать https адрес (для этого у вас на сервере должен быть настроен валидный SSL-сертификат для домена).
Типы передаваемых событий
- новый обратный звонок
- новый диалог в онлайн чате (с оператором или ботом)
- проверка вебхук
Структура данных
Для всех событий данные передаются в виде JSON объекта методом POST в поле payload. Ниже показан пример получения данных для php:
$payload = json_decode($_POST['payload'], true);
Для всех событий JSON-объект имеет единую структуру с 2 полями данных:
- event_type — тип события. Доступны значения:
- pre_call — предварительные данные о новом обратном звонке;
- call — принят или пропущен обратный звонок;
- chat_dialog — состоялся диалог в чате с оператором;
- bot_dialog — состоялся диалог в чате с ботом;
- check_webhook — проверка доступности webhook;
- data — данные по событию.
Новый обратный звонок
Событие срабатывает перед запуском дозвона (event_type=pre_call) и когда был принят или пропущен обратный звонок с сайта (event_type=call).
В данных события доступны следующие поля:
Поле | Тип | Описание |
---|---|---|
id_call | int | ID звонка |
user_id | int | ID клиента |
widget_id | int | ID виджета |
date_create | datetime | Дата и время создания заявки на звонок |
date_update | datetime | Дата и время последнего обновления информации о звонке |
callback_phone | string | Номер телефона заказавшего обратный звонок |
operator_phone | string | Номер телефона сотрудника который принял звонок |
site | string | Домен сайта на котором заказан обратный звонок |
user_tariff | string | Тариф клиента |
tariffed_minutes | int | Потрачено минут связи с баланса аккаунта |
duration | int | Продолжительность разговора в секундах |
record_url | string | Ссылка на запись разговора |
callback_answer | string | Заказавший звонок ответил на него (no - нет, yes - да) |
visit_uuid | string | ID посетителя |
visit_id | string | ID визита |
visit_ip | string | IP заказавшего обратный звонок |
visit_source | string | Источник звонка |
delayed_time | datetime | Дата и время на которое перенесен звонок (если звонок заказан в не рабочее время) |
status | string | Статус звонка (complete - принят, failed - пропущен) |
call_time | datetime | Дата и время когда состоялся звонок |
visit_data | object | Полная информация о источнике звонка |
visit_profile | object | Данные посетителя если были заполнены в форма онлайн чата (имя, email и телефон) |
Информация о источнике звонка visit_data имеет следующие данные (поля для visit_data идентичны для всех типов событий):
Поле | Тип | Описание |
---|---|---|
visit_id | string | ID визита |
date_visit | datetime | Дата и время визита |
visit_source | string | Источник звонка (значения: direct, internal, search, social, utm, cpc, email, unknown) |
referer_url | string | Адрес источника визита |
page_url | string | Страница входа |
call_url | string | Страница звонка |
ga_cid | string | Идентификатор клиента для Google Analytics (Client ID) |
roistat_visit | string | Roistat номер визита (промокод), передается если на сайте используется код сервиса Roistat |
visit_ip | string | IP посетителя |
visit_ua | string | Браузер посетителя (UserAgent) |
utm_source | string | UTM-метка source (для visit_source=utm или cpc) |
utm_medium | string | UTM-метка medium (для visit_source=utm или cpc) |
utm_campaign | string | UTM-метка campaign (для visit_source=utm или cpc) |
utm_term | string | UTM-метка term (для visit_source=utm или cpc) |
utm_content | string | UTM-метка content (для visit_source=utm или cpc) |
search_engine | string | Поисковая система для visit_source=search или cpc (значения: google, yandex, go.mail.ru, bing.com, yahoo.com, about.com, aol.com, ask.com, globososo.com, rambler.ru, tut.by, nigma.ru) |
search_text | string | Поисковая фраза |
search_href | string | Ссылка на поисковую выдачу для фразы |
Пример JSON данных для обратного звонка:
{
"event_type": "call",
"data": {
"id_call": "402078",
"user_id": "1",
"widget_id": "4475",
"date_create": "2017-04-19 13:16:00",
"date_update": "2017-04-19 13:16:18",
"callback_phone": "79000000000",
"operator_phone": "79000000001",
"site": "site.com",
"user_tariff": "personal",
"tariffed_minutes": 1,
"duration": 7,
"record_url": "http:\/\/www-nl-01-75.leadback.ru\/records\/2017\/04\/19\/68b1e7d1a2c2551f.3879783.23452.mp3?record_id=7672382",
"callback_answer": "no",
"visit_uuid": "f6be3906-1d3a-4372-8c63-1e517e518450",
"visit_id": "a8509ba4-5b91-3889-9544-e3886da25f35",
"visit_ip": "31.132.152.137",
"visit_source": "direct",
"delayed_time": null,
"status": "complete",
"call_time": "2017-04-19 13:16:00",
"visit_data": {
"visit_id": "a8509ba4-5b91-3889-9544-e3886da25f35",
"date_visit": "2017-04-19 13:15:52",
"visit_source": "direct",
"referer_url": "",
"page_url": "https:\/\/site.com\/",
"call_url": "https:\/\/site.com\/",
"ga_cid": "781661464.1505303250",
"roistat_visit": "14525",
"visit_ip": "31.132.152.137",
"visit_ua": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\/602.4.8 (KHTML, like Gecko) Version\/10.0.3 Safari\/602.4.8"
},
"visit_profile": {
"name": "Денис",
"email": "mail@mail.ru",
"phone": "79000000000"
}
}
}
Новый диалог в чате с оператором
Отправляется когда завершится диалог в чате с вашим онлайн оператором.
В данных события доступны следующие поля:
Поле | Тип | Описание |
---|---|---|
widget_id | int | ID виджета |
user_id | int | ID клиента |
dialog_id | string | ID диалога |
chat_log | array | Сообщения переписки посетителя с оператором |
operator | object | Информация о операторе который вел диалог с посетителем |
visit_data | object | Полная информация о источнике визита посетителя |
visit_profile | object | Данные посетителя если были заполнены в форма онлайн чата (имя, email и телефон) |
Данные оператора в поле operator:
Поле | Тип | Описание |
---|---|---|
id_operator | int | ID оператора |
operator_jid | string | Логин оператора |
operator_name | string | Имя оператора |
avatar_type | string | Тип аватарки (custom, standart) |
avatar_url | string | Адрес на аватарку оператора |
История переписки в поле chat_log это массив объектов с полями:
Поле | Тип | Описание |
---|---|---|
id_message | int | ID сообщения |
date_create | datetime | Дата и время сообщения |
message_from | string | От кого сообщение |
message_to | string | Кому сообщение |
message_type | string | Тип сообщения (visitor, operator) |
message | string | Текст сообщения |
answer_time | int | Время ответа оператора на последние сообщение посетителя в секундах (для message_type=operator). |
Поля visit_data и profile_data аналогичны как для события новый обратный звонок.
Пример JSON данных диалога с оператором:
{
"event_type": "chat_dialog",
"data": {
"widget_id": "4475",
"user_id": "1",
"dialog_id": "1cb2cc5ceccb594800efce6eab2d3267",
"chat_log": [{
"id_message": "9379037",
"date_create": "2017-03-21 14:47:17",
"message_from": "site.com_2bl1x@u02.cloudim.ru",
"message_to": "abc123@cloudim.ru",
"message_type": "visitor",
"message": "Привет!",
"answer_time": null
}, {
"id_message": "9379040",
"date_create": "2017-03-21 14:47:33",
"message_from": "abc123@cloudim.ru",
"message_to": "site.com_2bl1x@u02.cloudim.ru",
"message_type": "operator",
"message": "Здравствуйте! Чем могу помочь?",
"answer_time": "16"
}, {
"id_message": "9379042",
"date_create": "2017-03-21 14:47:37",
"message_from": "site.com_2bl1x@u02.cloudim.ru",
"message_to": "fu4jaf@cloudim.ru",
"message_type": "visitor",
"message": "Просто тестирую. Спасибо!",
"answer_time": null
}],
"operator": {
"id_operator": "2",
"operator_jid": "abc123@cloudim.ru",
"operator_name": "Иван",
"avatar_type": "custom",
"avatar_url": "https:\/\/leadback.ru\/images\/uploads\/avatars\/1_f7d1eff6a0b523dde25912f113e82932_1464330572.png"
},
"visit_data": {
"visit_id": "bba5c45b-0b09-3bf6-9597-e93126db634e",
"date_visit": "2017-04-19 12:06:36",
"referer_url": "",
"page_url": "https:\/\/site.com\/",
"call_url": "",
"ga_cid": "781661464.1505303250",
"roistat_visit": "14525",
"visit_ip": "31.132.152.137",
"visit_ua": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/57.0.2987.133 Safari\/537.36",
"visit_source": "direct"
},
"visit_profile": {
"name": "Денис",
"email": "mail@mail.ru",
"phone": ""
}
}
}
Новый диалог в чате с ботом
Отправляется когда завершится диалог в чате с ботом.
В данных события доступны следующие поля:
Поле | Тип | Описание |
---|---|---|
widget_id | int | ID виджета |
user_id | int | ID клиента |
dialog_id | string | ID диалога |
chat_log | array | Сообщения переписки с посетителя и бота |
visit_data | object | Полная информация о источнике визита посетителя |
visit_profile | object | Данные посетителя если были заполнены в форма онлайн чата (имя, email и телефон) |
История переписки в поле chat_log это массив объектов с полями:
Поле | Тип | Описание |
---|---|---|
id_message | int | ID сообщения |
date_create | datetime | Дата и время сообщения |
message_type | string | Тип сообщения (visitor, bot) |
message | string | Текст сообщения |
Поля visit_data и profile_data аналогичны как для события новый обратный звонок.
Пример JSON данных диалога с ботом:
{
"event_type": "bot_dialog",
"data": {
"widget_id": "9375",
"user_id": "1",
"dialog_id": "6c0f71f7-d310-321e-87b2-3877a20a6d26",
"chat_log": [{
"id_message": "132374",
"date_create": "2017-04-19 13:49:36",
"message": "Здравствуйте!",
"message_type": "bot"
}, {
"id_message": "132375",
"date_create": "2017-04-19 13:49:42",
"message": "Вас что то заинтересовало?",
"message_type": "bot"
}, {
"id_message": "132376",
"date_create": "2017-04-19 13:49:49",
"message": "Напишите мне если будут вопросы...",
"message_type": "bot"
}, {
"id_message": "132382",
"date_create": "2017-04-19 13:49:55",
"message": "Спасибо! Есть вопрос по доставке",
"message_type": "visitor"
}, {
"id_message": "132385",
"date_create": "2017-04-19 13:50:01",
"message": "Давайте мы перезвоним вам и все расскажем",
"message_type": "bot"
}, {
"id_message": "132386",
"date_create": "2017-04-19 13:50:07",
"message": "Напишите мне свой телефон.",
"message_type": "bot"
}],
"visit_data": {
"visit_id": "6c0f71f7-d310-321e-87b2-3877a20a6d26",
"date_visit": "2017-04-19 13:49:17",
"referer_url": "",
"page_url": "http:\/\/site.com\/?utm_source=roem&utm_medium=banner&utm_campaign=demo",
"call_url": "",
"ga_cid": "781661464.1505303250",
"roistat_visit": "14525",
"visit_ip": "31.132.152.137",
"visit_ua": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/57.0.2987.133 Safari\/537.36",
"visit_source": "utm",
"utm_source": "roem",
"utm_medium": "banner",
"utm_campaign": "demo",
"utm_term": "",
"utm_content": ""
},
"visit_profile": {
"name": "",
"email": "",
"phone": "79000000000"
}
}
}
Проверка вебхук адреса
Тестовый запрос. Отправляется во время сохранения адреса webhook адреса, для проверки его доступности.
{
"event_type": "check_webhook",
"data": null
}