<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.connect2ai.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=V.Kazantsev</id>
	<title>Флора AI - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.connect2ai.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=V.Kazantsev"/>
	<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/V.Kazantsev"/>
	<updated>2026-06-01T15:17:39Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3550</id>
		<title>CLS. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3550"/>
		<updated>2026-01-16T14:45:21Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Описание методов API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис массового обзвона и уведомлений, поддерживающий множественные каналы связи и гибкую настройку&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;Основные возможности:&#039;&#039;&#039; ======&lt;br /&gt;
* Выбор канала связи&lt;br /&gt;
** голосовые звонки - интеграция с &#039;&#039;&#039;FreeSWITCH&#039;&#039;&#039; для исходящих звонков&lt;br /&gt;
** telegram | VK - интеграция с &#039;&#039;&#039;SES&#039;&#039;&#039; для последующей отправки уведомления в мессенджер&lt;br /&gt;
* Управление списками обзвона&lt;br /&gt;
** CRUD операции - создание, чтение, изменение, удаление списков&lt;br /&gt;
** Импорт/Экспорт - загрузка и выгрузка контактов из CSV&lt;br /&gt;
** Автозагрузка - динамическое расширение списков через скрипт&lt;br /&gt;
** Планировщик - cron-подобное расписание запуска обзвонов&lt;br /&gt;
* Конфигурация и лимиты&lt;br /&gt;
** Глобальные настройки - централизованное управление конфигурацией&lt;br /&gt;
** Временные интервалы - точное управление временем работы&lt;br /&gt;
** Праздники - учет выходных дней при обзвонах&lt;br /&gt;
** Лимиты обзвона - контроль нагрузки и таймаутов&lt;br /&gt;
* Мониторинг и отчетность&lt;br /&gt;
** Реальное время - отслеживание статуса обзвонов&lt;br /&gt;
** Логирование - детальные логи всех звонков / уведомлений&lt;br /&gt;
** API - полный программный доступ ко всем функциям&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
CLS (Call List Service) - сервис массового обзвона и уведомлений с поддержкой множественных каналов связи.&lt;br /&gt;
&lt;br /&gt;
Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису CLS в реальном времени.&lt;br /&gt;
&lt;br /&gt;
Список обзвона (Call List) - набор контактов с метаданными для выполнения массовой рассылки или обзвона.&lt;br /&gt;
&lt;br /&gt;
ListCaller - основной класс, управляющий выполнением кампании по конкретному списку.&lt;br /&gt;
&lt;br /&gt;
Instance - активный экземпляр ListCaller, выполняющий обзвон.&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Описание методов API&#039;&#039;&#039; =====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом CLS. По умолчанию используется порт 6188/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6188 будет отображен интерфейс Swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|+&#039;&#039;Описание методов API&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление обзвонами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 20%&amp;quot; |&#039;&#039;&#039;POST /calls/call&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 80%&amp;quot; |Прямой звонок с номера на номер. Используется для проверки прохождения звонка.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue|&#039;&#039;&#039;GET/cls/calls/list/tasks&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;  |Получение задач для списка &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET/cls/calls/queues/status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;  |Получение статуса всех очередей&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /calls/start&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Старт списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /calls/stop&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Остановка списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление списками обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /lists/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Добавление нового списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red&amp;quot; |&#039;&#039;&#039;DELETE /lists/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Удаление существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения в CSV файл&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /lists/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения из CSV файла&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Получения всех списков для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение конкретного списка для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /lists/load/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Дозагрузка в существующую инстанцию списка обзвона | оповещения элементов из скрипта&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange&amp;quot; |&#039;&#039;&#039;PUT /lists/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Изменение существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/status/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение статуса существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление инстанциями обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /instances/add/{list_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Создание инстанции обзвона | оповещения на основе списка, без запуска обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /instances/get/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получить детальную информацию о конкретной инстанции&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /instances/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка инстанций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red&amp;quot; |&#039;&#039;&#039;DELETE /instances/remove/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление инстанции обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление временными интервалами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /timeintervals/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Создание временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red&amp;quot; |&#039;&#039;&#039;DELETE /timeintervals/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Удаление существующего интервала времени&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /timeintervals/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретного временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /timeintervals/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка временных интервалов&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange&amp;quot; |&#039;&#039;&#039;PUT /timeintervals/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующего временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление конфигурациями&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /configs/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретной конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /configs/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получения списка доступных конфигураций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange&amp;quot; |&#039;&#039;&#039;PUT /configs/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующей конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Логирование&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /logs/logs&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение логов с указанной даты&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Лицензия&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение состояния лицензии&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3549</id>
		<title>CLS. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3549"/>
		<updated>2026-01-16T14:44:48Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Описание методов API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис массового обзвона и уведомлений, поддерживающий множественные каналы связи и гибкую настройку&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;Основные возможности:&#039;&#039;&#039; ======&lt;br /&gt;
* Выбор канала связи&lt;br /&gt;
** голосовые звонки - интеграция с &#039;&#039;&#039;FreeSWITCH&#039;&#039;&#039; для исходящих звонков&lt;br /&gt;
** telegram | VK - интеграция с &#039;&#039;&#039;SES&#039;&#039;&#039; для последующей отправки уведомления в мессенджер&lt;br /&gt;
* Управление списками обзвона&lt;br /&gt;
** CRUD операции - создание, чтение, изменение, удаление списков&lt;br /&gt;
** Импорт/Экспорт - загрузка и выгрузка контактов из CSV&lt;br /&gt;
** Автозагрузка - динамическое расширение списков через скрипт&lt;br /&gt;
** Планировщик - cron-подобное расписание запуска обзвонов&lt;br /&gt;
* Конфигурация и лимиты&lt;br /&gt;
** Глобальные настройки - централизованное управление конфигурацией&lt;br /&gt;
** Временные интервалы - точное управление временем работы&lt;br /&gt;
** Праздники - учет выходных дней при обзвонах&lt;br /&gt;
** Лимиты обзвона - контроль нагрузки и таймаутов&lt;br /&gt;
* Мониторинг и отчетность&lt;br /&gt;
** Реальное время - отслеживание статуса обзвонов&lt;br /&gt;
** Логирование - детальные логи всех звонков / уведомлений&lt;br /&gt;
** API - полный программный доступ ко всем функциям&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
CLS (Call List Service) - сервис массового обзвона и уведомлений с поддержкой множественных каналов связи.&lt;br /&gt;
&lt;br /&gt;
Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису CLS в реальном времени.&lt;br /&gt;
&lt;br /&gt;
Список обзвона (Call List) - набор контактов с метаданными для выполнения массовой рассылки или обзвона.&lt;br /&gt;
&lt;br /&gt;
ListCaller - основной класс, управляющий выполнением кампании по конкретному списку.&lt;br /&gt;
&lt;br /&gt;
Instance - активный экземпляр ListCaller, выполняющий обзвон.&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Описание методов API&#039;&#039;&#039; =====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом CLS. По умолчанию используется порт 6188/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6188 будет отображен интерфейс Swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|+&#039;&#039;Описание методов API&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление обзвонами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 25%&amp;quot; |&#039;&#039;&#039;POST /calls/call&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 75%&amp;quot; |Прямой звонок с номера на номер. Используется для проверки прохождения звонка.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue|&#039;&#039;&#039;GET/cls/calls/list/tasks&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;  |Получение задач для списка &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET/cls/calls/queues/status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;  |Получение статуса всех очередей&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /calls/start&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Старт списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /calls/stop&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Остановка списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление списками обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /lists/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Добавление нового списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red&amp;quot; |&#039;&#039;&#039;DELETE /lists/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Удаление существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения в CSV файл&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /lists/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения из CSV файла&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Получения всех списков для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение конкретного списка для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /lists/load/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Дозагрузка в существующую инстанцию списка обзвона | оповещения элементов из скрипта&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange&amp;quot; |&#039;&#039;&#039;PUT /lists/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Изменение существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/status/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение статуса существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление инстанциями обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /instances/add/{list_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Создание инстанции обзвона | оповещения на основе списка, без запуска обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /instances/get/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получить детальную информацию о конкретной инстанции&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /instances/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка инстанций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red&amp;quot; |&#039;&#039;&#039;DELETE /instances/remove/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление инстанции обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление временными интервалами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /timeintervals/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Создание временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red&amp;quot; |&#039;&#039;&#039;DELETE /timeintervals/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Удаление существующего интервала времени&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /timeintervals/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретного временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /timeintervals/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка временных интервалов&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange&amp;quot; |&#039;&#039;&#039;PUT /timeintervals/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующего временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление конфигурациями&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /configs/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретной конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /configs/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получения списка доступных конфигураций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange&amp;quot; |&#039;&#039;&#039;PUT /configs/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующей конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Логирование&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /logs/logs&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение логов с указанной даты&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Лицензия&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение состояния лицензии&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3548</id>
		<title>CLS. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3548"/>
		<updated>2026-01-16T14:44:05Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Описание методов API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис массового обзвона и уведомлений, поддерживающий множественные каналы связи и гибкую настройку&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;Основные возможности:&#039;&#039;&#039; ======&lt;br /&gt;
* Выбор канала связи&lt;br /&gt;
** голосовые звонки - интеграция с &#039;&#039;&#039;FreeSWITCH&#039;&#039;&#039; для исходящих звонков&lt;br /&gt;
** telegram | VK - интеграция с &#039;&#039;&#039;SES&#039;&#039;&#039; для последующей отправки уведомления в мессенджер&lt;br /&gt;
* Управление списками обзвона&lt;br /&gt;
** CRUD операции - создание, чтение, изменение, удаление списков&lt;br /&gt;
** Импорт/Экспорт - загрузка и выгрузка контактов из CSV&lt;br /&gt;
** Автозагрузка - динамическое расширение списков через скрипт&lt;br /&gt;
** Планировщик - cron-подобное расписание запуска обзвонов&lt;br /&gt;
* Конфигурация и лимиты&lt;br /&gt;
** Глобальные настройки - централизованное управление конфигурацией&lt;br /&gt;
** Временные интервалы - точное управление временем работы&lt;br /&gt;
** Праздники - учет выходных дней при обзвонах&lt;br /&gt;
** Лимиты обзвона - контроль нагрузки и таймаутов&lt;br /&gt;
* Мониторинг и отчетность&lt;br /&gt;
** Реальное время - отслеживание статуса обзвонов&lt;br /&gt;
** Логирование - детальные логи всех звонков / уведомлений&lt;br /&gt;
** API - полный программный доступ ко всем функциям&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
CLS (Call List Service) - сервис массового обзвона и уведомлений с поддержкой множественных каналов связи.&lt;br /&gt;
&lt;br /&gt;
Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису CLS в реальном времени.&lt;br /&gt;
&lt;br /&gt;
Список обзвона (Call List) - набор контактов с метаданными для выполнения массовой рассылки или обзвона.&lt;br /&gt;
&lt;br /&gt;
ListCaller - основной класс, управляющий выполнением кампании по конкретному списку.&lt;br /&gt;
&lt;br /&gt;
Instance - активный экземпляр ListCaller, выполняющий обзвон.&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Описание методов API&#039;&#039;&#039; =====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом CLS. По умолчанию используется порт 6188/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6188 будет отображен интерфейс Swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|+&#039;&#039;Описание методов API&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление обзвонами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 25%&amp;quot; |&#039;&#039;&#039;POST /calls/call&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 75%&amp;quot; |Прямой звонок с номера на номер. Используется для проверки прохождения звонка.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue|&#039;&#039;&#039;GET/cls/calls/list/tasks&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;  |Получение задач для списка&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET/cls/calls/queues/status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;  |Получение статуса всех очередей&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /calls/start&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Старт списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /calls/stop&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Остановка списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление списками обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /lists/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Добавление нового списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red&amp;quot; |&#039;&#039;&#039;DELETE /lists/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Удаление существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения в CSV файл&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /lists/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения из CSV файла&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Получения всех списков для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение конкретного списка для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /lists/load/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Дозагрузка в существующую инстанцию списка обзвона | оповещения элементов из скрипта&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange&amp;quot; |&#039;&#039;&#039;PUT /lists/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;  |&amp;lt;nowiki&amp;gt;Изменение существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /lists/status/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение статуса существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление инстанциями обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /instances/add/{list_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Создание инстанции обзвона | оповещения на основе списка, без запуска обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /instances/get/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получить детальную информацию о конкретной инстанции&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /instances/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка инстанций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red&amp;quot; |&#039;&#039;&#039;DELETE /instances/remove/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление инстанции обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление временными интервалами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green&amp;quot; |&#039;&#039;&#039;POST /timeintervals/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Создание временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red&amp;quot; |&#039;&#039;&#039;DELETE /timeintervals/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Удаление существующего интервала времени&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /timeintervals/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретного временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /timeintervals/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка временных интервалов&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange&amp;quot; |&#039;&#039;&#039;PUT /timeintervals/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующего временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление конфигурациями&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /configs/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретной конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /configs/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получения списка доступных конфигураций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange&amp;quot; |&#039;&#039;&#039;PUT /configs/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующей конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Логирование&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /logs/logs&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение логов с указанной даты&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Лицензия&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue&amp;quot; |&#039;&#039;&#039;GET /license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение состояния лицензии&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3547</id>
		<title>CLS. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3547"/>
		<updated>2026-01-16T14:37:29Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Описание методов API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис массового обзвона и уведомлений, поддерживающий множественные каналы связи и гибкую настройку&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;Основные возможности:&#039;&#039;&#039; ======&lt;br /&gt;
* Выбор канала связи&lt;br /&gt;
** голосовые звонки - интеграция с &#039;&#039;&#039;FreeSWITCH&#039;&#039;&#039; для исходящих звонков&lt;br /&gt;
** telegram | VK - интеграция с &#039;&#039;&#039;SES&#039;&#039;&#039; для последующей отправки уведомления в мессенджер&lt;br /&gt;
* Управление списками обзвона&lt;br /&gt;
** CRUD операции - создание, чтение, изменение, удаление списков&lt;br /&gt;
** Импорт/Экспорт - загрузка и выгрузка контактов из CSV&lt;br /&gt;
** Автозагрузка - динамическое расширение списков через скрипт&lt;br /&gt;
** Планировщик - cron-подобное расписание запуска обзвонов&lt;br /&gt;
* Конфигурация и лимиты&lt;br /&gt;
** Глобальные настройки - централизованное управление конфигурацией&lt;br /&gt;
** Временные интервалы - точное управление временем работы&lt;br /&gt;
** Праздники - учет выходных дней при обзвонах&lt;br /&gt;
** Лимиты обзвона - контроль нагрузки и таймаутов&lt;br /&gt;
* Мониторинг и отчетность&lt;br /&gt;
** Реальное время - отслеживание статуса обзвонов&lt;br /&gt;
** Логирование - детальные логи всех звонков / уведомлений&lt;br /&gt;
** API - полный программный доступ ко всем функциям&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
CLS (Call List Service) - сервис массового обзвона и уведомлений с поддержкой множественных каналов связи.&lt;br /&gt;
&lt;br /&gt;
Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису CLS в реальном времени.&lt;br /&gt;
&lt;br /&gt;
Список обзвона (Call List) - набор контактов с метаданными для выполнения массовой рассылки или обзвона.&lt;br /&gt;
&lt;br /&gt;
ListCaller - основной класс, управляющий выполнением кампании по конкретному списку.&lt;br /&gt;
&lt;br /&gt;
Instance - активный экземпляр ListCaller, выполняющий обзвон.&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Описание методов API&#039;&#039;&#039; =====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом CLS. По умолчанию используется порт 6188/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6188 будет отображен интерфейс Swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|+&#039;&#039;Описание методов API&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление обзвонами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/call&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Прямой звонок с номера на номер. Используется для проверки прохождения звонка.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/cls/calls/list/tasks&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение задач для списка&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/cls/calls/queues/status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение статуса всех очередей&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/start&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Старт списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/stop&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Остановка списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление списками обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Добавление нового списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /lists/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения в CSV файл&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения из CSV файла&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Получения всех списков для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение конкретного списка для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/load/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Дозагрузка в существующую инстанцию списка обзвона | оповещения элементов из скрипта&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /lists/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Изменение существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/status/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение статуса существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление инстанциями обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /instances/add/{list_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Создание инстанции обзвона | оповещения на основе списка, без запуска обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /instances/get/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получить детальную информацию о конкретной инстанции&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /instances/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка инстанций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /instances/remove/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление инстанции обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление временными интервалами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /timeintervals/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Создание временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /timeintervals/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Удаление существующего интервала времени&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /timeintervals/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретного временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /timeintervals/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка временных интервалов&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /timeintervals/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующего временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление конфигурациями&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /configs/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретной конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /configs/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получения списка доступных конфигураций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /configs/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующей конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Логирование&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /logs/logs&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение логов с указанной даты&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot;|&#039;&#039;&#039;&amp;lt;u&amp;gt;Лицензия&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение состояния лицензии&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3546</id>
		<title>CLS. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3546"/>
		<updated>2026-01-16T14:30:21Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Описание методов API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис массового обзвона и уведомлений, поддерживающий множественные каналы связи и гибкую настройку&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;Основные возможности:&#039;&#039;&#039; ======&lt;br /&gt;
* Выбор канала связи&lt;br /&gt;
** голосовые звонки - интеграция с &#039;&#039;&#039;FreeSWITCH&#039;&#039;&#039; для исходящих звонков&lt;br /&gt;
** telegram | VK - интеграция с &#039;&#039;&#039;SES&#039;&#039;&#039; для последующей отправки уведомления в мессенджер&lt;br /&gt;
* Управление списками обзвона&lt;br /&gt;
** CRUD операции - создание, чтение, изменение, удаление списков&lt;br /&gt;
** Импорт/Экспорт - загрузка и выгрузка контактов из CSV&lt;br /&gt;
** Автозагрузка - динамическое расширение списков через скрипт&lt;br /&gt;
** Планировщик - cron-подобное расписание запуска обзвонов&lt;br /&gt;
* Конфигурация и лимиты&lt;br /&gt;
** Глобальные настройки - централизованное управление конфигурацией&lt;br /&gt;
** Временные интервалы - точное управление временем работы&lt;br /&gt;
** Праздники - учет выходных дней при обзвонах&lt;br /&gt;
** Лимиты обзвона - контроль нагрузки и таймаутов&lt;br /&gt;
* Мониторинг и отчетность&lt;br /&gt;
** Реальное время - отслеживание статуса обзвонов&lt;br /&gt;
** Логирование - детальные логи всех звонков / уведомлений&lt;br /&gt;
** API - полный программный доступ ко всем функциям&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
CLS (Call List Service) - сервис массового обзвона и уведомлений с поддержкой множественных каналов связи.&lt;br /&gt;
&lt;br /&gt;
Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису CLS в реальном времени.&lt;br /&gt;
&lt;br /&gt;
Список обзвона (Call List) - набор контактов с метаданными для выполнения массовой рассылки или обзвона.&lt;br /&gt;
&lt;br /&gt;
ListCaller - основной класс, управляющий выполнением кампании по конкретному списку.&lt;br /&gt;
&lt;br /&gt;
Instance - активный экземпляр ListCaller, выполняющий обзвон.&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Описание методов API&#039;&#039;&#039; =====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом CLS. По умолчанию используется порт 6188/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6188 будет отображен интерфейс Swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|+&#039;&#039;Описание методов API&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление обзвонами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/call&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Прямой звонок с номера на номер. Используется для проверки прохождения звонка.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/cls/calls/list/tasks&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение задач для списка&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/cls/calls/queues/status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение статуса всех очередей&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/start&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Старт списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/stop&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Остановка списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление списками обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Добавление нового списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /lists/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения в CSV файл&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения из CSV файла&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Получения всех списков для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение конкретного списка для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/load/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Дозагрузка в существующую инстанцию списка обзвона | оповещения элементов из скрипта&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /lists/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Изменение существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/status/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение статуса существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление инстанциями обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /instances/add/{list_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Создание инстанции обзвона | оповещения на основе списка, без запуска обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /instances/get/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получить детальную информацию о конкретной инстанции&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /instances/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка инстанций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /instances/remove/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление инстанции обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление временными интервалами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /timeintervals/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Создание временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /timeintervals/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Удаление существующего интервала времени&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /timeintervals/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретного временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /timeintervals/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка временных интервалов&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /timeintervals/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующего временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление конфигурациями&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /configs/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретной конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /configs/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получения списка доступных конфигураций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /configs/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующей конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Логирование&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /logs/logs&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение логов с указанной даты&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Лицензия&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение состояния лицензии&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3545</id>
		<title>CLS. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3545"/>
		<updated>2026-01-16T14:28:53Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Описание методов API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис массового обзвона и уведомлений, поддерживающий множественные каналы связи и гибкую настройку&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;Основные возможности:&#039;&#039;&#039; ======&lt;br /&gt;
* Выбор канала связи&lt;br /&gt;
** голосовые звонки - интеграция с &#039;&#039;&#039;FreeSWITCH&#039;&#039;&#039; для исходящих звонков&lt;br /&gt;
** telegram | VK - интеграция с &#039;&#039;&#039;SES&#039;&#039;&#039; для последующей отправки уведомления в мессенджер&lt;br /&gt;
* Управление списками обзвона&lt;br /&gt;
** CRUD операции - создание, чтение, изменение, удаление списков&lt;br /&gt;
** Импорт/Экспорт - загрузка и выгрузка контактов из CSV&lt;br /&gt;
** Автозагрузка - динамическое расширение списков через скрипт&lt;br /&gt;
** Планировщик - cron-подобное расписание запуска обзвонов&lt;br /&gt;
* Конфигурация и лимиты&lt;br /&gt;
** Глобальные настройки - централизованное управление конфигурацией&lt;br /&gt;
** Временные интервалы - точное управление временем работы&lt;br /&gt;
** Праздники - учет выходных дней при обзвонах&lt;br /&gt;
** Лимиты обзвона - контроль нагрузки и таймаутов&lt;br /&gt;
* Мониторинг и отчетность&lt;br /&gt;
** Реальное время - отслеживание статуса обзвонов&lt;br /&gt;
** Логирование - детальные логи всех звонков / уведомлений&lt;br /&gt;
** API - полный программный доступ ко всем функциям&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
CLS (Call List Service) - сервис массового обзвона и уведомлений с поддержкой множественных каналов связи.&lt;br /&gt;
&lt;br /&gt;
Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису CLS в реальном времени.&lt;br /&gt;
&lt;br /&gt;
Список обзвона (Call List) - набор контактов с метаданными для выполнения массовой рассылки или обзвона.&lt;br /&gt;
&lt;br /&gt;
ListCaller - основной класс, управляющий выполнением кампании по конкретному списку.&lt;br /&gt;
&lt;br /&gt;
Instance - активный экземпляр ListCaller, выполняющий обзвон.&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Описание методов API&#039;&#039;&#039; =====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом CLS. По умолчанию используется порт 6188/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6188 будет отображен интерфейс Swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|+&#039;&#039;Описание методов API&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление обзвонами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/call&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Прямой звонок с номера на номер&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/cls/calls/list/tasks&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение задач для списка&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/cls/calls/queues/status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение статуса всех очередей&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/start&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Старт списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/stop&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Остановка списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление списками обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Добавление нового списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /lists/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения в CSV файл&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения из CSV файла&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Получения всех списков для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение конкретного списка для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/load/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Дозагрузка в существующую инстанцию списка обзвона | оповещения элементов из скрипта&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /lists/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Изменение существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/status/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение статуса существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление инстанциями обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /instances/add/{list_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Создание инстанции обзвона | оповещения на основе списка, без запуска обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /instances/get/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получить детальную информацию о конкретной инстанции&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /instances/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка инстанций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /instances/remove/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление инстанции обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление временными интервалами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /timeintervals/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Создание временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /timeintervals/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Удаление существующего интервала времени&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /timeintervals/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретного временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /timeintervals/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка временных интервалов&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /timeintervals/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующего временного интервала&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление конфигурациями&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /configs/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретной конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /configs/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получения списка доступных конфигураций&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /configs/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующей конфигурации&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Логирование&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /logs/logs&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение логов с указанной даты&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Лицензия&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение состояния лицензии&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SBS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3535</id>
		<title>SBS. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SBS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3535"/>
		<updated>2026-01-14T11:42:40Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Описание методов API сервиса биометрии (SBS) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис Simple Biometry Server предназначен для извлечения именованных сущностей из текстовых фрагментов (фраз естественной речи). Принимает на вход текстовую строку и возвращает структурированные данные в формате JSON.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Simple Biometry Server (SBS) — сервис извлечения метаданных.&lt;br /&gt;
&lt;br /&gt;
Swagger UI — интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SBS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Описание методов API сервиса биометрии (SBS)&#039;&#039;&#039; =====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SBS. По умолчанию используется порт 6185/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON-документ в кодировке UTF-8 или двоичный файл. Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке &amp;lt;nowiki&amp;gt;http://АДРЕС:6185&amp;lt;/nowiki&amp;gt; будет отображен интерфейс Swagger со всеми методами с возможностью их проверки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|+&#039;&#039;Описание методов API&#039;&#039;&lt;br /&gt;
!style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/analyze&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Получение аналитических метаданных из голосового фрагмента. Вернется массив с метаданными голосового фрагмента.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для анализа.&amp;lt;/small&amp;gt; &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Пример:&amp;lt;/small&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  age: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: 20-29, # {&amp;quot;00-05&amp;quot;, &amp;quot;06-12&amp;quot;, &amp;quot;13-19&amp;quot;, &amp;quot;20-29&amp;quot;, &amp;quot;30-39&amp;quot;, &amp;quot;40-49&amp;quot;, &amp;quot;50-59&amp;quot;, &amp;quot;60+&amp;quot;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  emotion: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: SADNESS, # { &amp;quot;ANGER&amp;quot;, &amp;quot;BORE&amp;quot;, &amp;quot;DISAPPOINTMENT&amp;quot;, &amp;quot;DISGUST&amp;quot;, &amp;quot;EXCITEMENT&amp;quot;, &amp;quot;FEAR&amp;quot;, &amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt; &amp;lt;&amp;lt;&amp;quot;NEUTRAL&amp;quot;, &amp;quot;PAIN&amp;quot;, &amp;quot;PLEASURE&amp;quot;, &amp;quot;SADNESS&amp;quot;, &amp;quot;SUPRISE&amp;quot;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  gender: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: FEMALE, # { &amp;quot;MALE&amp;quot;, &amp;quot;FEMALE&amp;quot; }&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  multispeaker : {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: YES, # { &amp;quot;YES&amp;quot;, &amp;quot;NO&amp;quot; }&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  synth : {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: YES, # { &amp;quot;NO&amp;quot;, &amp;quot;YES&amp;quot; }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.73&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/noiselevel&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;Возвращает процент зашумленности аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для анализа&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Пример ответа:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{ error: 0, message: &#039;success&#039;, &#039;noise&#039;: 0.79 }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/search&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Поиск говорящего по базе слепков.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для анализа&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;threshold&#039;&#039;&#039; —  порог совпадения спикера, от 0 до 1&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, то поиск не будет осуществлен, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Пример ответа:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{ error: 0, speaker: Ivan, confidence: 0.79 }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/verify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Сравнение wav-файла cо слепком в базе. В ответе - вероятность совпадения от 0 до 1.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для поиска&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; —  идентификатор говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, но слепок не будет проверен, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;confidence&amp;quot;: 0.78 }&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/speakers/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Добавление слепка в базу.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; —  имя говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для создания оцифрованного представления говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, но слепок не будет создан, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;251f78d7-ee50-4ba1-a669-ee89fdaf5433&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/sbs/speakers/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Удаление слепка из базы.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; —  идентификатор говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{ error: INT, message: DESCRIPTION }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/sbs/speakers/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Получение списка всех слепков.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;251f78d7-ee50-4ba1-a669-ee89fdaf5433&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование слепка&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/speakers/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Дообучение слепка.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для обучения&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; &#039;&#039;&#039;—&#039;&#039;&#039;   идентификатор слепка&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, то слепок не будет дообучен, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;Success&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=RES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3532</id>
		<title>RES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=RES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3532"/>
		<updated>2026-01-14T07:17:38Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Файл config.json */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для обеспечения доступа к отчетам kibana в интерфейсе UPS и отправки в elasticsearch статистики работы роботов SES.&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Report Engine Service (RES) – сервис проксирования запросов к отчетам Kibana в интерфейсе UPS. Сервис отображает все отчеты Kibana.&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
Для нормальной работы сервис должен быть установлен на сервере с UPS. В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
    • UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
    • Kibana – настраивается через файл /opt/res/config.json. kibana может быть расположен на другом хосте&lt;br /&gt;
    • elasticsearch - настраивается через файл /opt/res/config.json. elasticsearch может быть расположен на другом хосте&lt;br /&gt;
    • SES – настраивается через файл /opt/res/config.json. SES может быть расположен на другом хосте&lt;br /&gt;
===== &#039;&#039;&#039;Установка RES&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление RES осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./res-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./res-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./res-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить RES &amp;lt;code&amp;gt;/opt/res/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/res/inupdate -b&amp;lt;/code&amp;gt; —  обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/res/inupdate -r&amp;lt;/code&amp;gt; —  обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/res/inupdate -n&amp;lt;/code&amp;gt; —  обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; —  это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/res/.userapi (это файл авторизации в API, нужен для обновления и загрузки )&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/res/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable res.service &amp;amp;&amp;amp; sudo systemctl start res.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status res.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp а также порту, определенном в конфиге (по умолчанию 6189/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка&#039;&#039;&#039;===&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса res производится в файле /opt/res/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! style=&amp;quot;width: 22%&amp;quot; |Параметр&lt;br /&gt;
!По умолчанию&lt;br /&gt;
!Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6189&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.res в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.urls&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:{port}/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Список серверов {port}/{service} для получения статистики. Сервисы - 6190/ses&lt;br /&gt;
и 6188/cls&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|60&lt;br /&gt;
|Таймаут на подключение к серверам {service}. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|120&lt;br /&gt;
|Таймаут на чтение статистики с серверов {service}. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.ses.scores&lt;br /&gt;
|[&amp;quot;one&amp;quot;, &amp;quot;two&amp;quot;, &amp;quot;three&amp;quot;,&lt;br /&gt;
 &amp;quot;four&amp;quot;, &amp;quot;five&amp;quot;]&lt;br /&gt;
