Еще одна "неподкатная" статейка - как повторить последний набранный номер? Все просто...
Во-первых, если пошел набор реального номера, его нужно сохранить (в моем случае - в 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 => _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
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