CLS. Руководство пользователя: различия между версиями
Материал из Флора AI
(Новая страница: «===== '''Общее описание''' ===== Сервис предназначен для преобразования текста в речь. Входными данными для сервиса является текст, результатом работы будет аудиофайл. ====='''Термины и определения'''===== Text-to-speech server (TTS) – сервис синтеза речи. Модель (голос) – мод...») Метка: визуальный редактор отключён |
Нет описания правки |
||
| (не показано 65 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
===== '''Общее описание''' ===== | ===== '''Общее описание''' ===== | ||
Сервис | Сервис массового обзвона и уведомлений, поддерживающий множественные каналы связи и гибкую настройку | ||
====== '''Основные возможности:''' ====== | |||
* Выбор канала связи | |||
** голосовые звонки - интеграция с '''FreeSWITCH''' для исходящих звонков | |||
** telegram | VK - интеграция с '''SES''' для последующей отправки уведомления в мессенджер | |||
* Управление списками обзвона | |||
** CRUD операции - создание, чтение, изменение, удаление списков | |||
** Импорт/Экспорт - загрузка и выгрузка контактов из CSV | |||
** Автозагрузка - динамическое расширение списков через скрипт | |||
** Планировщик - cron-подобное расписание запуска обзвонов | |||
* Конфигурация и лимиты | |||
** Глобальные настройки - централизованное управление конфигурацией | |||
** Временные интервалы - точное управление временем работы | |||
** Праздники - учет выходных дней при обзвонах | |||
** Лимиты обзвона - контроль нагрузки и таймаутов | |||
* Мониторинг и отчетность | |||
** Реальное время - отслеживание статуса обзвонов | |||
** Логирование - детальные логи всех звонков / уведомлений | |||
** API - полный программный доступ ко всем функциям | |||
====='''Термины и определения'''===== | ===== '''Термины и определения''' ===== | ||
CLS (Call List Service) - сервис массового обзвона и уведомлений с поддержкой множественных каналов связи. | |||
Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису CLS в реальном времени. | |||
Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису | |||
Список обзвона (Call List) - набор контактов с метаданными для выполнения массовой рассылки или обзвона. | |||
ListCaller - основной класс, управляющий выполнением кампании по конкретному списку. | |||
Instance - активный экземпляр ListCaller, выполняющий обзвон. | |||
===== '''Описание методов API''' ===== | ===== '''Описание методов API''' ===== | ||
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом | Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом CLS. По умолчанию используется порт 6188/tcp. | ||
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок <code>"accept: application/json"</code> | Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок <code>"accept: application/json"</code> | ||
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6188 будет отображен интерфейс Swagger со всеми методами с возможностью их проверки. | |||
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС: | |||
{| class="wikitable" style="width: 110%" | {| class="wikitable" style="width: 110%" | ||
|+''Описание методов API'' | |+''Описание методов API'' | ||
! | ! colspan="3" |'''<u>Управление обзвонами</u>''' | ||
|- | |- | ||
! style="color:green;width: 15%" |'''POST /calls/call''' | |||
! colspan="2" style="width: 85%" |<small>Прямой звонок с номера на номер</small> | |||
|- | |- | ||
| colspan="2" style="width: 50%" |<small><code>{</code></small> | |||
<small><code>"source": "8000",</code></small> | |||
<small><code>"destination": "6000",</code></small> | |||
<small><code>"limits": {</code></small> | |||
<small><code>"no_answer_timeout": 10,</code></small> | |||
<small><code>"dial_tries": 1,</code></small> | |||
<small><code>"max_channels": 2,</code></small> | |||
<small><code>"redial_timeout": 600,</code></small> | |||
<small><code>"watchdog": 240</code></small> | |||
<small><code>},</code></small> | |||
<small><code>"metadata": {}</code></small> | |||
<small><code>}</code></small> | |||
| style="width: 50%" |<small><code>{</code></small> | |||
<small><code> "error": 0,</code></small> | |||
<small><code> "message": "сообщение о статусе результата"</code></small> | |||
<small><code>}</code></small> | |||
|- | |- | ||
! style="color:green;width: 15%" |'''POST /calls/start''' | |||
! colspan="2" style="width: 85%" |<nowiki>Старт списка обзвона | оповещения</nowiki> | |||
|- | |- | ||
| colspan="2" style="width: 50%" | | |||
* <small>'''id''' - id списка</small> | |||
| style="width: 50%" |<small><code>{</code></small> | |||
<small><code> "error": 0,</code></small> | |||
| style="width: 50%" |<small><code> | |||
<small><code> | <small><code> "message": "сообщение о статусе результата"</code></small> | ||
<small><code> | <small><code>}</code></small> | ||
|- | |- | ||
! style="color:green;width: 15%" |'''POST/ | ! style="color:green;width: 15%" |'''POST /calls/stop''' | ||
! colspan="2" style="width: 85%" |< | ! colspan="2" style="width: 85%" |<nowiki>Остановка списка обзвона | оповещения</nowiki> | ||
|- | |- | ||
| colspan="2" style="width: 50%" | | | colspan="2" style="width: 50%" | | ||
* <small>''' | * <small>'''id''' - id списка</small> | ||
| style="width: 50%" |<small><code>{</code></small> | | style="width: 50%" |<small><code>{</code></small> | ||
<small><code> "error": 0,</code></small> | |||
<small><code> "message": "сообщение о статусе результата"</code></small> | |||
<small><code>}</code></small> | |||
|- | |||
! colspan="3" |'''<u><nowiki>Управление списками обзвона | оповещения</nowiki></u>''' | |||
|- | |||
! style="color:green;width: 15%" |'''POST /lists/add''' | |||
! colspan="2" style="width: 85%" |<nowiki>Добавление нового списка для обзвона | оповещения</nowiki> | |||
|- | |||
| colspan="2" style="width: 50%" |<small><code>{</code></small> | |||
<small><code> "name": "Test Call List",</code> - имя списка</small> | |||
<small><code> "source": "8000",</code> - источник вызова | оповещения</small> | |||
<small><code> "limits": {</code> - лимиты для вызова (опционально)</small> | |||
<small><code> "no_answer_timeout": 10,</code></small> | |||
<small><code> "dial_tries": 1,</code></small> | |||
<small><code> "max_channels": 2,</code></small> | |||
<small><code> "redial_timeout": 600,</code></small> | |||
<small><code> "watchdog": 240</code></small> | |||
<small><code> },</code></small> | |||
<small><code> "dialed": 0,</code></small> | |||
<small><code> "timeintervals": [</code></small> | |||
<small><code> "default"</code> - id временного интервала</small> | |||
<small><code> ],</code></small> | |||
<small><code> "channel": "voice",</code> - используемый канал</small> | |||
<small><code> "channel_parameters": {</code> - используется для каналов telegram и vk</small> | |||
<small><code> "robot_id": "",</code></small> | |||
<small><code> "endpoint": ""</code></small> | |||
<small><code> },</code></small> | |||
<small><code> "script_before_dial": "",</code> - скрипт для выполнения перед каждым вызовом | оповещением</small> | |||
<small><code> "script": "",</code> - скрипт дозагрузки элементов для обзвона</small> | |||
<small><code> "autoload": false,</code> - автоматическая дозагрузка элементов для обзвона при старте списка</small> | |||
<small><code> "scheduler": [</code> - планировщик выполнения обзвона | оповещения</small> | |||
<small><code> "35 14 * * *"</code> - cron-расписание запуска обзвона</small> | |||
<small><code> ],</code></small> | |||
<small><code> "items": [</code></small> | |||
<small><code> | <small><code> {</code></small> | ||
<small><code> " | <small><code> "destinations": [</code> - телефоны | user_id для каналов отличных от voice</small> | ||
<small><code> "6000"</code></small> | |||
<small><code> ],</code></small> | |||
<small><code> "metadata": {}</code> - дополнительная произвольная информация</small> | |||
<small><code> }</code></small> | |||
<small><code> ]</code></small> | |||
<small><code>}</code></small> | <small><code>}</code></small> | ||
| style="width: 50%" |<code><small>{ | |||
<code>"error": 0,</small></code> | |||
<code><small>"message": "success",</small></code> | |||
<code><small>"id": "123e4567-e89b-12d3-a456-426614174000"</small></code> | |||
<code><small>}</small></code> | |||
|- | |- | ||
! style="color: | ! style="color:red;width: 15%" |'''DELETE /lists/delete/{id}''' | ||
! colspan="2" style="width: 85%" |< | ! colspan="2" style="width: 85%" |<nowiki>Удаление существующего списка для обзвона | оповещения</nowiki> | ||
|- | |- | ||
| colspan="2" style="width: 50%" | | | colspan="2" style="width: 50%" | | ||
* <small>''' | * <small>'''id''' - id списка</small> | ||
|<code><small>{</small></code> | |||
<small><code> "error": 0,</code></small> | |||
<small><code> | <small><code> "message": "сообщение о статусе результата"</code></small> | ||
<small><code> | <code><small>}</small></code> | ||
|- | |||
! style="color:blue;width: 15%" |'''GET /lists/export/{id}''' | |||
! colspan="2" style="width: 85%" |<nowiki>Экспорт списка для обзвона | оповещения в CSV файл</nowiki> | |||
|- | |||
| colspan="2" style="width: 50%" | | |||
* <small>'''id''' - id списка</small> | |||
|<small><code>{</code></small> | |||
<small><code> "error": 0,</code></small> | |||
<small><code> "message": "сообщение о статусе результата"</code></small> | |||
<small><code>}</code></small> | |||
|- | |||
! style="color:green;width: 15%" |'''POST /lists/import/{id}''' | |||
! colspan="2" style="width: 85%" |<nowiki>Экспорт списка для обзвона | оповещения из CSV файла</nowiki> | |||
|- | |||
| colspan="2" | | |||
* <small>'''csv''' - csv файл с элементами списка</small> | |||
<small><code> | * <small>'''id''' - id списка</small> | ||
|<small><code>{</code></small> | |||
<small><code> "error": 0,</code></small> | |||
<small><code> | <small><code> "message": "сообщение о статусе результата"</code></small> | ||
<small><code>]</code></small> | <small><code>}</code></small> | ||
|- | |||
! style="color:blue;width: 15%" |'''GET /lists/list''' | |||
! colspan="2" style="width: 85%" |<nowiki>Получения всех списков для обзвона | оповещения из БД</nowiki> | |||
|- | |||
| colspan="2" style="width: 50%" |<small>No parameters</small> | |||
| style="width: 50%" |<code><small>{</small></code> | |||
<code><small>"error": 0,</small></code> | |||
<code><small>"lists": []</small></code> | |||
<code><small>}</small></code> | |||
|- | |||
! style="color:blue;width: 15%" |'''GET /lists/{id}''' | |||
! colspan="2" |<nowiki>Получение конкретного списка для обзвона | оповещения из БД</nowiki> | |||
|- | |||
| colspan="2" | | |||
* <small>'''id''' - id списка</small> | |||
|<code><small>{</small></code> | |||
<code><small>"error": 0,</small></code> | |||
<code><small>"list": {}</small></code> | |||
<code><small>}</small></code> | |||
|- | |||
! style="color:green;width: 15%" |'''POST /lists/load/{id}''' | |||
! colspan="2" style="width: 85%" |<nowiki>Дозагрузка в существующую инстанцию списка обзвона | оповещения элементов из скрипта</nowiki> | |||
|- | |||
| colspan="2" style="width: 50%" | | |||
* <small>id - id списка</small> | |||
| style="width: 50%" |<small><code>{</code></small> | | style="width: 50%" |<small><code>{</code></small> | ||
<small><code> "error": 0,</code></small> | |||
<small><code> "message": "сообщение о статусе результата"</code></small> | |||
<small><code> "message": "сообщение о статусе результата"</code></small> | |||
<small><code>}</code></small> | <small><code>}</code></small> | ||
|- | |- | ||
! style="color: | ! style="color:orange;width: 15%" |'''PUT /lists/modify/{id}''' | ||
! colspan="2" style="width: 85%" |< | ! colspan="2" style="width: 85%" |<nowiki>Изменение существующего списка для обзвона | оповещения</nowiki> | ||
|- | |- | ||
| colspan="2" style="width: 50%" | | | colspan="2" style="width: 50%" | | ||
* <small>''' | * <small>'''payload''' как в '''POST /lists/add'''</small> | ||
* <small>'''id''' - id списка</small> | |||
| style="width: 50%" |<small><code>{</code></small> | | style="width: 50%" |<small><code>{</code></small> | ||
<small><code> "error": 0,</code></small> | |||
<small><code> " | <small><code> "message": "сообщение о статусе результата"</code></small> | ||
<small><code> | <small><code>}</code></small> | ||
|- | |||
! style="color:blue;width: 15%" |'''GET /lists/status/{id}''' | |||
! colspan="2" |<nowiki>Получение статуса существующего списка для обзвона | оповещения</nowiki> | |||
|- | |||
| colspan="2" | | |||
* <small>id - id списка</small> | |||
|<small><code>{</code></small> | |||
<small><code>"error": 0,{</code></small> | |||
<small><code>"status": {</code></small> | |||
<small><code>"total_items": 0,</code></small> | |||
<small><code>"processed_items": 0,</code></small> | |||
<small><code>"completed": false,{</code></small> | |||
<small><code>"reason": "",</code></small> | |||
<small><code>"running": false</code></small> | |||
<small><code>}</code></small> | |||
<small><code>}</small></code> | |||
|- | |||
! colspan="3" |'''<u><nowiki>Управление инстанциями обзвона | оповещения</nowiki></u>''' | |||
|- | |||
! style="color:green;width: 15%" |'''POST /instances/add/{list_id}''' | |||
! colspan="2" |<nowiki>Создание инстанции обзвона | оповещения на основе списка, без запуска обзвона | оповещения</nowiki> | |||
|- | |||
| colspan="2" | | |||
* <small>'''id''' - id списка</small> | |||
|<small><code>{</code></small> | |||
<small><code> "error": 0,</code></small> | |||
<small><code> " | <small><code> "message": "сообщение о статусе результата"</code></small> | ||
<small><code>}</code></small> | <small><code>}</code></small> | ||
|- | |- | ||
! style="color: | ! style="color:blue;width: 15%" |'''GET /instances/get/{instance_id}''' | ||
! colspan="2" style="width: | ! colspan="2" |Получить детальную информацию о конкретной инстанции | ||
|- | |||
| colspan="2" | | |||
* <small>'''id''' - id списка | инстанции (одно и тоже)</small> | |||
|<code><small>{</small></code> | |||
<code><small>"id": "86c08271-8415-4ba5-bcf1-e1115a602bd8",</small></code> | |||
<code><small>"name": "Test Call List",</small></code> | |||
<code><small>"source": "8000",</small></code> | |||
<code><small>"limits": {</small></code> | |||
<code><small>"no_answer_timeout": 5,</small></code> | |||
<code><small>"dial_tries": 1,</small></code> | |||
<code><small>"max_channels": 2,</small></code> | |||
<code><small>"redial_timeout": 200,</small></code> | |||
<code><small>"watchdog": 60</small></code> | |||
<code><small>},</small></code> | |||
<code><small>"timeintervals": ["default"],</small></code> | |||
<code><small>"holidays": ["2025-09-14"],</small></code> | |||
<code><small>"channel": "voice",</small></code> | |||
<code><small>"running": true,</small></code> | |||
<code><small>"progress": {</small></code> | |||
<code><small>"total_items": 1,</small></code> | |||
<code><small>"processed_items": 1,</small></code> | |||
<code><small>"completed": false,</small></code> | |||
<code><small>"reason": ""</small></code> | |||
<code><small>},</small></code> | |||
<code><small>"job_info": {</small></code> | |||
<code><small>"has_job": true,</small></code> | |||
<code><small>"job_id": "86c08271-8415-4ba5-bcf1-e1115a602bd8",</small></code> | |||
<code><small>"next_run": "2025-12-24 20:00:00+03:00"</small></code> | |||
<code><small>},</small></code> | |||
<code><small>"created": "2025-08-18T14:57:17.762777",</small></code> | |||
<code><small>"items": [</small></code> | |||
<code><small>{</small></code> | |||
<code><small>"destinations": ["6000"],</small></code> | |||
<code><small>"metadata": {}</small></code> | |||
<code><small>}</small></code> | |||
<code><small>]</small></code> | |||
<code><small>}</small></code> | |||
|- | |||
! style="color:blue;width: 15%" |'''GET /instances/list''' | |||
! colspan="2" |Получение списка инстанций | |||
|- | |||
| colspan="2" |<small>No parameters</small> | |||
|<code><small>{</small></code> | |||
<code><small>"total": 0,</small></code> | |||
<code><small>"instances": []</small></code> | |||
<code><small>}</small></code> | |||
|- | |||
! style="color:red;width: 15%" |'''DELETE /instances/remove/{instance_id}''' | |||
! colspan="2" |<nowiki>Удаление инстанции обзвона | оповещения</nowiki> | |||
|- | |||
| colspan="2" | | |||
* <small>'''id'''<nowiki> - id списка | инстанции (одно и тоже)</nowiki></small> | |||
|<small><code>{</code></small> | |||
<small><code> "error": 0,</code></small> | |||
<small><code> "message": "сообщение о статусе результата"</code></small> | |||
<small><code>}</code></small> | |||
|- | |- | ||
! colspan="3" |'''<u>Управление временными интервалами</u>''' | |||
|- | |||
* <small>''' | ! style="color:green;width: 15%" |'''POST /timeintervals/add''' | ||
| | ! colspan="2" |Создание временного интервала | ||
|- | |||
| colspan="2" | | |||
<small><code>{</code></small> | |||
<small><code>"id": "02f2d1ce-bb0b-4856-904b-2db13250bb90",</code></small> | |||
<small><code>"name": "Новый интервал 2",</code></small> | |||
<small><code>"days": "all",</code></small> | |||
<small><code>"weekdays": [1],</code></small> | |||
<small><code>"months": [1],</code></small> | |||
<small><code>"dates": [1],</code></small> | |||
<small><code>"intervals": [[0,1440],]</code></small> | |||
<small><code>}</code></small> | |||
|<small><code>{</code></small> | |||
<small><code> "error": 0,</code></small> | |||
<small><code> "message": "сообщение о статусе результата"</code></small> | |||
<small><code>}</code></small> | |||
|- | |||
! style="color:red;width: 15%" |'''DELETE /timeintervals/delete/{id}''' | |||
! colspan="2" |Удаление существующего интервала времени | |||
|- | |||
| colspan="2" | | |||
* <small>'''id''' - id интервала времени</small> | |||
|<small><code>{</code></small> | |||
<small><code> "error": 0,</code></small> | |||
<small><code> "message": "сообщение о статусе результата"</code></small> | |||
<small><code>}</code></small> | |||
|- | |- | ||
! style="color:blue;width: 15%" |'''GET/ | ! style="color:blue;width: 15%" |'''GET /timeintervals/get/{id}''' | ||
! colspan="2 | ! colspan="2" |Получение конкретного временного интервала | ||
|- | |- | ||
| colspan="2" | | colspan="2" | | ||
* <small>'''id''' - id интервала времени</small> | |||
| | |||
<small><code>{</code></small> | |||
<small><code>"error": 0,</code></small> | |||
<small><code>"timeinterval": {</code></small> | |||
<small><code>"id": "default",</code></small> | |||
<small><code>"name": "default",</code></small> | |||
<small><code>"days": "all",</code></small> | |||
<small><code>"weekdays": [</code></small> | |||
<small><code>1</code></small> | |||
<small><code>],</code></small> | |||
<small><code>"months": [</code></small> | |||
<small><code>1</code></small> | |||
<small><code>],</code></small> | |||
<small><code>"dates": [</code></small> | |||
<small><code>1</code></small> | |||
<small><code>],</code></small> | |||
<small><code>"intervals": [</code></small> | |||
<small><code>[0, 1440]</code></small> | |||
<small><code>]</code></small> | |||
<small><code>}</code></small> | |||
<small><code>}</code></small> | |||
|- | |- | ||
! style="color:blue;width: 15%" |'''GET/ | ! style="color:blue;width: 15%" |'''GET /timeintervals/list''' | ||
! colspan="2 | ! colspan="2" |Получение списка временных интервалов | ||
|- | |- | ||
| colspan="2 | | colspan="2" |<small>No parameters</small> | ||
| | |||
| | <small><code>{</code></small> | ||
<small><code>"error": 0,</code></small> | |||
<small> | <small><code>"timeintervals": []</code></small> | ||
<small> | <small><code>}</code></small> | ||
|- | |- | ||
! style="color: | ! style="color:orange;width: 15%" |'''PUT /timeintervals/modify/{id}''' | ||
! colspan="2" | ! colspan="2" |Изменение существующего временного интервала | ||
|- | |||
| colspan="2" | | |||
*<small>'''payload''' как в '''POST /timeintervals/add'''</small> | |||
* <small>'''id''' - id списка</small> | |||
|<small><code>{</code></small> | |||
<small><code> "error": 0,</code></small> | |||
<small><code> "message": "сообщение о статусе результата"</code></small> | |||
<small><code>}</code></small> | |||
|- | |- | ||
! colspan="3" |'''<u>Управление конфигурациями</u>''' | |||
|- | |- | ||
! style="color:blue;width: 15%" |'''GET/ | ! style="color:blue;width: 15%" |'''GET /configs/get/{id}''' | ||
! colspan="2" | | ! colspan="2" |Получение конкретной конфигурации | ||
|- | |- | ||
| colspan="2" |<small> | | colspan="2" | | ||
|<small> | * <small>'''id''' - id конфигурации</small> | ||
| | |||
<small><code>{</code></small> | |||
<small><code>"error": 0,</code></small> | |||
</small><code><small>{</small></code> | <small><code>"message": "success",</code></small> | ||
<small><code>"data": {</code></small> | |||
<small><code>"id": "limits",</code></small> | |||
<small><code>"params": {</code></small> | |||
<small><code>"watchdog": 60,</code></small> | |||
<small><code>"no_answer_timeout": 10,</code></small> | |||
<small><code>"dial_tries": 1,</code></small> | |||
<small><code>"max_channels": 2,</code></small> | |||
<small><code>"redial_timeout": 600</code></small> | |||
<small><code>}</code></small> | |||
<small><code>}</code></small> | |||
<small><code>}</code></small> | |||
|- | |||
! style="color:blue;width: 15%" |'''GET /configs/list''' | |||
! colspan="2" |Получения списка доступных конфигураций | |||
|- | |||
| colspan="2" |<small>No parameters</small> | |||
| | |||
<code><small>{</small></code> | |||
<code><small>"error": 0,</small></code> | <code><small>"error": 0,</small></code> | ||
<code><small>" | <code><small>"message": "success",</small></code> | ||
<code><small>" | <code><small>"data": []</small></code> | ||
<code><small>" | <code><small>}</small></code> | ||
|- | |||
! style="color:orange;width: 15%" |'''PUT /configs/modify/{id}''' | |||
! colspan="2" |Изменение существующей конфигурации | |||
|- | |||
| colspan="2" | | |||
<small><code>{</code></small> | |||
<small><code> "id": "string",</code></small> | |||
<small><code> "params": {}</code></small> | |||
<small><code>}</code></small> | |||
| | |||
<small><code>{</code></small> | |||
<small><code> "error": 0,</code></small> | |||
<code><small>}</small></code> | <small><code> "message": "сообщение о статусе результата"</code></small> | ||
<small><code>}</code></small> | |||
|- | |||
! colspan="3" |'''<u>Логирование</u>''' | |||
|- | |||
! style="color:blue;width: 15%" |'''GET /logs/logs''' | |||
! colspan="2" |Получение логов с указанной даты | |||
|- | |||
| colspan="2" | | |||
* <small>'''date''' - стартовая дата (формат: 2025-01-01)</small> | |||
* '''<small>id -</small>''' <small>id списка для фильтрации (опционально)</small> | |||
| | |||
<small><code>{</code></small> | |||
<small><code>"error": 0,</code></small> | |||
<small><code>"message": "success",</code></small> | |||
<small><code>"logs": [</code></small> | |||
<small><code>[</code></small> | |||
<small><code>{</code></small> | |||
<small><code>"uuid": "uuid",</code></small> | |||
<small><code>"channel": "voice",</code></small> | |||
<small><code>"source": "8000",</code></small> | |||
<small><code>"destination": "8000",</code></small> | |||
<small><code>"message": "Call to 8000 ended",</code></small> | |||
<small><code>"duration": "44",</code></small> | |||
<small><code>"status": "CALL_ENDED",</code></small> | |||
<small><code>"hangup_cause": "NORMAL_TEMPORARY_FAILURE",</code></small> | |||
<small><code>"sip_hangup_init": "<nowiki>sip:200</nowiki>",</code></small> | |||
<small><code>"metadata": null</code></small> | |||
<small><code>}</code></small> | |||
<small> | <small><code>]</code></small> | ||
< | <small><code>]</code></small> | ||
<small><code>}</code></small> | |||
|- | |||
! colspan="3" |'''<u>Лицензия</u>''' | |||
|- | |||
! style="color:blue;width: 15%" |'''GET /license/check''' | |||
! colspan="2" |Получение состояния лицензии | |||
|- | |||
| colspan="2" |<small>No parameters</small> | |||
| | |||
<small><code>{</code></small> | |||
<small><code>"error": 0,</code></small> | |||
< | <small><code>"uuid": "uuid",</code></small> | ||
< | <small><code>"remaining_licenses": "infinity",</code></small> | ||
< | <small><code>"threshold": 0</code></small> | ||
< | <small><code>}</code></small> | ||
|} | |||
Текущая версия от 14:41, 25 августа 2025
Общее описание
Сервис массового обзвона и уведомлений, поддерживающий множественные каналы связи и гибкую настройку
Основные возможности:
- Выбор канала связи
- голосовые звонки - интеграция с FreeSWITCH для исходящих звонков
- telegram | VK - интеграция с SES для последующей отправки уведомления в мессенджер
- Управление списками обзвона
- CRUD операции - создание, чтение, изменение, удаление списков
- Импорт/Экспорт - загрузка и выгрузка контактов из CSV
- Автозагрузка - динамическое расширение списков через скрипт
- Планировщик - cron-подобное расписание запуска обзвонов
- Конфигурация и лимиты
- Глобальные настройки - централизованное управление конфигурацией
- Временные интервалы - точное управление временем работы
- Праздники - учет выходных дней при обзвонах
- Лимиты обзвона - контроль нагрузки и таймаутов
- Мониторинг и отчетность
- Реальное время - отслеживание статуса обзвонов
- Логирование - детальные логи всех звонков / уведомлений
- API - полный программный доступ ко всем функциям
Термины и определения
CLS (Call List Service) - сервис массового обзвона и уведомлений с поддержкой множественных каналов связи.
Swagger UI – интерактивная веб-консоль с кратким описанием методов API и возможностью выполнять запросы к сервису CLS в реальном времени.
Список обзвона (Call List) - набор контактов с метаданными для выполнения массовой рассылки или обзвона.
ListCaller - основной класс, управляющий выполнением кампании по конкретному списку.
Instance - активный экземпляр ListCaller, выполняющий обзвон.
Описание методов API
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом CLS. По умолчанию используется порт 6188/tcp.
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок "accept: application/json"
Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6188 будет отображен интерфейс Swagger со всеми методами с возможностью их проверки.
| Управление обзвонами | ||
|---|---|---|
| POST /calls/call | Прямой звонок с номера на номер | |
{
|
{
| |
| POST /calls/start | Старт списка обзвона | оповещения | |
|
{
| |
| POST /calls/stop | Остановка списка обзвона | оповещения | |
|
{
| |
| Управление списками обзвона | оповещения | ||
| POST /lists/add | Добавление нового списка для обзвона | оповещения | |
{
|
{
| |
| DELETE /lists/delete/{id} | Удаление существующего списка для обзвона | оповещения | |
|
{
| |
| GET /lists/export/{id} | Экспорт списка для обзвона | оповещения в CSV файл | |
|
{
| |
| POST /lists/import/{id} | Экспорт списка для обзвона | оповещения из CSV файла | |
|
{
| |
| GET /lists/list | Получения всех списков для обзвона | оповещения из БД | |
| No parameters | {
| |
| GET /lists/{id} | Получение конкретного списка для обзвона | оповещения из БД | |
|
{
| |
| POST /lists/load/{id} | Дозагрузка в существующую инстанцию списка обзвона | оповещения элементов из скрипта | |
|
{
| |
| PUT /lists/modify/{id} | Изменение существующего списка для обзвона | оповещения | |
|
{
| |
| GET /lists/status/{id} | Получение статуса существующего списка для обзвона | оповещения | |
|
{
| |
| Управление инстанциями обзвона | оповещения | ||
| POST /instances/add/{list_id} | Создание инстанции обзвона | оповещения на основе списка, без запуска обзвона | оповещения | |
|
{
| |
| GET /instances/get/{instance_id} | Получить детальную информацию о конкретной инстанции | |
|
{
| |
| GET /instances/list | Получение списка инстанций | |
| No parameters | {
| |
| DELETE /instances/remove/{instance_id} | Удаление инстанции обзвона | оповещения | |
|
{
| |
| Управление временными интервалами | ||
| POST /timeintervals/add | Создание временного интервала | |
|
|
{
| |
| DELETE /timeintervals/delete/{id} | Удаление существующего интервала времени | |
|
{
| |
| GET /timeintervals/get/{id} | Получение конкретного временного интервала | |
|
| |
| GET /timeintervals/list | Получение списка временных интервалов | |
| No parameters |
| |
| PUT /timeintervals/modify/{id} | Изменение существующего временного интервала | |
|
{
| |
| Управление конфигурациями | ||
| GET /configs/get/{id} | Получение конкретной конфигурации | |
|
| |
| GET /configs/list | Получения списка доступных конфигураций | |
| No parameters |
| |
| PUT /configs/modify/{id} | Изменение существующей конфигурации | |
|
|
| |
| Логирование | ||
| GET /logs/logs | Получение логов с указанной даты | |
|
| |
| Лицензия | ||
| GET /license/check | Получение состояния лицензии | |
| No parameters |
| |