Переадресация с внешним CallerID при помощи диалплана
Назначение
Подстановка CallerID внешнего абонента при переадресации принятого вызова на другой внутренний номер.
Описание
В данном примере, функция DB вычисляет длину CallerID вызывающего абонента и если длина более 3-х знаков,
определяет callerid, как внешний и устанавливает его для передачи в качестве CallerID внутреннего абонента, если вызов, в дальнейшем, будет переадресован.
По завершении вызова, фальшивое CALLTRACE очищается при помощи функции DB_DELETE.
(опция 'e', команды Dial, указывает выполнить расширение 'h', по завершению вызова.)
В примере: внутренние номера 1ХХ, вызовы из контекста [from-internal]
[from-internal] exten => _1XX,1,Noop(+++set external callerid +++) exten => _1XX,n,GoSub(sub-transfer_external_cid,${EXTEN},1(${CALLERID(num)},${EXTEN}))
[sub-transfer_external_cid] exten => _XXX,1,Noop(~~~http://asterisk-pbx.ru~~~) exten => _XXX,n,Set(cidint=${ARG1}) exten => _XXX,n,GotoIf($[${LEN(${DB(CALLTRACE/${ARG1})})} > 3]?external:internal) exten => _XXX,n(external),Set(CALLERID(num)=${DB(CALLTRACE/${ARG1})}) exten => _XXX,n,Dial(SIP/${ARG2},,Tte) exten => _XXX,n(internal),Dial(SIP/${ARG2},,Tteo) exten => h,1,Set(DB_DELETE(CALLTRACE/${cidint})=ignored)
См. также Option app DIAL(,,o)