Бот API Jivo
Бот API позволяет подключать бот-платформы к любым диалогам в Jivo: чат на сайте, мессенджеры и социальные сети. При добавлении бота все диалоги будут сперва отправляться бот-провайдеру для обработки.
Если у вас есть свой собственный бот на любой платформе и вы хотели бы его подключить к нам, для получения идентификатора провайдера — напишите нам на info@jivo.ru с почты администратора вашего аккаунта Jivo.
Обмен данными
Инициатором обмена является Jivo, это происходит при входящем сообщении от клиента. Обмен событиями с бот-провайдером происходит c помощью механизма webhooks. Все события от Jivo отправляются на endpoint провайдера, в ответ провайдер отправляет события на endpoint Jivo.
Все события от Jivo к бот-провайдеру и обратно отправляются в виде HTTPS-запросов, методом POST в формате application/json. Timeout запроса составляет 3 секунды, количество повторных попыток равно 2, до тех пор, пока не будет получен штатный успешный ответ, иначе клиент переводится на оператора. Это дает 9 секунд на обновление ПО на сервере, чего хватает в большинстве случаев.
Также после отправки запроса от Jivo к бот-провайдеру запускается таймер в 15 секунд для формирования ответа. Если в течение этого времени не приходит событие BOT_MESSAGE, в диалог приглашается оператор.
Endpoint url бот-провайдера формируется на его усмотрение, endpoint Jivo формируется следующим образом: bot.jivosite.com/webhooks/{provider_id} , где provider_id уникальный идентификатор провайдера, выдается для каждого отдельно.
Коды ответа
Ниже в таблице приведен список возможных кодов ответа от Jivo и бот-провайдера:
Коды ответа | Описание |
200 OK | Успешный, штатный ответ. |
400 Bad Request | Неверный формат запроса. Необходимо проверить поля запроса на соответствие формату API |
401 Unauthorized | Ошибка авторизации |
403 Forbidden | Доступ запрещен |
404 Not Found | Неправильно сформирован endpoint |
405 Method Not Allowed | Данный метод или событие не поддерживается |
429 Too Many Request | Превышено кол-во запросов в единицу времени |
500 Internal Server Error | Ошибка обработки запроса |
502 Bad Gateway | Сервер перегружен |
503 Service Unavailable | Сервер недоступен |
504 Gateway Timeout | Не удалось спроксировать запрос |
В случае возникновения нештатной ситуации, в тело ответа рекомендуется передавать информацию об ошибке в следующем формате:
{
"error" :
{
"code": "<код ошибки>",
"message": "<human-readable сообщение ошибки>"
}
}
Коды ошибок
Код | Описание |
invalid_client | Ошибка аутентификации клиента по токену. Возвращается вместе с HTTP кодом 401 Unauthorized. |
unauthorized_client | Ошибка авторизации по средствам заголовка Authorization |
invalid_request | В запросе отсутствует обязательный параметр, либо используется неподдерживаемое значение параметра, содержится дубликат параметра, включено несколько наборов учетных данных, либо другие ошибки запроса. |
Аутентификация
Аутентификация клиента бот-провайдера, от которого идет обращение в API, осуществляется c помощью токена, который формируется на стороне бот-провайдера.
Вам нужно получить токен у бот-провайдера и указать его в настройках подключенного бот-оператора в Jivo. Все обращения от Jivo к бот-провайдеру и обратно происходят с использованием данного токена, который передается в URL запроса.
Токен бот-провайдера должен быть уникальным. Если использовать одинаковый токен для нескольких ботов, они не смогут быть аутентифицированы и не будут работать.
Пример:
POST https://bot-provider-endpoint.com/zhFZipzT:8560a55a9af37d68782b3234a84f344c592ab766
Content-Type: application/json
...
POST https://bot.jivosite.com/webhooks/Ee0CRkyDAp/zhFZipzT:8560a55a9af37d68782b3234a84f344c592ab766
Content-Type: application/json
...
Типы событий
\ \Тип сообщений | Направление Описание | |
CLIENT_MESSAGE | Jivo API → Bot-Provider | Событие о новом сообщение клиента, на которое бот-провайдеру надо предоставить варианты ответа |
BOT_MESSAGE | Bot-Provider → Jivo API | Ответ бота на сообщение клиента |
INVITE_AGENT | Bot-Provider → Jivo API | Перевод диалога на оператора, если у бота нет вариантов ответа |
AGENT_UNAVAILABLE | Jivo API → Bot-Provider | Событие о том, что в данный момент нет ни одного доступного оператора в сети, которые могли бы принять чат. |
CHAT_CLOSED | Jivo API → Bot-Provider | Событие о закрытии чата |
CLIENT_INFO | Bot-Provider → Jivo API | Событие с контактной информацией о клиенте |
INIT_RATE | Bot-Provider → Jivo API | Бот-провайдер запрашивает показ формы для оценки качества обслуживания в диалоге |
CLIENT_RATED | Jivo API → Bot-Provider | Клиент оставил оценку в форме, вызванной методом INIT_RATE |
CLIENT_MESSAGE
Кейс: бот-оператор подключен к каналу связи, клиент пишет сообщение, Jivo передает сообщение к бот-провайдеру, сообщение обрабатывается и возвращается ответ в зависимости от сценария.
Параметры события
Наименование | Тип | Описание |
id | String | Уникальный идентификатор события, используется для логирования и отладки |
client_id | String | Идентификатор пользователя, который пишет в один из каналов клиента Jivo. Уникальный в рамках аккаунта клиента |
chat_id | String | Идентификатор чата, в котором введется диалог пользователя и оператора. Уникальный в рамках аккаунта клиента |
message | Message | Сообщение клиента |
{
"id":"996344da-d8f4-11ec-9aaf-c5bde7170335",
"site_id":"1153381",
"client_id":"3209",
"chat_id":"4209",
"agents_online":true,
"sender":{"id":2108,"url":"https://testwebsite.ru/",
"has_contacts":false},
"message":{"type":"TEXT",
"text":"Текст сообщения посетителя",
"timestamp":1653135123},
"channel":{"id":"Qy4NGbfuDt",
"type":"widget"},
"event":"CLIENT_MESSAGE"
}
BOT_MESSAGE
Кейс: клиент пишет сообщение, Jivo передает сообщение к бот-провайдеру, сообщение обрабатывается, бот отвечает заготовленным сообщением, оно отправляется в чат посетителю.
Наименование | Тип | Описание |
id | String | Уникальный идентификатор события, используется для логирования и отладки |
client_id | String | Идентификатор пользователя, который пишет в один из каналов клиента Jivo. Уникальный в рамках аккаунта клиента |
chat_id | String | Идентификатор чата, в котором введется диалог пользователя и оператора. Уникальный в рамках аккаунта клиента |
message | Message | Сообщение клиента |
Варианты событий Бота
Тип сообщения | Описание |
TEXT | Простое, текстовое сообщение |
MARKDOWN | Текстовое сообщение в формате Markdown |
BUTTONS | Варианты ответа в виде кнопок |
Событие BOT_MESSAGE тип TEXT
Наименование | Тип | Описание |
Text | String | Текст сообщения |
timestamp | String | Временная метка создания сообщения, unix time |
Пример
{
"id":"996344da-d8f4-11ec-9aaf-c5bde7170335",
"event":"BOT_MESSAGE",
"message":
{"type":"TEXT",
"text":"Конечно, я готов вам помочь. Какой у вас вопрос?",
"timestamp":1653127681833},
"client_id":"3209","chat_id":"4209"
}
Событие BOT_MESSAGE тип BUTTONS
Наименование | Тип | Описание |
buttons | Array | Набор кнопок с заготовленными ответами, максимум 3 кнопки. |
title | String | Текстовый заголовок для кнопок |
text | String | Текстовый fallback для каналов связи, которые не поддерживают данный тип сообщений, иначе сообщение не будет отправлено клиенту. |
timestamp | String | Временная метка создания сообщения, unix time |
button.text | String | Текст заготовленного ответа |
button.id | String | Идентификатор заготовленного ответа |
{
"id":"996344da-d8f4-11ec-9aaf-c5bde7170335",
"event":"BOT_MESSAGE",
"message":{"type":"BUTTONS","text":"Добрый день!\nЧем я могу быть полезен?",
"timestamp":1653134682812,
"title":"Добрый день!\nЧем я могу быть полезен?","buttons":
[{"id":1,"text":"Когда доставят заказ /Отменить"},
{"id":2,"text":"Доставка, Примерка, Размеры"},
{"id":3,"text":"Возврат, Обмен"}]},
"client_id":"3209","chat_id":"4209"
}
Событие BOT_MESSAGE тип Markdown
В сообщениях поддерживается кодировка markdown в событиях "type": "MARKDOWN"
.
Пример
{
"id":"996344da-d8f4-11ec-9aaf-c5bde7170335",
"event":"BOT_MESSAGE",
"message":
{"type":"MARKDOWN",
"content": "Чтобы отключить **PUSH-уведомления** выполните действия описанные в [инструкции](https://site.com/page_url)",
"text": "Чтобы отключить PUSH-уведомления выполните действия описанные в инструкции https://site.com/page_url",
"timestamp":1653127681833},
"client_id":"2160","chat_id":"4209"
}
Событие CLIENT_INFO
Кейс: клиент пишет сообщение, Jivo проксирует сообщение к бот-провайдеру, сообщение обрабатывается, находятся (или запрашиваются) контакты клиента, бот отвечает заготовленным сообщением с контактными данными клиента. Они появляются в приложении Jivo, в правой части окна диалога, как если бы клиент заполнил форму контактов
Пример
{
"event": "CLIENT_INFO",
"id": "996344da-d8f4-11ec-9aaf-c5bde7170335",
"client_id":"3209",
"client": {
"email": "example@post.ru",
"phone": "71234567",
"name": "Ivan"
}
}
Событие INVITE_AGENT
Кейс: клиент пишет сообщение, Jivo передает сообщение к бот-провайдеру, сообщение обрабатывается, у бота нет заготовленного ответа, он переводит диалог на оператора.
Параметры события:
Наименование | Тип | Описание |
id | String | Уникальный идентификатор события, используется для логирования и отладки |
client_id | String | Идентификатор пользователя, который пишет в один из каналов клиента Jivo. Уникальный в рамках аккаунта клиента |
chat_id | String | Идентификатор чата, в котором введется диалог пользователя и оператора. Уникальный в рамках аккаунта клиента |
Пример
{
"id":"996344da-d8f4-11ec-9aaf-c5bde7170335",
"event":"INVITE_AGENT",
"client_id":"3209","chat_id":"4209"
}
Событие AGENT_UNAVAILABLE
Кейс: бот-провайдер переводит чат на оператора, но доступных операторов в сети нет. Тогда, по сценарию бота, он отправляет сообщение с просьбой оставить свои контактные данные.
Параметры события:
Наименование | Тип | Описание |
id | String | Уникальный идентификатор события, используется для логирования и отладки |
chat_id | String | Идентификатор чата, в котором введется диалог пользователя и оператора. Уникальный в рамках аккаунта клиента |
client_id | String | Идентификатор пользователя, который пишет в один из каналов клиента Jivo. Уникальный в рамках аккаунта клиента |
Пример:
{
event: "AGENT_UNAVAILABLE",
id:"996344da-d8f4-11ec-9aaf-c5bde7170335",
chat_id: "4209",
client_id: "3209"
}
Ограничение числа запросов
Так как бот-провайдер может сделать бесконечный цикл сообщений и ответов, а также начать присылать больше сообщений, чем требуется, в Jivo API есть ограничение на число запросов в час, которые можно принять от каждого бота. При достижении лимита при запросе Bot Provider -> Jivo API, Jivo API выведет следующий ответ:
Пример:
Status: 429
{
"error": {
"code": "about:blank",
"message": "Call is blocked"
}
}
После этого прием сообщений будет ограничен на один час. Через час Jivo API начнет принимать новые сообщения от бота.
Работаем 24 часа 7 дней в неделю.