Какое-то время тому назад я и сам не подозревал, что наряду с "традиционными" каналами типа SIP или DAHDI у Asterisk-а есть занятная магия под названием chan_local. А зря. Иногда бывает очень удобен. Особенно он полезен, когда нужно из extension-а сделать полноценный вызывающий либо вызываемый канал. Поясню на примере.
Задача. Сделать робо-будильник, который будет чётко по часам звонить на определенные номера и что-нибудь вещать.
Вообще это не проблема. Берём cron или systemd, вспоминаем про CLI Originate и колдуем себе на здоровье. Но теперь усложним задачу. Допустим, нам надо набирать не на один аппарат, а на два разных: где быстрее снимут трубку, туда и балакать. Кроме того, нам хочется что-то осмысленное писать в Caller ID. Вот тут-то и поможет Channel Local. Пример конфига extension-ов (extensions.conf).
Теперь из cron-а можно вызвать что-нибудь типа
И готово. Теперь каждый день ровно в полдень сработает cron. Через консоль asterisk-у подается команда инициировать вызов на канал Local с некоторыми параметрами. Которые говорят ему, что для создания такого канала надо пойти в диалплан "alarms" и начать выполнять extension номер два. После поднятия трубки на одном из SIP-устройств phone1 или phone2 данный канал направляется в диалплан "hints", где как будто бы "с другой стороны" снимают трубку и проигрывают в соединение голосовое сообщение из некоторого файла "SomeVoiceMessage".
У меня так работает напоминалка для дяди о необходимости принять очередную таблетку, которые необходимо хавать пять раз в сутки строго по расписанию.