Asterisk
18 мая 2025 г.Около 2 минGateIP PHONE
Модуль выполняет следующие функции:
- реализует сервис, который принимает POST запрос от agi-bin/main.php (модуль Asterisk) и регистрирует событие начала звонка в платформе:
- 2029 - Начало звонка.
- подключается к таблице CDR Asterisk и периодически (период 20 секунд) опрашивает данные. На основании этих данных и их статуса регистрирует системные события в платформе:
- 2030 - Завершение разговора;
- 2031 - Вызываемый номер занят;
- 2032 - Вызываемый номер не отвечает.
Совместимость
Для корректной работы gate модуля требуется версия ядра > 4.3
Настройки сервера Asterisk
- В таблице CDR требуется создать PK. Он будет использоваться для сканирования таблицы CDR шедулером (запоминать последний полученный и сканировать от него далее).
sql> alter table cdr add id serial not null primary key;
- На сервере астериска должен быть настроен интеграционный PHP скрипт, который вызывает рест gate-модуля при начале звонка. Сам скрипт поставляется вместе с модулем. В скрипте следует задать корректный адрес REST-сервиса.
Метрики производительности
Метрики в формате prometheus задаются в конфигурационном файле, по умолчанию: http://localhost:8034/metrics
- sem_repositoty_update - Время обновления репозитория сэм (получение через рест-сервисы всех телефонов астериск и смежных данных).
- sem_event_sended - Количество событий, отправленных в очередь JMS Event.
- asterisk_scan_cdr - Сканирование таблицы CDR на предмет завершенных звонков.
Установка
Для регистрации в качестве systemd демона следует создать файл сервиса /etc/systemd/system/asterisk-gate.service следующего содержания:
[Unit]
Description=asterisk-gate
After=syslog.target
[Service]
User=sem
Group=sem
ExecStart=/opt/asterisk-gate/asterisk-gate.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
Настройка модуля
Настройки выполняются в application.yml
Подключение к RESTAPI платформы (должен заканчиваться слэшем):
rest:
url: http://localhost:8080/sem-restservices/
user: user
password: password
Параметры подключения к шине платформы
artemis:
url: tcp://localhost:61616
user: artemis
password: artemis
# количество потоков в пуле для отправки JMS-сообщений
senderThreads: 8
# настройки очередей
queue:
event:
destination: jms.queue.Event
Настройки подключения к базе данных CDR
spring:
application:
name: asterisk-gate
# профили логирования, console - вывод в консоль, file - вывод в файл
profiles:
active: console
datasource:
# подключение к БД (урл, пользователь, пароль)
url: jdbc:postgresql://10.0.0.1:5432/asterisk
username: asterisk
password: asterisk
driver-class-name: org.postgresql.Driver
hikari:
maximum-pool-size: 10
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 600000
jpa:
database: DEFAULT
hibernate:
ddl-auto: validate
generate-ddl: false
show-sql: false
Настройки подключения к Asterisk
asterisk:
# идентификатор сервера астериск в платформе (asterisk_server.id) для опроса телефонов, см. раздел ниже
serverId: 2
# ключ взаимодействия с mail.php (должен совпадать со значением параметра api-key в mail.php)
api-key-secret: 7dcf97af-8939-44bb-bc89-01682d2c1e16
# урл для файлов записей разговоров (перед именем файла 200220252000-1008-1007.mp3 будет добавлен,
# например http://server.local/files/ и в медиа-данные завершения события разговора будет
# записано http://server.local/files/200220252000-1008-1007.mp3
file-url: http://10.0.0.1/files/
# шаблоны текста событий, поддерживаются подстановки
# $SRC_PHONE - телефон от которого исходит звонок
# $DST_PHONE - вызываемый телефон
# $UNIT_SERIAL - серийный номер устройства
# $USER_LOGIN - логин пользователя
# $DURATION - длительность разговора (для 2029 не доступно)
event-2029-template: "входящий звонок от $SRC_PHONE номеру $DST_PHONE, устройство: $UNIT_SERIAL, логин пользователя: $USER_LOGIN"
event-2030-template: "завершен разговор между $SRC_PHONE и $DST_PHONE, длительность $DURATION"
event-2031-template: "завершен вызов между $SRC_PHONE и $DST_PHONE - номер телефона занят"
event-2032-template: "завершен вызов между $SRC_PHONE и $DST_PHONE - номер не отвечает"