|Ключевые слова для поиска оценки работы - только для ses.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.url&lt;br /&gt;
|&amp;quot;https://10.2.0.30:9200&amp;quot;&lt;br /&gt;
|Сервер Elasticsearch для выгрузки статистики.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.username&lt;br /&gt;
|&amp;quot;elastic&amp;quot;&lt;br /&gt;
|Пользователь elasticsearch.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.password&lt;br /&gt;
|&amp;quot;  &amp;quot;&lt;br /&gt;
|Пароль пользователя elasticsearch.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.timers.connect&lt;br /&gt;
|60&lt;br /&gt;
|Таймаут на подключение к серверам Elasticsearch. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.timers.read&lt;br /&gt;
|120&lt;br /&gt;
|Таймаут на выгрузку статистики на сервер Elasticsearch. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.kibana.url&lt;br /&gt;
|&amp;quot;https://10.2.0.30:5601&amp;quot;&lt;br /&gt;
|Сервер kibana для получения отчетов.&lt;br /&gt;
|-&lt;br /&gt;
|servers.kibana.timers.connect&lt;br /&gt;
|60&lt;br /&gt;
|Таймаут на подключение к серверу Kibana. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.kibana.timers.read&lt;br /&gt;
|120&lt;br /&gt;
|Таймаут на чтение отчетов с сервера Kibana. При превышении в журнал будет записана ошибка таймаут.а&lt;br /&gt;
|-&lt;br /&gt;
|loader.time&lt;br /&gt;
|[&amp;quot;05:00&amp;quot;, &amp;quot;17:00&amp;quot;]&lt;br /&gt;
|Ежедневное расписание загрузки статистики. Записей может быть больше если нужно чаще актуализировать статистику.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|&amp;quot;logs/&amp;quot;&lt;br /&gt;
|Папка хранения журналов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Максимальное количество журнальных файлов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер журнального файла.&lt;br /&gt;
|}&lt;br /&gt;
Для того чтобы рабочие столы с отчетами были доступны в UPS по https протоколу, в конфигурации реверс прокси должны быть следующие директивы (для nginx):&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;small&amp;gt;proxy_set_header  Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Proto $scheme;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Ssl on; # Optional&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Port $server_port;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также должен быть еще один конфиг файл который перенаправляет порт 5602 ssl на порт 5602 сервиса UPS (proxy_pass   &amp;lt;nowiki&amp;gt;https://UPS_IP:5602&amp;lt;/nowiki&amp;gt;;) &lt;br /&gt;
&lt;br /&gt;
В конфиге должны быть директивы для заголовков CORS и обработки OPTIONS запросов.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Установка и настройка kibana + elasticsearch&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;ВНИМАНИЕ - раздел в доработке&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для работы RES нужно установить и соответствующим образом настроить Elasticsearch и Kibana. Без настроенного подключения к рабочим Elasticsearch и Kibana RES не стартует и пишет в логи ошибку.&lt;br /&gt;
&lt;br /&gt;
Пример установки на один хост с IP 1.2.3.4, без кластера.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Устанавливаем&#039;&#039;&#039; elasticsearch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;dpkg -i elasticsearch-8.15.3-amd64.deb&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Инсталлятор должен выдать &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;The generated password for the elastic built-in superuser is : j9Of2HyCHcK55ElgziyW&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Копируем пароль&#039;&#039;&#039; — он будет использован в разделе servers.elastic.password файла конфигурации RES и для входа в веб-интерфейс Kibana.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Генерируем&#039;&#039;&#039; CA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;/usr/share/elasticsearch/bin/elasticsearch-certutil ca --pem --out /etc/elasticsearch/certs/ca.zip;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;cd /etc/elasticsearch/certs/;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;unzip ca.zip;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С использованием CA &#039;&#039;&#039;генерируем&#039;&#039;&#039; сертификаты для elastik&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/usr/share/elasticsearch/bin/elasticsearch-certutil cert \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--out /etc/elasticsearch/certs/elastic.zip \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--name elastic \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--ip 1.2.3.4, 127.0.0.1 \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--ca-cert /etc/elasticsearch/certs/ca/ca.crt \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--ca-key /etc/elasticsearch/certs/ca/ca.key \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--pem;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;cd /etc/elasticsearch/certs/;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;unzip elastic.zip&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Правим&#039;&#039;&#039; конфиг elasticsearch &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/etc/elasticsearch/elasticsearch.yml&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;cluster.name: res # &#039;&#039;&#039;&#039;&#039;имя кластера - произвольно&#039;&#039;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;path.data: /var/lib/elasticsearch&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;path.logs: /var/log/elasticsearch&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;network.host: 1.2.3.4 # &#039;&#039;&#039;&#039;&#039;здесь ip хоста&#039;&#039;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;http.port: 9200&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.enrollment.enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.http.ssl:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  key: /etc/elasticsearch/certs/elastic/elastic.key&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  certificate: /etc/elasticsearch/certs/elastic/elastic.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  certificate_authorities: /etc/elasticsearch/certs/ca/ca.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.transport.ssl:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  verification_mode: certificate&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  keystore.path: certs/transport.p12&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  truststore.path: certs/transport.p12&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;cluster.initial_master_nodes: [&amp;quot;hostname&amp;quot;] # &#039;&#039;&#039;&#039;&#039;здесь подставить имя хоста&#039;&#039;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;http.host: 0.0.0.0&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;&#039;&#039;Внимание: копировать конфиг отсюда напрямую не получится, wiki добавляет в начало строки вместо пробела «неразрывный пробел» — yaml его не воспринимает.&#039;&#039;&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Стартуем&#039;&#039;&#039; сервис&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl daemon-reload&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl enable elasticsearch.service&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl start elasticsearch&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Проверяем&#039;&#039;&#039; с использованием пароля, сгенерированного в начале&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;curl -X GET -u elastic:j9Of2HyCHcK55ElgziyW &amp;lt;nowiki&amp;gt;https://1.2.3.4:9200&amp;lt;/nowiki&amp;gt; --cacert /etc/elasticsearch/certs/ca/ca.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Устанавливаем&#039;&#039;&#039; kibana&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;dpkg -i kibana-8.15.3-amd64.deb&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Папка для сертификатов: mkdir -p /etc/kibana/certs/&lt;br /&gt;
&lt;br /&gt;
Копируем корневой сертификат: cp -r /etc/elasticsearch/certs/ca /etc/kibana/certs/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получим&#039;&#039;&#039; пароль для доступа из kibana в elasticsearch &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system --auto&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Пароль нужен будет дальше в строке &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.password:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; конфига kibana.&lt;br /&gt;
&lt;br /&gt;
Kibana ставим в варианте http (без ssl).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Правим&#039;&#039;&#039; конфиг kibana &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/etc/kibana/kibana.yml&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.port: 5601&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.host: 0.0.0.0&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.publicBaseUrl: &amp;quot;&amp;lt;nowiki&amp;gt;http://1.2.3.4:5601&amp;lt;/nowiki&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.ssl.enabled: false&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.hosts: [&amp;quot;&amp;lt;nowiki&amp;gt;https://1.2.3.4:9200&amp;lt;/nowiki&amp;gt;&amp;quot;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.username: &amp;quot;kibana_system&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.password: &amp;quot;gfntin_083SKBYC9V5yk&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.ssl.certificateAuthorities: /etc/kibana/certs/ca/ca.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.ssl.verificationMode: full&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;logging:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  appenders:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    file:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      type: file&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      fileName: /var/log/kibana/kibana.log&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      layout:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;        type: json&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  root:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    appenders:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      - default&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      - file&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;pid.file: /run/kibana/kibana.pid&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.authc.providers:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  basic.basic1:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    order: 0&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;csp.strict: false&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;csp.warnLegacyBrowsers: false&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;csp.script_src:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  - unsafe-inline&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  - self&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  - unsafe-eval&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.customResponseHeaders: {&amp;quot;x-frame-options&amp;quot;:&amp;quot;ALLOWALL&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запускаем&#039;&#039;&#039; kibana &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl enable kibana &amp;amp;&amp;amp; systemctl start kibana&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заходим по адресу &amp;lt;nowiki&amp;gt;https://1.2.3.4:5601/&amp;lt;/nowiki&amp;gt; с пользователем elastic и паролем, который создал инсталлятор elasticsearch. Если видим стартовую страничку Kibana, то Elasticsearch и Kibana готовы к работе с RES. После запуска RES установит пользователя reports с паролем reports и правом доступа к рабочим столам kibana. Рекомендуется сменить после этого пароль. Этот пользователь и пароль должен быть указан в [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%B0 конфиг файле ups] в разделе res.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порт 6156/tcp - реверс прокси кибаны и 6189/tcp для доступа к API-интерфейсу. Порт доступа к API может быть изменен в конфигурационном файле. &lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status res&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию —  &amp;lt;code&amp;gt;/opt/res/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u res&amp;lt;/code&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление RES&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/res/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/res/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=RES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3528</id>
		<title>RES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=RES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3528"/>
		<updated>2026-01-14T07:12:05Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Файл config.json */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для обеспечения доступа к отчетам kibana в интерфейсе UPS и отправки в elasticsearch статистики работы роботов SES.&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Report Engine Service (RES) – сервис проксирования запросов к отчетам Kibana в интерфейсе UPS. Сервис отображает все отчеты Kibana.&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
Для нормальной работы сервис должен быть установлен на сервере с UPS. В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
    • UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
    • Kibana – настраивается через файл /opt/res/config.json. kibana может быть расположен на другом хосте&lt;br /&gt;
    • elasticsearch - настраивается через файл /opt/res/config.json. elasticsearch может быть расположен на другом хосте&lt;br /&gt;
    • SES – настраивается через файл /opt/res/config.json. SES может быть расположен на другом хосте&lt;br /&gt;
===== &#039;&#039;&#039;Установка RES&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление RES осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./res-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./res-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./res-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить RES &amp;lt;code&amp;gt;/opt/res/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/res/inupdate -b&amp;lt;/code&amp;gt; —  обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/res/inupdate -r&amp;lt;/code&amp;gt; —  обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/res/inupdate -n&amp;lt;/code&amp;gt; —  обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; —  это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/res/.userapi (это файл авторизации в API, нужен для обновления и загрузки )&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/res/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable res.service &amp;amp;&amp;amp; sudo systemctl start res.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status res.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp а также порту, определенном в конфиге (по умолчанию 6189/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка&#039;&#039;&#039;===&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса res производится в файле /opt/res/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Параметр&lt;br /&gt;
!По умолчанию&lt;br /&gt;
!Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6189&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.res в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.urls&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:{port}/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Список серверов {port}/{service} для получения статистики. Сервисы - 6190/ses&lt;br /&gt;
и 6188/cls&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|60&lt;br /&gt;
|Таймаут на подключение к серверам {service}. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|120&lt;br /&gt;
|Таймаут на чтение статистики с серверов {service}. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.ses.scores&lt;br /&gt;
|[&amp;quot;one&amp;quot;, &amp;quot;two&amp;quot;, &amp;quot;three&amp;quot;,&lt;br /&gt;
 &amp;quot;four&amp;quot;, &amp;quot;five&amp;quot;]&lt;br /&gt;
|Ключевые слова для поиска оценки работы - только для ses.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.url&lt;br /&gt;
|&amp;quot;https://10.2.0.30:9200&amp;quot;&lt;br /&gt;
|Сервер Elasticsearch для выгрузки статистики.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.username&lt;br /&gt;
|&amp;quot;elastic&amp;quot;&lt;br /&gt;
|Пользователь elasticsearch.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.password&lt;br /&gt;
|&amp;quot;  &amp;quot;&lt;br /&gt;
|Пароль пользователя elasticsearch.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.timers.connect&lt;br /&gt;
|60&lt;br /&gt;
|Таймаут на подключение к серверам Elasticsearch. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.timers.read&lt;br /&gt;
|120&lt;br /&gt;
|Таймаут на выгрузку статистики на сервер Elasticsearch. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.kibana.url&lt;br /&gt;
|&amp;quot;https://10.2.0.30:5601&amp;quot;&lt;br /&gt;
|Сервер kibana для получения отчетов.&lt;br /&gt;
|-&lt;br /&gt;
|servers.kibana.timers.connect&lt;br /&gt;
|60&lt;br /&gt;
|Таймаут на подключение к серверу Kibana. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.kibana.timers.read&lt;br /&gt;
|120&lt;br /&gt;
|Таймаут на чтение отчетов с сервера Kibana. При превышении в журнал будет записана ошибка таймаут.а&lt;br /&gt;
|-&lt;br /&gt;
|loader.time&lt;br /&gt;
|[&amp;quot;05:00&amp;quot;, &amp;quot;17:00&amp;quot;]&lt;br /&gt;
|Ежедневное расписание загрузки статистики. Записей может быть больше если нужно чаще актуализировать статистику.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|&amp;quot;logs/&amp;quot;&lt;br /&gt;
|Папка хранения журналов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Максимальное количество журнальных файлов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер журнального файла.&lt;br /&gt;
|}&lt;br /&gt;
Для того чтобы рабочие столы с отчетами были доступны в UPS по https протоколу, в конфигурации реверс прокси должны быть следующие директивы (для nginx):&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;small&amp;gt;proxy_set_header  Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Proto $scheme;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Ssl on; # Optional&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Port $server_port;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также должен быть еще один конфиг файл который перенаправляет порт 5602 ssl на порт 5602 сервиса UPS (proxy_pass   &amp;lt;nowiki&amp;gt;https://UPS_IP:5602&amp;lt;/nowiki&amp;gt;;) &lt;br /&gt;
&lt;br /&gt;
В конфиге должны быть директивы для заголовков CORS и обработки OPTIONS запросов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Установка и настройка kibana + elasticsearch&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;ВНИМАНИЕ - раздел в доработке&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для работы RES нужно установить и соответствующим образом настроить Elasticsearch и Kibana. Без настроенного подключения к рабочим Elasticsearch и Kibana RES не стартует и пишет в логи ошибку.&lt;br /&gt;
&lt;br /&gt;
Пример установки на один хост с IP 1.2.3.4, без кластера.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Устанавливаем&#039;&#039;&#039; elasticsearch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;dpkg -i elasticsearch-8.15.3-amd64.deb&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Инсталлятор должен выдать &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;The generated password for the elastic built-in superuser is : j9Of2HyCHcK55ElgziyW&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Копируем пароль&#039;&#039;&#039; — он будет использован в разделе servers.elastic.password файла конфигурации RES и для входа в веб-интерфейс Kibana.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Генерируем&#039;&#039;&#039; CA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;/usr/share/elasticsearch/bin/elasticsearch-certutil ca --pem --out /etc/elasticsearch/certs/ca.zip;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;cd /etc/elasticsearch/certs/;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;unzip ca.zip;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С использованием CA &#039;&#039;&#039;генерируем&#039;&#039;&#039; сертификаты для elastik&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/usr/share/elasticsearch/bin/elasticsearch-certutil cert \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--out /etc/elasticsearch/certs/elastic.zip \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--name elastic \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--ip 1.2.3.4, 127.0.0.1 \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--ca-cert /etc/elasticsearch/certs/ca/ca.crt \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--ca-key /etc/elasticsearch/certs/ca/ca.key \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--pem;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;cd /etc/elasticsearch/certs/;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;unzip elastic.zip&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Правим&#039;&#039;&#039; конфиг elasticsearch &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/etc/elasticsearch/elasticsearch.yml&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;cluster.name: res # &#039;&#039;&#039;&#039;&#039;имя кластера - произвольно&#039;&#039;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;path.data: /var/lib/elasticsearch&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;path.logs: /var/log/elasticsearch&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;network.host: 1.2.3.4 # &#039;&#039;&#039;&#039;&#039;здесь ip хоста&#039;&#039;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;http.port: 9200&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.enrollment.enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.http.ssl:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  key: /etc/elasticsearch/certs/elastic/elastic.key&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  certificate: /etc/elasticsearch/certs/elastic/elastic.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  certificate_authorities: /etc/elasticsearch/certs/ca/ca.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.transport.ssl:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  verification_mode: certificate&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  keystore.path: certs/transport.p12&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  truststore.path: certs/transport.p12&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;cluster.initial_master_nodes: [&amp;quot;hostname&amp;quot;] # &#039;&#039;&#039;&#039;&#039;здесь подставить имя хоста&#039;&#039;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;http.host: 0.0.0.0&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;&#039;&#039;Внимание: копировать конфиг отсюда напрямую не получится, wiki добавляет в начало строки вместо пробела «неразрывный пробел» — yaml его не воспринимает.&#039;&#039;&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Стартуем&#039;&#039;&#039; сервис&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl daemon-reload&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl enable elasticsearch.service&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl start elasticsearch&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Проверяем&#039;&#039;&#039; с использованием пароля, сгенерированного в начале&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;curl -X GET -u elastic:j9Of2HyCHcK55ElgziyW &amp;lt;nowiki&amp;gt;https://1.2.3.4:9200&amp;lt;/nowiki&amp;gt; --cacert /etc/elasticsearch/certs/ca/ca.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Устанавливаем&#039;&#039;&#039; kibana&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;dpkg -i kibana-8.15.3-amd64.deb&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Папка для сертификатов: mkdir -p /etc/kibana/certs/&lt;br /&gt;
&lt;br /&gt;
Копируем корневой сертификат: cp -r /etc/elasticsearch/certs/ca /etc/kibana/certs/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получим&#039;&#039;&#039; пароль для доступа из kibana в elasticsearch &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system --auto&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Пароль нужен будет дальше в строке &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.password:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; конфига kibana.&lt;br /&gt;
&lt;br /&gt;
Kibana ставим в варианте http (без ssl).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Правим&#039;&#039;&#039; конфиг kibana &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/etc/kibana/kibana.yml&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.port: 5601&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.host: 0.0.0.0&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.publicBaseUrl: &amp;quot;&amp;lt;nowiki&amp;gt;http://1.2.3.4:5601&amp;lt;/nowiki&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.ssl.enabled: false&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.hosts: [&amp;quot;&amp;lt;nowiki&amp;gt;https://1.2.3.4:9200&amp;lt;/nowiki&amp;gt;&amp;quot;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.username: &amp;quot;kibana_system&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.password: &amp;quot;gfntin_083SKBYC9V5yk&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.ssl.certificateAuthorities: /etc/kibana/certs/ca/ca.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.ssl.verificationMode: full&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;logging:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  appenders:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    file:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      type: file&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      fileName: /var/log/kibana/kibana.log&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      layout:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;        type: json&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  root:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    appenders:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      - default&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      - file&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;pid.file: /run/kibana/kibana.pid&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.authc.providers:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  basic.basic1:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    order: 0&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;csp.strict: false&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;csp.warnLegacyBrowsers: false&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;csp.script_src:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  - unsafe-inline&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  - self&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  - unsafe-eval&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.customResponseHeaders: {&amp;quot;x-frame-options&amp;quot;:&amp;quot;ALLOWALL&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запускаем&#039;&#039;&#039; kibana &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl enable kibana &amp;amp;&amp;amp; systemctl start kibana&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заходим по адресу &amp;lt;nowiki&amp;gt;https://1.2.3.4:5601/&amp;lt;/nowiki&amp;gt; с пользователем elastic и паролем, который создал инсталлятор elasticsearch. Если видим стартовую страничку Kibana, то Elasticsearch и Kibana готовы к работе с RES. После запуска RES установит пользователя reports с паролем reports и правом доступа к рабочим столам kibana. Рекомендуется сменить после этого пароль. Этот пользователь и пароль должен быть указан в [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%B0 конфиг файле ups] в разделе res.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порт 6156/tcp - реверс прокси кибаны и 6189/tcp для доступа к API-интерфейсу. Порт доступа к API может быть изменен в конфигурационном файле. &lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status res&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию —  &amp;lt;code&amp;gt;/opt/res/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u res&amp;lt;/code&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление RES&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/res/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/res/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=RES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3522</id>
		<title>RES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=RES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3522"/>
		<updated>2026-01-13T14:36:52Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Файл config.json */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для обеспечения доступа к отчетам kibana в интерфейсе UPS и отправки в elasticsearch статистики работы роботов SES.&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Report Engine Service (RES) – сервис проксирования запросов к отчетам Kibana в интерфейсе UPS. Сервис отображает все отчеты Kibana.&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
Для нормальной работы сервис должен быть установлен на сервере с UPS. В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
    • UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
    • Kibana – настраивается через файл /opt/res/config.json. kibana может быть расположен на другом хосте&lt;br /&gt;
    • elasticsearch - настраивается через файл /opt/res/config.json. elasticsearch может быть расположен на другом хосте&lt;br /&gt;
    • SES – настраивается через файл /opt/res/config.json. SES может быть расположен на другом хосте&lt;br /&gt;
===== &#039;&#039;&#039;Установка RES&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление RES осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./res-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./res-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./res-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить RES &amp;lt;code&amp;gt;/opt/res/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/res/inupdate -b&amp;lt;/code&amp;gt; —  обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/res/inupdate -r&amp;lt;/code&amp;gt; —  обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/res/inupdate -n&amp;lt;/code&amp;gt; —  обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/res/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; —  это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/res/.userapi (это файл авторизации в API, нужен для обновления и загрузки )&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/res/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable res.service &amp;amp;&amp;amp; sudo systemctl start res.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status res.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp а также порту, определенном в конфиге (по умолчанию 6189/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка&#039;&#039;&#039;===&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса res производится в файле /opt/res/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Параметр&lt;br /&gt;
!По умолчанию&lt;br /&gt;
!Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6189&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.res в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|servers.ses.{service}&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:{port}/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Список серверов {port}/{service} для получения статистики. Сервисы - 6190/ses&lt;br /&gt;
и 6188/cls&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|60&lt;br /&gt;
|Таймаут на подключение к серверам {service}. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|120&lt;br /&gt;
|Таймаут на чтение статистики с серверов {service}. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.ses.scores&lt;br /&gt;
|[&amp;quot;one&amp;quot;, &amp;quot;two&amp;quot;, &amp;quot;three&amp;quot;,&lt;br /&gt;
 &amp;quot;four&amp;quot;, &amp;quot;five&amp;quot;]&lt;br /&gt;
|Ключевые слова для поиска оценки работы - только для ses.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.url&lt;br /&gt;
|&amp;quot;https://10.2.0.30:9200&amp;quot;&lt;br /&gt;
|Сервер Elasticsearch для выгрузки статистики.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.username&lt;br /&gt;
|&amp;quot;elastic&amp;quot;&lt;br /&gt;
|Пользователь elasticsearch.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.password&lt;br /&gt;
|&amp;quot;  &amp;quot;&lt;br /&gt;
|Пароль пользователя elasticsearch.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.timers.connect&lt;br /&gt;
|60&lt;br /&gt;
|Таймаут на подключение к серверам Elasticsearch. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.elastic.timers.read&lt;br /&gt;
|120&lt;br /&gt;
|Таймаут на выгрузку статистики на сервер Elasticsearch. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.kibana.url&lt;br /&gt;
|&amp;quot;https://10.2.0.30:5601&amp;quot;&lt;br /&gt;
|Сервер kibana для получения отчетов.&lt;br /&gt;
|-&lt;br /&gt;
|servers.kibana.timers.connect&lt;br /&gt;
|60&lt;br /&gt;
|Таймаут на подключение к серверу Kibana. При превышении в журнал будет записана ошибка таймаута.&lt;br /&gt;
|-&lt;br /&gt;
|servers.kibana.timers.read&lt;br /&gt;
|120&lt;br /&gt;
|Таймаут на чтение отчетов с сервера Kibana. При превышении в журнал будет записана ошибка таймаут.а&lt;br /&gt;
|-&lt;br /&gt;
|loader.time&lt;br /&gt;
|[&amp;quot;05:00&amp;quot;, &amp;quot;17:00&amp;quot;]&lt;br /&gt;
|Ежедневное расписание загрузки статистики. Записей может быть больше если нужно чаще актуализировать статистику.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|&amp;quot;logs/&amp;quot;&lt;br /&gt;
|Папка хранения журналов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Максимальное количество журнальных файлов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер журнального файла.&lt;br /&gt;
|}&lt;br /&gt;
Для того чтобы рабочие столы с отчетами были доступны в UPS по https протоколу, в конфигурации реверс прокси должны быть следующие директивы (для nginx):&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;small&amp;gt;proxy_set_header  Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Proto $scheme;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Ssl on; # Optional&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Port $server_port;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  proxy_set_header  X-Forwarded-Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также должен быть еще один конфиг файл который перенаправляет порт 5602 ssl на порт 5602 сервиса UPS (proxy_pass   &amp;lt;nowiki&amp;gt;https://UPS_IP:5602&amp;lt;/nowiki&amp;gt;;) &lt;br /&gt;
&lt;br /&gt;
В конфиге должны быть директивы для заголовков CORS и обработки OPTIONS запросов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Установка и настройка kibana + elasticsearch&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;ВНИМАНИЕ - раздел в доработке&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для работы RES нужно установить и соответствующим образом настроить Elasticsearch и Kibana. Без настроенного подключения к рабочим Elasticsearch и Kibana RES не стартует и пишет в логи ошибку.&lt;br /&gt;
&lt;br /&gt;
Пример установки на один хост с IP 1.2.3.4, без кластера.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Устанавливаем&#039;&#039;&#039; elasticsearch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;dpkg -i elasticsearch-8.15.3-amd64.deb&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Инсталлятор должен выдать &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;The generated password for the elastic built-in superuser is : j9Of2HyCHcK55ElgziyW&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Копируем пароль&#039;&#039;&#039; — он будет использован в разделе servers.elastic.password файла конфигурации RES и для входа в веб-интерфейс Kibana.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Генерируем&#039;&#039;&#039; CA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;/usr/share/elasticsearch/bin/elasticsearch-certutil ca --pem --out /etc/elasticsearch/certs/ca.zip;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;cd /etc/elasticsearch/certs/;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;unzip ca.zip;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С использованием CA &#039;&#039;&#039;генерируем&#039;&#039;&#039; сертификаты для elastik&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/usr/share/elasticsearch/bin/elasticsearch-certutil cert \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--out /etc/elasticsearch/certs/elastic.zip \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--name elastic \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--ip 1.2.3.4, 127.0.0.1 \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--ca-cert /etc/elasticsearch/certs/ca/ca.crt \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--ca-key /etc/elasticsearch/certs/ca/ca.key \&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;--pem;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;cd /etc/elasticsearch/certs/;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;unzip elastic.zip&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Правим&#039;&#039;&#039; конфиг elasticsearch &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/etc/elasticsearch/elasticsearch.yml&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;cluster.name: res # &#039;&#039;&#039;&#039;&#039;имя кластера - произвольно&#039;&#039;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;path.data: /var/lib/elasticsearch&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;path.logs: /var/log/elasticsearch&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;network.host: 1.2.3.4 # &#039;&#039;&#039;&#039;&#039;здесь ip хоста&#039;&#039;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;http.port: 9200&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.enrollment.enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.http.ssl:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  key: /etc/elasticsearch/certs/elastic/elastic.key&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  certificate: /etc/elasticsearch/certs/elastic/elastic.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  certificate_authorities: /etc/elasticsearch/certs/ca/ca.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.transport.ssl:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  enabled: true&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  verification_mode: certificate&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  keystore.path: certs/transport.p12&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  truststore.path: certs/transport.p12&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;cluster.initial_master_nodes: [&amp;quot;hostname&amp;quot;] # &#039;&#039;&#039;&#039;&#039;здесь подставить имя хоста&#039;&#039;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;http.host: 0.0.0.0&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;&#039;&#039;Внимание: копировать конфиг отсюда напрямую не получится, wiki добавляет в начало строки вместо пробела «неразрывный пробел» — yaml его не воспринимает.&#039;&#039;&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&#039;&#039;&#039;Стартуем&#039;&#039;&#039; сервис&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl daemon-reload&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl enable elasticsearch.service&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl start elasticsearch&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Проверяем&#039;&#039;&#039; с использованием пароля, сгенерированного в начале&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;curl -X GET -u elastic:j9Of2HyCHcK55ElgziyW &amp;lt;nowiki&amp;gt;https://1.2.3.4:9200&amp;lt;/nowiki&amp;gt; --cacert /etc/elasticsearch/certs/ca/ca.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Устанавливаем&#039;&#039;&#039; kibana&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;dpkg -i kibana-8.15.3-amd64.deb&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Папка для сертификатов: mkdir -p /etc/kibana/certs/&lt;br /&gt;
&lt;br /&gt;
Копируем корневой сертификат: cp -r /etc/elasticsearch/certs/ca /etc/kibana/certs/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получим&#039;&#039;&#039; пароль для доступа из kibana в elasticsearch &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system --auto&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Пароль нужен будет дальше в строке &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.password:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt; конфига kibana.&lt;br /&gt;
&lt;br /&gt;
Kibana ставим в варианте http (без ssl).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Правим&#039;&#039;&#039; конфиг kibana &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;/etc/kibana/kibana.yml&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.port: 5601&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.host: 0.0.0.0&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.publicBaseUrl: &amp;quot;&amp;lt;nowiki&amp;gt;http://1.2.3.4:5601&amp;lt;/nowiki&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.ssl.enabled: false&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.hosts: [&amp;quot;&amp;lt;nowiki&amp;gt;https://1.2.3.4:9200&amp;lt;/nowiki&amp;gt;&amp;quot;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.username: &amp;quot;kibana_system&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.password: &amp;quot;gfntin_083SKBYC9V5yk&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.ssl.certificateAuthorities: /etc/kibana/certs/ca/ca.crt&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;elasticsearch.ssl.verificationMode: full&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;logging:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  appenders:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    file:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      type: file&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      fileName: /var/log/kibana/kibana.log&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      layout:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;        type: json&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  root:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    appenders:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      - default&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      - file&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;pid.file: /run/kibana/kibana.pid&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;xpack.security.authc.providers:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  basic.basic1:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    order: 0&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;csp.strict: false&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;csp.warnLegacyBrowsers: false&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;csp.script_src:&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  - unsafe-inline&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  - self&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  - unsafe-eval&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;server.customResponseHeaders: {&amp;quot;x-frame-options&amp;quot;:&amp;quot;ALLOWALL&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Запускаем&#039;&#039;&#039; kibana &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;systemctl enable kibana &amp;amp;&amp;amp; systemctl start kibana&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заходим по адресу &amp;lt;nowiki&amp;gt;https://1.2.3.4:5601/&amp;lt;/nowiki&amp;gt; с пользователем elastic и паролем, который создал инсталлятор elasticsearch. Если видим стартовую страничку Kibana, то Elasticsearch и Kibana готовы к работе с RES. После запуска RES установит пользователя reports с паролем reports и правом доступа к рабочим столам kibana. Рекомендуется сменить после этого пароль. Этот пользователь и пароль должен быть указан в [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%B0 конфиг файле ups] в разделе res.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порт 6156/tcp - реверс прокси кибаны и 6189/tcp для доступа к API-интерфейсу. Порт доступа к API может быть изменен в конфигурационном файле. &lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status res&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию —  &amp;lt;code&amp;gt;/opt/res/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u res&amp;lt;/code&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление RES&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/res/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/res/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3521</id>
		<title>CLS. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3521"/>
		<updated>2026-01-13T13:51:08Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Описание методов API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис массового обзвона и уведомлений, поддерживающий множественные каналы связи и гибкую настройку&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;Основные возможности:&#039;&#039;&#039; ======&lt;br /&gt;
