Действия

SES. Руководство администратора: различия между версиями

Материал из Флора AI

 
(не показано 118 промежуточных версий 5 участников)
Строка 1: Строка 1:
===== '''Общее описание''' =====
===== '''Общее описание''' =====
Сервис предназначен для обеспечения доступа к отчетам kibana в интерфейсе UPS и отправки в elasticsearch статистики работы роботов ses.
Сервис предназначен для сценарных машин.  
 
 
 
===== '''Термины и определения''' =====
===== '''Термины и определения''' =====
script engine service (SES) – сервис обеспечивающий диалог с роботом
Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.
 
 
 
===== '''Требования к окружению''' =====
===== '''Требования к окружению''' =====
В процессе работы сервис взаимодействует со следующими сервисами:
В процессе работы сервис взаимодействует со следующими сервисами:


* UPS – настройка осуществляется через файл /opt/ups/config.json
* UPS – настройка осуществляется через файл /opt/ups/config.json
* SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.


* SMC, SEE, SPR, TTS, SBS, QAS - настройка осуществляется через файл /opt/ses/config.json


===== '''Установка ses''' =====  
===== '''Установка ses''' =====  


Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для Вашей системы в каталоге с пакетом.
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.


Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].
Строка 18: Строка 25:
* Установка/обновление ses осуществляется скриптом <code>chmod +x ./ses-<версия>-<релиз>.sh && ./ses-<версия>-<релиз>.sh -i</code> с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор <code>./ses-<версия>-<релиз>.sh</code> без ключей.
* Установка/обновление ses осуществляется скриптом <code>chmod +x ./ses-<версия>-<релиз>.sh && ./ses-<версия>-<релиз>.sh -i</code> с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор <code>./ses-<версия>-<релиз>.sh</code> без ключей.
* Загрузить последнюю версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/ses/new</nowiki>" --user '[user]:[pass]' 2>&1 | bash</code> или в интерактивном режиме <code>bash -c "$(curl -s <nowiki>https://repo.connect2ai.net/api/ses</nowiki> --user '[user]:[pass]' 2>&1)"</code>.
* Загрузить последнюю версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/ses/new</nowiki>" --user '[user]:[pass]' 2>&1 | bash</code> или в интерактивном режиме <code>bash -c "$(curl -s <nowiki>https://repo.connect2ai.net/api/ses</nowiki> --user '[user]:[pass]' 2>&1)"</code>.
* Обновить ses <code>/opt/ses/inupdate</code> в интерактивном режиме. Или запустить с ключём:
* Обновить ses <code>/opt/ses/inupdate</code> в интерактивном режиме. Или запустить с ключом:
** <code>/opt/ses/inupdate -b</code> - обновить до последней beta версии;
** <code>/opt/ses/inupdate -b</code> обновить до последней beta версии;
** <code>/opt/ses/inupdate -r</code> - обновить до последней release версии;
** <code>/opt/ses/inupdate -r</code> обновить до последней release версии;
** <code>/opt/ses/inupdate -n</code> - обновить до последней версии (не важно beta или release).
** <code>/opt/ses/inupdate -n</code> обновить до последней версии (неважно beta или release).
* Проверить актуальную версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/ses/version</nowiki></code>.
* Проверить актуальную версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/ses/version</nowiki></code>.
* Посмотреть лог изменений <code>curl -s "<nowiki>https://repo.connect2ai.net/api/ses/changelog</nowiki>" --user '[user]:[pass]'</code>.
* Посмотреть лог изменений <code>curl -s "<nowiki>https://repo.connect2ai.net/api/ses/changelog</nowiki>" --user '[user]:[pass]'</code>.
* Полное описание всех команд API репозитория можно найти по ссылке '''<nowiki>https://repo.connect2ai.net/api</nowiki>'''. <code>[user]:[pass]</code> - это тот же логин и пароль, что и от '''Nextcloud'''.
* Полное описание всех команд API репозитория можно найти по ссылке '''<nowiki>https://repo.connect2ai.net/api</nowiki>'''. <code>[user]:[pass]</code> это тот же логин и пароль, что и от '''Nextcloud'''.
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
** echo -n <code>"[user]:[pass]"</code> > /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)
** echo -n <code>"[user]:[pass]"</code> > /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)
** echo -n <code>"<nowiki>http://example.com:3128</nowiki> [user] [password]"</code> > /opt/ses/.proxy (это файл конфигурации proxy необходим для обновления и загрузки моделей, при отсутсвующем прямом подключение к интернету)
** echo -n <code>"<nowiki>http://example.com:3128</nowiki> [user] [password]"</code> > /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)


