Asterisk. Решение «Not accepting call completion offers from call-forward recipient Local»

Однажды на одном Asterisk сервере заметил следующую ошибку:

Читать далее «Asterisk. Решение «Not accepting call completion offers from call-forward recipient Local»»

Уведомление «Call from X to extension X rejected because extension not found in context X»

Однажды меня попросил клиент посмотреть почему нельзя дозвонится на один из номеров.
Я открыл консоль asterisk:

Читать далее «Уведомление «Call from X to extension X rejected because extension not found in context X»»

Настройка Asterisk AMI

Asterisk Managment Interface (AMI) — мощный интерфейс API для Asterisk, позволяет управлять, выполнять команды, получать уведомления о событиях в реальном времени и т.д.

Читать далее «Настройка Asterisk AMI»

IPTables правила для Asterisk AMI

Допустим по умолчанию «iptables -P INPUT ACCEPT» для всех соединений (а если DROP, что очень желательно, то тогда все DROP правила ниже не используем, выполняем только ACCEPT).

Так как Asterisk AMI обычно работает по TCP порту 5038, то чтобы открыть его выполним:

Читать далее «IPTables правила для Asterisk AMI»

Отправка голосовой почты Asterisk на несколько email

Допустим голосовая почта настроена как я описывал в статье — Настройка голосовой почты в Asterisk.
Имеется следующий контекст:

[voicemailcontext]
207 => 1111,Username,test@example.com,,attach=yes|tz=ua|delete=yes

Если необходимо отправить голосовое сообщение сразу на несколько email адресов, то вместо test@example.com укажем например testmail:

[voicemailcontext]
207 => 1111,Username,testmail,,attach=yes|tz=ua|delete=yes

Потом откроем файл /etc/aliases в текстовом редакторе:

sudo nano /etc/aliases

И укажем алиасы для testmail:

testmail: support@example.net,user@example.net

Чтобы изменения вступили в силу, необходимо обновить базу алиасов командой:

cd /etc
sudo newaliases

Готово, Asterisk будет отправлять сообщение на testmail, а оно автоматически пересылаться на указанные адреса.

Смотрите также:
Перенаправление почты пользователя root

Настройка автоматических вызовов в Asterisk

Asterisk может автоматически совершать звонок если в директорию (по умолчанию) /var/spool/asterisk/outgoing/ поместить .call файл. Если дата изменения файла больше текущей, то звонок будет совершен при наступлении или после этого времени.

Для автоматических вызовов должен быть загружен модуль pbx_spool.so, он должен быть прописан в modules.conf либо должен быть указан параметр autoload=yes.

Читать далее «Настройка автоматических вызовов в Asterisk»

Решение предупреждения Asterisk «leave_voicemail: No more messages possible»

Заметил на одном из серверов следующую ошибку:

WARNING[21992][C-00000b27]: app_voicemail.c:6559 leave_voicemail: No more messages possible

Оказалось что почтовый ящик переполнен голосовыми сообщениями и они перестали сохранятся, в ответ звонящему сообщалось «Голосовой ящик абонента переполнен».

Чтобы решить эту проблему есть несколько вариантов:

1) Удалить сообщения в голосовом ящике, позвонив на номер голосовой почты.

2) Увеличить значение maxmsg в файле voicemail.conf, тем самым увеличив максимальное количество сообщений в почтовом ящике, но опять же он может быть переполнен. После изменений в файле voicemail.conf нужно их применить:

sudo asterisk -rvv
voicemail reload
quit

3) В контексте голосового ящика добавить delete=yes, например:

[voicemailcontext]
207 => 1111,Username,test@example.com,,attach=yes|tz=ua|delete=yes

В этом случае голосовые сообщения будут отправятся на электронную почту, а с сервера сразу удалятся, то есть их нельзя будет прослушать позвонив на номер голосовой почты и соответственно почтовый ящик никогда не переполнится. Считаю этот вариант наилучшим.

Смотрите также:
Настройка голосовой почты в Asterisk

IPTables правила для Asterisk

Чтобы разрешить подключение SIP в IPTables, добавим правила (первое для соединений, второе для голосового трафика):

sudo iptables -A INPUT -p udp -m udp --dport 5060 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT

Чтобы разрешить подключения только с конкретного адреса, то вместо правил выше укажем (где 192.168.1.50 доверенный IP адрес):

