Имя переменной где лежит значение -${DIALSTATUS}
//Ответ на звонок получен. Удачный дозвон. ANSWER //Сигнал занято. При наборе номера возвращено сообщение о занятости абонента. BUSY //Нет ответа. Дозвон произошел, но абонент не ответил за определенное время NOANSWER //Звонок отменен. Дозвонились, но повесили трубку либо Вы ли с другой стороны CANCEL //Неизвестен адресат. Номер не определен. CONGESTION //Канал для звонков недоступен. Скорее всего удаленный пир не зарегистрирован. CHANUNAVAIL //Приватный режим, типа "Не беспокоить" DONTCALL //Приватный режим, все входящие звонки отправляются на некий сервис, который их обслужит TORTURE //Ошибка, неверно набранный номер (добавлено в Asterisk 1.4.1, SVN r53135-53136) INVALIDARGS
Пример использования
exten => _600,n, Goto(${EXTEN}-${DIALSTATUS},1)
-----------------------------
Если созвонились
exten => 600-ANSWER,1, Hangup
-----------------------------
; NOANSWERED
Если никто не ответил последовательность голосовых сообщений. Каждое сообщение отдельно.
; Первое сообщшение - абонент не отвечает
exten => 600-NOANSWER,1, Playback(user-not-answer)
; Далее - чтобы связаться с абонентом по сотовому телефону
exten => 600-NOANSWER,n, Playback(dial-to-mobile)
; Далее - оставайтесь на линии
exten => 600-NOANSWER,n, Playback(keep-online)
exten => 600-NOANSWER,n, Wait(5)
; Вместо XXXXXXXXXX - указываем номер мобильного
exten => 600-NOANSWER,n, GoTo(XXXXXXXXXX,1)
;CHANUNAVAILABLE
;Если абонент недоступен (не зарегистрирован на сервере)
; Проигрываем - абонент недоступен
exten => 600-CHANUNAVAIL,n, Playback(user-unavailabel)
; Проигрываем - чтобы связаться с абонентом по сотовому телефону
exten => 600-CHANUNAVAIL,n, Playback(dial-to-mobile)
; Проигрываем - оставайтесь на линии
exten => 600-CHANUNAVAIL,n, Playback(keep-online)
exten => 600-CHANUNAVAIL,n, Wait(5)
; Вместо XXXXXXXXXX - указываем номер мобильного
exten => 600-CHANUNAVAIL,n, GoTo(XXXXXXXXXX,1)
По аналогии и остальные статусы обрабатываются.
Опубликовано 2012-03-05 11:06:00
Находится в поиске с названиями
[globals]
; Тут установле некто TEST, с номером 101 чтобы можно было посмотреть результат GotoIf( )
; если результат не TRUE
TEST=101
;
[incoming]
; устанавливаем переменные
; с приоритетом 10 если ${TEST} с номером 101, иначе уходим на приоритет 20
exten => 123,1,GotoIf($[ ${TEST} = 101 ]?10:20)
exten => 123,10,Playback(название звукового файла)
exten => 123,20,Playback(название звукового файла)
Опубликовано 2012-03-05 10:51:00
Находится в поиске с названиями
Итак, схема моего построения выглядит так

Как видно из схемы, часть пользователей зарегистрировано на cisco 3825, а часть на asterisk 1.6. Но, автодозвон должен быть доступен как для тех, кто зарегистрирован на CISCO так и для тех, кто зарегистрирован на Asterisk. Итак я сделал все это следующим образом:
- Создал правило на CISCO, в котором сказано, что "Все кто набирает 33T" убегают на asterisk по SIP и им еще на выходе дописывается опознавательный код ( может потом понадобится )
-
На Asterisk создано правило, прописано в /etc/asterisk/extension_custom.conf. Выглядит следующим образом:
exten => _33.,1,Dial(Local/${EXTEN:2}@from-internal,10,tr) exten => _33.,2,GotoIF($[ "${DIALSTATUS}" == "ANSWER" ]?end) exten => _33.,n,GotoIF($[ "${DIALSTATUS}" == "ANSWERED" ]?end) exten => _33.,n,GotoIF($[ ${CDR(billsec)} >0 ]?end) exten => _33.,n,Wait(10) exten => _33.,n,Goto(${EXTEN},1) exten => _33.,n(end),Hangup
exten => _33.,1,Dial(Local/${EXTEN:2}@from-internal,10,tr)
Я использовал tr чтобы пользователь с ума не сходил от постоянного пиликанья "BUSY" в линии.
Итак, у меня до этого было сформировано правило, по которому звонящий - набравший 0 в начале отправлялся в транк который смотрел в сторону той же CISCO 3825 и там уже отрезался 0 и номер кидался в E1 для выхода в город. Соответсвенно тут происходил набор 33 + 0 + номер производился дозвон. По расширению 33 Asterisk определял - что надо повторять до посинения звонки. P.S. Ко всему этому замечу, что все это делалось на конфигурации Asterisk "по-умолчанию"
Опубликовано 2011-10-23 19:39:00
Находится в поиске с названиями
Ну собственно, вот пример как перекодировать звук из WAV в ALAW
rasterisk -x \ "file convert /var/spool/asterisk/tmp/585-ivrrecording.wav /var/spool/asterisk/tmp/test.alaw"
Опубликовано 2011-07-15 15:48:00
Находится в поиске с названиями
Рабочий пример для asterisk 1.6
Мне надо было сделать следующее:
- Звонит кто-то из сотрудников АйТи отдела на номер 4000
- Asterisk проверяет номер звонящего и в соответствии с правилами
либо отправляет его на выполнение пинга либо отправляет на "Вы ошиблись номером"
Для краткости, вот что надо
; Это контекст откуда происходит вызов
[from-sip-external]
; Тут я просто наблюдаю за номерами, которые звонят
exten => 4000,1,NoOP(${CALLERID(all)})
exten => 4000,2,NoOP(${CALLERID(num)})
; Здесь происходит проверка на два номера 511 и 510.
; Если да, то они уходят на приоритет 4, в противном случае уходят на приоритет 9
exten => 4000,3,GotoIf($[ $["${CALLERID(num)}" == "511"] || $["${CALLERID(num)}" == "510"]]?4:9)
; Ну собственно если таки 511 или 510 то мы исполняем
; с помощью System /bin/ping, складываем результат в /home/ping.txt
exten => 4000,4,System(/bin/ping google.com.ua -c 4 > /home/ping.txt)
; Потом отправляем на почту
exten => 4000,5,System(/bin/mail -s 'Ping RESULT' it@имядомена.com.ua < /home/ping.txt)
; Убегаем на Hangup()
exten => 4000,6,Goto(10)
; Тут мы говорим тем кто 511 или 510 что надо дескать пароль ввести ....
; дальше не разгонялся, учился воспроизводить сообщения. Событие необходимое было исполнено выше.
exten => 4000,7,Playback(agent-pass)
exten => 4000,8,Wait(10)
; А вот тем кто не 511 или 510 мы сообщаем что номер некорректный
exten => 4000,9,Playback(incorect-number)
; И ложим трубку
exten => 4000,10,Hangup()
Опубликовано 2011-07-15 13:20:00
Находится в поиске с названиями