Повтор последнего номера 19.05.2011

Еще одна "неподкатная" статейка - как повторить последний набранный номер? Все просто...

Во-первых, если пошел набор реального номера, его нужно сохранить (в моем случае - в AstDB).

Я вписал в контекст набора номера с SIP телефона следующую строчку (она в середине):

; это не набор системной функции, а набор номера
exten => _X.,1,NoOp(transfer to internal_phones_outgoing_dial)

; Записываем номер в AstDB
exten => _X.,n,Set(DB(last_dial/${CALLERID(NUM)})=${EXTEN})

exten => _X.,n,Gosub(internal_phones_outgoing_dial,${EXTEN},1)

Во-вторых, при наборе системного номера (в моем случае - **) этот номер нужно восстановить из базы и набрать:

; ** - повтор последнего номера
exten => **,1,NoOp(system functions - redial)
; если номер не задан, то уходим на возврат
exten => **,n,GotoIF($["${DB(last_dial/${CALLERID(NUM)})}" = ""]?end)
; набираем номерок
exten => **,n,Gosub(internal_phones_outgoing_dial,${DB(last_dial/${CALLERID(NUM)})},1)
exten => **,n(end),Return