sudo iptables -A INPUT -p udp -m udp -s 192.168.1.50 --dport 5060 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp -s 192.168.1.50 --dport 10000:20000 -j ACCEPT

Аналогично укажем для каждого IP либо сразу для подсети, например:

sudo iptables -A INPUT -p udp -m udp -s 192.168.1.0/24 --dport 5060 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp -s 192.168.1.0/24 --dport 10000:20000 -j ACCEPT

Чтобы удалить правило укажем ту же команду, заменив -A на -D, например:

sudo iptables -D INPUT -p udp -m udp -s 192.168.1.0/24 --dport 5060 -j ACCEPT
sudo iptables -D INPUT -p udp -m udp -s 192.168.1.0/24 --dport 10000:20000 -j ACCEPT

Посмотреть список правил можно командой:

sudo iptables -nvL

Смотри также мои статьи:
IPTables правила для Asterisk AMI
Настройка IPTables

Управление модулями Asterisk

Подключимся к консоли Asterisk:

sudo asterisk -rvv

Просмотрим какие модули уже используются:

module show

Файлы модулей с расширением *.so находятся в директории /usr/lib/asterisk/modules/

Для загрузки и выгрузки модуля используются команды (имя модуля указывается без расширения файла, например не chan_sip.so, а chan_sip):

module load NAME
module unload NAME

Для того чтобы нужные модули загружались автоматически при запуске Asterisk, их нужно указать в файле /etc/asterisk/modules.conf, например откроем его в текстовом редакторе nano:

sudo nano /etc/asterisk/modules.conf

Можно включить автозагрузку всех существующих модулей в папке /usr/lib/asterisk/modules/:

[modules]
autoload=yes

А потом исключить ненужные командами:

noload => module.so

Либо запретить загрузку всех и указать только те которые нужны, например:

;SIP VoIP драйвер
load => chan_sip.so
load => res_rtp_asterisk.so
load => app_dial.so
load => bridge_simple.so
load => res_features.so
; музыка при удержании вызова
load => res_musiconhold.so
load => res_adsi.so
load => pbx_config.so
; список необходимых кодеков
load => codec_a_mu.so
load => codec_adpcm.so
load => codec_alaw.so
load => codec_ulaw.so
load => codec_gsm.so
load => codec_ilbc.so
load => codec_lpc10.so
; нужен если использовать платы Dahdi для аналоговых линий
load => chan_dahdi.so
; парковка вызовов
load => res_parking.so 
; ниже модули которые мне понадобились при настройке записи разговоров
; требуется если используется res_monitor.so
load => func_periodic_hook.so
; требуется если используется res_monitor.so, функция STRFTIME
load => func_strings.so
; требуется если используется res_monitor.so для определения номера, функция CALLERID
load => func_callerid.so
; требуется если используется res_monitor.so для MixMonitor
load => app_dial.so
; для записи разговоров
load => res_monitor.so
; для поддержки формата WAV
load => format_wav.so
; для поддержки формата MP3
load => format_mp3.so
; для записи статистики звонков в MySQL базу
load => cdr_mysql.so
; для включения функционала SNMP, например чтобы собирать статистику различными системами мониторинга
load => res_snmp.so
; для совершения вызовов из контекста помещаемых файлов в директорию /var/spool/asterisk/outgoing/
load => pbx_spool.so

Чтобы применить изменения в файле /etc/asterisk/modules.conf выполним команду из консоли Asterisk:

module reload

Если понадобится, сам Asterisk можно перезагрузить так:

sudo service asterisk restart

Оповещения Zabbix по телефону через Asterisk

Однажды ночью на станции отключились кондиционеры и начала подниматься температура, естественно мне пришли email уведомления на телефон, но так как была ночь, увидел я их только утром, поэтому понадобилось для таких экстренных случаев быстро сделать возможность уведомлений звонком на телефон.

Наведу пример варианта оповещений Zabbix используя телефонный вызов через Asterisk.

У Asterisk должен быть загружен модуль, для этого откроем файл конфигурации модулей, например в редакторе nano (Ctrl+X для выхода, y/n для сохранения или отмены изменений):

sudo nano /etc/asterisk/modules.conf

Читать далее «Оповещения Zabbix по телефону через Asterisk»