Snussi's home in the web space
Блог
Asterisk
Анекдоты
Нафигатор
Точка входа
Обрабатывающий входящий контекст
Категории
сервер
(1)
телефоны
(3)
диалплан
(14)
sip.conf
(6)
extensions.conf
(13)
внутренние номера
(8)
постановка задачи
(1)
начальная настройка
(2)
mysql
(6)
iax.conf
(2)
внешние номера
(2)
биллинг
(1)
php
(4)
прочее
(2)
факс
(1)
очередь
(1)
конференц-колл
(1)
features.conf
(1)
Входящий звонок
10.05.2011
Теперь начнем создавать контекст для входящих номеров. Для начала, один из своих SIP телефонов я перевел в другой контекст –
incoming
, на который в дальнейшем будут заведены входящие звонки, без добавочного номера. В контексте
incoming
мы будем использовать встроенное расширение
(входящий звонок без набора номера).
Точка входа
В моем случае, звонок может прийти с одной линии, но с разных номеров. При этом, логика обработки таких звонков тоже должна быть разная.
Если честно, я не очень представляю – как находить эти различия (т.к. пока что я не могу подключить внешнюю линию), да и логика набора мне понятна только для одного случая, но, в любом случае, это надо предусмотреть.
Сформируем задачу так:
при звонке на контекст incoming отправить его в контекст
incoming_rittal
[incoming]
; контекст для входящих извне звонков
exten => s,1,NoOp(incoming callerid ${CALLERID(NUM)})
; пока безо всяких условий перебросим звонок в
; контекст incoming_rittal
exten => s,n,Dial(Local/s@incoming_rittal)
exten => s,n,Hangup()
; если пришел звонок на неизвестный экстеншн, то рекурсивно
; вызовем себя без указания номера
exten => _X!,1,NoOp(unknown extension ${EXTEN} from ${CALLERID(NUM)})
exten => _X!,n,Dial(Local/s@incoming)
exten => _X!,n,Hangup()
Обрабатывающий входящий контекст
Именно этот контекст (
incoming_rittal
) возьмет на себя основной «удар» входящих звонков.
Пока при звонке на него будет возможно:
набрать
внутренний
номер на
или
набрать
трехзначный
номер, тогда будет проиграно сообщение о 4-значном номере и он будет набран с префиксом
нажать
, тогда звонок будет переведен на
секретарей
(эту функцию распишем позднее);
нажать
, тогда звонок будет отправлен на
факс
(эту функцию распишем позднее, т.к. я хочу протестировать астерисковский факс для этих целей);
если ничего не нажимать, звонок так же уйдет на секретарей.
При этом, сразу после набора должен проиграться звуковой файл, предлагающий понажимать на кнопки.
[incoming_rittal]
; основной входящий контекст для rittal
exten => s,1,NoOp(incoming_rittal from ${CALLERID(NUM)})
exten => s,n,Answer()
; запускаем в фоне сообщение о том, что можно сделать
exten => s,n,Background(rittal/intro)
; ждем 11 секунд - 9 - само сообщение,
; еще 2 секунды - на случай набора
exten => s,n,WaitExten(3)
; если набрали 0 - переводим на секретарей
exten => 0,1,Dial(Local/s@group_rittal_secretary,,m)
exten => 0,n,Hangup()
; если набрали 9 - переводим на софт-факс
exten => 9,1,Dial(Local/fax@group_rittal_softfax_receive)
exten => 9,n,Hangup()
; если набрали 3 цифры
; воспроизводим сообщение об ошибочном наборе
exten => _[2-8]XX,1,Playback(rittal/3_digits_old_number)
exten => _[2-8]XX,n,Macro(dial_internal_number,1${EXTEN})
exten => _[2-8]XX,n,Hangup()
; если набрали 4 цифры с 1 или 6
; то уводим в набор внутреннего номера
exten => _[16]XXX,1,Macro(dial_internal_number,${EXTEN})
exten => _[16]XXX,n,Hangup()
; в случае таймаута - переводим звонок в секретарский контекст
exten => t,1,Dial(Local/s@group_rittal_secretary,,m)
exten => t,n,Hangup()
; если набрали неизвестный экстеншн,Входящий звонок | Asterisk | Snussi's home in the web space
Материал перенесён из старой базы знаний ATC-IP и оформлен в едином стиле нового сайта.