Чтобы разгрузить секретаря, на которого валится множество вызовов с голосового меню решил сделать умную маршрутизацию чтобы вызовы клиентов направлять на звонивших им операторов, в том числе полезно учитывая множество переадресаций на сотовые в компании.
Решил зайдествовать func_odbc - добавляем в файл /etc/asterisk/func_odbc.conf:
; это уже должно быть там
[general]
dsn=asteriskcdrdb
prefix=ODBC
;а это наша функция
[MOBILE]
writehandle=asteriskcdrdb
synopsis=The function searches for the extension that last dialed this number.
syntax=${CALLERID(number):-10}
readsql=SELECT cnum FROM cdr WHERE dst like '%${ARG1}' ORDER BY calldate DESC LIMIT 1
Добавляем в /etc/asterisk/extensions_custom.conf:
[smart-forwarding]
exten => s,1,NoOP(smart forwarding to the reception from ${CALLERID(number)})
same => n,Set(NUM=${ODBC_MOBILE(${CALLERID(number):-10})})
same => n,NoOP(Number is ${NUM})
same => n,GotoIf($["${NUM}"=""]?secretar:oper)
same => n(oper),Playback(silence/1)
same => n,SayDigits(${NUM})
same => n,Goto(ext-local,${NUM},1)
same => n,Hangup()
same => n(secretar),Goto(ext-group,060,1)
same => n,Hangup()
Где через функцию мы находим номер оператора, при нахождении - озвучиваем его номер и
соединяем, не находим - соединяем с секретарем (у меня группа 060, для внутреннего 100
будет ext-local,100,1
).
Теперь во FreePBX выбираем Admin -> Custom Destinations и добавляем:
И теперь в нужном IVR по тайм-ауту выбираем созданный smart forwarding. Ну и конечно же всё применить - это пересоздаст диалплан и перечитает его.