Дома уже давно использую ip-телефонию вместо простого стационарного аппарата, и решил сделать себе «быстрый набор».
Быстрый набор при использовании сотового телефона — обычно это просто нажатие одной из десяти цифр на клавиатуре, и он сразу позвонит на определенный номер. Мы будем реализовывать быстрый набор «через звездочку». Что хотелось получить:
Получилось простое решение, которое дописал в контекст исходящих вызовов:
Первая строка — берет номер из внутренней базы данных, в моей ситуации из «fastdial/101/2», и возвращается в этот-же контекст, «как будто мы набрали этот номер».
Вторая строка — умеет сохранять в эту-же ячейку во внутренней базе данных.
После этого захотелось небольшой интерактивности:
Получилось такое:
Появились дополнительные возможности:
Примечание: у меня дома используется голосовой шлюз AddPac 190, и для быстрого набора пришлось немного дописать настройки, и изменить диал-план, чтоб не было паузы после набора номера:
В режиме конфигурирования:
Первая строка — по умолчанию у адпаков включен «прямой набор» по ip-адресу, когда можно набрать *192*168*1*1*5060, и позвонить по sip на этот адрес. Отключаем.
Остальное — правим диал-план, чтоб не было ожидания после набора короткой комбинации *X.
Быстрый набор при использовании сотового телефона — обычно это просто нажатие одной из десяти цифр на клавиатуре, и он сразу позвонит на определенный номер. Мы будем реализовывать быстрый набор «через звездочку». Что хотелось получить:
- *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.