Книга: ELASTIX – общайтесь свободно
Назад: Высвобождение места на диске
Дальше: Автоматическое восстановление подключений к внешним линиям

Отключение зависших соединений

Некоторые разговоры не могут быть разорваны автоматически. Чаще всего это происходит при ошибках передачи данных, когда телефонам абонентов и Elastix не удается корректно отреагировать на не доставленные пакеты. Если у абонентов включен режим Ожидания вызова (Call Waiting), то этого никто не заметит, так как новые звонки продолжат поступать. Если же зависнет соединение с абонентом, у которого отключен режим Ожидания вызова (Call Waiting), то связаться с таким абонентом не получится. Также зависшие соединения создают проблемы абонентам, у которых настроена условная переадресация (по состоянию Занято), и операторам Очередей (Queues), из-за чего к ним не будут поступать новые звонки. Зависшие соединения приходится разрывать вручную или автоматически. Далее описаны оба варианта отключения таких соединений.

Ручной разрыв соединений

К сожалению, связь может зависнуть на любой минуте. Есть возможность разорвать зависшее соединение вручную. Для этого следует выполнить в меню PBX \ Tools команду:
core show channels concise
и выяснить уникальный идентификатор соединения, который указан после последнего восклицательного «!» знака:

 

 

После чего дать команду вида:
channel request hangup 1422080480.13497
для принудительного разъединения:

 

 

Также можно установить бесплатный модуль bSmart Calls Disconnector, отображающий текущие разговоры в табличном виде и позволяющий разъединять соединения:

 

Автоматический разрыв соединений

Для автоматического разъединения соединений можно настроить опции Elastix, ограничивающие время разговора до 30 минут по внутренним и до 15 минут по внешним линиям при помощи указания опций набора:

 

 

L(x[: y[: z]]) – ограничить звонок временем в «x» ms, проиграть предупреждение за «y» ms до разрыва соединения, повторять предупреждение каждые «z» ms. Параметры y и z являются не обязательными.

 

Другой способ автоматического разрыва зависших соединений – создать небольшой скрипт, который будет отслеживать соединения и отключать их при обнаружении проблем. Для этого необходимо подключиться к Elastix под пользователем «root», создать небольшой скрипт:
mkdir /root/tasks
nano /root/tasks/drophunged.sh
следующего содержания (в скрипте «3600» соответствует 60 минутам):
#!/bin/bash
chnls=$(/usr/sbin/asterisk – rx 'core show channels concise' | tr " " "_")
n=0
d=0
for ch in $chnls
do
chname=$(echo $ch | awk '{split($0,a,"!"); print a[1]}')
chdur=$(echo $ch | awk '{split($0,a,"!"); print a[12]}')
chcode=$(echo $ch | awk '{split($0,a,"!"); print a[14]}')
if ["$chdur" – gt "3600"]; then
d=$(($d+1))
/usr/sbin/asterisk – rx "channel request hangup $chcode"
fi
n=$(($n+1))
done
затем назначить исполнение созданного скрипта:
crontab – e
добавлением к списку задач время его выполнения, например, каждый час в 17 минут:
17 0-23 * * * /bin/bash /root/tasks/drophunged.sh
Подсказка: для перехода в режим редактирования используйте «i». Для сохранения изменений нажмите «ESC», затем «:wq».
Назад: Высвобождение места на диске
Дальше: Автоматическое восстановление подключений к внешним линиям