Astersik channel local

Sep 12, 2019 23:29


Какое-то время тому назад я и сам не подозревал, что наряду с "традиционными" каналами типа SIP или DAHDI у Asterisk-а есть занятная магия под названием chan_local. А зря. Иногда бывает очень удобен. Особенно он полезен, когда нужно из extension-а сделать полноценный вызывающий либо вызываемый канал. Поясню на примере.

Задача. Сделать робо-будильник, который будет чётко по часам звонить на определенные номера и что-нибудь вещать.

Вообще это не проблема. Берём cron или systemd, вспоминаем про CLI Originate и колдуем себе на здоровье. Но теперь усложним задачу. Допустим, нам надо набирать не на один аппарат, а на два разных: где быстрее снимут трубку, туда и балакать. Кроме того, нам хочется что-то осмысленное писать в Caller ID. Вот тут-то и поможет Channel Local. Пример конфига extension-ов (extensions.conf).
[alarms]
exten => 2,1,Set(CALLERID(all)="Budilnik <100>")
exten => 2,2,Dial(SIP/phone1&SIP/phone2,60)

[hints]
exten => 123,1,Answer()
exten => 123,n,Wait(1)
exten => 123,n,Playback(SomeVoiceMessage)
exten => 123,n,Hangup()

Теперь из cron-а можно вызвать что-нибудь типа
00 12 * * * /usr/sbin/asterisk -rx 'channel originate Local/2@alarms/n extension 123@hints'
И готово. Теперь каждый день ровно в полдень сработает cron. Через консоль asterisk-у подается команда инициировать вызов на канал Local с некоторыми параметрами. Которые говорят ему, что для создания такого канала надо пойти в диалплан "alarms" и начать выполнять extension номер два. После поднятия трубки на одном из SIP-устройств phone1 или phone2 данный канал направляется в диалплан "hints", где как будто бы "с другой стороны" снимают трубку и проигрывают в соединение голосовое сообщение из некоторого файла "SomeVoiceMessage".

У меня так работает напоминалка для дяди о необходимости принять очередную таблетку, которые необходимо хавать пять раз в сутки строго по расписанию.

hints, asterisk

Previous post Next post
Up