SES. Руководство пользователя: различия между версиями
Материал из Флора AI
| Строка 10: | Строка 10: | ||
======'''Скрипты интеграции'''====== | ======'''Скрипты интеграции'''====== | ||
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию handler(data={}, session_id=None, channel='default'). | Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию '''handler'''(data={}, session_id=None, channel='default'). | ||
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id} | |||
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. Для отправки запроса рекомендуется использовать функцию '''apiRequest'''. Функция сделает все необходимые записи в лог интеграции. Пример: | |||
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. Для отправки запроса | |||
<code>from app.tools import apiRequest</code> | <code>from app.tools import apiRequest</code> | ||
| Строка 68: | Строка 44: | ||
По окончании работы функции handler вызвать функцию записи лога: | По окончании работы функции handler вызвать функцию записи лога: | ||
apiLog(data=data,name="",url="",request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None) | '''apiLog'''(data=data,name="",url="",request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None) | ||
* '''data''' - тот же массив который был на входе | * '''data''' - тот же массив который был на входе | ||
| Строка 157: | Строка 133: | ||
|- | |- | ||
! style="color:green;width: 15%" |'''POST/ses/log''' | ! style="color:green;width: 15%" |'''POST/ses/log''' | ||
! colspan="2" style="width: 85%" |Получение лога всех сессий начиная с date. <small>В логе '''error,''' '''message''' и массив сессий '''log'''</small> | ! colspan="2" style="width: 85%" |Получение лога всех сессий начиная с date. <small>В логе '''error,''' '''message''' и массив сессий '''log''' (log содержит информацию о каждой сессии и запросы с ответами)</small> | ||
|- | |- | ||
| colspan="2" style="width: 50%" | | | colspan="2" style="width: 50%" | | ||
| Строка 165: | Строка 141: | ||
<small> "log": [</small> | <small> "log": [</small> | ||
<small> { | <small> {"id": ",.....",</small><small> "session": "</small><small>......</small><small>",</small> <small>"robot": "</small><small>.....</small><small>",</small> | ||
<small> | |||
<small> | |||
<small> | |||
<small> | |||
<small> "endpoint": | <small> "channel": "......",</small><small> "closed": true</small><small>/false</small><small>,</small><small> "endpoint":</small> <small>"....."</small><small>,</small> | ||
<small> "variables": {},</small> | <small> "variables": {},</small> | ||
<small> "request": {</small> | <small> "request": {.......</small><small>},</small><small> "reply": { .....</small> <small>} },</small> | ||
<small> .....</small><small> ] }</small> | |||
<small> .....</small> | |||
<small> | |||
|- | |- | ||
! style="color:blue;width: 15%" |'''GET/ses/session/{robot_id}/{session_id}''' | ! style="color:blue;width: 15%" |'''GET/ses/session/{robot_id}/{session_id}''' | ||
! colspan="2" style="width: 85%" |Выдает параметры сессии. <small>Для отображения на боковой панели тестирования в UPS. | ! colspan="2" style="width: 85%" |Выдает параметры сессии. <small>Для отображения на боковой панели тестирования в UPS. Основные блоки результата:</small> | ||
|- | |- | ||
| colspan="2" style="width: 50%" | | | colspan="2" style="width: 50%" | | ||
| Строка 220: | Строка 158: | ||
* <small>'''session_id''' - id незакрытой сессии</small> | * <small>'''session_id''' - id незакрытой сессии</small> | ||
| style="width: 50%" |<small>{ | | style="width: 50%" |<small>{ "started": "2024-11-05 15:03:14",</small> | ||
<small> | <small>"modified": "2024-11-05 15:03:14",</small> | ||
<small> | <small>"current": {.....},</small> | ||
<small> | <small>"data": [</small> | ||
<small> | <small> { "request": { },</small> | ||
<small> | <small> "reply": { } } ],</small> | ||
<small> | <small>"variables": {},</small> | ||
<small> | <small>"history": [</small> | ||
<small> | <small> { "id": ".....", "session": ".....", "robot": ".....",</small> | ||
<small> | <small> "channel": ".....", "closed": false, "endpoint": ".....",</small> | ||
<small> | <small> "variables": {},</small> | ||
<small> | <small> "request": {.....},</small> | ||
<small> | <small> "reply": {.....} } ]}</small> | ||
|- | |- | ||
! colspan="3" style="text-align: center" |'''<big>Группа методов ses/robot/<big>''' | ! colspan="3" style="text-align: center" |'''<big>Группа методов ses/robot/<big>''' | ||
| Строка 393: | Строка 245: | ||
| style="width: 50%" |<small>{ "error": 0,</small> | | style="width: 50%" |<small>{ "error": 0,</small> | ||
<small> "data": {</small> | <small> "data": {</small><small> "id": ".....",</small><small> "name": "</small><small>.....</small><small>",</small><small>"description": "",</small> | ||
<small> " | <small> "voice": "",</small><small> "session": { "lifetime": 600 },</small> | ||
<small> "models": {},</small><small>"servicedata": {},</small><small>"exceptions": {},</small><small>"actions": {},</small> | |||
<small> "models": {},</small> | |||
<small> | |||
<small> | |||
<small> | |||
<small> "holidays": [],</small> | <small> "holidays": [],</small> | ||
| Строка 417: | Строка 255: | ||
<small> "timeintervals": {</small> | <small> "timeintervals": {</small> | ||
<small> "name": {</small> | <small> "name": {</small><small>"weekdays": [ ..... ],</small> <small>"dates": [ ..... ],</small> <small>"months": [.....],</small> | ||
<small> | |||
<small> | |||
<small>"months": [ | |||
<small><nowiki>"days": "all", "intervals": [ [ 0, 1440 ] ] }}}}</nowiki></small> | <small><nowiki>"days": "all", "intervals": [ [ 0, 1440 ] ] }}}}</nowiki></small> | ||
| Строка 501: | Строка 333: | ||
| style="width: 50%" |<small>{ "error": 0,</small> | | style="width: 50%" |<small>{ "error": 0,</small> | ||
<small> "data": {</small> | <small> "data": {</small><small> "id": ".....",</small><small> "name": ".....",</small><small> "type": "smc",</small> | ||
<small> | |||
<small> " | |||
<small> " | <small> "model": ".....",</small><small> "param": ".....",</small><small>"weight": 0,</small><small> "slaveData": [],</small> | ||
<small> | <small>"forEndpointRunOnly": true,</small><small> "actions": {} } }</small> | ||
<small> | |||
|- | |- | ||
! style="color:blue;width: 15%" |'''GET/ses/robot/data/list/{robot}''' | ! style="color:blue;width: 15%" |'''GET/ses/robot/data/list/{robot}''' | ||
| Строка 575: | Строка 393: | ||
| style="width: 50%" |<small>{ "error": 0,</small> | | style="width: 50%" |<small>{ "error": 0,</small> | ||
<small> "data": {</small> | <small> "data": {</small><small> "id": ".....",</small> <small>"name": ".....",</small><small> "entry": [ [ "....."]],</small><small> "run": [],</small> | ||
<small> | |||
<small> | |||
<small> | |||
<small> | |||
<small> "actions": {</small> | <small> "actions": {</small> | ||
<small> "default": [</small> | <small> "default": [</small><small> {"action": "say",</small><small>"type": "linear",</small><small>"text": [ "....."] },</small> | ||
<small> | |||
<small> | |||
<small> | |||
<small> { "action": "следующее действие"} ] } } }</small> | <small> { "action": "следующее действие"} ] } } }</small> | ||
Версия от 11:35, 25 ноября 2024
Общее описание
Сервис предназначен для создания сценарных машин и обеспечения их работы.
Термины и определения
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов АPI и возможностью выполнять запросы к сервису SES в реальном времени
Скрипты интеграции
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию handler(data={}, session_id=None, channel='default').
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. Для отправки запроса рекомендуется использовать функцию apiRequest. Функция сделает все необходимые записи в лог интеграции. Пример:
from app.tools import apiRequest
status, reply = apiRequest(name="наименование скрипта",method='get',sessiondata=data,url=url,timeout=(1,10))
- status, reply - http код ответа (например 200) и ответ без изменений и сериализации.
- name = название вызываемого метода, для отчетности
- sessiondata - это data в handler, которая туда прилетает
- method - метод запроса-ответа
после этих параметров в функцию apiRequest отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.
Из функции handler можно передать или изменить переменную (в рамках текущей сессии): data['variables']={'new_var': 'новое_значение'}
Функция handler должна возвращать ответ в виде return { "text": "Текст ответа.", 'answered': True}, {}
- text - текст ответа
- answered - получен ли ответ (True или False)
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию apiRequest и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:
from app.tools import apiLog
По окончании работы функции handler вызвать функцию записи лога:
apiLog(data=data,name="",url="",request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)
- data - тот же массив который был на входе
- name - наименование или короткое описание скрипта
- url - адрес запроса к стороннему сервису (если есть)
- request - текст запроса
- reply_code - код ответа (стандартный код http)
- reply - необработанный ответ стороннего сервиса
- request_datetime - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)
- reply_datetime - время сразу по получению ответа, также без учета таймзоны.
Описание методов API
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок "accept: application/json"
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.
| Группа методов ses | ||
|---|---|---|
| для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс "_prod", для бэкапа "_backup"
актуально для методов - получения данных робота GET/ses/robot/get/{id} - применение настроек робота GET/ses/robot/commit/{id} - экспорт робота GET/ses/robot/export/{id} - список скриптов GET/ses/robot/script/list/{robot} - получение скрипта GET/ses/robot/script/get/{robot}/{id} - список ЭД GET/ses/robot/data/list/{robot} - получение ЭД GET/ses/robot/data/get/{robot}/{id} - список КТ GET/ses/robot/endpoint/list/{robot} - получение КТ GET/ses/robot/endpoint/get/{robot}/{id} - метода ask (отладчика) POST/ses/ask/{robot_id} - данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id} | ||
| POST/ses/ask/{robot_id} | Получение ответа на запрос пользователя. Метод для отладки робота | |
|
{ "error": 0,
"question": "Вопрос", "answer": [ { "messages": [ "ответ" ], "voice": "" } ], "session": null} | |
| POST/ses/log | Получение лога всех сессий начиная с date. В логе error, message и массив сессий log (log содержит информацию о каждой сессии и запросы с ответами) | |
|
{ "error": 0, "message": "success",
"log": [ {"id": ",.....", "session": "......", "robot": ".....", "channel": "......", "closed": true/false, "endpoint": ".....", "variables": {}, "request": {.......}, "reply": { ..... } }, ..... ] } | |
| GET/ses/session/{robot_id}/{session_id} | Выдает параметры сессии. Для отображения на боковой панели тестирования в UPS. Основные блоки результата: | |
|
{ "started": "2024-11-05 15:03:14",
"modified": "2024-11-05 15:03:14", "current": {.....}, "data": [ { "request": { }, "reply": { } } ], "variables": {}, "history": [ { "id": ".....", "session": ".....", "robot": ".....", "channel": ".....", "closed": false, "endpoint": ".....", "variables": {}, "request": {.....}, "reply": {.....} } ]} | |
| Группа методов ses/robot/ | ||
| POST/ses/robot/add | Создание нового робота. На выходе id созданного робота или сообщение об ошибке | |
|
{ "error": 0,
"id": "2fd2f909-2069-4b20-a725-3a598c83f886"} | |
| GET/ses/robot/apply/{id} | Применение робота. Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup. | |
|
{ "error": 0,
"message": "success"} | |
| GET/ses/robot/cleardraft/{id} | Обнуление черновика рабочей версией робота | |
|
{ "error": 0,
"message": "success"} | |
| GET/ses/robot/commit/{id} | Применение текущих изменений настроек робота. Применимо ко всем версиям (черновик, рабочая, резервная копия) | |
|
{ "error": 0,
"message": "success"} | |
| DELETE/ses/robot/delete/{id} | Удаление всех версий робота | |
|
{ "error": 0,
"message": "success"} | |
| GET/ses/robot/export/{id} | Выгрузка робота в архив. | |
|
zip файл с именем = идентификатор робота | |
| GET/ses/robot/get/{id} | Выгрузка основных настроек робота | |
|
{ "error": 0,
"data": { "id": ".....", "name": ".....","description": "", "voice": "", "session": { "lifetime": 600 }, "models": {},"servicedata": {},"exceptions": {},"actions": {}, "holidays": [], "timeintervals": { "name": {"weekdays": [ ..... ], "dates": [ ..... ], "months": [.....], "days": "all", "intervals": [ [ 0, 1440 ] ] }}}} | |
| POST/ses/robot/import/{id} | Загрузка архива робота в черновик существующего робота | |
|
{ "error": 0,
"message": "success"} | |
| GET/ses/robot/list | Получение списка роботов | |
| Входные параметры отсутствуют | [ { "id": "9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78",
"name": "test", "hasProd": true, "hasBackup": true } ] | |
| POST/ses/robot/modify/{id} | Изменение основных настроек робота. Формат data как в ответе метода GET/ses/robot/get/{id} | |
|
{ "error": 0,
"message": "success"} | |
| GET/ses/robot/restore/{id} | Откат рабочей версии из бэкапа. Резервная копия становится рабочей, и удаляется, а черновик остается без изменений | |
|
{ "error": 0,
"message": "success"} | |
| Группа методов ses/robot/data | ||
| POST/ses/robot/data/add/{robot} | Добавление элемента данных | |
|
{ "error": 0,
"message": "success"} | |
| DELETE/ses/robot/data/delete/{robot}/{id} | Удаление элемента данных | |
|
{ "error": 0,
"message": "success"} | |
| GET/ses/robot/data/get/{robot}/{id} | Получение настроек элемента данных | |
|
{ "error": 0,
"data": { "id": ".....", "name": ".....", "type": "smc", "model": ".....", "param": ".....","weight": 0, "slaveData": [], "forEndpointRunOnly": true, "actions": {} } } | |
| GET/ses/robot/data/list/{robot} | Получение списка элементов данных | |
|
[ { "id": "bc1cb1a1-c64e-46a1-b422-1a48de9ddacb",
"name": "pve", "type": "smc" } ] | |
| POST/ses/robot/data/modify/{robot}/{id} | Изменение элемента данных. Формат data как на выходе метода GET/ses/robot/data/get/{robot}/{id} | |
|
{ "error": 0,
"message": "success"} | |
| Группа методов ses/robot/endpoint | ||
| POST/ses/robot/endpoint/add/{robot} | Создание конечной точки. Формат data как на выходе метода GET/ses/robot/endpoint/get/{robot}/{id} | |
|
{ "error": 0,
"id": "8576593b-b0d8-4b03-a623-74f3132356ea"} | |
| DELETE/ses/robot/endpoint/delete/{robot}/{id} | Удаление конечной точки. | |
|
{ "error": 0,
"message": "success"} | |
| GET/ses/robot/endpoint/get/{robot}/{id} | Получение настроек конечной точки | |
|
{ "error": 0,
"data": { "id": ".....", "name": ".....", "entry": [ [ "....."]], "run": [], "actions": { "default": [ {"action": "say","type": "linear","text": [ "....."] }, { "action": "следующее действие"} ] } } } | |
| GET/ses/robot/endpoint/list/{robot} | Получение списка конечных точек робота | |
|
[ { "id": "8576593b-b0d8-4b03-a623-74f3132356ea",
"name": "точка 1", "entry": [] }, { "id": "6500dd0f-4bd1-43b3-9fd4-145eb7210c45", "name": "точка 2", "entry": [ [ "bc1cb1a1-c64e-46a1-b422-1a48de9ddacb" ] ] }] | |
| POST/ses/robot/endpoint/modify/{robot}/{id} | Изменение конечной точки. Формат data как на выходе метода GET/ses/robot/endpoint/get/{robot}/{id} | |
|
{ "error": 0,
"message": "success"} | |
| Группа методов ses/robot/script | ||
| POST/ses/robot/script/add/{robot} | Добавление нового скрипта. Формат data как в ответе метода GET/ses/robot/script/get/{robot}/{id} | |
|
{ "error": 0,
"message": "success"} | |
| DELETE/ses/robot/script/delete/{robot}/{id} | Удаление скрипта | |
|
{ "error": 0,
"message": "success"} | |
| GET/ses/robot/script/get/{robot}/{id} | Получение текста скрипита | |
|
{ "error": 0,
"data": { "id": "6a9f91b6-9634-4079-ac2b-60a944922c61", "name": "Наименование скрипта", "code": "Текст скрипта" } } | |
| GET/ses/robot/script/list/{robot} | Получение списка скриптов | |
| Входные параметры отсутствуют | [ { "id": "9b9d83b7-d5c3-49e6-9bd4-a123a9047939",
"name": "наименование1" }, { "id": "48b508ba-a32b-4ada-bcc3-66ce26d81c6a", "name": "наименование2" }] | |
| POST/ses/robot/script/modify/{robot}/{id} | Изменение скрипта.Формат data как в ответе метода GET/ses/robot/script/get/{robot}/{id} | |
|
{ "error": 0,
"message": "success"} | |
| Группа методов ses/testapi | ||
| GET/ses/testapi/list | Получение списка эмуляторов сервисов интеграции | |
| Входные параметры отсутствуют | [ "service1",
"service2", "serviceN"] | |
| POST/ses/testapi/{request} | Получение ответа эмулятора сервиса интеграции | |
|
[
"ответ эмулятора" ] | |
| GET/ses/testapi/{request} | Получение ответа эмулятора сервиса интеграции | |
|
[
"ответ эмулятора" ] | |