Pull to refresh

Быстрый набор в asterisk

Дома уже давно использую ip-телефонию вместо простого стационарного аппарата, и решил сделать себе «быстрый набор».


Быстрый набор при использовании сотового телефона — обычно это просто нажатие одной из десяти цифр на клавиатуре, и он сразу позвонит на определенный номер. Мы будем реализовывать быстрый набор «через звездочку». Что хотелось получить:
  • *2 — быстрый набор на номер из «второй ячейки»;
  • **2 84957555755 — записать нужный номер во «вторую ячейку».

Получилось простое решение, которое дописал в контекст исходящих вызовов:
exten => _*X,1,Goto(${DB(fastdial/${CALLERID(num)}/${EXTEN:1})},1)
exten => _**X.,1,Set(DB(fastdial/${CALLERID(num)}/${EXTEN:2:1})=${EXTEN:3})

Первая строка — берет номер из внутренней базы данных, в моей ситуации из «fastdial/101/2», и возвращается в этот-же контекст, «как будто мы набрали этот номер».
Вторая строка — умеет сохранять в эту-же ячейку во внутренней базе данных.

После этого захотелось небольшой интерактивности:
  • чтоб он мог проговаривать номер, на который установлен быстрый набор;
  • возможность удаления быстрого набора
  • если пытаюсь позвонить на не установленную цифру быстрого набора — сообщал мне об этом.


Получилось такое:
; fast dial 10
exten => _*X,1,GotoIf($[ "${DB(fastdial/${CALLERID(num)}/${EXTEN:1})}" != "" ]?${DB(fastdial/${CALLERID(num)}/${EXTEN:1})},1)
exten => _*X,n,Playback(tt-weasels) ; если не установлен быстрый набор - произносим об этом сообщение

; установка быстрого набора, **2 84957555755
exten => _**X.,1,Set(DB(fastdial/${CALLERID(num)}/${EXTEN:2:1})=${EXTEN:3})
exten => _**X.,n,Playback(auth-thankyou) ; говорим "спасибо" за то что установили быстрый набор

; удаление быстрого набора, **2 0
exten => _**X0,1,NoOp(${DB_DELETE(fastdial/${CALLERID(num)}/${EXTEN:2:1})})
exten => _**X0,n,Playback(vm-deleted) ; говорим что "номер удален"

; произнесение номера, куда установлен быстрый набор, **2
exten => _**X,1,Answer
exten => _**X,n,Wait(2)
exten => _**X,n,SayDigits(${DB(fastdial/${CALLERID(num)}/${EXTEN:2:1})})


Появились дополнительные возможности:
  • *2 0 — удалить клавишу быстрого набора;
  • *2 — произнести номер, на который установлен быстрый набор;
  • и научили говорить о выполненных событиях.

Примечание: у меня дома используется голосовой шлюз AddPac 190, и для быстрого набора пришлось немного дописать настройки, и изменить диал-план, чтоб не было паузы после набора номера:
В режиме конфигурирования:
dial-peer ipaddr-prefix n
!
dial-peer voice 14 voip
 destination-pattern [*][0-9]
 session target sip-server
 session protocol sip
 voice-class codec 1
 dtmf-relay rtp-2833
 no vad
!
dial-peer voice 15 voip
 destination-pattern [*][*]T
 session target sip-server
 session protocol sip
 voice-class codec 1
 dtmf-relay rtp-2833
 no vad
!

Первая строка — по умолчанию у адпаков включен «прямой набор» по ip-адресу, когда можно набрать *192*168*1*1*5060, и позвонить по sip на этот адрес. Отключаем.
Остальное — правим диал-план, чтоб не было ожидания после набора короткой комбинации *X.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.