Перейти к основному содержимому

Лия API

Инструмент для программного взаимодействия с ботом. Взаимодействие осуществляется по протоколу HTTPS с использованием POST-запросов. Обмен данными осуществляется в формате JSON.

warning

Максимальное время обработки одного запроса — 30 секунд.

API предоставляет один метод для обмена событиями между пользователями и роботом:

https://app.lia.chat/api/v1/handling/event?key=API_KEY

Доступ к API

warning

Чтобы запросы к API проходили, необходимо опубликовать проект.

к сведению

Для работы необходимо получить ключ API_KEY. Для этого в разделе «Каналы» нажмите кнопку «Добавить» и в выпадающем списке выберите пункт «API». Полученный ключ API_KEY будет отображён в центральной части страницы.

Принципы взаимодействия и типы данных

Взаимодействие построено на основе двух классов событий:

  • Входящие события инициированы действиями пользователя — события старта диалога, текстовые события, медиа-события и системные события.
  • Исходящие события возникают со стороны платформы как ответная реакция на входящие события.
ТипОписание
stringТекстовая строка, длина не превышает 1024 символов.
floatВещественное число.
AnyЛюбые данные в формате JSON.
к сведению

При необходимости передачи сообщения с большим количеством символов рекомендуем разделить его на несколько сообщений.

1. Входящие события

Элемент JSONТипОбязательныйОписание
user_idstringДаИдентификатор пользователя, с которым происходит взаимодействие. Разрешённые символы — английские буквы, цифры и дефис. В остальных случаях вы будете получать ошибки.
eventJSON-объектДаВходящее событие, базовый элемент взаимодействия между пользователем и платформой. Описание объекта приведено ниже.
factsJSON-объектНетФакты о пользователе, которые могут быть использованы при выполнении сценариев. JSON-объект с ключами типа string и значениями типа Any.

Объект event (для входящих событий)

Объект event — элемент, в котором передаются тип события и необходимые для его обработки параметры. Объект event для входящих событий отличается от объекта event для исходящих событий возможными значениями параметров type и params.

Элемент JSONТипОбязательныйОписание
typestringДаТип события, от которого зависит набор параметров входящего сообщения. Возможные значения: text, image, audio, video, file, sticker, location, start, intent, raw.
paramsJSON-объектДаПараметры входящего события, их тип и количество зависят от типа события. Описание см. ниже, п. 1.1.

Возможные значения type:

  • text — текстовое сообщение;
  • image — изображение;
  • audio — аудиозапись;
  • video — видеозапись;
  • file — файл;
  • sticker — стикер;
  • location — геопозиция;
  • start — сигнал старта диалога;
  • intent — намерение;
  • raw — намерения и сущности, присылаются вместо текста, чтобы пропустить шаг NLU.

1.1. Объект params

В зависимости от значения параметра type (типа входящего сообщения) объект params содержит разные параметры.

Данный объект используется как одно из значений поля params в объекте event для входящих событий. Не путать с одноимёнными объектами, использующимися в других местах.

Тип входящего сообщенияЭлемент JSONТипОбязательныйОписание
texttextstringДаТекст, введённый пользователем.
audio, video, fileurlstringДаСсылка на файл.
stickersticker_idstringДаИдентификатор стикера.
locationlocationJSON-объектДаШирота и долгота. См. п. 1.1.1.
locationnamestringНетНазвание локации.
locationformatted_addressstringНетЧитаемый адрес локации.
startНе содержит параметров (пустой объект).
intentintentstringДаНазвание намерения. Присылается вместо текста, чтобы пропустить шаг NLU (должно быть определено заранее в разделе «Намерения»).
rawintentsJSON-объектНетСписок названий намерений и числовых значений типа float (от 0.00 до 1.00). См. п. 1.1.2.
rawentitiesJSON-объектНетСписок названий сущностей и значений типа Any. См. п. 1.1.3.

1.1.1. Объект location

Объект location для входящих событий отличается от объекта location исходящих событий.

Элемент JSONТипОбязательныйОписание
latfloatДаШирота.
lngfloatДаДолгота.

1.1.2. Объект intents

Элемент JSONТипОписание
intentJSON-объектJSON-объект с ключами типа string, которые являются названиями намерений (должны быть определены заранее в разделе «Намерения»), и значениями типа JSON-объект, состоящим из элемента proba типа float (значения от 0.00 до 1.00).

1.1.3. Объект entities

Элемент JSONТипОписание
entitiesJSON-объектJSON-объект с ключами типа string, которые являются названиями сущностей (должны быть определены заранее в разделе «Сущности»), и значениями типа Any.

2. Исходящие события

Элемент JSONТипОбязательныйОписание
user_idstringДаИдентификатор пользователя, с которым происходит взаимодействие.
eventsJSON-массивДаРяд событий, являющихся ответной реакцией платформы на входящее событие от пользователя. Массив объектов типа event (для исходящих событий).

Объект event (для исходящих событий)

Элемент JSONТипОбязательныйОписание
typestringДаТип события, от которого зависит набор параметров. Возможные значения: text, image, audio, video, file, location, или произвольный (из snippet можно отправить произвольное событие — JSON-объект с ключами типа string и значениями типа Any).
paramsJSON-объектДаПараметры исходящего события, их тип и количество зависят от типа события. См. п. 2.1.

2.1. Объект params

Данный объект используется как одно из значений поля params в объекте event для исходящих событий. Не путать с одноимёнными объектами, использующимися в других местах.