* Выбор канала связи&lt;br /&gt;
** голосовые звонки - интеграция с &#039;&#039;&#039;FreeSWITCH&#039;&#039;&#039; для исходящих звонков&lt;br /&gt;
** telegram | VK - интеграция с &#039;&#039;&#039;SES&#039;&#039;&#039; для последующей отправки уведомления в мессенджер&lt;br /&gt;
* Управление списками обзвона&lt;br /&gt;
** CRUD операции - создание, чтение, изменение, удаление списков&lt;br /&gt;
** Импорт/Экспорт - загрузка и выгрузка контактов из CSV&lt;br /&gt;
** Автозагрузка - динамическое расширение списков через скрипт&lt;br /&gt;
** Планировщик - cron-подобное расписание запуска обзвонов&lt;br /&gt;
* Конфигурация и лимиты&lt;br /&gt;
** Глобальные настройки - централизованное управление конфигурацией&lt;br /&gt;
** Временные интервалы - точное управление временем работы&lt;br /&gt;
** Праздники - учет выходных дней при обзвонах&lt;br /&gt;
** Лимиты обзвона - контроль нагрузки и таймаутов&lt;br /&gt;
* Мониторинг и отчетность&lt;br /&gt;
** Реальное время - отслеживание статуса обзвонов&lt;br /&gt;
** Логирование - детальные логи всех звонков / уведомлений&lt;br /&gt;
** API - полный программный доступ ко всем функциям&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
CLS (Call List Service) - сервис массового обзвона и уведомлений с поддержкой множественных каналов связи.&lt;br /&gt;
&lt;br /&gt;
Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису CLS в реальном времени.&lt;br /&gt;
&lt;br /&gt;
Список обзвона (Call List) - набор контактов с метаданными для выполнения массовой рассылки или обзвона.&lt;br /&gt;
&lt;br /&gt;
ListCaller - основной класс, управляющий выполнением кампании по конкретному списку.&lt;br /&gt;
&lt;br /&gt;
Instance - активный экземпляр ListCaller, выполняющий обзвон.&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Описание методов API&#039;&#039;&#039; =====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом CLS. По умолчанию используется порт 6188/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6188 будет отображен интерфейс Swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|+&#039;&#039;Описание методов API&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление обзвонами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/call&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Прямой звонок с номера на номер&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;source&amp;quot;: &amp;quot;8000&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;destination&amp;quot;: &amp;quot;6000&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;limits&amp;quot;: {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;no_answer_timeout&amp;quot;: 10,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;dial_tries&amp;quot;: 1,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;max_channels&amp;quot;: 2,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;redial_timeout&amp;quot;: 600,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;watchdog&amp;quot;: 240&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;},&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;metadata&amp;quot;: {}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/cls/calls/list/tasks&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение задач для списка&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;list_id&#039;&#039;&#039; - идентификатор списка&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;limit&#039;&#039;&#039; - лимит задач для вывода&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;tasks&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/cls/calls/queues/status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение статуса всех очередей&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;No parameters&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;queues&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;main_queue_size&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;log_queue_size&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;active_tasks_count&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;total_workers&amp;quot;: 3,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;log_workers&amp;quot;: 3,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;total_tasks_history&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/start&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Старт списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/stop&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Остановка списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление списками обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Добавление нового списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;name&amp;quot;: &amp;quot;Test Call List&amp;quot;,&amp;lt;/code&amp;gt; - имя списка&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;source&amp;quot;: &amp;quot;8000&amp;quot;,&amp;lt;/code&amp;gt; - источник вызова | оповещения&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;limits&amp;quot;: {&amp;lt;/code&amp;gt; - лимиты для вызова (опционально)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;no_answer_timeout&amp;quot;: 10,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;dial_tries&amp;quot;: 1,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;max_channels&amp;quot;: 2,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;redial_timeout&amp;quot;: 600,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;watchdog&amp;quot;: 240&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;dialed&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;timeintervals&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;default&amp;quot;&amp;lt;/code&amp;gt; - id временного интервала&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  ],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;voice&amp;quot;,&amp;lt;/code&amp;gt; - используемый канал&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;channel_parameters&amp;quot;: {&amp;lt;/code&amp;gt; - используется для каналов telegram и vk&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;endpoint&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;script_before_dial&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/code&amp;gt; - скрипт для выполнения перед каждым вызовом | оповещением&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/code&amp;gt; - скрипт дозагрузки элементов для обзвона&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;autoload&amp;quot;: false,&amp;lt;/code&amp;gt; - автоматическая дозагрузка элементов для обзвона при старте списка&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;scheduler&amp;quot;: [&amp;lt;/code&amp;gt; - планировщик выполнения обзвона | оповещения&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;35 14 * * *&amp;quot;&amp;lt;/code&amp;gt; - cron-расписание запуска обзвона&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  ],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;items&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      &amp;quot;destinations&amp;quot;: [&amp;lt;/code&amp;gt; - телефоны | user_id для каналов отличных от voice&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;        &amp;quot;6000&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      ],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      &amp;quot;metadata&amp;quot;: {}&amp;lt;/code&amp;gt; - дополнительная произвольная информация&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  ]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&lt;br /&gt;
  &amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;123e4567-e89b-12d3-a456-426614174000&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /lists/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения в CSV файл&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения из CSV файла&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;csv&#039;&#039;&#039; - csv файл с элементами списка&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Получения всех списков для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;No parameters&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;lists&amp;quot;: []&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение конкретного списка для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;list&amp;quot;: {}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/load/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Дозагрузка в существующую инстанцию списка обзвона | оповещения элементов из скрипта&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;id - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /lists/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Изменение существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;payload&#039;&#039;&#039; как в &#039;&#039;&#039;POST /lists/add&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/status/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение статуса существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;id - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;status&amp;quot;: {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;total_items&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;processed_items&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;completed&amp;quot;: false,{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;reason&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;running&amp;quot;: false&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление инстанциями обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /instances/add/{list_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Создание инстанции обзвона | оповещения на основе списка, без запуска обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /instances/get/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получить детальную информацию о конкретной инстанции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка | инстанции (одно и тоже)&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;86c08271-8415-4ba5-bcf1-e1115a602bd8&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;name&amp;quot;: &amp;quot;Test Call List&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;source&amp;quot;: &amp;quot;8000&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;limits&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;no_answer_timeout&amp;quot;: 5,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;dial_tries&amp;quot;: 1,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;max_channels&amp;quot;: 2,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;redial_timeout&amp;quot;: 200,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;watchdog&amp;quot;: 60&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;timeintervals&amp;quot;: [&amp;quot;default&amp;quot;],&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;holidays&amp;quot;: [&amp;quot;2025-09-14&amp;quot;],&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;voice&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;running&amp;quot;: true,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;progress&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;total_items&amp;quot;: 1,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;processed_items&amp;quot;: 1,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;completed&amp;quot;: false,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;reason&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;job_info&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;has_job&amp;quot;: true,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;job_id&amp;quot;: &amp;quot;86c08271-8415-4ba5-bcf1-e1115a602bd8&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;next_run&amp;quot;: &amp;quot;2025-12-24 20:00:00+03:00&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;created&amp;quot;: &amp;quot;2025-08-18T14:57:17.762777&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;items&amp;quot;: [&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
            &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;destinations&amp;quot;: [&amp;quot;6000&amp;quot;],&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
            &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;metadata&amp;quot;: {}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /instances/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка инстанций&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;No parameters&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;total&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;instances&amp;quot;: []&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /instances/remove/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление инстанции обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039;&amp;lt;nowiki&amp;gt; - id списка | инстанции (одно и тоже)&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление временными интервалами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /timeintervals/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Создание временного интервала&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;02f2d1ce-bb0b-4856-904b-2db13250bb90&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;name&amp;quot;: &amp;quot;Новый интервал 2&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;weekdays&amp;quot;: [1],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;months&amp;quot;: [1],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;dates&amp;quot;: [1],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;intervals&amp;quot;: [[0,1440],]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /timeintervals/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Удаление существующего интервала времени&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id интервала времени&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /timeintervals/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретного временного интервала&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id интервала времени&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;timeinterval&amp;quot;: {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;name&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;weekdays&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;months&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;dates&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;intervals&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;[0, 1440]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /timeintervals/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка временных интервалов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;No parameters&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;timeintervals&amp;quot;: []&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /timeintervals/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующего временного интервала&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;payload&#039;&#039;&#039; как в &#039;&#039;&#039;POST /timeintervals/add&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление конфигурациями&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /configs/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретной конфигурации&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id конфигурации&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;data&amp;quot;: {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;limits&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;params&amp;quot;: {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;watchdog&amp;quot;: 60,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;no_answer_timeout&amp;quot;: 10,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;dial_tries&amp;quot;: 1,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;max_channels&amp;quot;: 2,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;redial_timeout&amp;quot;: 600&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /configs/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получения списка доступных конфигураций&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;No parameters&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /configs/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующей конфигурации&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;params&amp;quot;: {}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Логирование&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /logs/logs&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение логов с указанной даты&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - стартовая дата (формат: 2025-01-01)&amp;lt;/small&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id -&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;id списка для фильтрации (опционально)&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;logs&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;uuid&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;voice&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;source&amp;quot;: &amp;quot;8000&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;destination&amp;quot;: &amp;quot;8000&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;Call to 8000 ended&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;duration&amp;quot;: &amp;quot;44&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;status&amp;quot;: &amp;quot;CALL_ENDED&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;hangup_cause&amp;quot;: &amp;quot;NORMAL_TEMPORARY_FAILURE&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;sip_hangup_init&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;sip:200&amp;lt;/nowiki&amp;gt;&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;metadata&amp;quot;: null&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Лицензия&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение состояния лицензии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;No parameters&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;uuid&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;remaining_licenses&amp;quot;: &amp;quot;infinity&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;threshold&amp;quot;: 0&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3520</id>
		<title>CLS. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3520"/>
		<updated>2026-01-13T08:48:29Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Описание методов API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис массового обзвона и уведомлений, поддерживающий множественные каналы связи и гибкую настройку&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;Основные возможности:&#039;&#039;&#039; ======&lt;br /&gt;
* Выбор канала связи&lt;br /&gt;
** голосовые звонки - интеграция с &#039;&#039;&#039;FreeSWITCH&#039;&#039;&#039; для исходящих звонков&lt;br /&gt;
** telegram | VK - интеграция с &#039;&#039;&#039;SES&#039;&#039;&#039; для последующей отправки уведомления в мессенджер&lt;br /&gt;
* Управление списками обзвона&lt;br /&gt;
** CRUD операции - создание, чтение, изменение, удаление списков&lt;br /&gt;
** Импорт/Экспорт - загрузка и выгрузка контактов из CSV&lt;br /&gt;
** Автозагрузка - динамическое расширение списков через скрипт&lt;br /&gt;
** Планировщик - cron-подобное расписание запуска обзвонов&lt;br /&gt;
* Конфигурация и лимиты&lt;br /&gt;
** Глобальные настройки - централизованное управление конфигурацией&lt;br /&gt;
** Временные интервалы - точное управление временем работы&lt;br /&gt;
** Праздники - учет выходных дней при обзвонах&lt;br /&gt;
** Лимиты обзвона - контроль нагрузки и таймаутов&lt;br /&gt;
* Мониторинг и отчетность&lt;br /&gt;
** Реальное время - отслеживание статуса обзвонов&lt;br /&gt;
** Логирование - детальные логи всех звонков / уведомлений&lt;br /&gt;
** API - полный программный доступ ко всем функциям&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
CLS (Call List Service) - сервис массового обзвона и уведомлений с поддержкой множественных каналов связи.&lt;br /&gt;
&lt;br /&gt;
Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису CLS в реальном времени.&lt;br /&gt;
&lt;br /&gt;
Список обзвона (Call List) - набор контактов с метаданными для выполнения массовой рассылки или обзвона.&lt;br /&gt;
&lt;br /&gt;
ListCaller - основной класс, управляющий выполнением кампании по конкретному списку.&lt;br /&gt;
&lt;br /&gt;
Instance - активный экземпляр ListCaller, выполняющий обзвон.&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Описание методов API&#039;&#039;&#039; =====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом CLS. По умолчанию используется порт 6188/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6188 будет отображен интерфейс Swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|+&#039;&#039;Описание методов API&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление обзвонами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/call&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Прямой звонок с номера на номер&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;source&amp;quot;: &amp;quot;8000&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;destination&amp;quot;: &amp;quot;6000&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;limits&amp;quot;: {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;no_answer_timeout&amp;quot;: 10,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;dial_tries&amp;quot;: 1,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;max_channels&amp;quot;: 2,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;redial_timeout&amp;quot;: 600,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;watchdog&amp;quot;: 240&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;},&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;metadata&amp;quot;: {}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/start&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Старт списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /calls/stop&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Остановка списка обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление списками обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Добавление нового списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;name&amp;quot;: &amp;quot;Test Call List&amp;quot;,&amp;lt;/code&amp;gt; - имя списка&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;source&amp;quot;: &amp;quot;8000&amp;quot;,&amp;lt;/code&amp;gt; - источник вызова | оповещения&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;limits&amp;quot;: {&amp;lt;/code&amp;gt; - лимиты для вызова (опционально)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;no_answer_timeout&amp;quot;: 10,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;dial_tries&amp;quot;: 1,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;max_channels&amp;quot;: 2,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;redial_timeout&amp;quot;: 600,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;watchdog&amp;quot;: 240&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;dialed&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;timeintervals&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;default&amp;quot;&amp;lt;/code&amp;gt; - id временного интервала&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  ],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;voice&amp;quot;,&amp;lt;/code&amp;gt; - используемый канал&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;channel_parameters&amp;quot;: {&amp;lt;/code&amp;gt; - используется для каналов telegram и vk&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;endpoint&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;script_before_dial&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/code&amp;gt; - скрипт для выполнения перед каждым вызовом | оповещением&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/code&amp;gt; - скрипт дозагрузки элементов для обзвона&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;autoload&amp;quot;: false,&amp;lt;/code&amp;gt; - автоматическая дозагрузка элементов для обзвона при старте списка&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;scheduler&amp;quot;: [&amp;lt;/code&amp;gt; - планировщик выполнения обзвона | оповещения&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;35 14 * * *&amp;quot;&amp;lt;/code&amp;gt; - cron-расписание запуска обзвона&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  ],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;items&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      &amp;quot;destinations&amp;quot;: [&amp;lt;/code&amp;gt; - телефоны | user_id для каналов отличных от voice&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;        &amp;quot;6000&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      ],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;      &amp;quot;metadata&amp;quot;: {}&amp;lt;/code&amp;gt; - дополнительная произвольная информация&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  ]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&lt;br /&gt;
  &amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;123e4567-e89b-12d3-a456-426614174000&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /lists/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения в CSV файл&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Экспорт списка для обзвона | оповещения из CSV файла&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;csv&#039;&#039;&#039; - csv файл с элементами списка&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Получения всех списков для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;No parameters&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;lists&amp;quot;: []&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение конкретного списка для обзвона | оповещения из БД&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;list&amp;quot;: {}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /lists/load/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Дозагрузка в существующую инстанцию списка обзвона | оповещения элементов из скрипта&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;id - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /lists/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;nowiki&amp;gt;Изменение существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;payload&#039;&#039;&#039; как в &#039;&#039;&#039;POST /lists/add&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /lists/status/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Получение статуса существующего списка для обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;id - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;status&amp;quot;: {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;total_items&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;processed_items&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;completed&amp;quot;: false,{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;reason&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;running&amp;quot;: false&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;nowiki&amp;gt;Управление инстанциями обзвона | оповещения&amp;lt;/nowiki&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /instances/add/{list_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Создание инстанции обзвона | оповещения на основе списка, без запуска обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /instances/get/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получить детальную информацию о конкретной инстанции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка | инстанции (одно и тоже)&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;86c08271-8415-4ba5-bcf1-e1115a602bd8&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;name&amp;quot;: &amp;quot;Test Call List&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;source&amp;quot;: &amp;quot;8000&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;limits&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;no_answer_timeout&amp;quot;: 5,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;dial_tries&amp;quot;: 1,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;max_channels&amp;quot;: 2,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;redial_timeout&amp;quot;: 200,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;watchdog&amp;quot;: 60&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;timeintervals&amp;quot;: [&amp;quot;default&amp;quot;],&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;holidays&amp;quot;: [&amp;quot;2025-09-14&amp;quot;],&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;voice&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;running&amp;quot;: true,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;progress&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;total_items&amp;quot;: 1,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;processed_items&amp;quot;: 1,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;completed&amp;quot;: false,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;reason&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;job_info&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;has_job&amp;quot;: true,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;job_id&amp;quot;: &amp;quot;86c08271-8415-4ba5-bcf1-e1115a602bd8&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;next_run&amp;quot;: &amp;quot;2025-12-24 20:00:00+03:00&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;created&amp;quot;: &amp;quot;2025-08-18T14:57:17.762777&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;items&amp;quot;: [&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
            &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;destinations&amp;quot;: [&amp;quot;6000&amp;quot;],&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
            &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;metadata&amp;quot;: {}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
        &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /instances/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка инстанций&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;No parameters&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;total&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;instances&amp;quot;: []&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /instances/remove/{instance_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;nowiki&amp;gt;Удаление инстанции обзвона | оповещения&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039;&amp;lt;nowiki&amp;gt; - id списка | инстанции (одно и тоже)&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление временными интервалами&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST /timeintervals/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Создание временного интервала&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;02f2d1ce-bb0b-4856-904b-2db13250bb90&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;name&amp;quot;: &amp;quot;Новый интервал 2&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;weekdays&amp;quot;: [1],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;months&amp;quot;: [1],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;dates&amp;quot;: [1],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;intervals&amp;quot;: [[0,1440],]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE /timeintervals/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Удаление существующего интервала времени&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id интервала времени&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /timeintervals/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретного временного интервала&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id интервала времени&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;timeinterval&amp;quot;: {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;name&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;weekdays&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;months&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;dates&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;],&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;intervals&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;[0, 1440]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /timeintervals/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка временных интервалов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;No parameters&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;timeintervals&amp;quot;: []&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /timeintervals/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующего временного интервала&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;payload&#039;&#039;&#039; как в &#039;&#039;&#039;POST /timeintervals/add&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id списка&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Управление конфигурациями&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /configs/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение конкретной конфигурации&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - id конфигурации&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;data&amp;quot;: {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;limits&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;params&amp;quot;: {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;watchdog&amp;quot;: 60,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;no_answer_timeout&amp;quot;: 10,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;dial_tries&amp;quot;: 1,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;max_channels&amp;quot;: 2,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;redial_timeout&amp;quot;: 600&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /configs/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получения списка доступных конфигураций&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;No parameters&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:orange;width: 15%&amp;quot; |&#039;&#039;&#039;PUT /configs/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Изменение существующей конфигурации&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;params&amp;quot;: {}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;сообщение о статусе результата&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Логирование&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /logs/logs&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение логов с указанной даты&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - стартовая дата (формат: 2025-01-01)&amp;lt;/small&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id -&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;id списка для фильтрации (опционально)&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;logs&amp;quot;: [&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;uuid&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;voice&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;source&amp;quot;: &amp;quot;8000&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;destination&amp;quot;: &amp;quot;8000&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;Call to 8000 ended&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;duration&amp;quot;: &amp;quot;44&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;status&amp;quot;: &amp;quot;CALL_ENDED&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;hangup_cause&amp;quot;: &amp;quot;NORMAL_TEMPORARY_FAILURE&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;sip_hangup_init&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;sip:200&amp;lt;/nowiki&amp;gt;&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;metadata&amp;quot;: null&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;&amp;lt;u&amp;gt;Лицензия&amp;lt;/u&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET /license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение состояния лицензии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;No parameters&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;uuid&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;remaining_licenses&amp;quot;: &amp;quot;infinity&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;quot;threshold&amp;quot;: 0&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3519</id>
		<title>CLS. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=CLS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3519"/>
		<updated>2026-01-13T08:39:29Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Термины и определения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CLS. Руководство администратора (в разработке)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис массового обзвона и уведомлений, поддерживающий множественные каналы связи и гибкую настройку&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
&#039;&#039;&#039;CLS&#039;&#039;&#039; (Call List Service) - сервис массового обзвона и уведомлений с поддержкой множественных каналов связи.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Swagger UI&#039;&#039;&#039; – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису CLS в реальном времени.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Список обзвона | уведомления&#039;&#039;&#039; (Call List) - набор контактов с метаданными для выполнения массовой рассылки или обзвона.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ListCaller&#039;&#039;&#039; - основной класс, управляющий выполнением кампании по конкретному списку.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Instance&#039;&#039;&#039; (Инстанция) - активный экземпляр ListCaller, выполняющий обзвон.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Конфигурирование параметров сервиса&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Параметр&lt;br /&gt;
!По умолчанию&lt;br /&gt;
!Назначение&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |logs&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Директория для хранения логов. Примеры абсолютного пути: &amp;quot;/var/log/ups/&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество файлов ротации.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер одного логфайла.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|list_log_dir&lt;br /&gt;
|/opt/cls/logs/lists/&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Директория для хранения логов обзвона | уведомления по каждому списку&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|call_log_dir&lt;br /&gt;
|/opt/cls/logs/calls/&lt;br /&gt;
|Директория для хранения логов одиночных звонков&lt;br /&gt;
|-&lt;br /&gt;
|global_max_channels&lt;br /&gt;
|20&lt;br /&gt;
|Ограничение максимального количества одновременных звонков. Суммарно, по всем активным листам.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |freeswitch&lt;br /&gt;
|-&lt;br /&gt;
|freeswitch.server&lt;br /&gt;
|127.0.0.1&lt;br /&gt;
|Адрес, на котором работает FreeSWITCH&lt;br /&gt;
|-&lt;br /&gt;
|freeswitch.port&lt;br /&gt;
|8021&lt;br /&gt;
|Порт, на котором работает FreeSWITCH&lt;br /&gt;
|-&lt;br /&gt;
|freeswitch.auth&lt;br /&gt;
|ClueCon&lt;br /&gt;
|Пароль для аутентификации при подключении к Event Socket у FreeSwitch&lt;br /&gt;
|-&lt;br /&gt;
|freeswitch.src_profile&lt;br /&gt;
|internal&lt;br /&gt;
|Какой SIP-профиль FreeSWITCH должен использовать в качестве &#039;&#039;&#039;источника&#039;&#039;&#039; для исходящего звонка&lt;br /&gt;
|-&lt;br /&gt;
|freeswitch.dst_profile&lt;br /&gt;
|internal&lt;br /&gt;
|В какой SIP-профиль будет отправлен вызов после его обработки внутри FreeSWITCH&lt;br /&gt;
|-&lt;br /&gt;
|freeswitch.src_context&lt;br /&gt;
|ses&lt;br /&gt;
|Диалплан (Dialplan) FreeSWITCH, который будет использоваться для &#039;&#039;&#039;обработки вызова на этапе его происхождения (origination)&#039;&#039;&#039;. Диалплан — это набор правил и инструкций, которые определяют, как обрабатывать вызов.&lt;br /&gt;
|-&lt;br /&gt;
|freeswitch.dst_trunk&lt;br /&gt;
|10.2.0.220:5060&lt;br /&gt;
|Куда именно отправить вызов.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |ses&lt;br /&gt;
|-&lt;br /&gt;
|ses.host&lt;br /&gt;
|127.0.0.1&lt;br /&gt;
|Адрес сервиса ses для рассылки уведомлений&lt;br /&gt;
|-&lt;br /&gt;
|ses.port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт сервиса ses для рассылки уведомлений&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SBS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3518</id>
		<title>SBS. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SBS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3518"/>
		<updated>2026-01-13T07:44:39Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Описание методов API сервиса биометрии (SBS) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис Simple Biometry Server предназначен для извлечения именованных сущностей из текстовых фрагментов (фраз естественной речи). Принимает на вход текстовую строку и возвращает структурированные данные в формате JSON.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Simple Biometry Server (SBS) — сервис извлечения метаданных.&lt;br /&gt;
&lt;br /&gt;
Swagger UI — интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SBS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Описание методов API сервиса биометрии (SBS)&#039;&#039;&#039; =====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SBS. По умолчанию используется порт 6185/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON-документ в кодировке UTF-8 или двоичный файл. Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке &amp;lt;nowiki&amp;gt;http://АДРЕС:6185&amp;lt;/nowiki&amp;gt; будет отображен интерфейс Swagger со всеми методами с возможностью их проверки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|+&#039;&#039;Описание методов API&#039;&#039;&lt;br /&gt;
!style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/analyze&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Получение аналитических метаданных из голосового фрагмента. Вернется массив с метаданными голосового фрагмента.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для анализа.&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Пример:&amp;lt;/small&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  age: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: 20-29, # {&amp;quot;00-05&amp;quot;, &amp;quot;06-12&amp;quot;, &amp;quot;13-19&amp;quot;, &amp;quot;20-29&amp;quot;, &amp;quot;30-39&amp;quot;, &amp;quot;40-49&amp;quot;, &amp;quot;50-59&amp;quot;, &amp;quot;60+&amp;quot;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  emotion: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: SADNESS, # { &amp;quot;ANGER&amp;quot;, &amp;quot;BORE&amp;quot;, &amp;quot;DISAPPOINTMENT&amp;quot;, &amp;quot;DISGUST&amp;quot;, &amp;quot;EXCITEMENT&amp;quot;, &amp;quot;FEAR&amp;quot;, &amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt; &amp;lt;&amp;lt;&amp;quot;NEUTRAL&amp;quot;, &amp;quot;PAIN&amp;quot;, &amp;quot;PLEASURE&amp;quot;, &amp;quot;SADNESS&amp;quot;, &amp;quot;SUPRISE&amp;quot;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  gender: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: FEMALE, # { &amp;quot;MALE&amp;quot;, &amp;quot;FEMALE&amp;quot; }&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  multispeaker : {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: YES, # { &amp;quot;YES&amp;quot;, &amp;quot;NO&amp;quot; }&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  }&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
 &amp;lt;small&amp;gt;&amp;lt;  &amp;quot;synth&amp;quot;: {&lt;br /&gt;
     &amp;quot;class&amp;quot;: &amp;quot;NO&amp;quot;,&lt;br /&gt;
     &amp;quot;confidence&amp;quot;: 0.73&lt;br /&gt;
   }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/noiselevel&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;Возвращает процент зашумленности аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для анализа&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Пример ответа:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{ error: 0, message: &#039;success&#039;, &#039;noise&#039;: 0.79 }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/search&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Поиск говорящего по базе слепков.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для анализа&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;threshold&#039;&#039;&#039; —  порог совпадения спикера, от 0 до 1&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, то поиск не будет осуществлен, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Пример ответа:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{ error: 0, speaker: Ivan, confidence: 0.79 }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/verify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Сравнение wav-файла cо слепком в базе. В ответе - вероятность совпадения от 0 до 1.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для поиска&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; —  идентификатор говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, но слепок не будет проверен, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;confidence&amp;quot;: 0.78 }&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/speakers/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Добавление слепка в базу.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; —  имя говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для создания оцифрованного представления говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, но слепок не будет создан, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;251f78d7-ee50-4ba1-a669-ee89fdaf5433&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/sbs/speakers/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Удаление слепка из базы.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; —  идентификатор говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{ error: INT, message: DESCRIPTION }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/sbs/speakers/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Получение списка всех слепков.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;251f78d7-ee50-4ba1-a669-ee89fdaf5433&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование слепка&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/speakers/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Дообучение слепка.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для обучения&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; &#039;&#039;&#039;—&#039;&#039;&#039;   идентификатор слепка&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, то слепок не будет дообучен, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - набор данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;Success&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SBS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3517</id>
		<title>SBS. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SBS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3517"/>
		<updated>2026-01-13T07:41:05Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Описание методов API сервиса биометрии (SBS) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис Simple Biometry Server предназначен для извлечения именованных сущностей из текстовых фрагментов (фраз естественной речи). Принимает на вход текстовую строку и возвращает структурированные данные в формате JSON.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Simple Biometry Server (SBS) — сервис извлечения метаданных.&lt;br /&gt;
&lt;br /&gt;
Swagger UI — интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SBS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Описание методов API сервиса биометрии (SBS)&#039;&#039;&#039; =====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SBS. По умолчанию используется порт 6185/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON-документ в кодировке UTF-8 или двоичный файл. Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке &amp;lt;nowiki&amp;gt;http://АДРЕС:6185&amp;lt;/nowiki&amp;gt; будет отображен интерфейс Swagger со всеми методами с возможностью их проверки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|+&#039;&#039;Описание методов API&#039;&#039;&lt;br /&gt;
!style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/analyze&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Получение аналитических метаданных из голосового фрагмента. Вернется массив с метаданными голосового фрагмента.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для анализа.&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Пример:&amp;lt;/small&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  age: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: 20-29, # {&amp;quot;00-05&amp;quot;, &amp;quot;06-12&amp;quot;, &amp;quot;13-19&amp;quot;, &amp;quot;20-29&amp;quot;, &amp;quot;30-39&amp;quot;, &amp;quot;40-49&amp;quot;, &amp;quot;50-59&amp;quot;, &amp;quot;60+&amp;quot;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  emotion: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: SADNESS, # { &amp;quot;ANGER&amp;quot;, &amp;quot;BORE&amp;quot;, &amp;quot;DISAPPOINTMENT&amp;quot;, &amp;quot;DISGUST&amp;quot;, &amp;quot;EXCITEMENT&amp;quot;, &amp;quot;FEAR&amp;quot;, &amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt; &amp;lt;&amp;lt;&amp;quot;NEUTRAL&amp;quot;, &amp;quot;PAIN&amp;quot;, &amp;quot;PLEASURE&amp;quot;, &amp;quot;SADNESS&amp;quot;, &amp;quot;SUPRISE&amp;quot;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  gender: {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: FEMALE, # { &amp;quot;MALE&amp;quot;, &amp;quot;FEMALE&amp;quot; }&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  },&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  multispeaker : {&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    class: YES, # { &amp;quot;YES&amp;quot;, &amp;quot;NO&amp;quot; }&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    confidence: 0.99&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  }&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
 &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;synth&amp;quot;: {&lt;br /&gt;
     &amp;quot;class&amp;quot;: &amp;quot;NO&amp;quot;,&lt;br /&gt;
     &amp;quot;confidence&amp;quot;: 0.73&lt;br /&gt;
   }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/noiselevel&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;Возвращает процент зашумленности аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для анализа&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Пример ответа:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{ error: 0, message: &#039;success&#039;, &#039;noise&#039;: 0.79 }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/search&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Поиск говорящего по базе слепков.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для анализа&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;threshold&#039;&#039;&#039; —  порог совпадения спикера, от 0 до 1&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, то поиск не будет осуществлен, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Пример ответа:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{ error: 0, speaker: Ivan, confidence: 0.79 }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/verify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Сравнение wav-файла cо слепком в базе. В ответе - вероятность совпадения от 0 до 1.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для поиска&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; —  идентификатор говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, но слепок не будет проверен, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;confidence&amp;quot;: 0.78 }&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/speakers/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Добавление слепка в базу.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; —  имя говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для создания оцифрованного представления говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, но слепок не будет создан, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;251f78d7-ee50-4ba1-a669-ee89fdaf5433&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/sbs/speakers/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Удаление слепка из базы.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; —  идентификатор говорящего&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{ error: INT, message: DESCRIPTION }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/sbs/speakers/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Получение списка всех слепков.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  {&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;251f78d7-ee50-4ba1-a669-ee89fdaf5433&amp;quot;,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование слепка&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  }&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/sbs/speakers/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;Дообучение слепка.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;wav&#039;&#039;&#039; —  файл для обучения&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; &#039;&#039;&#039;—&#039;&#039;&#039;   идентификатор слепка&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; —  текст для сравнения с распознанным текстом из &#039;&#039;&#039;wav&#039;&#039;&#039;, необязательный параметр. Если указан, то слепок не будет дообучен, если распознанный текст будет сильно отличаться от &#039;&#039;&#039;text.&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;textSimilarity&amp;lt;/small&amp;gt;&#039;&#039;&#039; - &amp;lt;small&amp;gt;порог похожести текста и распознанного аудио&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;Success&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3516</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3516"/>
		<updated>2026-01-13T07:20:45Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами, актуализации данных, изменения переменных и т.д.  используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;. Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. Параметры функции  и ответа будут в &#039;&#039;&#039;&#039;&#039;шаблонах&#039;&#039;&#039;&#039;&#039; скриптов. &lt;br /&gt;
&lt;br /&gt;
Скрипты интеграции возможен в блоках &lt;br /&gt;
&lt;br /&gt;
# Действие&lt;br /&gt;
# Старт диалога&lt;br /&gt;
# Горячий старт&lt;br /&gt;
# Перед каждым вопросом&lt;br /&gt;
# После каждого ответа&lt;br /&gt;
# Передача диалога&lt;br /&gt;
# Завершение диалога&lt;br /&gt;
# Постобработка в элементах данных&lt;br /&gt;
&lt;br /&gt;
Типы 1-7 доступны на вкладке &amp;quot;Скрипты&amp;quot; настроек робота, 8 - только непосредственно в элементе данных. &lt;br /&gt;
&lt;br /&gt;
Типы 2-7 действуют на все события робота и явно не видны, например тип 6 будет выполнен на каждой передаче диалога и это не будет видно в действии. При создании скрипта интерфейс предложит &#039;&#039;&#039;&#039;&#039;шаблон&#039;&#039;&#039;&#039;&#039; скрипта.  &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                                    time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                                    params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                                &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                               &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;value&#039;&#039;&#039; -&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;значение ЭД подлежащее постобработке&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/handler&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/handler/list/{type}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка хендлеров для изменения протокола обмена с коннекторами. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;type&#039;&#039;&#039; - тип коннектора (api,nats,websockets)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;method&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/license&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение параметров лицензии. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;remaining_licenses&amp;quot;: &amp;quot;infinity&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;threshold&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3515</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3515"/>
		<updated>2026-01-13T07:16:57Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Скрипты интеграции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами, актуализации данных, изменения переменных и т.д.  используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;. Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. Параметры функции  и ответа будут в &#039;&#039;&#039;&#039;&#039;шаблонах&#039;&#039;&#039;&#039;&#039; скриптов. &lt;br /&gt;
&lt;br /&gt;
Скрипты интеграции возможен в блоках &lt;br /&gt;
&lt;br /&gt;
# Действие&lt;br /&gt;
# Старт диалога&lt;br /&gt;
# Горячий старт&lt;br /&gt;
# Перед каждым вопросом&lt;br /&gt;
# После каждого ответа&lt;br /&gt;
# Передача диалога&lt;br /&gt;
# Завершение диалога&lt;br /&gt;
# Постобработка в элементах данных&lt;br /&gt;
&lt;br /&gt;
Типы 1-7 доступны на вкладке &amp;quot;Скрипты&amp;quot; настроек робота, 8 - только непосредственно в элементе данных. &lt;br /&gt;
&lt;br /&gt;
Типы 2-7 действуют на все события робота и явно не видны, например тип 6 будет выполнен на каждой передаче диалога и это не будет видно в действии. При создании скрипта интерфейс предложит &#039;&#039;&#039;&#039;&#039;шаблон&#039;&#039;&#039;&#039;&#039; скрипта.  &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                                   time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                                   params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                               &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                              &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;value&#039;&#039;&#039; -&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;значение ЭД подлежащее постобработке&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/handler&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/handler/list/{type}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка хендлеров для изменения протокола обмена с коннекторами. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;type&#039;&#039;&#039; - тип коннектора (api,nats,websockets)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;method&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/license&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение параметров лицензии. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;remaining_licenses&amp;quot;: &amp;quot;infinity&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;threshold&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3514</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3514"/>
		<updated>2026-01-13T07:14:54Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Скрипты интеграции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами, актуализации данных, изменения переменных и т.д.  используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;. Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. Параметры функции  и ответа будут в &#039;&#039;&#039;&#039;&#039;шаблонах&#039;&#039;&#039;&#039;&#039; скриптов. &lt;br /&gt;
&lt;br /&gt;
Скрипты интеграции возможен в блоках &lt;br /&gt;
&lt;br /&gt;
# Действие&lt;br /&gt;
# Старт диалога&lt;br /&gt;
# Горячий старт&lt;br /&gt;
# Перед каждым вопросом&lt;br /&gt;
# После каждого ответа&lt;br /&gt;
# Передача диалога&lt;br /&gt;
# Завершение диалога&lt;br /&gt;
# Постобработка в элементах данных&lt;br /&gt;
&lt;br /&gt;
Типы 1-7 доступны на вкладке &amp;quot;Скрипты&amp;quot; настроек робота, 8 - только непосредственно в элементе данных. &lt;br /&gt;
&lt;br /&gt;
Типы 2-7 действуют на все события робота и явно не видны, например тип 7 будет выполнен на каждой передаче диалога и это не будет видно в действии. При создании скрипта интерфейс предложит &#039;&#039;&#039;&#039;&#039;шаблон&#039;&#039;&#039;&#039;&#039; скрипта.  &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                                  time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                                  params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                              &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                             &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;value&#039;&#039;&#039; -&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;значение ЭД подлежащее постобработке&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/handler&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/handler/list/{type}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка хендлеров для изменения протокола обмена с коннекторами. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;type&#039;&#039;&#039; - тип коннектора (api,nats,websockets)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;method&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/license&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение параметров лицензии. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;remaining_licenses&amp;quot;: &amp;quot;infinity&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;threshold&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3513</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3513"/>
		<updated>2026-01-13T07:14:32Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Скрипты интеграции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами, актуализации данных, изменения переменных и т.д.  используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;. Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. Параметры функции  и ответа будут в &#039;&#039;&#039;&#039;&#039;шаблонах&#039;&#039;&#039;&#039;&#039; скриптов. &lt;br /&gt;
&lt;br /&gt;
Скрипты интеграции возможен в блоках &lt;br /&gt;
&lt;br /&gt;
# Действие&lt;br /&gt;
# Старт диалога&lt;br /&gt;
# Горячий старт&lt;br /&gt;
# Перед каждым вопросом&lt;br /&gt;
# После каждого ответа&lt;br /&gt;
# Передача диалога&lt;br /&gt;
# Завершение диалога&lt;br /&gt;
# Постобработка в элементах данных&lt;br /&gt;
&lt;br /&gt;
Типы 1-7 доступны на вкладке &amp;quot;Скрипты&amp;quot; настроек робота, 8 - только непосредственно в элементе данных. &lt;br /&gt;
&lt;br /&gt;
Типы 2-6 действуют на все события робота и явно не видны, например тип 7 будет выполнен на каждой передаче диалога и это не будет видно в действии. При создании скрипта интерфейс предложит &#039;&#039;&#039;&#039;&#039;шаблон&#039;&#039;&#039;&#039;&#039; скрипта.  &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                                 time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                                 params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                             &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                            &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;value&#039;&#039;&#039; -&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;значение ЭД подлежащее постобработке&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/handler&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/handler/list/{type}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка хендлеров для изменения протокола обмена с коннекторами. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;type&#039;&#039;&#039; - тип коннектора (api,nats,websockets)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;method&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/license&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение параметров лицензии. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;remaining_licenses&amp;quot;: &amp;quot;infinity&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;threshold&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3512</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3512"/>
		<updated>2026-01-13T07:13:30Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Скрипты интеграции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами, актуализации данных, изменения переменных и т.д.  используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;. Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. Параметры функции  и ответа будут в &#039;&#039;&#039;&#039;&#039;шаблонах&#039;&#039;&#039;&#039;&#039; скриптов. &lt;br /&gt;
&lt;br /&gt;
Скрипты интеграции возможен в блоках &lt;br /&gt;
&lt;br /&gt;
# Действие&lt;br /&gt;
# Старт диалога&lt;br /&gt;
# Горячий старт&lt;br /&gt;
# Перед каждым вопросом&lt;br /&gt;
# После каждого ответа&lt;br /&gt;
# Передача диалога&lt;br /&gt;
# Завершение диалога&lt;br /&gt;
# Постобработка в элементах данных&lt;br /&gt;
&lt;br /&gt;
Типы 1-7 доступны на вкладке &amp;quot;Скрипты&amp;quot; настроек робота, 8 - только непосредственно в элементе данных. &lt;br /&gt;
&lt;br /&gt;
Типы 2-7 действуют на все события робота и явно не видны, например тип 7 будет выполнен на каждой передаче диалога и это не будет видно в действии. При создании скрипта интерфейс предложит &#039;&#039;&#039;&#039;&#039;шаблон&#039;&#039;&#039;&#039;&#039; скрипта.  &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                                time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                                params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                            &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                           &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;value&#039;&#039;&#039; -&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;значение ЭД подлежащее постобработке&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/handler&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/handler/list/{type}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка хендлеров для изменения протокола обмена с коннекторами. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;type&#039;&#039;&#039; - тип коннектора (api,nats,websockets)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;method&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/license&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение параметров лицензии. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;remaining_licenses&amp;quot;: &amp;quot;infinity&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;threshold&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3511</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3511"/>
		<updated>2026-01-13T07:10:07Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Скрипты интеграции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами, актуализации данных, изменения переменных и т.д.  используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
Скрипты интеграции возможен в блоках &lt;br /&gt;
&lt;br /&gt;
# Действие&lt;br /&gt;
# Старт диалога&lt;br /&gt;
# Горячий старт&lt;br /&gt;
# Перед каждым вопросом&lt;br /&gt;
# После каждого ответа&lt;br /&gt;
# Передача диалога&lt;br /&gt;
# Завершение диалога&lt;br /&gt;
# Постобработка в элементах данных&lt;br /&gt;
&lt;br /&gt;
Типы 1-7 доступны на вкладке &amp;quot;Скрипты&amp;quot; настроек робота, 8 - только непосредственно в элементе данных. &lt;br /&gt;
&lt;br /&gt;
Типы 2-7 действуют на все события робота и явно не видны, например тип 7 будет выполнен на каждой передаче диалога и это не будет видно в действии. При создании скрипта интерфейс предложит шаблон скрипта.  &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                               time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                               params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                           &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                          &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;value&#039;&#039;&#039; -&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;значение ЭД подлежащее постобработке&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/handler&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/handler/list/{type}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка хендлеров для изменения протокола обмена с коннекторами. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;type&#039;&#039;&#039; - тип коннектора (api,nats,websockets)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;method&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/license&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение параметров лицензии. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;remaining_licenses&amp;quot;: &amp;quot;infinity&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;threshold&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3510</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3510"/>
		<updated>2026-01-12T14:57:00Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                              time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                              params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                          &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                         &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;value&#039;&#039;&#039; -&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;значение ЭД подлежащее постобработке&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/handler&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/handler/list/{type}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка хендлеров для изменения протокола обмена с коннекторами. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;type&#039;&#039;&#039; - тип коннектора (api,nats,websockets)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;method&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/license&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение параметров лицензии. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;remaining_licenses&amp;quot;: &amp;quot;infinity&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;threshold&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3509</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3509"/>
		<updated>2026-01-12T14:55:45Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                             time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                             params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                         &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                        &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;value&#039;&#039;&#039; -&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;значение ЭД подлежащее постобработке&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/handler&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/handler/list/{type}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка хендлеров для изменения протокола обмена с коннекторами. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;type&#039;&#039;&#039; - тип коннектора (api,nats,websockets)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;method&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/license&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/license/check&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение параметров лицензии. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;type&#039;&#039;&#039; - тип коннектора (api,nats,websockets)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;method&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3508</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3508"/>
		<updated>2026-01-12T14:53:04Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                             time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                             params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                         &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                        &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;value&#039;&#039;&#039; -&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;значение ЭД подлежащее постобработке&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/handler&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/handler/list/{type}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка хендлеров для изменения протокола обмена с коннекторами. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;type&#039;&#039;&#039; - тип коннектора (api,nats,websockets)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;method&amp;quot;: &amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3507</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3507"/>
		<updated>2026-01-12T14:51:32Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                            time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                            params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                       &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;value&#039;&#039;&#039; -&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;значение ЭД подлежащее постобработке&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/handler&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/handler/list/{type}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка хендлеров для изменения протокола обмена с коннекторами. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;type&#039;&#039;&#039; - тип коннектора (api,nats,websockets)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3506</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3506"/>
		<updated>2026-01-12T14:37:22Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                            time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                            params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                       &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;value&#039;&#039;&#039; -&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;значение ЭД подлежащее постобработке&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3505</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3505"/>
		<updated>2026-01-12T13:54:27Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                           time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                           params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                       &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                      &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Подключение коннектора выбранного типа к роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка коннекторов робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;XXXXXX&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;freeswitch&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;params&amp;quot;: {......&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение коннектора&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;id&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- идентификатор коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;params&#039;&#039;&#039; - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3504</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3504"/>
		<updated>2026-01-12T13:41:34Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                          time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                          params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                      &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                     &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3503</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3503"/>
		<updated>2026-01-12T13:40:58Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                         time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                         params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                     &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                    &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;name - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;type - тип коннектора ( max,vk,telegram,freeswitch,web,nats )&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;params - параметры коннектора, для каждого типа свои&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;robot - id ргобота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;564c0f04-0576-4e03-8096-c74c02a129b1&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/connector/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/connector/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/connector/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3502</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3502"/>
		<updated>2026-01-12T12:38:14Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                        time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                        params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                    &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                   &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;Группа методов ses/robot/connector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3501</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3501"/>
		<updated>2026-01-12T12:34:53Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                        time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                        params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                    &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                   &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/con&amp;lt;big&amp;gt;nector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3500</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3500"/>
		<updated>2026-01-12T12:31:42Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                        time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                        params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                    &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                   &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/con&amp;lt;big&amp;gt;nector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3499</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3499"/>
		<updated>2026-01-12T12:30:23Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                       time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                       params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                   &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                  &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/connector&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |&amp;lt;small&amp;gt;заголовок&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Вход&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;выход&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3498</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3498"/>
		<updated>2026-01-12T12:21:11Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                       time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                       params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                   &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                  &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3497</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3497"/>
		<updated>2026-01-12T12:17:42Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                      time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                      params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                  &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                 &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3496</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3496"/>
		<updated>2026-01-12T12:16:07Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                      time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                      params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                  &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                 &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;small&amp;gt;dataset&amp;lt;/small&amp;gt;&#039;&#039;&#039; &amp;lt;small&amp;gt;- id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;GET/ses/robot/listall&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3495</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3495"/>
		<updated>2026-01-12T12:10:25Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                     time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                     params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                 &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                                &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;dataset&#039;&#039;&#039; - id набора данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3494</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3494"/>
		<updated>2026-01-12T12:06:32Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                    time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                    params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                               &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3493</id>
		<title>SES. Руководство пользователя</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F&amp;diff=3493"/>
		<updated>2026-01-12T12:05:12Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Методы API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для создания сценарных машин и обеспечения их работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script engine service (SES) - сервис обеспечения работы и создания сценарных машин. Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису SES в реальном времени&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Скрипты интеграции&#039;&#039;&#039; =====&lt;br /&gt;
Для взаимодействия со сторонними сервисами используются скрипты интеграции на языке python. Скрипт интеграции должен содержать функцию &#039;&#039;&#039;handler&#039;&#039;&#039;(data={}, session_id=None, channel=&#039;default&#039;). &lt;br /&gt;
&lt;br /&gt;
Пример данных на входе можно посмотреть в методе ses GET/ses/session/{robot_id}/{session_id}&lt;br /&gt;
&lt;br /&gt;
Функция должна исходя из полученных данных запросить ответ у стороннего сервиса. Запрос необходимо выполнить в блоке try/except. Скрипт не должен выдавать ошибку в основное приложение, все исключения должны быть обработаны внутри скрипта. &lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiRequest&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для отправки запроса рекомендуется использовать функцию apiRequest.&#039;&#039;&#039;&#039;&#039; Функция сделает все необходимые записи в лог интеграции. Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;from  app.tools import apiRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status, reply = apiRequest(name=&amp;quot;наименование скрипта&amp;quot;,method=&#039;get&#039;,sessiondata=data,url=url,timeout=(1,10))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;status, reply&#039;&#039;&#039; - http код ответа (например 200) и ответ без изменений и сериализации.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; = название вызываемого метода, для отчетности&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;sessiondata&#039;&#039;&#039; - это data в handler, которая туда прилетает&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;method&#039;&#039;&#039; - метод запроса-ответа&lt;br /&gt;
&lt;br /&gt;
после этих параметров в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; отправить все нужные параметры, как при вызове requests, они будут переданы один к одному.&lt;br /&gt;
&lt;br /&gt;
Из функции &#039;&#039;&#039;handler&#039;&#039;&#039; можно передать или изменить переменную (в рамках текущей сессии): &amp;lt;code&amp;gt;data[&#039;variables&#039;]={&#039;new_var&#039;: &#039;новое_значение&#039;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &#039;&#039;&#039;handler&#039;&#039;&#039; должна возвращать ответ в виде &amp;lt;code&amp;gt;return { &amp;quot;text&amp;quot;: &amp;quot;Текст ответа.&amp;quot;, &#039;answered&#039;: True}, {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;text&#039;&#039;&#039; - текст ответа&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;answered&#039;&#039;&#039; - получен ли ответ (True или False)&lt;br /&gt;
Если в скрипте интеграции не используются запросы к api стороннего сервиса через http, необходимо предусмотреть запись в лог (запись в лог встроена в функцию &#039;&#039;&#039;apiRequest&#039;&#039;&#039; и при ее использовании отдельно писать в лог не надо). Для этого необходимо импортировать библиотеку:&lt;br /&gt;
&lt;br /&gt;
from  app.tools import apiLog&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция apiLog&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Если в скрипте интеграции не используются запросы к api, по окончании работы функции handler вызвать функцию записи лога:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apiLog&#039;&#039;&#039;(data=data,name=&amp;quot;&amp;quot;,url=&amp;quot;&amp;quot;,request={},reply_code=200,reply=None,request_datetime=None,reply_datetime=None)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - тот же массив который был на входе&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - наименование или короткое описание скрипта&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039; - адрес запроса к стороннему сервису (если есть)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request&#039;&#039;&#039; - текст запроса &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_code&#039;&#039;&#039; - код ответа (стандартный код http)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply&#039;&#039;&#039; - необработанный ответ стороннего сервиса&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;request_datetime&#039;&#039;&#039; - время перед запросом, без учета таймзоны, получить лучше так request_datetime=datetime.now(timezone.utc)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;reply_datetime&#039;&#039;&#039; - время сразу по получению ответа, также без учета таймзоны.&amp;lt;br /&amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Внимание - не используйте &#039;&#039;&#039;apiRequest или apiLog&#039;&#039;&#039; для данных содержащих пароли в открытом виде, чтобы они не попали в лог&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Функция getData&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Для упрощения поиска информации можно использовать функцию getData&#039;&#039;&#039;&#039;&#039; (&#039;&#039;from app.tools import getData&#039;&#039;), нужна для извлечения конкретных данных из сессии, можно отправить либо всю переменную сессии, либо &#039;data&#039; из сессии. Пример поиска цифрового кода заявления, выявленного моделью see &#039;number&#039;, поиск только в последнем сообщении диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;for j in getData(data=data,filter={&#039;type&#039;:&#039;see&#039;,&#039;model&#039;:&#039;number&#039;},depth=1):&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;kod_zayavl=str(int(j[&#039;param&#039;]))&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;break&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры функции&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039; - или &#039;data&#039; из сессии или переменная сессии&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; - словарь ключевых полей и их значений - поиск сработает если все данные совпадут&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;depth&#039;&#039;&#039; - отвечает за глубину поиска в истории, по умолчанию 1, т.е. искать только в последнем сообщении. Возвращает список всех найденных данных, добавляя в каждый элемент depth, т.е. где именно он нашелся&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======  &#039;&#039;&#039;&#039;&#039;Выполнение длительных процедур&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Код, который будет выполняться дольше нескольких секунд лучше запускать отдельным потоком. В этом случает есть возможность сообщить результат  в канал даже после завершения основного диалога. Пример ожидания и отправки файла после паузы:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;from app.interactions import connectors&lt;br /&gt;
&lt;br /&gt;
def do_sleep(params, session_id, channel):&lt;br /&gt;
                                                    time.sleep(params[&#039;sleep_time&#039;])&lt;br /&gt;
    message=&amp;quot;выполнено&amp;quot;&lt;br /&gt;
    connectors.sendMessage(channel=channel,session=session_id,answers=[{&#039;messages&#039;:[message]}],files={&#039;document&#039;:(filetame, open(file_path,&#039;rb&#039;))})&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;def handler(data={}, session_id=None, channel=&#039;default&#039;):&lt;br /&gt;
                                                    params={} #чтото передадим в функцию&lt;br /&gt;
    params[&#039;sleep_time&#039;]= 100&lt;br /&gt;
    Thread(target=do_sleep,name=&#039;do_sleep&#039;+str(uuid.uuid4()),args=(params, session_id, channel) ).start()&lt;br /&gt;
    return { &#039;text&#039;: &amp;quot;запустил задание, ждем результат&amp;quot;, &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Отложенные задания&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для выполнения отложенных заданий необходимо &lt;br /&gt;
&lt;br /&gt;
#получить ссылку на базу данных текущего робота&lt;br /&gt;
#в таблицу &amp;quot;crons&amp;quot; внести внести время и python код который должен выполниться в указанное время.&lt;br /&gt;
&lt;br /&gt;
 Пример отложенного сообщения в телеграм:&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;# Формируем задачу в крон&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    if error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        return { &#039;text&#039;: &#039;А я тебе ошибку базы данных привез: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    dt = int(datetime.strptime(date[&#039;date&#039;]+&#039; &#039;+date[&#039;time&#039;],&#039;%Y-%m-%d %H:%M&#039;).timestamp())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    # А вот тут создадим код для выполнения задачи&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    url = f&#039;&amp;lt;nowiki&amp;gt;https://api.telegram.org/bot{token}/sendMessage&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = json.dumps({&#039;chat_id&#039;: chat_id, &#039;text&#039;: message})&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    data = base64.b64encode(data.encode(&amp;quot;utf-8&amp;quot;)).decode(&amp;quot;utf-8&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    code = &amp;quot;&amp;quot;&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        import requests, json, base64&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        try:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=\&amp;quot;{1}\&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            data=base64.b64decode(data.encode(&#039;utf-8&#039;)).decode(&#039;utf-8&#039;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            requests.post(\&amp;quot;{0}\&amp;quot;, data=json.loads(data), timeout = (5, 10))&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        except Exception as error:&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;            logging.error(traceback.format_exc())&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;                   &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    &amp;quot;&amp;quot;&amp;quot;.format(url,data).replace(&amp;quot;        &amp;quot;,&amp;quot;&amp;quot;)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;    error, result = db.create(table=&#039;crons&#039;,data={&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;id&#039;: str(uuid.uuid4()),&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;name&#039;:&#039;Задача-напоминание для &#039;+username,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;datetime&#039;: dt,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;        &#039;code&#039;: code })&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Пользовательские таблицы базы данных&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
В составе большинства продуктов используется служебная файловая [https://wiki.connect2ai.net/index.php/UPS._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F_%D0%B1%D0%B0%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 база данных]. В SES возможно использование служебной базы в скриптах интеграции. Для этого нужно:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Импортировать функцию&#039;&#039;&#039; получения объекта БД (&amp;lt;code&amp;gt;from app.db import get_db&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Получить объект БД&#039;&#039;&#039;&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;error, db = get_db(data[&#039;robot&#039;])&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;if error: &amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;return { &#039;text&#039;: &#039;ошибка базы данных: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объявить структуру&#039;&#039;&#039; пользовательской таблицы, создав запись в таблице структур (если еще не объявляли)&amp;lt;br /&amp;gt;    &amp;lt;small&amp;gt;search_data={&lt;br /&gt;
                                                                &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    try:&lt;br /&gt;
        error, search_result = db.select(&#039;structures&#039;,data=search_data,sort=None,md5clean=True)&lt;br /&gt;
        if not search_result:&lt;br /&gt;
            struct_data = {&lt;br /&gt;
                        &amp;quot;id&amp;quot;:&amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;new_table_name&amp;quot;,&lt;br /&gt;
                        &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                        &amp;quot;string&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;integer&amp;quot;:0,&lt;br /&gt;
                        &amp;quot;float&amp;quot;:0.0,&lt;br /&gt;
                        &amp;quot;именованный массив&amp;quot;:{},&lt;br /&gt;
                        &amp;quot;неименованный массив&amp;quot;:[],&lt;br /&gt;
                        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
            error, str_id = db.create(table=&#039;structures&#039;, data=struct_data)&amp;lt;/small&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Сделать запись&#039;&#039;&#039; в базе&amp;lt;br /&amp;gt;     &amp;lt;small&amp;gt;new_data={&lt;br /&gt;
                                                               &amp;quot;string&amp;quot;:&amp;quot;пример строки\n&amp;quot;,&lt;br /&gt;
        &amp;quot;integer&amp;quot;:100500,&lt;br /&gt;
        &amp;quot;float&amp;quot;:20.0004,&lt;br /&gt;
        &amp;quot;именованный массив&amp;quot;:{&#039;ключ1&#039;:&#039;значение1&#039;},&lt;br /&gt;
        &amp;quot;неименованный массив&amp;quot;:[&#039;запись1&#039;,&#039;запись2&#039;,],&lt;br /&gt;
        &amp;quot;bool&amp;quot;:True&lt;br /&gt;
    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;error, id = db.create(table=&amp;quot;new_table_name&amp;quot;, data=new_data)&lt;br /&gt;
&lt;br /&gt;
if error:&lt;br /&gt;
    return { &#039;text&#039;: &#039;ошибка создания: &#039;+str(db), &#039;answered&#039;: False }, {}&amp;lt;/small&amp;gt;&lt;br /&gt;
Если при создании структуры не указывать в структуре id то база сама создаст id, вернет его в ответ. В дальнейшем тогда имя новой таблицы будет в id и запись/поиск в базе только по нему. Пример поиска в &#039;structures&#039; подходит для поиска в пользовательской таблице.&lt;br /&gt;
&lt;br /&gt;
Создание, редактирование и просмотр пользовательской таблицы в базе возможно и с интерфейса UPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Подписка на сессию&#039;&#039;&#039;=====&lt;br /&gt;
Позволяет просмотреть в реальном времени ход любого диалога. Для подписки в виджете отладчика необходимо активировать соответствующую кнопку и настроить фильтр. Используется для отладки сессий. Если сессий удовлетворяющих фильтру не найдено, виджет отладчика работает в режиме ожидания.&lt;br /&gt;
&lt;br /&gt;
Сессии ассистента можно просматривать  не только через отладчик, но и через виджет ассистента. Виджет подключается к ассистенту, встраивается в веб‑страницу и использует параметры авторизованного пользователя для фильтрации сессий (номер телефона из настроек пользователя).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Робот - ассистент&#039;&#039;&#039;=====&lt;br /&gt;
Предназначен для сопровождения диалога с оператором без вмешательства в него. Возможен только для типа коннектора &amp;quot;freeswitch&amp;quot; (телефонный канал). Робот - ассистент (суфлер) классифицирует и обрабатывает запросы от абонента, но не передает ответ в канал, а оставляет в своей сессии. На эту сессию может &#039;&#039;&#039;&amp;quot;подписаться&amp;quot;&#039;&#039;&#039; оператор, и в виджете ассистента получать подсказки и информацию от робота. &lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск ассистента&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
* Опция «Автостарт ассистента» включается в настройках коннектора робота, на который поступает звонок от абонента.&lt;br /&gt;
* При каждом звонке ассистент автоматически запускается и сопровождает новую сессию.&lt;br /&gt;
* Если вызов перенаправляется оператору, в параметр &#039;&#039;destination&#039;&#039; подставляется &amp;quot;номер для перевода звонка&amp;quot; (указан в настройках коннектора).&lt;br /&gt;
* Оператор с таким номером (настроенным в UPS) сможет просмотреть сессию в виджете ассистента.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Запуск через API&#039;&#039;&#039;&#039;&#039; ======&lt;br /&gt;
Используется метод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;GET /ses/assistant/{session_id}/{destination}&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* После вызова метода значение переменной &#039;&#039;destination&#039;&#039; в сессии заменяется на переданное в запросе.&lt;br /&gt;
* Это значение должно соответствовать идентификатору или номеру оператора, настроенному в UPS.&lt;br /&gt;
* Оператор должен быть авторизован в UPS и обладать нужными правами доступа.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Возможные сценарии работы&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
# абонент -&amp;gt; робот -&amp;gt; оператор (после перевода на оператора) В этом случае основной робот принимает звонок, затем передаёт сессию ассистенту после перевода. В виджете отображаются обе части диалога — до и после трансфера.&lt;br /&gt;
# абонент -&amp;gt; оператор Здесь робот-ассистент сразу переводит звонок оператору (согласно настройкам коннектора FreeSWITCH) и не говорит ничего в канал.Если суфлирование не запущено, робот не обрабатывает аудио и не использует ресурсы.&lt;br /&gt;
&lt;br /&gt;
====== &#039;&#039;&#039;&#039;&#039;Важные настройки&#039;&#039;&#039;&#039;&#039; ====== &lt;br /&gt;
&lt;br /&gt;
* В блоках «События» и «Исключения» следует отключить действие «Завершить диалог», чтобы ассистент не закрывал свою сессию преждевременно.&lt;br /&gt;
* Режим работы (робот или ассистент) и телефон оператора для ассистента задаются в настройках коннектора FreeSWITCH.&lt;br /&gt;
* Один и тот же робот может быть ассистентом для одного коннектора и основным — для другого.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Описание методов API&#039;&#039;&#039;=====&lt;br /&gt;
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SES. По умолчанию используется порт 6189/tcp.&lt;br /&gt;
&lt;br /&gt;
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок &amp;lt;code&amp;gt;&amp;quot;accept: application/json&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ сервиса представляет собой JSON или текстовый документ в кодировке UTF-8, или двоичный файл.&lt;br /&gt;
&lt;br /&gt;
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6190 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Методы API&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |&amp;lt;small&amp;gt;для некоторых путей, где используется {robot_id} - это обращение к версии черновика, чтобы обращаться r продовой версии - нужен постфикс &amp;quot;_prod&amp;quot;, для бэкапа &amp;quot;_backup&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;актуально для методов&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получения данных робота  GET/ses/robot/get/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- применение настроек робота GET/ses/robot/commit/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- экспорт робота GET/ses/robot/export/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список скриптов GET/ses/robot/script/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение скрипта GET/ses/robot/script/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список ЭД GET/ses/robot/data/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение ЭД GET/ses/robot/data/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- список КТ GET/ses/robot/endpoint/list/{robot}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- получение КТ GET/ses/robot/endpoint/get/{robot}/{id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- метода ask (отладчика) POST/ses/ask/{robot_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;- данные сессии (отладчика) GET/ses/session/{robot_id}/{session_id}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа на запрос пользователя. &amp;lt;small&amp;gt;Метод для отладки робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - текст запроса&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - id канала&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;connector&#039;&#039;&#039; - имя коннектора&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session&#039;&#039;&#039; - uuid сессии, если это не первый запрос в сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;tts&#039;&#039;&#039; - вернуть результат синтеза (1- вернуть, 0 - не выполнять синтез)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variables&#039;&#039;&#039; - словарик с переменными {&amp;quot;переменная1&amp;quot;:&amp;quot;значение&amp;quot;,&amp;quot;переменнаяN&amp;quot;:&amp;quot;значение&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039; - python скрипт для изменения ответов метода под требования внешних систем, подробнее в следующем разделе. в поле имя файла без расширения.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;restartClosed&#039;&#039;&#039; - перезагрузить сессию при её закрытии с новым id (1 - перезагрузить, 0 - не перезагружать)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;audio&#039;&#039;&#039; - аудиофайл с запросом, текст запроса будет получен распознаванием audio&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;document&#039;&#039;&#039; - документ для последующей обработки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;endpoint&#039;&#039;&#039; - id точки, в которую передать управление диалогом (необязательный параметр, используется для исходящих оповещений)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;question&amp;quot;: &amp;quot;Вопрос&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;   &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {    &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                   &amp;quot;ответ&amp;quot;      ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;           &amp;quot;interruptible&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;file&amp;quot;: &amp;quot;&amp;quot;    }  ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;uuid&amp;quot;: &amp;quot;&amp;quot;   }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/assistant/{session_id}/{destination}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Запуск робота - суфлера для выбранной сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота суфлера&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - сессия для которой нужен суфлер&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;destination&#039;&#039;&#039; - номер назначения (номер оператора на которого ушел звонок)&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/hostname&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение имени хоста на котором запущен сервис&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;hostname&amp;quot;: &amp;quot;kotobot-gpu-04&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/log&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение лога всех сессий начиная с date. &amp;lt;small&amp;gt;В логе &#039;&#039;&#039;error,&#039;&#039;&#039; &#039;&#039;&#039;message&#039;&#039;&#039; и массив сессий  &#039;&#039;&#039;log&#039;&#039;&#039; (log содержит информацию о каждой сессии и запросы с ответами)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;date&#039;&#039;&#039; - начальная дата в формате %Y-%m-%d&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;log&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    {&amp;quot;id&amp;quot;: &amp;quot;,.....&amp;quot;,&amp;lt;/small&amp;gt;      &amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;robot&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;         &amp;lt;small&amp;gt;&amp;quot;channel&amp;quot;: &amp;quot;......&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;        &amp;lt;small&amp;gt;&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;closed&amp;quot;: true&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;/false&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;          &amp;lt;small&amp;gt;&amp;quot;endpoint&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;.....&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;answered&amp;quot;: true/false,      &amp;quot;models&amp;quot;: [....],       &amp;quot;variables&amp;quot;: {},     &amp;quot;current&amp;quot;: {.......},&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;request&amp;quot;: {.......&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;reply&amp;quot;: { .....&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;},  &amp;quot;robot_id&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointName&amp;quot;: &amp;quot;&amp;quot;,   &amp;quot;endpointType&amp;quot;:   &amp;quot;&amp;quot; },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    .....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; ] }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выдает параметры сессии. &amp;lt;small&amp;gt;Для отображения на боковой панели тестирования в UPS. Основные блоки результата:&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot_id&#039;&#039;&#039; - id робота&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;session_id&#039;&#039;&#039; - id незакрытой сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;started&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;modified&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;robot&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;channel&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;connector&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;unknown&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;current&amp;quot;: {&amp;quot;id&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;answered&amp;quot;: true/false, &amp;quot;category&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;nearest&amp;quot;: &amp;quot;&amp;quot;,    &amp;quot;entry&amp;quot;: [.....],    &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;passedRunData&amp;quot;: [.....],       &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;              &amp;quot;border&amp;quot;: int,    &amp;quot;preborder&amp;quot;: int,    &amp;quot;lastreply&amp;quot;: &amp;quot;&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;models&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;scripts&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;  &amp;quot;data&amp;quot;: [{&amp;quot;request&amp;quot;: {.....}, &amp;quot;reply&amp;quot;: {.....}}],&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;events&amp;quot;: {.....},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;closed&amp;quot;: &amp;quot;&amp;quot;  }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/widget/config&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отдает конфигурацию виджета скрипту виджета&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;token&#039;&#039;&#039; - ключ виджета&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;На выходе содержимое настроек web канала из конфигурационного файла&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/add&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание нового робота. &amp;lt;small&amp;gt;На выходе id созданного робота или сообщение об ошибке&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;name&#039;&#039;&#039; - имя нового робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;2fd2f909-2069-4b20-a725-3a598c83f886&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/apply/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение робота. &amp;lt;small&amp;gt;Переводит черновик робота в статус prod. Если до этого был prod вариант - становится backup.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/cleardraft/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Обнуление черновика рабочей версией робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/commit/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Применение текущих изменений настроек робота. &amp;lt;small&amp;gt;Применимо ко всем версиям (черновик, рабочая, резервная копия)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/delete/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление всех версий робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/export/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Выгрузка робота в архив.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;zip файл с именем = идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Выгрузка основных настроек робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;name&amp;quot;: &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;.....&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;session&amp;quot;: {      &amp;quot;lifetime&amp;quot;: 600    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;servicedata&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;exceptions&amp;quot;: {},&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;actions&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;holidays&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timeintervals&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;name&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;weekdays&amp;quot;: [ ..... ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;dates&amp;quot;: [  .....  ],&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;months&amp;quot;: [.....],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;days&amp;quot;: &amp;quot;all&amp;quot;, &amp;quot;intervals&amp;quot;: [ [ 0,  1440 ] ] }}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/import/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Загрузка архива робота в черновик существующего робота&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;zip -&#039;&#039;&#039; файл с архивом робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка роботов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {  &amp;quot;id&amp;quot;: &amp;quot;9fd7f6f1-2cac-4f0f-a121-75c40f2b5e78&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;test&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasProd&amp;quot;: true,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;hasBackup&amp;quot;: true  } ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/modify/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение основных настроек робота. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/get/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с новыми настройками робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/restore/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Откат рабочей версии из бэкапа. &amp;lt;small&amp;gt;Резервная копия становится рабочей, и удаляется, а черновик остается без изменений&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/data&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/data/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек элемента данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;.....&amp;quot;,  &amp;quot;name&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,      &amp;quot;model&amp;quot;: &amp;quot;.....&amp;quot;, &amp;quot;param&amp;quot;: &amp;quot;.....&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;,      &amp;quot;weight&amp;quot;: int,    &amp;quot;slaveData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;getOnlyAsNearest&amp;quot;: true/false,   &amp;quot;injectToMessage&amp;quot;: true/false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;longWaiting&amp;quot;: true/false,   &amp;quot;dataWaiting&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;actions&amp;quot;: {}, &amp;quot;exceptions&amp;quot;: {}}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/data/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка элементов данных&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
* &amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  { &amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt;&amp;quot;id&amp;quot;: &amp;quot;3ebfe38b-95bf-4927-a662-17f6e5da22ea&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;        &amp;quot;name&amp;quot;: &amp;quot;pve&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;smc&amp;quot;, &amp;quot;rtype&amp;quot;: &amp;quot;report&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;weight&amp;quot;: 3, &amp;quot;hasNearestAction&amp;quot;: false&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;} ]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/data/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение элемента данных. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода  &#039;&#039;&#039;GET/ses/robot/data/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/endpoint&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Создание конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;id&amp;quot;: &amp;quot;8576593b-b0d8-4b03-a623-74f3132356ea&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/endpoint/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление конечной точки. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение настроек конечной точки&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  конечной точки&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/endpoint/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка конечных точек робота &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entryType&amp;quot;: &amp;quot;conditions&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;entry&amp;quot;: [{ &amp;quot;conditions&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;depth&amp;quot;: 5, &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;operation&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;&amp;quot;}], &amp;quot;run&amp;quot;: []}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;run&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;actions&amp;quot;: { &amp;quot;default&amp;quot;: [{ &amp;quot;action&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;voice&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;...&amp;quot;,  &amp;quot;interruptible&amp;quot;: true/false}]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/endpoint/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение конечной точки. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как на выходе метода &#039;&#039;&#039;GET/ses/robot/endpoint/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/archive&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/audio/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение аудио-файла из архива диалогов&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;аудио-файл с расширением opus&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/dialog/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение диалога из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{ &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;dialog&amp;quot;: [{&amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,                  &amp;quot;robot&amp;quot;: &amp;quot;...&amp;quot;,                &amp;quot;channel&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;unknown&amp;quot;: true/false,        &amp;quot;closed&amp;quot;: true/false,        &amp;quot;endpoint&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;answered&amp;quot;: true/false,    &amp;quot;models&amp;quot;: [...],    &amp;quot;variables&amp;quot;: {},   &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;category&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;entry&amp;quot;: [...],&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;nearest&amp;quot;: &amp;quot;...&amp;quot;,    &amp;quot;missingRunData&amp;quot;: [...],     &amp;quot;waitingRunData&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                         &amp;quot;answered&amp;quot;: true/false,    &amp;quot;lastreply&amp;quot;: &amp;quot;...&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                  &amp;quot;request&amp;quot;: {&amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,           &amp;quot;message&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;data&amp;quot;: [...]},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                 &amp;quot;reply&amp;quot;: {&amp;quot;answers&amp;quot;: [{&amp;quot;messages&amp;quot;: [...],    &amp;quot;voice&amp;quot;: &amp;quot;...&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                                     &amp;quot;interruptible&amp;quot;: true/false,    &amp;quot;file&amp;quot;: null}],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;                  &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;answered&amp;quot;: true/false}}]}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка диалогов из архива&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;startdate&#039;&#039;&#039; - начало временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;enddate&#039;&#039;&#039; - конец временного интервала в формате date %Y-%m-%d %H:%M&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;phone&#039;&#039;&#039; - номер телефона&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;variable&#039;&#039;&#039; - переменная в формате variable=value&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;text&#039;&#039;&#039; - фрагмент текста в любом сообщении&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - id элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;channel&#039;&#039;&#039; - название канала (коннектора)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{&amp;quot;uuid&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;datetime&amp;quot;: &amp;quot;...&amp;quot;,&amp;quot;phone&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt; &amp;quot;channel&amp;quot;: [...], &amp;quot;robot&amp;quot;: [&amp;quot;...&amp;quot;]}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/archive/waveform/{uuid}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Служебный метод для визуализации полученного из архива диалогов аудио-файла, содержит пики сигнала.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;uuid&#039;&#039;&#039; - идентификатор диалога&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[0.016,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.015,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;0.01&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/script&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление нового скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/script/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение текста скрипта &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор  скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;id&amp;quot;: &amp;quot;6a9f91b6-9634-4079-ac2b-60a944922c61&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;Наименование скрипта&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;code&amp;quot;: &amp;quot;Текст скрипта&amp;quot;  }&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/script/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка скриптов &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  {    &amp;quot;id&amp;quot;: &amp;quot;9b9d83b7-d5c3-49e6-9bd4-a123a9047939&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование1&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  {    &amp;quot;id&amp;quot;: &amp;quot;48b508ba-a32b-4ada-bcc3-66ce26d81c6a&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;name&amp;quot;: &amp;quot;наименование2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;type&amp;quot;: &amp;quot;Тип скрипта&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение скрипта.&amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/robot/script/get/{robot}/{id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами элемента данных&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{  &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/script/test/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Тестирование скрипта. &amp;lt;small&amp;gt;Формат &#039;&#039;&#039;data&#039;&#039;&#039; как в ответе метода &#039;&#039;&#039;GET/ses/session/{robot_id}/{session_id}&#039;&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка с параметрами сессии&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор скрипта&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;result&amp;quot;: {.....}, &amp;quot;variables&amp;quot;: {}}&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/files&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/files/download/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; | Получение файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор файла&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;файл&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/files/upload/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Отправка файла. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;file&#039;&#039;&#039; - файл&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,   &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;,   &amp;quot;id&amp;quot;: &amp;quot;Id файла&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/testapi&#039;&#039;&#039; &#039;&#039;[https://wiki.connect2ai.net/index.php/SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0#:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-,%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8,-%5B%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%7C для отладки скриптов интеграции]&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/list&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка эмуляторов сервисов интеграции&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;Входные параметры отсутствуют&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[  &amp;quot;service1&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;service2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;quot;serviceN&amp;quot;]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/testapi/{request}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение ответа эмулятора сервиса интеграции &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;request&#039;&#039;&#039; - запрос вида &amp;lt;service1&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;  &amp;quot;ответ эмулятора&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Группа методов ses/robot/userdata&amp;lt;big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/add/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление записи в пользовательский справочник.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/data/delete/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление записи из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/data/list/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение данных из пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;[{  &amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;lt;/small&amp;gt;  &amp;lt;small&amp;gt; &amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;,&amp;lt;/small&amp;gt;   &amp;lt;small&amp;gt; &amp;quot;id&amp;quot;: &amp;quot;id записи&amp;quot;}]&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Массовое изменение данных в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/modify/{robot}/{structure}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Изменение одной записи пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение n&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор записи (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/data/put/{robot}/{structure}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление данных с заменой в пользовательском справочнике.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;list&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;[{&amp;quot;колонка 1&amp;quot;: &amp;quot;значение 1&amp;quot;,&amp;quot;колонка n&amp;quot;: &amp;quot;значение n&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;id строки&amp;quot;}]&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально, при его добавлении данные в строке будут заменены.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;replace&#039;&#039;&#039; - замена всех данных в справочнике новыми данными. Возможные значения: yes/no. По-умолчанию - yes.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;structure&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/add/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Добавление пользовательского справочника.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; - json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; Поле &amp;quot;id&amp;quot; опционально.&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:red;width: 15%&amp;quot; |&#039;&#039;&#039;DELETE/ses/robot/userdata/structure/delete/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Удаление пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:blue;width: 15%&amp;quot; |&#039;&#039;&#039;GET/ses/robot/userdata/structure/list/{robot}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Получение списка пользовательских справочников. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; | &lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;id справочника&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;}}]&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;POST/ses/robot/userdata/structure/modify/{robot}/{id}&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Модификация структуры пользовательского справочника. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;data&#039;&#039;&#039; -  json строка в формате &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;quot;name&amp;quot;: &amp;quot;справочник&amp;quot;, &amp;quot;fields&amp;quot;: {&amp;quot;колонка 1&amp;quot;: &amp;quot;значение по умолчанию&amp;quot;,&amp;quot;колонка n&amp;quot;:&amp;quot;значение по умолчанию&amp;quot;}}.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;robot&#039;&#039;&#039; - идентификатор робота (id)&amp;lt;/small&amp;gt;&lt;br /&gt;
*&amp;lt;small&amp;gt;&#039;&#039;&#039;id&#039;&#039;&#039; - идентификатор пользовательского справочника&amp;lt;/small&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;quot;error&amp;quot;: 0,  &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======&#039;&#039;&#039;&#039;&#039;Постобработка методов api&#039;&#039;&#039;&#039;&#039;======&lt;br /&gt;
Для метода &#039;&#039;&#039;POST/ses/ask/{robot_id}&#039;&#039;&#039; можно изменить формат данных ответа.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо подготовить скрипт на python в папке /opt/ses/handlers/api/ask/ . Скрипт должен содержать функцию handler(reply={}), Функция должна вернуть переформатированный ответ. Чтобы воспользоваться скриптом необходимо его имя без разрешения указать в поле &amp;quot;&amp;lt;small&amp;gt;&#039;&#039;&#039;handler&#039;&#039;&#039;&amp;lt;/small&amp;gt;&amp;quot; при запросе метода.&lt;br /&gt;
&lt;br /&gt;
Аналогично и для метода ask websocket протокола - файл положить в /opt/ses/handlers/websockets/ask/ . Далее в любом запросе указать обработчик &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{тут всё, что ты и так отправляешь, &#039;handlers&#039;: { &#039;ask&#039;: &#039;__telegram&#039; }} }&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; . начиная с этого запроса обработчик будет действовать в течение сессии пока не отправишь &#039;handlers&#039;: {} . Для других полей запросов в канале websocket аналогично.&lt;br /&gt;
&lt;br /&gt;
В составе поставки ses есть файл примера &amp;lt;code&amp;gt;__telegram.py&amp;lt;/code&amp;gt; (префикс 2 подчеркивания - такой файл будет переписан при обновлении, любой другой, останется после обновления)&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Websockets сервер&#039;&#039;&#039; =====&lt;br /&gt;
Работа с программным продуктом возможна с использованием встроенного websockets сервера. Подключение производится по порту 6191, без SSL. При необходимости работать по SSL перед SES ставится nginx в режиме прокси, и SSL поднимается на nginx. Подробнее см. документацию по nginx.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже приведены форматы сообщений для работы с сервером. В каждом сообщении (за исключением бинарных), присутствует переменная path (формат сообщений - JSON), которая определяет алгоритм обработки сообщения. Подключение к серверу возможно в следующих вариантах:&lt;br /&gt;
&lt;br /&gt;
# ws://адрес:6191&lt;br /&gt;
# ws://адрес:6191/session[/chunk]&lt;br /&gt;
&lt;br /&gt;
Первый вариант подходит только для текстовых сообщений, в данном случае передача переменной session (uuid текущей сессии) должна производиться в теле сообщения. &lt;br /&gt;
&lt;br /&gt;
Второй вариант подходит и для текстового и для голосового общения с роботом. В данном случае session передается в пути подключения к websockets-серверу. Для каждой новой сессии нужно открывать новое соединение, chunk в пути подключения нужен в том случае, если передаются не готовые части аудио, предварительно сформированные, а сплошной поток аудио, кусками по 20 мс.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 110%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center&amp;quot; |&#039;&#039;&#039;&amp;lt;big&amp;gt;Входящие сообщения&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:green;width: 15%&amp;quot; |&#039;&#039;&#039;path:ask&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 85%&amp;quot; |Вопрос роботу&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 50%&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;, &#039;&#039;# Необязательный параметр, если не будет отправлен, будет создана новая сессия и в ответе придет сгенерированный session&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;link&amp;quot;: 1, &#039;&#039;# Необязательный параметр, отдает ссылки на аудио, если 1.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;format&amp;quot;: &amp;quot;wav&amp;quot;, &#039;&#039;# Необязательный параметр, формат возвращаемого аудио, если channel=voice&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;document&amp;quot;: {&amp;quot;name&amp;quot;:&amp;quot;название&amp;quot;,&amp;quot;base64&amp;quot;:&amp;quot;тело документа в base64&amp;quot;}, &#039;&#039;# необязательный параметр&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;handlers&amp;quot;: {&amp;quot;ask&amp;quot;: &amp;quot;название хэндлера&amp;quot;},  &#039;&#039;# Необязательный параметр, см. [[SES. Руководство администратора|описание обработчиков]]&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;text&amp;quot;: &amp;quot;привет&amp;quot;,       &amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;или&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;audio&amp;quot;: &amp;quot;base64 строка&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width: 50%&amp;quot; |Для текстовых ответов (канал не voice)&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: 0,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;question&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;answer&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;ask&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для голосовых ответов, канал voice, дополнительно идет отправка N сообщений с аудио&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;audio&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;quot;ссылка или base64 закодированное аудио&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;uuid&amp;quot;: &amp;quot;83722305-645d-4674-8c5d-952e02f595f9&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;status&amp;quot;: &amp;quot;listening | asking&amp;quot; &#039;&#039;# Требование к клиенту выставить статус.&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:session&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Статус сессии&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    &amp;quot;started&amp;quot;: &amp;quot;2025-07-08 07:39:24&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;modified&amp;quot;: &amp;quot;2025-07-08 07:39:26&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;f296a3a9-593c-4ed5-a1d3-5d4d46d331bf&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;548cd1ca-a24a-4a9a-ab4f-8363aa32c3c2&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;channel&amp;quot;: &amp;quot;default&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;connector&amp;quot;: &amp;quot;web&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;unknown&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;current&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;qas&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;category&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;entry&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;nearest&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;missingRunData&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;waitingRunData&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;answered&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;lastreply&amp;quot;: &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;models&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;smc:Рыжик&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:Серверы&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;see:fio&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;scripts&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;data&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;request&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:24.706771&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;message&amp;quot;: &amp;quot;привет&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;data&amp;quot;: []&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;reply&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answers&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;messages&amp;quot;: [&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                            &amp;quot;Здравствуйте! Как я могу вам помочь сегодня?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;voice&amp;quot;: &amp;quot;Валера&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;interruptible&amp;quot;: false,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                        &amp;quot;file&amp;quot;: null&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;datetime&amp;quot;: &amp;quot;2025-07-08T07:39:26.269201&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;                &amp;quot;answered&amp;quot;: false&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: [],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;: {},&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;error&amp;quot;: &amp;quot;&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;events&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;not found&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 1&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;no data&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;silence&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;id&amp;quot;: null,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;            &amp;quot;counter&amp;quot;: 0&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;session&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:status&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Установка статуса клиентской части. &amp;lt;small&amp;gt;Используется в голосовом канале, для установки текущего статуса клиентской части. В случае использования режима активного слушания в момент речи робота, необходимо выставлять на клиентской части статус asking.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;status&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;listening | asking&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;path:interrupted&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Уведомление о прерывании текущего сообщения робота пользователем.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;interrupted&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:subscribe&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Подписка на сессию.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;subscribe&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;: &amp;quot;токен_авторизации_пользователя&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variable&amp;quot;: &amp;quot;имя_переменной_по_которой_идет_поиск_сессий&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;значение_переменной_variable&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;: &amp;quot;id_робота_который_подключается_к_сессиям&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!&#039;&#039;&#039;path:hangup&#039;&#039;&#039;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Завершение сессии с роботом.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;path&amp;quot;: &amp;quot;hangup&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;{ &amp;quot;error&amp;quot;: 0, &amp;quot;message&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;user | robot&amp;quot;, &amp;quot;session&amp;quot;: &amp;quot;77f1af87-6da7-487b-96d2-4e2684704ad5&amp;quot; }&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Со стороны сервера возможны самостоятельные сообщения типов ask и hangup в формате, аналогичном приведенному в таблице выше.&lt;br /&gt;
&lt;br /&gt;
Работа с сервером возможна с поточной передачей аудио в сторону сервера. В данном режиме ответы от сервера будут со ссылками на аудио, которое должно быть воспроизведено на стороне клиента (см. таблицу выше). Формат принимаемого потока аудио: pcm, 8кГц, 16 бит, размер куска аудио - 20 мс.&lt;br /&gt;
&lt;br /&gt;
Аудио отправляется бинарным сообщением по ссылке ws://адрес/код сессии/chunk.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3463</id>
		<title>SES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3463"/>
		<updated>2026-01-12T07:48:04Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Протоколы и порты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для сценарных машин. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
&lt;br /&gt;
* UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Установка ses&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление ses осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить ses &amp;lt;code&amp;gt;/opt/ses/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -b&amp;lt;/code&amp;gt; – обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -r&amp;lt;/code&amp;gt; – обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -n&amp;lt;/code&amp;gt; – обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; – это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable ses.service &amp;amp;&amp;amp; sudo systemctl start ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Лицензия&#039;&#039;&#039; =====&lt;br /&gt;
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/license.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл лицензии должен соответствовать следующему формату:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;service&amp;quot;: &amp;quot;ses&amp;quot;, &amp;quot;expire&amp;quot;: &amp;quot;2045-01-01&amp;quot;, &amp;quot;licenses&amp;quot;: , &amp;quot;key&amp;quot;: &amp;quot;&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для получения лицензии необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Запустить сервис &amp;lt;code&amp;gt;systemctl start ses&amp;lt;/code&amp;gt; и извлечь UUID, указанный в файле &amp;lt;code&amp;gt;/opt/ses/logs/log.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Передать полученный UUID руководителю проекта для оформления лицензии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка сервиса&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса ses производится в файле /opt/ses/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|Параметр&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|По умолчанию&lt;br /&gt;
!style=&amp;quot;width: 60%&amp;quot;|Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Путь к папке логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.debug&lt;br /&gt;
|false&lt;br /&gt;
|Режим расширенного логирования.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество старых сохраняемых логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер текущего лог-файла в байтах.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.web&lt;br /&gt;
|/opt/ses/storage/web&lt;br /&gt;
|Путь для временного хранения фрагментов аудио веб сессий&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.hot&lt;br /&gt;
|/opt/ses/storage/hot&lt;br /&gt;
|Путь к &amp;quot;горячему&amp;quot; хранилищу аудиоданных&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.cold&lt;br /&gt;
|null&lt;br /&gt;
|Путь к &amp;quot;холодному&amp;quot; хранилищу аудиоданных, куда переливаются данные из &amp;quot;горячего&amp;quot; хранилища.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.freeswitch&lt;br /&gt;
|&amp;quot;/opt/ses/storage/temp&amp;quot;&lt;br /&gt;
|Путь к временному хранилищу аудио для распознавания с учетом смены корня для freeswitch&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.temp&lt;br /&gt;
|&amp;quot;/opt/ses-sip/image/opt/ses/storage/temp&amp;quot;&lt;br /&gt;
|Путь к временному хранилищу аудио для распознавания &lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.url&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:PORT/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|2&lt;br /&gt;
|Таймаут подключения к серверу.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|10&lt;br /&gt;
|Таймаут получения данных с сервера.&lt;br /&gt;
|-&lt;br /&gt;
|vad.thresh&lt;br /&gt;
|200&lt;br /&gt;
|Порог срабатывания vad для телефонного канала&lt;br /&gt;
|-&lt;br /&gt;
|vad.mode&lt;br /&gt;
|3&lt;br /&gt;
|Режим работы vad для телефонного канала&lt;br /&gt;
&amp;lt;small&amp;gt;0-Quality mode&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;1-Low bitrate mode&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;2-Aggressive mode.&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;3-Very aggressive mode.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxLength&lt;br /&gt;
|10000&lt;br /&gt;
|Максимальная длина звукового фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.minSpeech&lt;br /&gt;
|120&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxSilence&lt;br /&gt;
|1200 &lt;br /&gt;
| Максимальная длительность тишины перед отправкой фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.speechWaiting&lt;br /&gt;
|4000&lt;br /&gt;
|Длительность ожидания начала речи&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxLength&lt;br /&gt;
|2000&lt;br /&gt;
|Максимальная длина звукового фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.minSpeech&lt;br /&gt;
|60&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxSilence&lt;br /&gt;
|200&lt;br /&gt;
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|cluster.logfile &lt;br /&gt;
|logs/sync.log&lt;br /&gt;
|Файл логов синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.statusFile&lt;br /&gt;
|logs/sync.status&lt;br /&gt;
|Статус задачи синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.nodes&lt;br /&gt;
|[ ]&lt;br /&gt;
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|tmp&lt;br /&gt;
|&amp;quot;/tmp/ses&amp;quot;&lt;br /&gt;
|Временная папка.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Работа в составе кластера&#039;&#039;&#039;====&lt;br /&gt;
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: &lt;br /&gt;
*База файловая, в папке robots.&lt;br /&gt;
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.&lt;br /&gt;
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.&lt;br /&gt;
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Эмуляция сервисов интеграции&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
В каталоге &#039;&#039;&#039;/opt/ses/testapi&#039;&#039;&#039; могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу &#039;&#039;htttp://&amp;lt;адрес ses&amp;gt;/testapi/&amp;lt;название_сервиса&amp;gt;. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл &amp;lt;название_сервиса&amp;gt;.reply. Содержимое файла будет отдано без изменений, как есть по адресу &amp;quot;http://&amp;amp;#x3C;адрес_ses&amp;amp;#x3E;:&amp;amp;#x3C;порт_ses&amp;amp;#x3E;/ses/testapi/&amp;amp;#x3C;название_сервиса&amp;gt;&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка каналов и виджетов&#039;&#039;&#039; ===&lt;br /&gt;
====&#039;&#039;&#039;Настройка виджета для сайта&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа &amp;quot;web&amp;quot; в UPS создать коннектор.&lt;br /&gt;
# Разместить на сайте виджет, вставив тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; с нужными параметрами. При работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.&lt;br /&gt;
==== &#039;&#039;&#039;Вставка виджета в код сайта&#039;&#039;&#039; ====&lt;br /&gt;
Разместите в &amp;lt;code&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt; HTML-кода следующий тег:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;SERVER&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;NAME&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;TOKEN&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SERVER&#039;&#039;&#039; — адрес сервера UPS. Исходный код виджета всегда лежит по пути &amp;lt;code&amp;gt;/ses/widget/js&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;TOKEN&#039;&#039;&#039; — токен авторизации (генерируется и указывается в [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB настройках коннектора] &amp;quot;web&amp;quot; в UPS).&lt;br /&gt;
* &#039;&#039;&#039;NAME&#039;&#039;&#039; — дополнительный имя (query-параметр) для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.&lt;br /&gt;
&lt;br /&gt;
Пример пустой страницы с тремя  разными виджетами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;head&amp;gt; ... &amp;lt;/head&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;assistant1&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenXXX&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;assistant&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenYYY&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;chat&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenZZZ&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SSL и реверс-прокси&#039;&#039;&#039; ====&lt;br /&gt;
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:&lt;br /&gt;
&lt;br /&gt;
nginx (пример конфига для wss):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;server {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    server_name ups_сервер.ru;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    listen 6191 ssl;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    include snippets/ssl-params.conf;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    client_max_body_size 1000M;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_read_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_connect_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    large_client_header_buffers 8 256k;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    location / {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_pass &amp;lt;nowiki&amp;gt;http://локальный_адрес_ses:6191&amp;lt;/nowiki&amp;gt;;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_http_version 1.1;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Upgrade $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;порт 6192 для внутреннего прокси&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_cache_bypass $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
* Раздел proxy_set_header Host $host; обязателен.&lt;br /&gt;
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.&lt;br /&gt;
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection &amp;quot;upgrade&amp;quot; для поддержки upgrade-запроса (см. [документацию nginx]).&lt;br /&gt;
* Адреса для виджета и конфигов должны быть с поддержкой SSL.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
* Для множественных языковых функций возможно потребуется отдельная обработка пути &amp;quot;/lang&amp;quot; внутри nginx.&lt;br /&gt;
* Для websocket рекомендуется выделять отдельный порт — например, 8091.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порты 6190/tcp для доступа к API-интерфейсу, порт 6192 для внутреннего прокси и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status ses&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – &amp;lt;code&amp;gt;/opt/ses/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u ses&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление ses&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3462</id>
		<title>SES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3462"/>
		<updated>2026-01-12T07:47:28Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Протоколы и порты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для сценарных машин. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
&lt;br /&gt;
* UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Установка ses&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление ses осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить ses &amp;lt;code&amp;gt;/opt/ses/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -b&amp;lt;/code&amp;gt; – обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -r&amp;lt;/code&amp;gt; – обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -n&amp;lt;/code&amp;gt; – обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; – это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable ses.service &amp;amp;&amp;amp; sudo systemctl start ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Лицензия&#039;&#039;&#039; =====&lt;br /&gt;
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/license.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл лицензии должен соответствовать следующему формату:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;service&amp;quot;: &amp;quot;ses&amp;quot;, &amp;quot;expire&amp;quot;: &amp;quot;2045-01-01&amp;quot;, &amp;quot;licenses&amp;quot;: , &amp;quot;key&amp;quot;: &amp;quot;&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для получения лицензии необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Запустить сервис &amp;lt;code&amp;gt;systemctl start ses&amp;lt;/code&amp;gt; и извлечь UUID, указанный в файле &amp;lt;code&amp;gt;/opt/ses/logs/log.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Передать полученный UUID руководителю проекта для оформления лицензии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка сервиса&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса ses производится в файле /opt/ses/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|Параметр&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|По умолчанию&lt;br /&gt;
!style=&amp;quot;width: 60%&amp;quot;|Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Путь к папке логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.debug&lt;br /&gt;
|false&lt;br /&gt;
|Режим расширенного логирования.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество старых сохраняемых логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер текущего лог-файла в байтах.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.web&lt;br /&gt;
|/opt/ses/storage/web&lt;br /&gt;
|Путь для временного хранения фрагментов аудио веб сессий&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.hot&lt;br /&gt;
|/opt/ses/storage/hot&lt;br /&gt;
|Путь к &amp;quot;горячему&amp;quot; хранилищу аудиоданных&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.cold&lt;br /&gt;
|null&lt;br /&gt;
|Путь к &amp;quot;холодному&amp;quot; хранилищу аудиоданных, куда переливаются данные из &amp;quot;горячего&amp;quot; хранилища.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.freeswitch&lt;br /&gt;
|&amp;quot;/opt/ses/storage/temp&amp;quot;&lt;br /&gt;
|Путь к временному хранилищу аудио для распознавания с учетом смены корня для freeswitch&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.temp&lt;br /&gt;
|&amp;quot;/opt/ses-sip/image/opt/ses/storage/temp&amp;quot;&lt;br /&gt;
|Путь к временному хранилищу аудио для распознавания &lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.url&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:PORT/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|2&lt;br /&gt;
|Таймаут подключения к серверу.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|10&lt;br /&gt;
|Таймаут получения данных с сервера.&lt;br /&gt;
|-&lt;br /&gt;
|vad.thresh&lt;br /&gt;
|200&lt;br /&gt;
|Порог срабатывания vad для телефонного канала&lt;br /&gt;
|-&lt;br /&gt;
|vad.mode&lt;br /&gt;
|3&lt;br /&gt;
|Режим работы vad для телефонного канала&lt;br /&gt;
&amp;lt;small&amp;gt;0-Quality mode&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;1-Low bitrate mode&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;2-Aggressive mode.&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;3-Very aggressive mode.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxLength&lt;br /&gt;
|10000&lt;br /&gt;
|Максимальная длина звукового фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.minSpeech&lt;br /&gt;
|120&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxSilence&lt;br /&gt;
|1200 &lt;br /&gt;
| Максимальная длительность тишины перед отправкой фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.speechWaiting&lt;br /&gt;
|4000&lt;br /&gt;
|Длительность ожидания начала речи&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxLength&lt;br /&gt;
|2000&lt;br /&gt;
|Максимальная длина звукового фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.minSpeech&lt;br /&gt;
|60&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxSilence&lt;br /&gt;
|200&lt;br /&gt;
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|cluster.logfile &lt;br /&gt;
|logs/sync.log&lt;br /&gt;
|Файл логов синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.statusFile&lt;br /&gt;
|logs/sync.status&lt;br /&gt;
|Статус задачи синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.nodes&lt;br /&gt;
|[ ]&lt;br /&gt;
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|tmp&lt;br /&gt;
|&amp;quot;/tmp/ses&amp;quot;&lt;br /&gt;
|Временная папка.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Работа в составе кластера&#039;&#039;&#039;====&lt;br /&gt;
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: &lt;br /&gt;
*База файловая, в папке robots.&lt;br /&gt;
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.&lt;br /&gt;
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.&lt;br /&gt;
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Эмуляция сервисов интеграции&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
В каталоге &#039;&#039;&#039;/opt/ses/testapi&#039;&#039;&#039; могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу &#039;&#039;htttp://&amp;lt;адрес ses&amp;gt;/testapi/&amp;lt;название_сервиса&amp;gt;. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл &amp;lt;название_сервиса&amp;gt;.reply. Содержимое файла будет отдано без изменений, как есть по адресу &amp;quot;http://&amp;amp;#x3C;адрес_ses&amp;amp;#x3E;:&amp;amp;#x3C;порт_ses&amp;amp;#x3E;/ses/testapi/&amp;amp;#x3C;название_сервиса&amp;gt;&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка каналов и виджетов&#039;&#039;&#039; ===&lt;br /&gt;
====&#039;&#039;&#039;Настройка виджета для сайта&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа &amp;quot;web&amp;quot; в UPS создать коннектор.&lt;br /&gt;
# Разместить на сайте виджет, вставив тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; с нужными параметрами. При работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.&lt;br /&gt;
==== &#039;&#039;&#039;Вставка виджета в код сайта&#039;&#039;&#039; ====&lt;br /&gt;
Разместите в &amp;lt;code&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt; HTML-кода следующий тег:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;SERVER&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;NAME&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;TOKEN&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SERVER&#039;&#039;&#039; — адрес сервера UPS. Исходный код виджета всегда лежит по пути &amp;lt;code&amp;gt;/ses/widget/js&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;TOKEN&#039;&#039;&#039; — токен авторизации (генерируется и указывается в [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB настройках коннектора] &amp;quot;web&amp;quot; в UPS).&lt;br /&gt;
* &#039;&#039;&#039;NAME&#039;&#039;&#039; — дополнительный имя (query-параметр) для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.&lt;br /&gt;
&lt;br /&gt;
Пример пустой страницы с тремя  разными виджетами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;head&amp;gt; ... &amp;lt;/head&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;assistant1&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenXXX&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;assistant&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenYYY&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;chat&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenZZZ&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SSL и реверс-прокси&#039;&#039;&#039; ====&lt;br /&gt;
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:&lt;br /&gt;
&lt;br /&gt;
nginx (пример конфига для wss):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;server {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    server_name ups_сервер.ru;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    listen 6191 ssl;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    include snippets/ssl-params.conf;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    client_max_body_size 1000M;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_read_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_connect_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    large_client_header_buffers 8 256k;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    location / {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_pass &amp;lt;nowiki&amp;gt;http://локальный_адрес_ses:6191&amp;lt;/nowiki&amp;gt;;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_http_version 1.1;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Upgrade $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_cache_bypass $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
* Раздел proxy_set_header Host $host; обязателен.&lt;br /&gt;
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.&lt;br /&gt;
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection &amp;quot;upgrade&amp;quot; для поддержки upgrade-запроса (см. [документацию nginx]).&lt;br /&gt;
* Адреса для виджета и конфигов должны быть с поддержкой SSL.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
* Для множественных языковых функций возможно потребуется отдельная обработка пути &amp;quot;/lang&amp;quot; внутри nginx.&lt;br /&gt;
* Для websocket рекомендуется выделять отдельный порт — например, 8091.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порты 6190/tcp для доступа к API-интерфейсу, порт 6192 для внутреннего прокси и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status ses&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – &amp;lt;code&amp;gt;/opt/ses/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u ses&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление ses&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3461</id>
		<title>SES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3461"/>
		<updated>2026-01-12T07:44:00Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Файл config.json */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для сценарных машин. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
&lt;br /&gt;
* UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Установка ses&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление ses осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить ses &amp;lt;code&amp;gt;/opt/ses/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -b&amp;lt;/code&amp;gt; – обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -r&amp;lt;/code&amp;gt; – обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -n&amp;lt;/code&amp;gt; – обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; – это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable ses.service &amp;amp;&amp;amp; sudo systemctl start ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Лицензия&#039;&#039;&#039; =====&lt;br /&gt;
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/license.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл лицензии должен соответствовать следующему формату:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;service&amp;quot;: &amp;quot;ses&amp;quot;, &amp;quot;expire&amp;quot;: &amp;quot;2045-01-01&amp;quot;, &amp;quot;licenses&amp;quot;: , &amp;quot;key&amp;quot;: &amp;quot;&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для получения лицензии необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Запустить сервис &amp;lt;code&amp;gt;systemctl start ses&amp;lt;/code&amp;gt; и извлечь UUID, указанный в файле &amp;lt;code&amp;gt;/opt/ses/logs/log.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Передать полученный UUID руководителю проекта для оформления лицензии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка сервиса&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса ses производится в файле /opt/ses/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|Параметр&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|По умолчанию&lt;br /&gt;
!style=&amp;quot;width: 60%&amp;quot;|Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Путь к папке логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.debug&lt;br /&gt;
|false&lt;br /&gt;
|Режим расширенного логирования.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество старых сохраняемых логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер текущего лог-файла в байтах.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.web&lt;br /&gt;
|/opt/ses/storage/web&lt;br /&gt;
|Путь для временного хранения фрагментов аудио веб сессий&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.hot&lt;br /&gt;
|/opt/ses/storage/hot&lt;br /&gt;
|Путь к &amp;quot;горячему&amp;quot; хранилищу аудиоданных&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.cold&lt;br /&gt;
|null&lt;br /&gt;
|Путь к &amp;quot;холодному&amp;quot; хранилищу аудиоданных, куда переливаются данные из &amp;quot;горячего&amp;quot; хранилища.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.freeswitch&lt;br /&gt;
|&amp;quot;/opt/ses/storage/temp&amp;quot;&lt;br /&gt;
|Путь к временному хранилищу аудио для распознавания с учетом смены корня для freeswitch&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.temp&lt;br /&gt;
|&amp;quot;/opt/ses-sip/image/opt/ses/storage/temp&amp;quot;&lt;br /&gt;
|Путь к временному хранилищу аудио для распознавания &lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.url&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:PORT/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|2&lt;br /&gt;
|Таймаут подключения к серверу.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|10&lt;br /&gt;
|Таймаут получения данных с сервера.&lt;br /&gt;
|-&lt;br /&gt;
|vad.thresh&lt;br /&gt;
|200&lt;br /&gt;
|Порог срабатывания vad для телефонного канала&lt;br /&gt;
|-&lt;br /&gt;
|vad.mode&lt;br /&gt;
|3&lt;br /&gt;
|Режим работы vad для телефонного канала&lt;br /&gt;
&amp;lt;small&amp;gt;0-Quality mode&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;1-Low bitrate mode&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;2-Aggressive mode.&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;3-Very aggressive mode.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxLength&lt;br /&gt;
|10000&lt;br /&gt;
|Максимальная длина звукового фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.minSpeech&lt;br /&gt;
|120&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxSilence&lt;br /&gt;
|1200 &lt;br /&gt;
| Максимальная длительность тишины перед отправкой фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.speechWaiting&lt;br /&gt;
|4000&lt;br /&gt;
|Длительность ожидания начала речи&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxLength&lt;br /&gt;
|2000&lt;br /&gt;
|Максимальная длина звукового фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.minSpeech&lt;br /&gt;
|60&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxSilence&lt;br /&gt;
|200&lt;br /&gt;
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|cluster.logfile &lt;br /&gt;
|logs/sync.log&lt;br /&gt;
|Файл логов синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.statusFile&lt;br /&gt;
|logs/sync.status&lt;br /&gt;
|Статус задачи синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.nodes&lt;br /&gt;
|[ ]&lt;br /&gt;
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|tmp&lt;br /&gt;
|&amp;quot;/tmp/ses&amp;quot;&lt;br /&gt;
|Временная папка.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Работа в составе кластера&#039;&#039;&#039;====&lt;br /&gt;
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: &lt;br /&gt;
*База файловая, в папке robots.&lt;br /&gt;
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.&lt;br /&gt;
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.&lt;br /&gt;
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Эмуляция сервисов интеграции&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
В каталоге &#039;&#039;&#039;/opt/ses/testapi&#039;&#039;&#039; могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу &#039;&#039;htttp://&amp;lt;адрес ses&amp;gt;/testapi/&amp;lt;название_сервиса&amp;gt;. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл &amp;lt;название_сервиса&amp;gt;.reply. Содержимое файла будет отдано без изменений, как есть по адресу &amp;quot;http://&amp;amp;#x3C;адрес_ses&amp;amp;#x3E;:&amp;amp;#x3C;порт_ses&amp;amp;#x3E;/ses/testapi/&amp;amp;#x3C;название_сервиса&amp;gt;&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка каналов и виджетов&#039;&#039;&#039; ===&lt;br /&gt;
====&#039;&#039;&#039;Настройка виджета для сайта&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа &amp;quot;web&amp;quot; в UPS создать коннектор.&lt;br /&gt;
# Разместить на сайте виджет, вставив тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; с нужными параметрами. При работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.&lt;br /&gt;
==== &#039;&#039;&#039;Вставка виджета в код сайта&#039;&#039;&#039; ====&lt;br /&gt;
Разместите в &amp;lt;code&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt; HTML-кода следующий тег:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;SERVER&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;NAME&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;TOKEN&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SERVER&#039;&#039;&#039; — адрес сервера UPS. Исходный код виджета всегда лежит по пути &amp;lt;code&amp;gt;/ses/widget/js&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;TOKEN&#039;&#039;&#039; — токен авторизации (генерируется и указывается в [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB настройках коннектора] &amp;quot;web&amp;quot; в UPS).&lt;br /&gt;
* &#039;&#039;&#039;NAME&#039;&#039;&#039; — дополнительный имя (query-параметр) для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.&lt;br /&gt;
&lt;br /&gt;
Пример пустой страницы с тремя  разными виджетами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;head&amp;gt; ... &amp;lt;/head&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;assistant1&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenXXX&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;assistant&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenYYY&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;chat&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenZZZ&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SSL и реверс-прокси&#039;&#039;&#039; ====&lt;br /&gt;
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:&lt;br /&gt;
&lt;br /&gt;
nginx (пример конфига для wss):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;server {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    server_name ups_сервер.ru;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    listen 6191 ssl;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    include snippets/ssl-params.conf;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    client_max_body_size 1000M;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_read_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_connect_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    large_client_header_buffers 8 256k;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    location / {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_pass &amp;lt;nowiki&amp;gt;http://локальный_адрес_ses:6191&amp;lt;/nowiki&amp;gt;;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_http_version 1.1;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Upgrade $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_cache_bypass $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
* Раздел proxy_set_header Host $host; обязателен.&lt;br /&gt;
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.&lt;br /&gt;
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection &amp;quot;upgrade&amp;quot; для поддержки upgrade-запроса (см. [документацию nginx]).&lt;br /&gt;
* Адреса для виджета и конфигов должны быть с поддержкой SSL.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
* Для множественных языковых функций возможно потребуется отдельная обработка пути &amp;quot;/lang&amp;quot; внутри nginx.&lt;br /&gt;
* Для websocket рекомендуется выделять отдельный порт — например, 8091.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status ses&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – &amp;lt;code&amp;gt;/opt/ses/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u ses&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление ses&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3460</id>
		<title>SES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3460"/>
		<updated>2026-01-12T07:42:40Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Файл config.json */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для сценарных машин. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
&lt;br /&gt;
* UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Установка ses&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление ses осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить ses &amp;lt;code&amp;gt;/opt/ses/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -b&amp;lt;/code&amp;gt; – обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -r&amp;lt;/code&amp;gt; – обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -n&amp;lt;/code&amp;gt; – обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; – это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable ses.service &amp;amp;&amp;amp; sudo systemctl start ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Лицензия&#039;&#039;&#039; =====&lt;br /&gt;
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/license.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл лицензии должен соответствовать следующему формату:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;service&amp;quot;: &amp;quot;ses&amp;quot;, &amp;quot;expire&amp;quot;: &amp;quot;2045-01-01&amp;quot;, &amp;quot;licenses&amp;quot;: , &amp;quot;key&amp;quot;: &amp;quot;&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для получения лицензии необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Запустить сервис &amp;lt;code&amp;gt;systemctl start ses&amp;lt;/code&amp;gt; и извлечь UUID, указанный в файле &amp;lt;code&amp;gt;/opt/ses/logs/log.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Передать полученный UUID руководителю проекта для оформления лицензии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка сервиса&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса ses производится в файле /opt/ses/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|Параметр&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|По умолчанию&lt;br /&gt;
!style=&amp;quot;width: 60%&amp;quot;|Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Путь к папке логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.debug&lt;br /&gt;
|false&lt;br /&gt;
|Режим расширенного логирования.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество старых сохраняемых логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер текущего лог-файла в байтах.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.web&lt;br /&gt;
|/opt/ses/storage/web&lt;br /&gt;
|Путь для временного хранения фрагментов аудио веб сессий&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.hot&lt;br /&gt;
|/opt/ses/storage/hot&lt;br /&gt;
|Путь к &amp;quot;горячему&amp;quot; хранилищу аудиоданных&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.cold&lt;br /&gt;
|null&lt;br /&gt;
|Путь к &amp;quot;холодному&amp;quot; хранилищу аудиоданных, куда переливаются данные из &amp;quot;горячего&amp;quot; хранилища.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.freeswitch&lt;br /&gt;
|&amp;quot;/opt/ses/storage/temp&amp;quot;&lt;br /&gt;
|Путь к временному хранилищу аудио для распознавания с учетом смены корня для freeswitch&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.temp&lt;br /&gt;
|&amp;quot;/opt/ses-sip/image/opt/ses/storage/temp&amp;quot;&lt;br /&gt;
|Путь к временному хранилищу аудио для распознавания &lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.url&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:PORT/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|2&lt;br /&gt;
|Таймаут подключения к серверу.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|10&lt;br /&gt;
|Таймаут получения данных с сервера.&lt;br /&gt;
|-&lt;br /&gt;
|connectors.max&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам Max&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.vk&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам VK&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;group_id&amp;quot;:&amp;quot;id сообщества ВКонтакте&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.telegram&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к telegram ботам&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;botName&amp;quot;: &amp;quot;название бота (после символа @)&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;getUpdates&amp;quot;: 3&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...........&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.freeswitch&lt;br /&gt;
|{}&lt;br /&gt;
|Номера внутренних телефонов внутри freeswitch с привязкой к роботам&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;5000&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;robot&amp;quot;: &amp;quot;ffeaa99a-13d2-4bff-b458-1231c884f8ee&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt; }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.thresh&lt;br /&gt;
|200&lt;br /&gt;
|Порог срабатывания vad для телефонного канала&lt;br /&gt;
|-&lt;br /&gt;
|vad.mode&lt;br /&gt;
|3&lt;br /&gt;
|Режим работы vad для телефонного канала&lt;br /&gt;
&amp;lt;small&amp;gt;0-Quality mode&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;1-Low bitrate mode&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;2-Aggressive mode.&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;3-Very aggressive mode.&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxLength&lt;br /&gt;
|10000&lt;br /&gt;
|Максимальная длина звукового фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.minSpeech&lt;br /&gt;
|120&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxSilence&lt;br /&gt;
|1200 &lt;br /&gt;
| Максимальная длительность тишины перед отправкой фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.speechWaiting&lt;br /&gt;
|4000&lt;br /&gt;
|Длительность ожидания начала речи&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxLength&lt;br /&gt;
|2000&lt;br /&gt;
|Максимальная длина звукового фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.minSpeech&lt;br /&gt;
|60&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxSilence&lt;br /&gt;
|200&lt;br /&gt;
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|cluster.logfile &lt;br /&gt;
|logs/sync.log&lt;br /&gt;
|Файл логов синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.statusFile&lt;br /&gt;
|logs/sync.status&lt;br /&gt;
|Статус задачи синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.nodes&lt;br /&gt;
|[ ]&lt;br /&gt;
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|tmp&lt;br /&gt;
|&amp;quot;/tmp/ses&amp;quot;&lt;br /&gt;
|Временная папка.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Работа в составе кластера&#039;&#039;&#039;====&lt;br /&gt;
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: &lt;br /&gt;
*База файловая, в папке robots.&lt;br /&gt;
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.&lt;br /&gt;
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.&lt;br /&gt;
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Эмуляция сервисов интеграции&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
В каталоге &#039;&#039;&#039;/opt/ses/testapi&#039;&#039;&#039; могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу &#039;&#039;htttp://&amp;lt;адрес ses&amp;gt;/testapi/&amp;lt;название_сервиса&amp;gt;. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл &amp;lt;название_сервиса&amp;gt;.reply. Содержимое файла будет отдано без изменений, как есть по адресу &amp;quot;http://&amp;amp;#x3C;адрес_ses&amp;amp;#x3E;:&amp;amp;#x3C;порт_ses&amp;amp;#x3E;/ses/testapi/&amp;amp;#x3C;название_сервиса&amp;gt;&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка каналов и виджетов&#039;&#039;&#039; ===&lt;br /&gt;
====&#039;&#039;&#039;Настройка виджета для сайта&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа &amp;quot;web&amp;quot; в UPS создать коннектор.&lt;br /&gt;
# Разместить на сайте виджет, вставив тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; с нужными параметрами. При работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.&lt;br /&gt;
==== &#039;&#039;&#039;Вставка виджета в код сайта&#039;&#039;&#039; ====&lt;br /&gt;
Разместите в &amp;lt;code&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt; HTML-кода следующий тег:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;SERVER&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;NAME&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;TOKEN&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SERVER&#039;&#039;&#039; — адрес сервера UPS. Исходный код виджета всегда лежит по пути &amp;lt;code&amp;gt;/ses/widget/js&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;TOKEN&#039;&#039;&#039; — токен авторизации (генерируется и указывается в [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB настройках коннектора] &amp;quot;web&amp;quot; в UPS).&lt;br /&gt;
* &#039;&#039;&#039;NAME&#039;&#039;&#039; — дополнительный имя (query-параметр) для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.&lt;br /&gt;
&lt;br /&gt;
Пример пустой страницы с тремя  разными виджетами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;head&amp;gt; ... &amp;lt;/head&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;assistant1&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenXXX&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;assistant&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenYYY&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;server.net&#039;&#039;&#039;/ses/widget/js?&#039;&#039;&#039;chat&#039;&#039;&#039;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;&#039;&#039;&#039;tokenZZZ&#039;&#039;&#039;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;small&amp;gt;&amp;lt;code&amp;gt;&amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SSL и реверс-прокси&#039;&#039;&#039; ====&lt;br /&gt;
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:&lt;br /&gt;
&lt;br /&gt;
nginx (пример конфига для wss):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;server {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    server_name ups_сервер.ru;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    listen 6191 ssl;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    include snippets/ssl-params.conf;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    client_max_body_size 1000M;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_read_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_connect_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    large_client_header_buffers 8 256k;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    location / {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_pass &amp;lt;nowiki&amp;gt;http://локальный_адрес_ses:6191&amp;lt;/nowiki&amp;gt;;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_http_version 1.1;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Upgrade $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_cache_bypass $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
* Раздел proxy_set_header Host $host; обязателен.&lt;br /&gt;
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.&lt;br /&gt;
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection &amp;quot;upgrade&amp;quot; для поддержки upgrade-запроса (см. [документацию nginx]).&lt;br /&gt;
* Адреса для виджета и конфигов должны быть с поддержкой SSL.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
* Для множественных языковых функций возможно потребуется отдельная обработка пути &amp;quot;/lang&amp;quot; внутри nginx.&lt;br /&gt;
* Для websocket рекомендуется выделять отдельный порт — например, 8091.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status ses&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – &amp;lt;code&amp;gt;/opt/ses/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u ses&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление ses&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3356</id>
		<title>SES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3356"/>
		<updated>2025-11-13T08:31:23Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Настройка виджета для сайта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для сценарных машин. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
&lt;br /&gt;
* UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Установка ses&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление ses осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить ses &amp;lt;code&amp;gt;/opt/ses/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -b&amp;lt;/code&amp;gt; – обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -r&amp;lt;/code&amp;gt; – обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -n&amp;lt;/code&amp;gt; – обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; – это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable ses.service &amp;amp;&amp;amp; sudo systemctl start ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Лицензия&#039;&#039;&#039; =====&lt;br /&gt;
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/license.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл лицензии должен соответствовать следующему формату:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;service&amp;quot;: &amp;quot;ses&amp;quot;, &amp;quot;expire&amp;quot;: &amp;quot;2045-01-01&amp;quot;, &amp;quot;licenses&amp;quot;: , &amp;quot;key&amp;quot;: &amp;quot;&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для получения лицензии необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Запустить сервис &amp;lt;code&amp;gt;systemctl start ses&amp;lt;/code&amp;gt; и извлечь UUID, указанный в файле &amp;lt;code&amp;gt;/opt/ses/logs/log.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Передать полученный UUID руководителю проекта для оформления лицензии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка сервиса&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса ses производится в файле /opt/ses/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|Параметр&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|По умолчанию&lt;br /&gt;
!style=&amp;quot;width: 60%&amp;quot;|Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Путь к папке логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.debug&lt;br /&gt;
|false&lt;br /&gt;
|Режим расширенного логирования.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество старых сохраняемых логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер текущего лог-файла в байтах.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.web&lt;br /&gt;
|/opt/ses/storage/web&lt;br /&gt;
|Путь для временного хранения фрагментов аудио веб сессий&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.hot&lt;br /&gt;
|/opt/ses/storage/hot&lt;br /&gt;
|Путь к &amp;quot;горячему&amp;quot; хранилищу аудиоданных&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.cold&lt;br /&gt;
|null&lt;br /&gt;
|Путь к &amp;quot;холодному&amp;quot; хранилищу аудиоданных, куда переливаются данные из &amp;quot;горячего&amp;quot; хранилища.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.url&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:PORT/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|2&lt;br /&gt;
|Таймаут подключения к серверу.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|10&lt;br /&gt;
|Таймаут получения данных с сервера.&lt;br /&gt;
|-&lt;br /&gt;
|connectors.max&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам Max&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.vk&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам VK&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;group_id&amp;quot;:&amp;quot;id сообщества ВКонтакте&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.telegram&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к telegram ботам&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;botName&amp;quot;: &amp;quot;название бота (после символа @)&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;getUpdates&amp;quot;: 3&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...........&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.freeswitch&lt;br /&gt;
|{}&lt;br /&gt;
|Номера внутренних телефонов внутри freeswitch с привязкой к роботам&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;5000&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;robot&amp;quot;: &amp;quot;ffeaa99a-13d2-4bff-b458-1231c884f8ee&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt; }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxLength&lt;br /&gt;
|10000&lt;br /&gt;
|Максимальная длина звукового фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.minSpeech&lt;br /&gt;
|120&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxSilence&lt;br /&gt;
|1200 &lt;br /&gt;
| Максимальная длительность тишины перед отправкой фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.speechWaiting&lt;br /&gt;
|4000&lt;br /&gt;
|Длительность ожидания начала речи&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxLength&lt;br /&gt;
|2000&lt;br /&gt;
|Максимальная длина звукового фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.minSpeech&lt;br /&gt;
|60&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxSilence&lt;br /&gt;
|200&lt;br /&gt;
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|cluster.logfile &lt;br /&gt;
|logs/sync.log&lt;br /&gt;
|Файл логов синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.statusFile&lt;br /&gt;
|logs/sync.status&lt;br /&gt;
|Статус задачи синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.nodes&lt;br /&gt;
|[ ]&lt;br /&gt;
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|tmp&lt;br /&gt;
|&amp;quot;/tmp/ses&amp;quot;&lt;br /&gt;
|Временная папка.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Работа в составе кластера&#039;&#039;&#039;====&lt;br /&gt;
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: &lt;br /&gt;
*База файловая, в папке robots.&lt;br /&gt;
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.&lt;br /&gt;
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.&lt;br /&gt;
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Эмуляция сервисов интеграции&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
В каталоге &#039;&#039;&#039;/opt/ses/testapi&#039;&#039;&#039; могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу &#039;&#039;htttp://&amp;lt;адрес ses&amp;gt;/testapi/&amp;lt;название_сервиса&amp;gt;. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл &amp;lt;название_сервиса&amp;gt;.reply. Содержимое файла будет отдано без изменений, как есть по адресу &amp;quot;http://&amp;amp;#x3C;адрес_ses&amp;amp;#x3E;:&amp;amp;#x3C;порт_ses&amp;amp;#x3E;/ses/testapi/&amp;amp;#x3C;название_сервиса&amp;gt;&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка каналов и виджетов&#039;&#039;&#039; ===&lt;br /&gt;
====&#039;&#039;&#039;Настройка виджета для сайта&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа &amp;quot;web&amp;quot; в UPS создать коннектор.&lt;br /&gt;
# Разместить на сайте виджет, вставив тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; с нужными параметрами. При работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.&lt;br /&gt;
==== &#039;&#039;&#039;Вставка виджета в код сайта&#039;&#039;&#039; ====&lt;br /&gt;
Разместите в &amp;lt;code&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt; HTML-кода следующий тег:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;script src=&amp;quot;https://SERVER/ses/widget/js?name&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;TOKEN&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SERVER&#039;&#039;&#039; — адрес сервера UPS. Исходный код виджета всегда лежит по пути &amp;lt;code&amp;gt;/ses/widget/js&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;TOKEN&#039;&#039;&#039; — токен авторизации (генерируется и указывается в [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB настройках коннектора] &amp;quot;web&amp;quot; в UPS).&lt;br /&gt;
* ?&#039;&#039;&#039;name&#039;&#039;&#039; — дополнительный ключ для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.&lt;br /&gt;
&lt;br /&gt;
Пример пустой страницы с 3  разными виджетами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt; ............  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant1&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn777&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;gghdkfmm$$32@1Ujhhf4$5&amp;amp;dfdfgfgdfg-assAA&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?chat&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;lt;/body&amp;gt;  &amp;lt;/html&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SSL и реверс-прокси&#039;&#039;&#039; ====&lt;br /&gt;
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:&lt;br /&gt;
&lt;br /&gt;
nginx (пример конфига для wss):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;server {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    server_name ups_сервер.ru;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    listen 6191 ssl;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    include snippets/ssl-params.conf;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    client_max_body_size 1000M;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_read_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_connect_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    large_client_header_buffers 8 256k;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    location / {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_pass &amp;lt;nowiki&amp;gt;http://локальный_адрес_ses:6191&amp;lt;/nowiki&amp;gt;;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_http_version 1.1;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Upgrade $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_cache_bypass $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
* Раздел proxy_set_header Host $host; обязателен.&lt;br /&gt;
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.&lt;br /&gt;
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection &amp;quot;upgrade&amp;quot; для поддержки upgrade-запроса (см. [документацию nginx]).&lt;br /&gt;
* Адреса для виджета и конфигов должны быть с поддержкой SSL.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
* Для множественных языковых функций возможно потребуется отдельная обработка пути &amp;quot;/lang&amp;quot; внутри nginx.&lt;br /&gt;
* Для websocket рекомендуется выделять отдельный порт — например, 8091.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status ses&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – &amp;lt;code&amp;gt;/opt/ses/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u ses&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление ses&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3355</id>
		<title>SES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3355"/>
		<updated>2025-11-13T08:30:50Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Вставка виджета в код сайта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для сценарных машин. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
&lt;br /&gt;
* UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Установка ses&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление ses осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить ses &amp;lt;code&amp;gt;/opt/ses/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -b&amp;lt;/code&amp;gt; – обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -r&amp;lt;/code&amp;gt; – обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -n&amp;lt;/code&amp;gt; – обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; – это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable ses.service &amp;amp;&amp;amp; sudo systemctl start ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Лицензия&#039;&#039;&#039; =====&lt;br /&gt;
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/license.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл лицензии должен соответствовать следующему формату:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;service&amp;quot;: &amp;quot;ses&amp;quot;, &amp;quot;expire&amp;quot;: &amp;quot;2045-01-01&amp;quot;, &amp;quot;licenses&amp;quot;: , &amp;quot;key&amp;quot;: &amp;quot;&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для получения лицензии необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Запустить сервис &amp;lt;code&amp;gt;systemctl start ses&amp;lt;/code&amp;gt; и извлечь UUID, указанный в файле &amp;lt;code&amp;gt;/opt/ses/logs/log.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Передать полученный UUID руководителю проекта для оформления лицензии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка сервиса&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса ses производится в файле /opt/ses/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|Параметр&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|По умолчанию&lt;br /&gt;
!style=&amp;quot;width: 60%&amp;quot;|Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Путь к папке логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.debug&lt;br /&gt;
|false&lt;br /&gt;
|Режим расширенного логирования.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество старых сохраняемых логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер текущего лог-файла в байтах.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.web&lt;br /&gt;
|/opt/ses/storage/web&lt;br /&gt;
|Путь для временного хранения фрагментов аудио веб сессий&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.hot&lt;br /&gt;
|/opt/ses/storage/hot&lt;br /&gt;
|Путь к &amp;quot;горячему&amp;quot; хранилищу аудиоданных&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.cold&lt;br /&gt;
|null&lt;br /&gt;
|Путь к &amp;quot;холодному&amp;quot; хранилищу аудиоданных, куда переливаются данные из &amp;quot;горячего&amp;quot; хранилища.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.url&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:PORT/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|2&lt;br /&gt;
|Таймаут подключения к серверу.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|10&lt;br /&gt;
|Таймаут получения данных с сервера.&lt;br /&gt;
|-&lt;br /&gt;
|connectors.max&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам Max&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.vk&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам VK&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;group_id&amp;quot;:&amp;quot;id сообщества ВКонтакте&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.telegram&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к telegram ботам&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;botName&amp;quot;: &amp;quot;название бота (после символа @)&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;getUpdates&amp;quot;: 3&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...........&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.freeswitch&lt;br /&gt;
|{}&lt;br /&gt;
|Номера внутренних телефонов внутри freeswitch с привязкой к роботам&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;5000&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;robot&amp;quot;: &amp;quot;ffeaa99a-13d2-4bff-b458-1231c884f8ee&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt; }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxLength&lt;br /&gt;
|10000&lt;br /&gt;
|Максимальная длина звукового фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.minSpeech&lt;br /&gt;
|120&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxSilence&lt;br /&gt;
|1200 &lt;br /&gt;
| Максимальная длительность тишины перед отправкой фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.speechWaiting&lt;br /&gt;
|4000&lt;br /&gt;
|Длительность ожидания начала речи&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxLength&lt;br /&gt;
|2000&lt;br /&gt;
|Максимальная длина звукового фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.minSpeech&lt;br /&gt;
|60&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxSilence&lt;br /&gt;
|200&lt;br /&gt;
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|cluster.logfile &lt;br /&gt;
|logs/sync.log&lt;br /&gt;
|Файл логов синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.statusFile&lt;br /&gt;
|logs/sync.status&lt;br /&gt;
|Статус задачи синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.nodes&lt;br /&gt;
|[ ]&lt;br /&gt;
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|tmp&lt;br /&gt;
|&amp;quot;/tmp/ses&amp;quot;&lt;br /&gt;
|Временная папка.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Работа в составе кластера&#039;&#039;&#039;====&lt;br /&gt;
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: &lt;br /&gt;
*База файловая, в папке robots.&lt;br /&gt;
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.&lt;br /&gt;
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.&lt;br /&gt;
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Эмуляция сервисов интеграции&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
В каталоге &#039;&#039;&#039;/opt/ses/testapi&#039;&#039;&#039; могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу &#039;&#039;htttp://&amp;lt;адрес ses&amp;gt;/testapi/&amp;lt;название_сервиса&amp;gt;. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл &amp;lt;название_сервиса&amp;gt;.reply. Содержимое файла будет отдано без изменений, как есть по адресу &amp;quot;http://&amp;amp;#x3C;адрес_ses&amp;amp;#x3E;:&amp;amp;#x3C;порт_ses&amp;amp;#x3E;/ses/testapi/&amp;amp;#x3C;название_сервиса&amp;gt;&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка каналов и виджетов&#039;&#039;&#039; ===&lt;br /&gt;
====&#039;&#039;&#039;Настройка виджета для сайта&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа &amp;quot;web&amp;quot; в UPS создать коннектор.&lt;br /&gt;
# Разместить на сайте виджет, вставив тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; с нужными параметрами. Плюс — при работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.&lt;br /&gt;
==== &#039;&#039;&#039;Вставка виджета в код сайта&#039;&#039;&#039; ====&lt;br /&gt;
Разместите в &amp;lt;code&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt; HTML-кода следующий тег:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;script src=&amp;quot;https://SERVER/ses/widget/js?name&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;TOKEN&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;SERVER&#039;&#039;&#039; — адрес сервера UPS. Исходный код виджета всегда лежит по пути &amp;lt;code&amp;gt;/ses/widget/js&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;TOKEN&#039;&#039;&#039; — токен авторизации (генерируется и указывается в [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB настройках коннектора] &amp;quot;web&amp;quot; в UPS).&lt;br /&gt;
* ?&#039;&#039;&#039;name&#039;&#039;&#039; — дополнительный ключ для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.&lt;br /&gt;
&lt;br /&gt;
Пример пустой страницы с 3  разными виджетами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt; ............  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant1&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn777&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;gghdkfmm$$32@1Ujhhf4$5&amp;amp;dfdfgfgdfg-assAA&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?chat&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;  &amp;lt;/body&amp;gt;  &amp;lt;/html&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SSL и реверс-прокси&#039;&#039;&#039; ====&lt;br /&gt;
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:&lt;br /&gt;
&lt;br /&gt;
nginx (пример конфига для wss):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;server {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    server_name ups_сервер.ru;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    listen 6191 ssl;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    include snippets/ssl-params.conf;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    client_max_body_size 1000M;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_read_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_connect_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    proxy_send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    send_timeout 6000;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    large_client_header_buffers 8 256k;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    location / {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_pass &amp;lt;nowiki&amp;gt;http://локальный_адрес_ses:6191&amp;lt;/nowiki&amp;gt;;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_http_version 1.1;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Upgrade $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_set_header Host $host;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        proxy_cache_bypass $http_upgrade;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    }&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
* Раздел proxy_set_header Host $host; обязателен.&lt;br /&gt;
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.&lt;br /&gt;
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection &amp;quot;upgrade&amp;quot; для поддержки upgrade-запроса (см. [документацию nginx]).&lt;br /&gt;
* Адреса для виджета и конфигов должны быть с поддержкой SSL.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
* Для множественных языковых функций возможно потребуется отдельная обработка пути &amp;quot;/lang&amp;quot; внутри nginx.&lt;br /&gt;
* Для websocket рекомендуется выделять отдельный порт — например, 8091.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status ses&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – &amp;lt;code&amp;gt;/opt/ses/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u ses&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление ses&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3354</id>
		<title>SES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3354"/>
		<updated>2025-11-13T08:29:03Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Вставка виджета в код сайта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для сценарных машин. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
&lt;br /&gt;
* UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Установка ses&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление ses осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить ses &amp;lt;code&amp;gt;/opt/ses/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -b&amp;lt;/code&amp;gt; – обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -r&amp;lt;/code&amp;gt; – обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -n&amp;lt;/code&amp;gt; – обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; – это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable ses.service &amp;amp;&amp;amp; sudo systemctl start ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Лицензия&#039;&#039;&#039; =====&lt;br /&gt;
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/license.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл лицензии должен соответствовать следующему формату:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;service&amp;quot;: &amp;quot;ses&amp;quot;, &amp;quot;expire&amp;quot;: &amp;quot;2045-01-01&amp;quot;, &amp;quot;licenses&amp;quot;: , &amp;quot;key&amp;quot;: &amp;quot;&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для получения лицензии необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Запустить сервис &amp;lt;code&amp;gt;systemctl start ses&amp;lt;/code&amp;gt; и извлечь UUID, указанный в файле &amp;lt;code&amp;gt;/opt/ses/logs/log.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Передать полученный UUID руководителю проекта для оформления лицензии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка сервиса&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса ses производится в файле /opt/ses/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|Параметр&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|По умолчанию&lt;br /&gt;
!style=&amp;quot;width: 60%&amp;quot;|Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Путь к папке логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.debug&lt;br /&gt;
|false&lt;br /&gt;
|Режим расширенного логирования.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество старых сохраняемых логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер текущего лог-файла в байтах.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.web&lt;br /&gt;
|/opt/ses/storage/web&lt;br /&gt;
|Путь для временного хранения фрагментов аудио веб сессий&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.hot&lt;br /&gt;
|/opt/ses/storage/hot&lt;br /&gt;
|Путь к &amp;quot;горячему&amp;quot; хранилищу аудиоданных&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.cold&lt;br /&gt;
|null&lt;br /&gt;
|Путь к &amp;quot;холодному&amp;quot; хранилищу аудиоданных, куда переливаются данные из &amp;quot;горячего&amp;quot; хранилища.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.url&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:PORT/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|2&lt;br /&gt;
|Таймаут подключения к серверу.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|10&lt;br /&gt;
|Таймаут получения данных с сервера.&lt;br /&gt;
|-&lt;br /&gt;
|connectors.max&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам Max&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.vk&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам VK&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;group_id&amp;quot;:&amp;quot;id сообщества ВКонтакте&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.telegram&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к telegram ботам&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;botName&amp;quot;: &amp;quot;название бота (после символа @)&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;getUpdates&amp;quot;: 3&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...........&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.freeswitch&lt;br /&gt;
|{}&lt;br /&gt;
|Номера внутренних телефонов внутри freeswitch с привязкой к роботам&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;5000&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;robot&amp;quot;: &amp;quot;ffeaa99a-13d2-4bff-b458-1231c884f8ee&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt; }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxLength&lt;br /&gt;
|10000&lt;br /&gt;
|Максимальная длина звукового фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.minSpeech&lt;br /&gt;
|120&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxSilence&lt;br /&gt;
|1200 &lt;br /&gt;
| Максимальная длительность тишины перед отправкой фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.speechWaiting&lt;br /&gt;
|4000&lt;br /&gt;
|Длительность ожидания начала речи&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxLength&lt;br /&gt;
|2000&lt;br /&gt;
|Максимальная длина звукового фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.minSpeech&lt;br /&gt;
|60&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxSilence&lt;br /&gt;
|200&lt;br /&gt;
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|cluster.logfile &lt;br /&gt;
|logs/sync.log&lt;br /&gt;
|Файл логов синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.statusFile&lt;br /&gt;
|logs/sync.status&lt;br /&gt;
|Статус задачи синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.nodes&lt;br /&gt;
|[ ]&lt;br /&gt;
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|tmp&lt;br /&gt;
|&amp;quot;/tmp/ses&amp;quot;&lt;br /&gt;
|Временная папка.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Работа в составе кластера&#039;&#039;&#039;====&lt;br /&gt;
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: &lt;br /&gt;
*База файловая, в папке robots.&lt;br /&gt;
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.&lt;br /&gt;
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.&lt;br /&gt;
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Эмуляция сервисов интеграции&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
В каталоге &#039;&#039;&#039;/opt/ses/testapi&#039;&#039;&#039; могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу &#039;&#039;htttp://&amp;lt;адрес ses&amp;gt;/testapi/&amp;lt;название_сервиса&amp;gt;. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл &amp;lt;название_сервиса&amp;gt;.reply. Содержимое файла будет отдано без изменений, как есть по адресу &amp;quot;http://&amp;amp;#x3C;адрес_ses&amp;amp;#x3E;:&amp;amp;#x3C;порт_ses&amp;amp;#x3E;/ses/testapi/&amp;amp;#x3C;название_сервиса&amp;gt;&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка каналов и виджетов&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Настройка виджета для сайта&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа &amp;quot;web&amp;quot; в UPS создать коннектор.&lt;br /&gt;
# Разместить на сайте виджет, вставив тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; с нужными параметрами. Плюс — при работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.&lt;br /&gt;
==== &#039;&#039;&#039;Вставка виджета в код сайта&#039;&#039;&#039; ====&lt;br /&gt;
Разместите в &amp;lt;code&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt; HTML-кода следующий тег:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;script src=&amp;quot;https://SERVER/ses/widget/js?name&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;TOKEN&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SERVER — адрес сервера UPS. Исходный код виджета всегда лежит по пути &amp;lt;code&amp;gt;/ses/widget/js&amp;lt;/code&amp;gt;.&lt;br /&gt;
* TOKEN — токен авторизации (генерируется и указывается в [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB настройках коннектора] &amp;quot;web&amp;quot; в UPS).&lt;br /&gt;
* ?name — дополнительный ключ для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.&lt;br /&gt;
&lt;br /&gt;
Пример пустой страницы с 3  разными виджетами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt; ............  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant1&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn777&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;gghdkfmm$$32@1Ujhhf4$5&amp;amp;dfdfgfgdfg-assAA&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?chat&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;  &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SSL и реверс-прокси&#039;&#039;&#039; ====&lt;br /&gt;
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:&lt;br /&gt;
&lt;br /&gt;
nginx (пример конфига для wss):&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
&lt;br /&gt;
    server_name ups_сервер.ru;&lt;br /&gt;
&lt;br /&gt;
    listen 6191 ssl;&lt;br /&gt;
&lt;br /&gt;
    include snippets/ssl-params.conf;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;&lt;br /&gt;
&lt;br /&gt;
    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;&lt;br /&gt;
&lt;br /&gt;
    client_max_body_size 1000M;&lt;br /&gt;
&lt;br /&gt;
    proxy_read_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    proxy_connect_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    proxy_send_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    send_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    large_client_header_buffers 8 256k;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
&lt;br /&gt;
        proxy_pass &amp;lt;nowiki&amp;gt;http://локальный_адрес_ses:6191&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
&lt;br /&gt;
        proxy_cache_bypass $http_upgrade;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
* Раздел proxy_set_header Host $host; обязателен.&lt;br /&gt;
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.&lt;br /&gt;
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection &amp;quot;upgrade&amp;quot; для поддержки upgrade-запроса (см. [документацию nginx]).&lt;br /&gt;
* Адреса для виджета и конфигов должны быть с поддержкой SSL.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
* Для множественных языковых функций возможно потребуется отдельная обработка пути &amp;quot;/lang&amp;quot; внутри nginx.&lt;br /&gt;
* Для websocket рекомендуется выделять отдельный порт — например, 8091.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status ses&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – &amp;lt;code&amp;gt;/opt/ses/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u ses&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление ses&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3353</id>
		<title>SES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3353"/>
		<updated>2025-11-13T08:28:30Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Вставка виджета в код сайта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для сценарных машин. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
&lt;br /&gt;
* UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Установка ses&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление ses осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить ses &amp;lt;code&amp;gt;/opt/ses/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -b&amp;lt;/code&amp;gt; – обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -r&amp;lt;/code&amp;gt; – обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -n&amp;lt;/code&amp;gt; – обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; – это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable ses.service &amp;amp;&amp;amp; sudo systemctl start ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Лицензия&#039;&#039;&#039; =====&lt;br /&gt;
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/license.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл лицензии должен соответствовать следующему формату:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;service&amp;quot;: &amp;quot;ses&amp;quot;, &amp;quot;expire&amp;quot;: &amp;quot;2045-01-01&amp;quot;, &amp;quot;licenses&amp;quot;: , &amp;quot;key&amp;quot;: &amp;quot;&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для получения лицензии необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Запустить сервис &amp;lt;code&amp;gt;systemctl start ses&amp;lt;/code&amp;gt; и извлечь UUID, указанный в файле &amp;lt;code&amp;gt;/opt/ses/logs/log.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Передать полученный UUID руководителю проекта для оформления лицензии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка сервиса&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса ses производится в файле /opt/ses/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|Параметр&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|По умолчанию&lt;br /&gt;
!style=&amp;quot;width: 60%&amp;quot;|Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Путь к папке логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.debug&lt;br /&gt;
|false&lt;br /&gt;
|Режим расширенного логирования.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество старых сохраняемых логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер текущего лог-файла в байтах.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.web&lt;br /&gt;
|/opt/ses/storage/web&lt;br /&gt;
|Путь для временного хранения фрагментов аудио веб сессий&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.hot&lt;br /&gt;
|/opt/ses/storage/hot&lt;br /&gt;
|Путь к &amp;quot;горячему&amp;quot; хранилищу аудиоданных&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.cold&lt;br /&gt;
|null&lt;br /&gt;
|Путь к &amp;quot;холодному&amp;quot; хранилищу аудиоданных, куда переливаются данные из &amp;quot;горячего&amp;quot; хранилища.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.url&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:PORT/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|2&lt;br /&gt;
|Таймаут подключения к серверу.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|10&lt;br /&gt;
|Таймаут получения данных с сервера.&lt;br /&gt;
|-&lt;br /&gt;
|connectors.max&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам Max&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.vk&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам VK&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;group_id&amp;quot;:&amp;quot;id сообщества ВКонтакте&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.telegram&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к telegram ботам&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;botName&amp;quot;: &amp;quot;название бота (после символа @)&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;getUpdates&amp;quot;: 3&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...........&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.freeswitch&lt;br /&gt;
|{}&lt;br /&gt;
|Номера внутренних телефонов внутри freeswitch с привязкой к роботам&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;5000&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;robot&amp;quot;: &amp;quot;ffeaa99a-13d2-4bff-b458-1231c884f8ee&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt; }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxLength&lt;br /&gt;
|10000&lt;br /&gt;
|Максимальная длина звукового фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.minSpeech&lt;br /&gt;
|120&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxSilence&lt;br /&gt;
|1200 &lt;br /&gt;
| Максимальная длительность тишины перед отправкой фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.speechWaiting&lt;br /&gt;
|4000&lt;br /&gt;
|Длительность ожидания начала речи&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxLength&lt;br /&gt;
|2000&lt;br /&gt;
|Максимальная длина звукового фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.minSpeech&lt;br /&gt;
|60&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxSilence&lt;br /&gt;
|200&lt;br /&gt;
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|cluster.logfile &lt;br /&gt;
|logs/sync.log&lt;br /&gt;
|Файл логов синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.statusFile&lt;br /&gt;
|logs/sync.status&lt;br /&gt;
|Статус задачи синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.nodes&lt;br /&gt;
|[ ]&lt;br /&gt;
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|tmp&lt;br /&gt;
|&amp;quot;/tmp/ses&amp;quot;&lt;br /&gt;
|Временная папка.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Работа в составе кластера&#039;&#039;&#039;====&lt;br /&gt;
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: &lt;br /&gt;
*База файловая, в папке robots.&lt;br /&gt;
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.&lt;br /&gt;
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.&lt;br /&gt;
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Эмуляция сервисов интеграции&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
В каталоге &#039;&#039;&#039;/opt/ses/testapi&#039;&#039;&#039; могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу &#039;&#039;htttp://&amp;lt;адрес ses&amp;gt;/testapi/&amp;lt;название_сервиса&amp;gt;. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл &amp;lt;название_сервиса&amp;gt;.reply. Содержимое файла будет отдано без изменений, как есть по адресу &amp;quot;http://&amp;amp;#x3C;адрес_ses&amp;amp;#x3E;:&amp;amp;#x3C;порт_ses&amp;amp;#x3E;/ses/testapi/&amp;amp;#x3C;название_сервиса&amp;gt;&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка каналов и виджетов&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Настройка виджета для сайта&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа &amp;quot;web&amp;quot; в UPS создать коннектор.&lt;br /&gt;
# Разместить на сайте виджет, вставив тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; с нужными параметрами. Плюс — при работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.&lt;br /&gt;
==== &#039;&#039;&#039;Вставка виджета в код сайта&#039;&#039;&#039; ====&lt;br /&gt;
Разместите в &amp;lt;code&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt; HTML-кода следующий тег:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;script src=&amp;quot;https://SERVER/ses/widget/js?name&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;TOKEN&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SERVER — адрес сервера UPS. Исходный код виджета всегда лежит по пути &amp;lt;code&amp;gt;/ses/widget/js&amp;lt;/code&amp;gt;.&lt;br /&gt;
* TOKEN — токен авторизации (генерируется и указывается в [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB настройках коннектора] &amp;quot;web&amp;quot; в UPS).&lt;br /&gt;
* ?name — дополнительный ключ для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.&lt;br /&gt;
&lt;br /&gt;
Пример пустой страницы с 3  разными виджетами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt; ............  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant1&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn777&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;gghdkfmm$$32@1Ujhhf4$5&amp;amp;dfdfgfgdfg-assAA&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?chat&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;  &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SSL и реверс-прокси&#039;&#039;&#039; ====&lt;br /&gt;
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:&lt;br /&gt;
&lt;br /&gt;
nginx (пример конфига для wss):&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
&lt;br /&gt;
    server_name ups_сервер.ru;&lt;br /&gt;
&lt;br /&gt;
    listen 6191 ssl;&lt;br /&gt;
&lt;br /&gt;
    include snippets/ssl-params.conf;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;&lt;br /&gt;
&lt;br /&gt;
    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;&lt;br /&gt;
&lt;br /&gt;
    client_max_body_size 1000M;&lt;br /&gt;
&lt;br /&gt;
    proxy_read_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    proxy_connect_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    proxy_send_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    send_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    large_client_header_buffers 8 256k;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
&lt;br /&gt;
        proxy_pass &amp;lt;nowiki&amp;gt;http://локальный_адрес_ses:6191&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
&lt;br /&gt;
        proxy_cache_bypass $http_upgrade;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
* Раздел proxy_set_header Host $host; обязателен.&lt;br /&gt;
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.&lt;br /&gt;
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection &amp;quot;upgrade&amp;quot; для поддержки upgrade-запроса (см. [документацию nginx]).&lt;br /&gt;
* Адреса для виджета и конфигов должны быть с поддержкой SSL.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
* Для множественных языковых функций возможно потребуется отдельная обработка пути &amp;quot;/lang&amp;quot; внутри nginx.&lt;br /&gt;
* Для websocket рекомендуется выделять отдельный порт — например, 8091.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status ses&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – &amp;lt;code&amp;gt;/opt/ses/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u ses&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление ses&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3352</id>
		<title>SES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3352"/>
		<updated>2025-11-13T08:27:43Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Вставка виджета в код сайта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для сценарных машин. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
&lt;br /&gt;
* UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Установка ses&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление ses осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить ses &amp;lt;code&amp;gt;/opt/ses/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -b&amp;lt;/code&amp;gt; – обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -r&amp;lt;/code&amp;gt; – обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -n&amp;lt;/code&amp;gt; – обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; – это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable ses.service &amp;amp;&amp;amp; sudo systemctl start ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Лицензия&#039;&#039;&#039; =====&lt;br /&gt;
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/license.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл лицензии должен соответствовать следующему формату:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;service&amp;quot;: &amp;quot;ses&amp;quot;, &amp;quot;expire&amp;quot;: &amp;quot;2045-01-01&amp;quot;, &amp;quot;licenses&amp;quot;: , &amp;quot;key&amp;quot;: &amp;quot;&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для получения лицензии необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Запустить сервис &amp;lt;code&amp;gt;systemctl start ses&amp;lt;/code&amp;gt; и извлечь UUID, указанный в файле &amp;lt;code&amp;gt;/opt/ses/logs/log.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Передать полученный UUID руководителю проекта для оформления лицензии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка сервиса&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса ses производится в файле /opt/ses/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|Параметр&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|По умолчанию&lt;br /&gt;
!style=&amp;quot;width: 60%&amp;quot;|Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Путь к папке логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.debug&lt;br /&gt;
|false&lt;br /&gt;
|Режим расширенного логирования.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество старых сохраняемых логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер текущего лог-файла в байтах.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.web&lt;br /&gt;
|/opt/ses/storage/web&lt;br /&gt;
|Путь для временного хранения фрагментов аудио веб сессий&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.hot&lt;br /&gt;
|/opt/ses/storage/hot&lt;br /&gt;
|Путь к &amp;quot;горячему&amp;quot; хранилищу аудиоданных&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.cold&lt;br /&gt;
|null&lt;br /&gt;
|Путь к &amp;quot;холодному&amp;quot; хранилищу аудиоданных, куда переливаются данные из &amp;quot;горячего&amp;quot; хранилища.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.url&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:PORT/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|2&lt;br /&gt;
|Таймаут подключения к серверу.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|10&lt;br /&gt;
|Таймаут получения данных с сервера.&lt;br /&gt;
|-&lt;br /&gt;
|connectors.max&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам Max&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.vk&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам VK&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;group_id&amp;quot;:&amp;quot;id сообщества ВКонтакте&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.telegram&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к telegram ботам&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;botName&amp;quot;: &amp;quot;название бота (после символа @)&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;getUpdates&amp;quot;: 3&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...........&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.freeswitch&lt;br /&gt;
|{}&lt;br /&gt;
|Номера внутренних телефонов внутри freeswitch с привязкой к роботам&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;5000&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;robot&amp;quot;: &amp;quot;ffeaa99a-13d2-4bff-b458-1231c884f8ee&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt; }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxLength&lt;br /&gt;
|10000&lt;br /&gt;
|Максимальная длина звукового фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.minSpeech&lt;br /&gt;
|120&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxSilence&lt;br /&gt;
|1200 &lt;br /&gt;
| Максимальная длительность тишины перед отправкой фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.speechWaiting&lt;br /&gt;
|4000&lt;br /&gt;
|Длительность ожидания начала речи&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxLength&lt;br /&gt;
|2000&lt;br /&gt;
|Максимальная длина звукового фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.minSpeech&lt;br /&gt;
|60&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxSilence&lt;br /&gt;
|200&lt;br /&gt;
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|cluster.logfile &lt;br /&gt;
|logs/sync.log&lt;br /&gt;
|Файл логов синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.statusFile&lt;br /&gt;
|logs/sync.status&lt;br /&gt;
|Статус задачи синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.nodes&lt;br /&gt;
|[ ]&lt;br /&gt;
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|tmp&lt;br /&gt;
|&amp;quot;/tmp/ses&amp;quot;&lt;br /&gt;
|Временная папка.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Работа в составе кластера&#039;&#039;&#039;====&lt;br /&gt;
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: &lt;br /&gt;
*База файловая, в папке robots.&lt;br /&gt;
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.&lt;br /&gt;
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.&lt;br /&gt;
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Эмуляция сервисов интеграции&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
В каталоге &#039;&#039;&#039;/opt/ses/testapi&#039;&#039;&#039; могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу &#039;&#039;htttp://&amp;lt;адрес ses&amp;gt;/testapi/&amp;lt;название_сервиса&amp;gt;. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл &amp;lt;название_сервиса&amp;gt;.reply. Содержимое файла будет отдано без изменений, как есть по адресу &amp;quot;http://&amp;amp;#x3C;адрес_ses&amp;amp;#x3E;:&amp;amp;#x3C;порт_ses&amp;amp;#x3E;/ses/testapi/&amp;amp;#x3C;название_сервиса&amp;gt;&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка каналов и виджетов&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Настройка виджета для сайта&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа &amp;quot;web&amp;quot; в UPS создать коннектор.&lt;br /&gt;
# Разместить на сайте виджет, вставив тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; с нужными параметрами. Плюс — при работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.&lt;br /&gt;
==== &#039;&#039;&#039;Вставка виджета в код сайта&#039;&#039;&#039; ====&lt;br /&gt;
Разместите в &amp;lt;code&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt; HTML-кода следующий тег:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;script src=&amp;quot;https://&#039;&#039;&#039;SERVER&#039;&#039;&#039;/ses/widget/js?name&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;TOKEN&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SERVER — адрес сервера UPS. Исходный код виджета всегда лежит по пути &amp;lt;code&amp;gt;/ses/widget/js&amp;lt;/code&amp;gt;.&lt;br /&gt;
* TOKEN — токен авторизации (генерируется и указывается в [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB настройках коннектора] &amp;quot;web&amp;quot; в UPS).&lt;br /&gt;
* ?name — дополнительный ключ для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.&lt;br /&gt;
&lt;br /&gt;
Пример пустой страницы с 3  разными виджетами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt; ............  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant1&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn777&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;gghdkfmm$$32@1Ujhhf4$5&amp;amp;dfdfgfgdfg-assAA&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?chat&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;  &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SSL и реверс-прокси&#039;&#039;&#039; ====&lt;br /&gt;
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:&lt;br /&gt;
&lt;br /&gt;
nginx (пример конфига для wss):&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
&lt;br /&gt;
    server_name ups_сервер.ru;&lt;br /&gt;
&lt;br /&gt;
    listen 6191 ssl;&lt;br /&gt;
&lt;br /&gt;
    include snippets/ssl-params.conf;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;&lt;br /&gt;
&lt;br /&gt;
    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;&lt;br /&gt;
&lt;br /&gt;
    client_max_body_size 1000M;&lt;br /&gt;
&lt;br /&gt;
    proxy_read_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    proxy_connect_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    proxy_send_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    send_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    large_client_header_buffers 8 256k;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
&lt;br /&gt;
        proxy_pass &amp;lt;nowiki&amp;gt;http://локальный_адрес_ses:6191&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
&lt;br /&gt;
        proxy_cache_bypass $http_upgrade;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
* Раздел proxy_set_header Host $host; обязателен.&lt;br /&gt;
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.&lt;br /&gt;
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection &amp;quot;upgrade&amp;quot; для поддержки upgrade-запроса (см. [документацию nginx]).&lt;br /&gt;
* Адреса для виджета и конфигов должны быть с поддержкой SSL.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
* Для множественных языковых функций возможно потребуется отдельная обработка пути &amp;quot;/lang&amp;quot; внутри nginx.&lt;br /&gt;
* Для websocket рекомендуется выделять отдельный порт — например, 8091.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status ses&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – &amp;lt;code&amp;gt;/opt/ses/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u ses&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление ses&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3351</id>
		<title>SES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3351"/>
		<updated>2025-11-13T08:27:21Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Вставка виджета в код сайта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для сценарных машин. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
&lt;br /&gt;
* UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Установка ses&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление ses осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить ses &amp;lt;code&amp;gt;/opt/ses/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -b&amp;lt;/code&amp;gt; – обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -r&amp;lt;/code&amp;gt; – обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -n&amp;lt;/code&amp;gt; – обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; – это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable ses.service &amp;amp;&amp;amp; sudo systemctl start ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Лицензия&#039;&#039;&#039; =====&lt;br /&gt;
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/license.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл лицензии должен соответствовать следующему формату:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;service&amp;quot;: &amp;quot;ses&amp;quot;, &amp;quot;expire&amp;quot;: &amp;quot;2045-01-01&amp;quot;, &amp;quot;licenses&amp;quot;: , &amp;quot;key&amp;quot;: &amp;quot;&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для получения лицензии необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Запустить сервис &amp;lt;code&amp;gt;systemctl start ses&amp;lt;/code&amp;gt; и извлечь UUID, указанный в файле &amp;lt;code&amp;gt;/opt/ses/logs/log.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Передать полученный UUID руководителю проекта для оформления лицензии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка сервиса&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса ses производится в файле /opt/ses/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|Параметр&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|По умолчанию&lt;br /&gt;
!style=&amp;quot;width: 60%&amp;quot;|Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Путь к папке логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.debug&lt;br /&gt;
|false&lt;br /&gt;
|Режим расширенного логирования.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество старых сохраняемых логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер текущего лог-файла в байтах.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.web&lt;br /&gt;
|/opt/ses/storage/web&lt;br /&gt;
|Путь для временного хранения фрагментов аудио веб сессий&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.hot&lt;br /&gt;
|/opt/ses/storage/hot&lt;br /&gt;
|Путь к &amp;quot;горячему&amp;quot; хранилищу аудиоданных&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.cold&lt;br /&gt;
|null&lt;br /&gt;
|Путь к &amp;quot;холодному&amp;quot; хранилищу аудиоданных, куда переливаются данные из &amp;quot;горячего&amp;quot; хранилища.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.url&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:PORT/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|2&lt;br /&gt;
|Таймаут подключения к серверу.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|10&lt;br /&gt;
|Таймаут получения данных с сервера.&lt;br /&gt;
|-&lt;br /&gt;
|connectors.max&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам Max&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.vk&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам VK&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;group_id&amp;quot;:&amp;quot;id сообщества ВКонтакте&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.telegram&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к telegram ботам&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;botName&amp;quot;: &amp;quot;название бота (после символа @)&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;getUpdates&amp;quot;: 3&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...........&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.freeswitch&lt;br /&gt;
|{}&lt;br /&gt;
|Номера внутренних телефонов внутри freeswitch с привязкой к роботам&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;5000&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;robot&amp;quot;: &amp;quot;ffeaa99a-13d2-4bff-b458-1231c884f8ee&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt; }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxLength&lt;br /&gt;
|10000&lt;br /&gt;
|Максимальная длина звукового фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.minSpeech&lt;br /&gt;
|120&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxSilence&lt;br /&gt;
|1200 &lt;br /&gt;
| Максимальная длительность тишины перед отправкой фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.speechWaiting&lt;br /&gt;
|4000&lt;br /&gt;
|Длительность ожидания начала речи&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxLength&lt;br /&gt;
|2000&lt;br /&gt;
|Максимальная длина звукового фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.minSpeech&lt;br /&gt;
|60&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxSilence&lt;br /&gt;
|200&lt;br /&gt;
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|cluster.logfile &lt;br /&gt;
|logs/sync.log&lt;br /&gt;
|Файл логов синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.statusFile&lt;br /&gt;
|logs/sync.status&lt;br /&gt;
|Статус задачи синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.nodes&lt;br /&gt;
|[ ]&lt;br /&gt;
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|tmp&lt;br /&gt;
|&amp;quot;/tmp/ses&amp;quot;&lt;br /&gt;
|Временная папка.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Работа в составе кластера&#039;&#039;&#039;====&lt;br /&gt;
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: &lt;br /&gt;
*База файловая, в папке robots.&lt;br /&gt;
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.&lt;br /&gt;
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.&lt;br /&gt;
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Эмуляция сервисов интеграции&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
В каталоге &#039;&#039;&#039;/opt/ses/testapi&#039;&#039;&#039; могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу &#039;&#039;htttp://&amp;lt;адрес ses&amp;gt;/testapi/&amp;lt;название_сервиса&amp;gt;. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл &amp;lt;название_сервиса&amp;gt;.reply. Содержимое файла будет отдано без изменений, как есть по адресу &amp;quot;http://&amp;amp;#x3C;адрес_ses&amp;amp;#x3E;:&amp;amp;#x3C;порт_ses&amp;amp;#x3E;/ses/testapi/&amp;amp;#x3C;название_сервиса&amp;gt;&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка каналов и виджетов&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Настройка виджета для сайта&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа &amp;quot;web&amp;quot; в UPS создать коннектор.&lt;br /&gt;
# Разместить на сайте виджет, вставив тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; с нужными параметрами. Плюс — при работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.&lt;br /&gt;
==== &#039;&#039;&#039;Вставка виджета в код сайта&#039;&#039;&#039; ====&lt;br /&gt;
Разместите в &amp;lt;code&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt; HTML-кода следующий тег:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://SERVER/ses/widget/js?name&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;TOKEN&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SERVER — адрес сервера UPS. Исходный код виджета всегда лежит по пути &amp;lt;code&amp;gt;/ses/widget/js&amp;lt;/code&amp;gt;.&lt;br /&gt;
* TOKEN — токен авторизации (генерируется и указывается в [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB настройках коннектора] &amp;quot;web&amp;quot; в UPS).&lt;br /&gt;
* ?name — дополнительный ключ для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.&lt;br /&gt;
&lt;br /&gt;
Пример пустой страницы с 3  разными виджетами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt; ............  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant1&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn777&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;gghdkfmm$$32@1Ujhhf4$5&amp;amp;dfdfgfgdfg-assAA&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?chat&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;  &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SSL и реверс-прокси&#039;&#039;&#039; ====&lt;br /&gt;
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:&lt;br /&gt;
&lt;br /&gt;
nginx (пример конфига для wss):&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
&lt;br /&gt;
    server_name ups_сервер.ru;&lt;br /&gt;
&lt;br /&gt;
    listen 6191 ssl;&lt;br /&gt;
&lt;br /&gt;
    include snippets/ssl-params.conf;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;&lt;br /&gt;
&lt;br /&gt;
    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;&lt;br /&gt;
&lt;br /&gt;
    client_max_body_size 1000M;&lt;br /&gt;
&lt;br /&gt;
    proxy_read_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    proxy_connect_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    proxy_send_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    send_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    large_client_header_buffers 8 256k;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
&lt;br /&gt;
        proxy_pass &amp;lt;nowiki&amp;gt;http://локальный_адрес_ses:6191&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
&lt;br /&gt;
        proxy_cache_bypass $http_upgrade;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
* Раздел proxy_set_header Host $host; обязателен.&lt;br /&gt;
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.&lt;br /&gt;
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection &amp;quot;upgrade&amp;quot; для поддержки upgrade-запроса (см. [документацию nginx]).&lt;br /&gt;
* Адреса для виджета и конфигов должны быть с поддержкой SSL.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
* Для множественных языковых функций возможно потребуется отдельная обработка пути &amp;quot;/lang&amp;quot; внутри nginx.&lt;br /&gt;
* Для websocket рекомендуется выделять отдельный порт — например, 8091.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status ses&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – &amp;lt;code&amp;gt;/opt/ses/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u ses&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление ses&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
	<entry>
		<id>https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3350</id>
		<title>SES. Руководство администратора</title>
		<link rel="alternate" type="text/html" href="https://wiki.connect2ai.net/index.php?title=SES._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&amp;diff=3350"/>
		<updated>2025-11-13T08:26:36Z</updated>

		<summary type="html">&lt;p&gt;V.Kazantsev: /* Настройка виджета для сайта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===== &#039;&#039;&#039;Общее описание&#039;&#039;&#039; =====&lt;br /&gt;
Сервис предназначен для сценарных машин. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Термины и определения&#039;&#039;&#039; =====&lt;br /&gt;
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Требования к окружению&#039;&#039;&#039; =====&lt;br /&gt;
В процессе работы сервис взаимодействует со следующими сервисами:&lt;br /&gt;
&lt;br /&gt;
* UPS – настройка осуществляется через файл /opt/ups/config.json&lt;br /&gt;
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Установка ses&#039;&#039;&#039; ===== &lt;br /&gt;
&lt;br /&gt;
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.&lt;br /&gt;
&lt;br /&gt;
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].&lt;br /&gt;
&lt;br /&gt;
* Установка/обновление ses осуществляется скриптом &amp;lt;code&amp;gt;chmod +x ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh &amp;amp;&amp;amp; ./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh -i&amp;lt;/code&amp;gt; с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор &amp;lt;code&amp;gt;./ses-&amp;lt;версия&amp;gt;-&amp;lt;релиз&amp;gt;.sh&amp;lt;/code&amp;gt; без ключей.&lt;br /&gt;
* Загрузить последнюю версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/new&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1 | bash&amp;lt;/code&amp;gt; или в интерактивном режиме &amp;lt;code&amp;gt;bash -c &amp;quot;$(curl -s &amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses&amp;lt;/nowiki&amp;gt; --user &#039;[user]:[pass]&#039; 2&amp;gt;&amp;amp;1)&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Обновить ses &amp;lt;code&amp;gt;/opt/ses/inupdate&amp;lt;/code&amp;gt; в интерактивном режиме. Или запустить с ключом:&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -b&amp;lt;/code&amp;gt; – обновить до последней beta версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -r&amp;lt;/code&amp;gt; – обновить до последней release версии;&lt;br /&gt;
** &amp;lt;code&amp;gt;/opt/ses/inupdate -n&amp;lt;/code&amp;gt; – обновить до последней версии (неважно beta или release).&lt;br /&gt;
* Проверить актуальную версию продукта &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/version&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Посмотреть лог изменений &amp;lt;code&amp;gt;curl -s &amp;quot;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api/ses/changelog&amp;lt;/nowiki&amp;gt;&amp;quot; --user &#039;[user]:[pass]&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Полное описание всех команд API репозитория можно найти по ссылке &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;https://repo.connect2ai.net/api&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;. &amp;lt;code&amp;gt;[user]:[pass]&amp;lt;/code&amp;gt; – это тот же логин и пароль, что и от &#039;&#039;&#039;Nextcloud&#039;&#039;&#039;.&lt;br /&gt;
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;[user]:[pass]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)&lt;br /&gt;
** echo -n &amp;lt;code&amp;gt;&amp;quot;&amp;lt;nowiki&amp;gt;http://example.com:3128&amp;lt;/nowiki&amp;gt; [user] [password]&amp;quot;&amp;lt;/code&amp;gt; &amp;gt; /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)&lt;br /&gt;
&lt;br /&gt;
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.&lt;br /&gt;
&lt;br /&gt;
Не забудьте запустить сервис и включить в автозапуск в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable ses.service &amp;amp;&amp;amp; sudo systemctl start ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удостоверьтесь, что сервис стартовал:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status ses.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &#039;&#039;&#039;Лицензия&#039;&#039;&#039; =====&lt;br /&gt;
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/license.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл лицензии должен соответствовать следующему формату:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;quot;service&amp;quot;: &amp;quot;ses&amp;quot;, &amp;quot;expire&amp;quot;: &amp;quot;2045-01-01&amp;quot;, &amp;quot;licenses&amp;quot;: , &amp;quot;key&amp;quot;: &amp;quot;&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для получения лицензии необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Запустить сервис &amp;lt;code&amp;gt;systemctl start ses&amp;lt;/code&amp;gt; и извлечь UUID, указанный в файле &amp;lt;code&amp;gt;/opt/ses/logs/log.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Передать полученный UUID руководителю проекта для оформления лицензии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка сервиса&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Файл config.json&#039;&#039;&#039;====&lt;br /&gt;
Настройка параметров сервиса ses производится в файле /opt/ses/config.json&lt;br /&gt;
&lt;br /&gt;
Описание параметров приведено в таблице&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|Параметр&lt;br /&gt;
!style=&amp;quot;width: 20%&amp;quot;|По умолчанию&lt;br /&gt;
!style=&amp;quot;width: 60%&amp;quot;|Назначение&lt;br /&gt;
|-&lt;br /&gt;
|port&lt;br /&gt;
|6190&lt;br /&gt;
|Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.&lt;br /&gt;
|-&lt;br /&gt;
|logs.path&lt;br /&gt;
|logs/&lt;br /&gt;
|Путь к папке логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.debug&lt;br /&gt;
|false&lt;br /&gt;
|Режим расширенного логирования.&lt;br /&gt;
|-&lt;br /&gt;
|logs.backups&lt;br /&gt;
|10&lt;br /&gt;
|Количество старых сохраняемых логов.&lt;br /&gt;
|-&lt;br /&gt;
|logs.maxSize&lt;br /&gt;
|5242880&lt;br /&gt;
|Максимальный размер текущего лог-файла в байтах.&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.web&lt;br /&gt;
|/opt/ses/storage/web&lt;br /&gt;
|Путь для временного хранения фрагментов аудио веб сессий&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.hot&lt;br /&gt;
|/opt/ses/storage/hot&lt;br /&gt;
|Путь к &amp;quot;горячему&amp;quot; хранилищу аудиоданных&lt;br /&gt;
|-&lt;br /&gt;
|storage.audio.cold&lt;br /&gt;
|null&lt;br /&gt;
|Путь к &amp;quot;холодному&amp;quot; хранилищу аудиоданных, куда переливаются данные из &amp;quot;горячего&amp;quot; хранилища.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.url&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;http://127.0.0.1:PORT/{service}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.connect&lt;br /&gt;
|2&lt;br /&gt;
|Таймаут подключения к серверу.&lt;br /&gt;
|-&lt;br /&gt;
|servers.{service}.timers.read&lt;br /&gt;
|10&lt;br /&gt;
|Таймаут получения данных с сервера.&lt;br /&gt;
|-&lt;br /&gt;
|connectors.max&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам Max&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.vk&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к ботам VK&lt;br /&gt;
&amp;lt;small&amp;gt;{  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;group_id&amp;quot;:&amp;quot;id сообщества ВКонтакте&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;pollingInterval&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;&amp;quot;:&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;25&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...............&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.telegram&lt;br /&gt;
|{}&lt;br /&gt;
|Параметры подключения к telegram ботам&lt;br /&gt;
&amp;lt;small&amp;gt;{&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;  &amp;quot;имя_подключения&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;token&amp;quot;:&amp;quot;Ключ доступа&amp;quot;,&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;botName&amp;quot;: &amp;quot;название бота (после символа @)&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;robot&amp;quot;:&amp;quot;id робота&amp;quot;,&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;variables&amp;quot;:{&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;      &amp;quot;phone&amp;quot;: &amp;quot;1234567890&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;timers&amp;quot;: {&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;      &amp;quot;getUpdates&amp;quot;: 3&amp;lt;/small&amp;gt;&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;whitelist&amp;quot;:[],&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    &amp;quot;activators&amp;quot;:[]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;    },&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;...........&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;}&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|connectors.freeswitch&lt;br /&gt;
|{}&lt;br /&gt;
|Номера внутренних телефонов внутри freeswitch с привязкой к роботам&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;5000&amp;quot;: {&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;        &amp;quot;robot&amp;quot;: &amp;quot;ffeaa99a-13d2-4bff-b458-1231c884f8ee&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt; }&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxLength&lt;br /&gt;
|10000&lt;br /&gt;
|Максимальная длина звукового фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.minSpeech&lt;br /&gt;
|120&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.maxSilence&lt;br /&gt;
|1200 &lt;br /&gt;
| Максимальная длительность тишины перед отправкой фрагмента&lt;br /&gt;
|-&lt;br /&gt;
|vad.listening.speechWaiting&lt;br /&gt;
|4000&lt;br /&gt;
|Длительность ожидания начала речи&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxLength&lt;br /&gt;
|2000&lt;br /&gt;
|Максимальная длина звукового фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.minSpeech&lt;br /&gt;
|60&lt;br /&gt;
|Минимальный отрезок речи, который считать значимым в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.skipSilence&lt;br /&gt;
|60&lt;br /&gt;
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|vad.playing.maxSilence&lt;br /&gt;
|200&lt;br /&gt;
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания&lt;br /&gt;
|-&lt;br /&gt;
|cluster.logfile &lt;br /&gt;
|logs/sync.log&lt;br /&gt;
|Файл логов синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.statusFile&lt;br /&gt;
|logs/sync.status&lt;br /&gt;
|Статус задачи синхронизации есть только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|cluster.nodes&lt;br /&gt;
|[ ]&lt;br /&gt;
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера&lt;br /&gt;
|-&lt;br /&gt;
|tmp&lt;br /&gt;
|&amp;quot;/tmp/ses&amp;quot;&lt;br /&gt;
|Временная папка.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Работа в составе кластера&#039;&#039;&#039;====&lt;br /&gt;
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: &lt;br /&gt;
*База файловая, в папке robots.&lt;br /&gt;
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.&lt;br /&gt;
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.&lt;br /&gt;
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Эмуляция сервисов интеграции&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
В каталоге &#039;&#039;&#039;/opt/ses/testapi&#039;&#039;&#039; могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу &#039;&#039;htttp://&amp;lt;адрес ses&amp;gt;/testapi/&amp;lt;название_сервиса&amp;gt;. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл &amp;lt;название_сервиса&amp;gt;.reply. Содержимое файла будет отдано без изменений, как есть по адресу &amp;quot;http://&amp;amp;#x3C;адрес_ses&amp;amp;#x3E;:&amp;amp;#x3C;порт_ses&amp;amp;#x3E;/ses/testapi/&amp;amp;#x3C;название_сервиса&amp;gt;&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Настройка каналов и виджетов&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Настройка виджета для сайта&#039;&#039;&#039;====&lt;br /&gt;
&lt;br /&gt;
# На [https://wiki.connect2ai.net/index.php/SES._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC#%D0%92%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%C2%AB%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%8B%C2%BB странице коннектора] типа &amp;quot;web&amp;quot; в UPS создать коннектор.&lt;br /&gt;
# Разместить на сайте виджет, вставив тег &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; с нужными параметрами. Плюс — при работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.&lt;br /&gt;
==== &#039;&#039;&#039;Вставка виджета в код сайта&#039;&#039;&#039; ====&lt;br /&gt;
Разместите в &amp;lt;code&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/code&amp;gt; HTML-кода следующий тег:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;script src=&amp;quot;https://SERVER/ses/widget/js?name&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;TOKEN&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SERVER — адрес сервера UPS. Исходный код виджета всегда лежит по пути &amp;lt;code&amp;gt;/ses/widget/js&amp;lt;/code&amp;gt;.&lt;br /&gt;
* TOKEN — токен авторизации (генерируется и указывается в настройках коннектора &amp;quot;web&amp;quot; в UPS).&lt;br /&gt;
* ?name — дополнительный ключ для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.&lt;br /&gt;
&lt;br /&gt;
Пример пустой страницы с 3  разными виджетами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt; ............  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant1&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn777&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?assistant&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;gghdkfmm$$32@1Ujhhf4$5&amp;amp;dfdfgfgdfg-assAA&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script  src=&amp;quot;&amp;lt;nowiki&amp;gt;https://server.net/ses/widget/js?chat&amp;lt;/nowiki&amp;gt;&amp;quot; type=&amp;quot;module&amp;quot; token=&amp;quot;fnkeaOEJtAT9TrppPTuQzZ?syZxcbfMB3Dx4nEjmrZx~E7vn&amp;quot;&amp;gt;  &amp;lt;nowiki&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;  &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SSL и реверс-прокси&#039;&#039;&#039; ====&lt;br /&gt;
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:&lt;br /&gt;
&lt;br /&gt;
nginx (пример конфига для wss):&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
&lt;br /&gt;
    server_name ups_сервер.ru;&lt;br /&gt;
&lt;br /&gt;
    listen 6191 ssl;&lt;br /&gt;
&lt;br /&gt;
    include snippets/ssl-params.conf;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;&lt;br /&gt;
&lt;br /&gt;
    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;&lt;br /&gt;
&lt;br /&gt;
    client_max_body_size 1000M;&lt;br /&gt;
&lt;br /&gt;
    proxy_read_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    proxy_connect_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    proxy_send_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    send_timeout 6000;&lt;br /&gt;
&lt;br /&gt;
    large_client_header_buffers 8 256k;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
&lt;br /&gt;
        proxy_pass &amp;lt;nowiki&amp;gt;http://локальный_адрес_ses:6191&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
&lt;br /&gt;
        proxy_cache_bypass $http_upgrade;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
* Раздел proxy_set_header Host $host; обязателен.&lt;br /&gt;
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.&lt;br /&gt;
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection &amp;quot;upgrade&amp;quot; для поддержки upgrade-запроса (см. [документацию nginx]).&lt;br /&gt;
* Адреса для виджета и конфигов должны быть с поддержкой SSL.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
* Для множественных языковых функций возможно потребуется отдельная обработка пути &amp;quot;/lang&amp;quot; внутри nginx.&lt;br /&gt;
* Для websocket рекомендуется выделять отдельный порт — например, 8091.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Протоколы и порты&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Журналы работы&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
Для проверки состояния сервиса выполните &amp;lt;code&amp;gt;sudo systemctl status ses&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – &amp;lt;code&amp;gt;/opt/ses/logs/&amp;lt;/code&amp;gt;). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой &amp;lt;code&amp;gt;sudo journalctl -u ses&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Удаление и обновление ses&#039;&#039;&#039;===&lt;br /&gt;
Для удаления выполните команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/opt/ses/uninstall&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.&lt;/div&gt;</summary>
		<author><name>V.Kazantsev</name></author>
	</entry>
</feed>