При обновление следующий список файлов и папок сохранияется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.
При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.


Не забудьте запустить сервис и включить в автозапуск в системе:
Не забудьте запустить сервис и включить в автозапуск в системе:
Строка 39: Строка 46:
<code>systemctl status ses.service</code>
<code>systemctl status ses.service</code>


Разрешите доступ к портам 6157/tcp, 6170/tcp а также порту, определенном в конфиге (по умолчанию 6189/tcp) на нужном интерфейсе.
Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.
 
 
 
===== '''Лицензия''' =====
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:
 
<code>/opt/ses/license.json</code>
 
Файл лицензии должен соответствовать следующему формату:
 
<code>{"service": "ses", "expire": "2045-01-01", "licenses": , "key": ""}</code>
 
Для получения лицензии необходимо:
 
1. Запустить сервис <code>systemctl start ses</code> и извлечь UUID, указанный в файле <code>/opt/ses/logs/log.txt</code>
 
2. Передать полученный UUID руководителю проекта для оформления лицензии.
 
 
 
==='''Настройка сервиса'''===


==='''Настройка'''===
===='''Файл config.json'''====
===='''Файл config.json'''====
Настройка параметров сервиса ses производится в файле /opt/ses/config.json
Настройка параметров сервиса ses производится в файле /opt/ses/config.json
Строка 48: Строка 75:
{| class="wikitable"
{| class="wikitable"
|+
|+
!Параметр
!style="width: 20%"|Параметр
!По умолчанию
!style="width: 20%"|По умолчанию
!Назначение
!style="width: 60%"|Назначение
|-
|-
|port
|port
|6190
|6190
|порт api интерфейса, используется в UPS - настройка servers.ses в конфиге UPS
|Порт API интерфейса используется в UPS настройка servers.ses в конфиге UPS.
|-
|-
|logs.path
|logs.path
|logs/
|logs/
|Путь к папке логов
|Путь к папке логов.
|-
|logs.debug
|false
|Режим расширенного логирования.
|-
|-
|logs.backups
|logs.backups
|10
|10
|Количество старых сохраняемых логов
|Количество старых сохраняемых логов.
|-
|-
|logs.maxSize
|logs.maxSize
|5242880
|5242880
|Максимальный размер текущего лог-файла, в байтах
|Максимальный размер текущего лог-файла в байтах.
|-
|storage.audio.web
|/opt/ses/storage/web
|Путь для временного хранения фрагментов аудио веб сессий
|-
|storage.audio.hot
|/opt/ses/storage/hot
|Путь к "горячему" хранилищу аудиоданных
|-
|storage.audio.cold
|null
|Путь к "холодному" хранилищу аудиоданных, куда переливаются данные из "горячего" хранилища.
|-
|-
|servers.smc.url
|servers.{service}.url
|"http://127.0.0.1:6181/smc"
|"<nowiki>http://127.0.0.1:PORT/{service}</nowiki>"
|адрес сервера smc
|Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).
|-
|-
|servers.smc.timers.connect
|servers.{service}.timers.connect
|2
|2
|таймаут подключения к серверу smc
|Таймаут подключения к серверу.
|-
|-
|servers.smc.timers.read
|servers.{service}.timers.read
|10
|10
|таймаут получения данных с сервера smc
|Таймаут получения данных с сервера.
|-
|-
|servers.see.url
|connectors.max
|"http://127.0.0.1:6184/see"
|{}
|адрес сервера see
|Параметры подключения к ботам Max
<small>{  "имя_подключения":{</small>
 
<small>    "token":"Ключ доступа",</small>
 
<small>    "robot":"id робота",</small>
 
<small>"variables":{</small>
 
<small>      "phone": "1234567890"</small>
 
<small>    },</small>
 
<small>"timers": {</small><small>      "</small><small>pollingInterval</small><small>":</small> <small>25</small><small>    },</small>
 
<small>    "whitelist":[],</small>
 
<small>    "activators":[]</small>
 
<small>    },</small>
 
<small>...............</small>
 
<small>}</small>
|-
|-
|servers.see.timers.connect
|connectors.vk
|2
|{}
|таймаут подключения к серверу see
|Параметры подключения к ботам VK
<small>{  "имя_подключения":{</small>
 
<small>    "token":"Ключ доступа",</small>
 
<small>    "robot":"id робота",</small>
 
<small>    "group_id":"id сообщества ВКонтакте",</small>
 
<small>"variables":{</small>
 
<small>      "phone": "1234567890"</small>
 
<small>    },</small>
 
<small>"timers": {</small><small>      "</small><small>pollingInterval</small><small>":</small> <small>25</small><small>    },</small>
 
<small>    "whitelist":[],</small>
 
<small>    "activators":[]</small>
 
<small>    },</small>
 
<small>...............</small>
 
<small>}</small>
|-
|-
|servers.see.timers.read
|connectors.telegram
|5
|{}
|таймаут получения данных с сервера see
|Параметры подключения к telegram ботам
<small>{</small><small>  "имя_подключения":{</small>
 
<small>    "token":"Ключ доступа",</small>
 
<small>"botName": "название бота (после символа @)",</small>
 
<small>    "robot":"id робота",</small>
 
<small>    "variables":{</small>
 
<small>      "phone": "1234567890"</small>
 
<small>    },</small>
 
<small>    "timers": {</small><small>      "getUpdates": 3</small><small>    },</small>
 
<small>    "whitelist":[],</small>
 
<small>    "activators":[]</small>
 
<small>    },</small>
 
<small>...........</small>
 
<small>}</small>
|-
|-
|servers.spr.url
|connectors.freeswitch
|"http://127.0.0.1:6183/spr"
|{}
|адрес сервера spr
|Номера внутренних телефонов внутри freeswitch с привязкой к роботам
|-
<small>"5000": {</small>
|servers.spr.timers.connect
 
|30
<small>        "robot": "ffeaa99a-13d2-4bff-b458-1231c884f8ee"</small>
|таймаут подключения к серверу spr
 
<small> }</small>
|-
|-
|servers.spr.timers.read
|vad.listening.maxLength
|30
|10000
|таймаут получения данных с сервера spr
|Максимальная длина звукового фрагмента
|-
|-
|servers.tts.url
|vad.listening.minSpeech
|"http://127.0.0.1:6186/tts"
|120
|адрес сервера tts
|Минимальный отрезок речи, который считать значимым
|-
|-
|servers.tts.timers.connect
|vad.listening.skipSilence
|5
|60
|таймаут подключения к серверу tts
|Не считать тишиной отрезки, короче данного значения
|-
|-
|servers.tts.timers.read
|vad.listening.maxSilence
|10
|1200
|таймаут получения данных с сервера tts
| Максимальная длительность тишины перед отправкой фрагмента
|-
|-
|servers.sbs.url
|vad.listening.speechWaiting
|"http://127.0.0.1:6185/sbs"
|4000
|адрес сервера sbs
|Длительность ожидания начала речи
|-
|-
|servers.sbs.timers.connect
|vad.playing.maxLength
|2
|2000
|таймаут подключения к серверу sbs
|Максимальная длина звукового фрагмента в режиме активного слушания
|-
|-
|servers.sbs.timers.read
|vad.playing.minSpeech
|5
|60
|таймаут получения данных с сервера sbs
|Минимальный отрезок речи, который считать значимым в режиме активного слушания
|-
|-
|servers.qas.url
|vad.playing.skipSilence
|"http://127.0.0.1:6187/qas"
|60
|адрес сервера qas
|Не считать тишиной отрезки, короче данного значения в режиме активного слушания
|-
|-
|servers.qas.timers.connect
|vad.playing.maxSilence
|5
|200
|таймаут подключения к серверу qas
|Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания
|-
|-
|servers.qas.timers.read
|cluster.logfile
|300
|logs/sync.log
|таймаут получения данных с сервера qas
|Файл логов синхронизации есть только на главном сервере кластера
|-
|-
|connectors.vk
|cluster.statusFile
|{}
|logs/sync.status
|Параметры подключения к ботам VK
|Статус задачи синхронизации есть только на главном сервере кластера
|-
|-
|connectors.telegram
|cluster.nodes
|{}
|[ ]
|Параметры подключения к telegram ботам
| Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера
|-
|-
|tmp
|tmp
|"/tmp/ses"
|"/tmp/ses"
|временная папка
|Временная папка.
|}
|}
===='''Работа в составе кластера'''====
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы:
*База файловая, в папке robots.
*lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.
*UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.
*В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.
===='''Эмуляция сервисов интеграции'''====
В каталоге '''/opt/ses/testapi''' могут располагаться эмуляторы сервисов интеграции.  Эмулятор будет доступен по адресу ''htttp://<адрес ses>/testapi/<название_сервиса>. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл <название_сервиса>.reply. Содержимое файла будет отдано без изменений, как есть по адресу "http://&#x3C;адрес_ses&#x3E;:&#x3C;порт_ses&#x3E;/ses/testapi/&#x3C;название_сервиса>".''
==='''Настройка каналов и виджетов''' ===
===='''Настройка виджета для сайта'''====
# На [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 странице коннектора] типа "web" в UPS создать коннектор.
# Разместить на сайте виджет, вставив тег <code><script></code> с нужными параметрами. При работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.
==== '''Вставка виджета в код сайта''' ====
Разместите в <code><head></code> или <code><body></code> HTML-кода следующий тег:
<code><script src="https://'''SERVER'''/ses/widget/js?'''NAME'''" type="module" token="'''TOKEN'''"></script></code>
* '''SERVER''' — адрес сервера UPS. Исходный код виджета всегда лежит по пути <code>/ses/widget/js</code>.
* '''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 настройках коннектора] "web" в UPS).
* '''NAME''' — дополнительный имя (query-параметр) для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.
Пример пустой страницы с тремя  разными виджетами:
<small><code><!DOCTYPE html></code></small>
<small><code><html lang="en"></code></small>
<small><code><head> ... </head></code></small>
<small><code><body></code></small>
    <small><code><script src="https://'''server.net'''/ses/widget/js?'''assistant1'''" type="module" token="'''tokenXXX'''"></script></code></small>
    <small><code><script src="https://'''server.net'''/ses/widget/js?'''assistant'''" type="module" token="'''tokenYYY'''"></script></code></small>
    <small><code><script src="https://'''server.net'''/ses/widget/js?'''chat'''" type="module" token="'''tokenZZZ'''"></script></code></small>
<small><code></body></code></small>
<small><code></html></code></small>
==== '''SSL и реверс-прокси''' ====
Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:
nginx (пример конфига для wss):
<small>server {</small>
<small>    server_name ups_сервер.ru;</small>
<small>    listen 6191 ssl;</small>
<small>    include snippets/ssl-params.conf;</small>
<small>    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;</small>
<small>    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;</small>
<small>    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;</small>
<small>    client_max_body_size 1000M;</small>
<small>    proxy_read_timeout 6000;</small>
<small>    proxy_connect_timeout 6000;</small>
<small>    proxy_send_timeout 6000;</small>
<small>    send_timeout 6000;</small>
<small>    large_client_header_buffers 8 256k;</small>
<small>    location / {</small>
<small>        proxy_pass <nowiki>http://локальный_адрес_ses:6191</nowiki>;</small>
<small>        proxy_http_version 1.1;</small>
<small>        proxy_set_header Upgrade $http_upgrade;</small>
<small>        proxy_set_header Connection "upgrade";</small>
<small>        proxy_set_header Host $host;</small>
<small>        proxy_cache_bypass $http_upgrade;</small>
<small>    }</small>
<small>}</small>
* Раздел proxy_set_header Host $host; обязателен.
* Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.
* Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection "upgrade" для поддержки upgrade-запроса (см. [документацию nginx]).
* Адреса для виджета и конфигов должны быть с поддержкой SSL.
== Примечания ==
* Для множественных языковых функций возможно потребуется отдельная обработка пути "/lang" внутри nginx.
* Для websocket рекомендуется выделять отдельный порт — например, 8091.
Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.


==='''Протоколы и порты'''===
==='''Протоколы и порты'''===


Сервис использует порт 6190/tcp для доступа к api интерфейсу. Порт доступа к api может быть изменен в конфигурационном файле  
Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.


==='''Журналы работы'''===
==='''Журналы работы'''===
Строка 161: Строка 384:
Для проверки состояния сервиса выполните <code>sudo systemctl status ses</code>.  
Для проверки состояния сервиса выполните <code>sudo systemctl status ses</code>.  


Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию - <code>/opt/ses/logs/</code>). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой <code>sudo journalctl -u ses</code>
Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию <code>/opt/ses/logs/</code>). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой <code>sudo journalctl -u ses</code>
 
 
==='''Удаление и обновление ses'''===
==='''Удаление и обновление ses'''===
Для удаления выполните команду:
Для удаления выполните команду:
Строка 167: Строка 392:
<code>/opt/ses/uninstall</code>  
<code>/opt/ses/uninstall</code>  


Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки как указано в п 4. При этом, обновление не изменяет файл /opt/ses/config.json.
Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.

Текущая версия от 13:29, 13 ноября 2025

Общее описание

Сервис предназначен для сценарных машин.


Термины и определения

Script Engine Service (SES) – сервис, обеспечивающий работу сценарных машин.


Требования к окружению

В процессе работы сервис взаимодействует со следующими сервисами:

  • UPS – настройка осуществляется через файл /opt/ups/config.json
  • SMC, SEE, SPR, TTS, SBS, QAS – настройка осуществляется через файл /opt/ses/config.json.


Установка ses

Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.

Перед установкой непосредственно сервиса необходимо установить сервисный пакет окружения.

  • Установка/обновление ses осуществляется скриптом chmod +x ./ses-<версия>-<релиз>.sh && ./ses-<версия>-<релиз>.sh -i с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор ./ses-<версия>-<релиз>.sh без ключей.
  • Загрузить последнюю версию продукта curl -s "https://repo.connect2ai.net/api/ses/new" --user '[user]:[pass]' 2>&1 | bash или в интерактивном режиме bash -c "$(curl -s https://repo.connect2ai.net/api/ses --user '[user]:[pass]' 2>&1)".
  • Обновить ses /opt/ses/inupdate в интерактивном режиме. Или запустить с ключом:
    • /opt/ses/inupdate -b – обновить до последней beta версии;
    • /opt/ses/inupdate -r – обновить до последней release версии;
    • /opt/ses/inupdate -n – обновить до последней версии (неважно beta или release).
  • Проверить актуальную версию продукта curl -s "https://repo.connect2ai.net/api/ses/version.
  • Посмотреть лог изменений curl -s "https://repo.connect2ai.net/api/ses/changelog" --user '[user]:[pass]'.
  • Полное описание всех команд API репозитория можно найти по ссылке https://repo.connect2ai.net/api. [user]:[pass] – это тот же логин и пароль, что и от Nextcloud.
  • В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
    • echo -n "[user]:[pass]" > /opt/ses/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)
    • echo -n "http://example.com:3128 [user] [password]" > /opt/ses/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)

При обновлении следующий список файлов и папок сохраняется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.

Не забудьте запустить сервис и включить в автозапуск в системе:

sudo systemctl enable ses.service && sudo systemctl start ses.service

Удостоверьтесь, что сервис стартовал:

systemctl status ses.service

Разрешите доступ к портам 6157/tcp, 6170/tcp, 6191/tcp, а также порту, определенном в конфиге (по умолчанию 6190/tcp) на нужном интерфейсе.


Лицензия

Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:

/opt/ses/license.json

Файл лицензии должен соответствовать следующему формату:

{"service": "ses", "expire": "2045-01-01", "licenses": , "key": ""}

Для получения лицензии необходимо:

1. Запустить сервис systemctl start ses и извлечь UUID, указанный в файле /opt/ses/logs/log.txt

2. Передать полученный UUID руководителю проекта для оформления лицензии.


Настройка сервиса

Файл config.json

Настройка параметров сервиса ses производится в файле /opt/ses/config.json

Описание параметров приведено в таблице

Параметр По умолчанию Назначение
port 6190 Порт API интерфейса используется в UPS — настройка servers.ses в конфиге UPS.
logs.path logs/ Путь к папке логов.
logs.debug false Режим расширенного логирования.
logs.backups 10 Количество старых сохраняемых логов.
logs.maxSize 5242880 Максимальный размер текущего лог-файла в байтах.
storage.audio.web /opt/ses/storage/web Путь для временного хранения фрагментов аудио веб сессий
storage.audio.hot /opt/ses/storage/hot Путь к "горячему" хранилищу аудиоданных
storage.audio.cold null Путь к "холодному" хранилищу аудиоданных, куда переливаются данные из "горячего" хранилища.
servers.{service}.url "http://127.0.0.1:PORT/{service}" Адрес сервера. Возможные варианты значения service (с портами по умолчанию) следующие: smc(6181), see(6184), spr(6183), tts(6186), sbs(6185), qas(6187), ups(6182).
servers.{service}.timers.connect 2 Таймаут подключения к серверу.
servers.{service}.timers.read 10 Таймаут получения данных с сервера.
connectors.max {} Параметры подключения к ботам Max

{  "имя_подключения":{

    "token":"Ключ доступа",

    "robot":"id робота",

"variables":{

      "phone": "1234567890"

    },

"timers": {      "pollingInterval": 25    },

    "whitelist":[],

    "activators":[]

    },

...............

}

connectors.vk {} Параметры подключения к ботам VK

{  "имя_подключения":{

    "token":"Ключ доступа",

    "robot":"id робота",

    "group_id":"id сообщества ВКонтакте",

"variables":{

      "phone": "1234567890"

    },

"timers": {      "pollingInterval": 25    },

    "whitelist":[],

    "activators":[]

    },

...............

}

connectors.telegram {} Параметры подключения к telegram ботам

{  "имя_подключения":{

    "token":"Ключ доступа",

"botName": "название бота (после символа @)",

    "robot":"id робота",

    "variables":{

      "phone": "1234567890"

    },

    "timers": {      "getUpdates": 3    },

    "whitelist":[],

    "activators":[]

    },

...........

}

connectors.freeswitch {} Номера внутренних телефонов внутри freeswitch с привязкой к роботам

"5000": {

        "robot": "ffeaa99a-13d2-4bff-b458-1231c884f8ee"

 }

vad.listening.maxLength 10000 Максимальная длина звукового фрагмента
vad.listening.minSpeech 120 Минимальный отрезок речи, который считать значимым
vad.listening.skipSilence 60 Не считать тишиной отрезки, короче данного значения
vad.listening.maxSilence 1200 Максимальная длительность тишины перед отправкой фрагмента
vad.listening.speechWaiting 4000 Длительность ожидания начала речи
vad.playing.maxLength 2000 Максимальная длина звукового фрагмента в режиме активного слушания
vad.playing.minSpeech 60 Минимальный отрезок речи, который считать значимым в режиме активного слушания
vad.playing.skipSilence 60 Не считать тишиной отрезки, короче данного значения в режиме активного слушания
vad.playing.maxSilence 200 Максимальная длительность тишины перед отправкой фрагмента в режиме активного слушания
cluster.logfile logs/sync.log Файл логов синхронизации есть только на главном сервере кластера
cluster.statusFile logs/sync.status Статус задачи синхронизации есть только на главном сервере кластера
cluster.nodes [ ] Перечень подчиненных нод для синхронизации изменений заполняется только на главном сервере кластера
tmp "/tmp/ses" Временная папка.


Работа в составе кластера

Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы:

  • База файловая, в папке robots.
  • lsync настроен через конфиг SES для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.
  • UPS при изменении данных работает только с мастером SES, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.
  • В конфигурации UPS: в servers.ses.trainer указываем маcтер-сервер, в servers.ses.cluster перечисляем все сервера кластера SES, в том числе и мастер.

Эмуляция сервисов интеграции

В каталоге /opt/ses/testapi могут располагаться эмуляторы сервисов интеграции. Эмулятор будет доступен по адресу htttp://<адрес ses>/testapi/<название_сервиса>. Для создания эмулятора поместите в папку /opt/ses/testapi/ файл <название_сервиса>.reply. Содержимое файла будет отдано без изменений, как есть по адресу "http://<адрес_ses>:<порт_ses>/ses/testapi/<название_сервиса>".


Настройка каналов и виджетов

Настройка виджета для сайта

  1. На странице коннектора типа "web" в UPS создать коннектор.
  2. Разместить на сайте виджет, вставив тег <script> с нужными параметрами. При работе через SSL потребуется организовать реверс-прокси и правильно настроить nginx для websocket.

Вставка виджета в код сайта

Разместите в <head> или <body> HTML-кода следующий тег:

<script src="https://SERVER/ses/widget/js?NAME" type="module" token="TOKEN"></script>

  • SERVER — адрес сервера UPS. Исходный код виджета всегда лежит по пути /ses/widget/js.
  • TOKEN — токен авторизации (генерируется и указывается в настройках коннектора "web" в UPS).
  • NAME — дополнительный имя (query-параметр) для уникальности ссылки, используйте при размещении нескольких виджетов с одного сервера на одной странице.

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

<!DOCTYPE html>

<html lang="en">

<head> ... </head>

<body>

   <script src="https://server.net/ses/widget/js?assistant1" type="module" token="tokenXXX"></script>
   <script src="https://server.net/ses/widget/js?assistant" type="module" token="tokenYYY"></script>
   <script src="https://server.net/ses/widget/js?chat" type="module" token="tokenZZZ"></script>
</body>
</html>

SSL и реверс-прокси

Если сайт работает через SSL (https), требуется настроить реверс-прокси для UPS и для websocket:

nginx (пример конфига для wss):

server {

    server_name ups_сервер.ru;

    listen 6191 ssl;

    include snippets/ssl-params.conf;

    ssl_certificate /etc/letsencrypt/live/ups_сервер.ru/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/ups_сервер.ru/privkey.pem;

    ssl_trusted_certificate /etc/letsencrypt/live/ups_сервер.ru/chain.pem;

    client_max_body_size 1000M;

    proxy_read_timeout 6000;

    proxy_connect_timeout 6000;

    proxy_send_timeout 6000;

    send_timeout 6000;

    large_client_header_buffers 8 256k;

    location / {

        proxy_pass http://локальный_адрес_ses:6191;

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection "upgrade";

        proxy_set_header Host $host;

        proxy_cache_bypass $http_upgrade;

    }

}

  • Раздел proxy_set_header Host $host; обязателен.
  • Убедитесь в поддержке заголовков CORS и обработке OPTIONS-запросов для корректной работы фронтенда.
  • Для websocket обязательно наличие директив proxy_set_header Upgrade и Connection "upgrade" для поддержки upgrade-запроса (см. [документацию nginx]).
  • Адреса для виджета и конфигов должны быть с поддержкой SSL.

Примечания

  • Для множественных языковых функций возможно потребуется отдельная обработка пути "/lang" внутри nginx.
  • Для websocket рекомендуется выделять отдельный порт — например, 8091.

Рекомендуется вынести подробные параметры и ситуации в отдельные пункты, добавить чек-лист подготовки к запуску. Примеры конфигураций и ссылки на документацию расширяют понятность инструкции для администратора.

Протоколы и порты

Сервис использует порты 6190/tcp для доступа к API-интерфейсу и порт 6191/tcp для WebSocket-сервера. Порт 6190 может быть изменен в конфигурационном файле.

Журналы работы

Для проверки состояния сервиса выполните sudo systemctl status ses.

Журналы сервиса находятся в каталоге, определенном в конфигурационном файле (по умолчанию – /opt/ses/logs/). Ошибки также пишутся в системный журнал, для просмотра можно воспользоваться командой sudo journalctl -u ses


Удаление и обновление ses

Для удаления выполните команду:

/opt/ses/uninstall

Команда удалит сервис и рабочий каталог, включая все файлы конфигурации. Для обновления запустите скрипт установки, как указано в п. 4. При этом обновление не изменяет файл /opt/ses/config.json.