Тип исходящего сообщенияЭлемент JSONТипОбязательныйОписание
texttextstringДаТекст сообщения.
textttsstringНетТекст, который произносится голосовым ассистентом одновременно с отображением текста сообщения пользователю. По умолчанию значение tts совпадает со значением text.
textquick_repliesJSON-объектНетПодсказки в виде кнопок для быстрого ответа пользователем.
image, audio, video, fileurlstringДаСсылка на файл.
image, audio, video, filecaptionstringНетПодпись к файлу.
image, audio, video, filequick_repliesJSON-объектНетПодсказки в виде кнопок. См. п. 2.1.1.
locationlatfloatДаШирота.
locationlngfloatДаДолгота.
locationnamestringНетНазвание локации.
locationquick_repliesJSON-объектНетПодсказки в виде кнопок. См. п. 2.1.1.
buttonstextstringНетТекст, предшествующий группе кнопок.
buttonsbuttonsJSON-объектДаКнопки для быстрого ответа пользователем. См. п. 2.1.1.

2.1.1. Объекты quick_replies и buttons

Объекты quick_replies и buttons идентичны, это списки не более чем из 20 JSON-объектов со следующими полями:

Элемент JSONТипОбязательныйОписание
typestringДаТип кнопки. Возможные значения: text, url, intent, send_location, send_email, send_phone.
titlestringДаТекст на кнопке.
paramsJSON-объектДаПараметры кнопки. См. п. 2.1.1.1.

2.1.1.1. Объект params

В зависимости от значения параметра type (типа кнопки) объект params содержит разные параметры.

Данный объект используется как одно из значений поля params в объекте buttons (п. 2.1.1). Не путать с одноимёнными объектами, использующимися в других местах.

Тип кнопокЭлемент JSONТипОбязательныйОписание
texttextstringНетТекст для отправки от имени пользователя (имитация сообщения пользователя для бота с целью дальнейшей обработки). Если не указан, его значение соответствует тексту на кнопке.
urlurlstringДаСсылка, которая будет открыта при нажатии на кнопку.
intenttextstringНетПри нажатии на кнопку этот текст добавляется в переписку как отправленное пользователем сообщение, при этом боту отправляется значение параметра intent_id. Если не указан, его значение соответствует тексту на кнопке.
intentintent_idstringДаПри нажатии на кнопку этот текст отправляется боту, при этом в переписку как отправленное пользователем сообщение добавляется значение параметра text.
warning

Для кнопок типа send_location, send_email, send_phone объект не содержит параметров (пустой объект). При нажатии на кнопку в интерфейсе канала открывается интерфейс для отправки геопозиции, адреса электронной почты или номера телефона.

Примеры взаимодействия с API

Рассмотрим несколько примеров взаимодействия пользователя с API.

В первом запросе бот получает событие типа text с параметром в виде текстовой строки. Идентификатор пользователя содержит строку user-128. Дополнительно передаётся несколько фактов о пользователе в JSON-объекте facts — имя и фамилия. Использованы ключи first_name и last_name, выбранные пользователем.

Запрос 1

POST /api/v1/handling/event
POST /api/v1/handling/event?key=12345 HTTP/1.1
Content-Type: application/json

{
"user_id": "user-128",
"event": {
"type": "text",
"params": {
"text": "Привет, Lia! Запиши меня на демо"
}
},
"facts": {
"first_name": "Иван",
"last_name": "Петров"
}
}

Ответное сообщение содержит идентификатор пользователя с тем же значением, а также два исходящих события, описанных в JSON-массиве events. Оба события текстового типа, в качестве параметра содержат текстовые строки. Одна из строк содержит имя пользователя, переданное ранее в JSON-объекте facts.

Ответ 1

HTTP/1.1 200 OK
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 269

{
"user_id": "user-128",
"events": [
{
"type": "text",
"params": {
"text": "Здравствуйте, Иван!"
}
},
{
"type": "text",
"params": {
"text": "Напишите ваш email"
}
}
]
}

Во втором запросе бот получает событие типа text с параметром в виде текстовой строки. Значение параметра user_id остаётся без изменений на протяжении всего взаимодействия с пользователем.

Запрос 2

POST /api/v1/handling/event
POST /api/v1/handling/event?key=12345 HTTP/1.1
Content-Type: application/json

{
"user_id": "user-128",
"event": {
"type": "text",
"params": {
"text": "мой email - admin@lia.chat"
}
}
}

Ответное сообщение содержит одно исходящее событие, описанное в JSON-массиве events.

Ответ 2

HTTP/1.1 200 OK
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 21

{
"user_id": "user-128",
"events": [
{
"type": "text",
"params": {
"text": "Иван, записала вас, подробности выслала на почту"
}
}
]
}

При взаимодействии с пользователем через API бот выполняет заранее составленные сценарии, которые позволяют обрабатывать как данные, переданные в JSON-объекте facts, так и распознанные сущности (в данном примере — адрес электронной почты).

Примеры curl-запросов

Запрос 1 (curl)

curl example 1
curl -X POST 'https://app.lia.chat/api/v1/handling/event?key=12345' \
-H 'Content-Type: application/json' \
-d '{
"user_id": "user-128",
"event": {
"type": "text",
"params": {
"text": "Привет! Запиши меня на демо"
}
},
"facts": {
"first_name": "Иван",
"last_name": "Петров"
}
}'

Запрос 2 (curl)

curl example 2
curl -X POST 'https://app.lia.chat/api/v1/handling/event?key=12345' \
-H 'Content-Type: application/json' \
-d '{
"user_id": "user-128",
"event": {
"type": "text",
"params": {
"text": "мой email - admin@lia.chat"
}
}
}'