Направление входящего вызова на последнего абонента
Добавлено: 28 июн 2022, 18:07
Добрый день. Задача. Направление входящего вызова на последнего абонента (сотрудника) , который общался с ним в течение дня.
взял за основу эту статью https://voxlink.ru/kb/asterisk-configur ... -abonenta/
добавил в /var/www/html/admin/modules/core/etc/extensions.conf
следующий код
;----------для направления входящего вызова на последнего абонента
[sub-dial-last-caller]
exten => s,1,GotoIf($[${LEN(${CALLERID(num)})} < 10]?end)
same => n,Set(LC_MYSQL_DATE_FROM=${STRFTIME(${EPOCH},,%Y-%m-%d)} 00:00:00)
same => n,Set(ARRAY(LC_LAST_CALL_SRC,LC_LAST_CALL_RESULT,LC_LAST_CALL_BILLSEC,LC_LAST_CALL_CHANNEL)=${ODBC_LAST_OUTBOUND_CALL_TO_NUMBER(${CALLERID(num)},${LC_MYSQL_DATE_FROM})})
same => n,GotoIf($[«${LC_LAST_CALL_SRC}» = «»]?end)
same => n,Set(LC_TARGET_DEVICE=${CUT(LC_LAST_CALL_CHANNEL,\-,1)})
same => n,GotoIf($[«${LC_TARGET_DEVICE}» = «»]?end)
same => n,GotoIf($[«${EXTENSION_STATE(${LC_LAST_CALL_SRC}@ext-local)}» != «NOT_INUSE»]?end)
same => n,GotoIf($[«${LC_LAST_CALL_RESULT}» = «ANSWERED» & ${LC_LAST_CALL_BILLSEC} > 4]?end)
same => n,Macro(user-callerid)
same => n,Gosub(sub-record-check,s,1(in,${LC_LAST_CALL_SRC},yes))
same => n,Set(DIALSTATUS=)
same => n,Dial(${LC_TARGET_DEVICE},15,t)
same => n,ExecIf($[«${DIALSTATUS}» = «ANSWER»]?Hangup)
same => n(end),Return
;-------------------------------------------------------------------------------
[sub-fix-cid]
exten => s,1,GotoIf($[${REGEX(«^[0-9]{3}$» ${CALLERID(num)})} = 0]?cont1)
same => n,Set(CALLERID(num)=3752${CALLERID(num)})
same => n,Set(CALLERID(ANI-num)=${CALLERID(num)})
same => n,Goto(end)
same => n(cont1),GotoIf(${REGEX(«^[78]?[2-9][0-9]{9}$» ${CALLERID(num)})}?fix_cid)same => n,GotoIf(${REGEX(«^\+?3[2-9][0-9]{9}$» ${CALLERID(num)})}?fix_cid)
same => n,Goto(end)
same => n(fix_cid),Set(CALLERID(num)=3${CALLERID(num):-10})
same => n,Set(CALLERID(ANI-num)=${CALLERID(num)})
same => n(end),Return
;----------самописный контекст для вызова функций "приведения номера к виду и поиск номера в базе"
[from-trunk-pre]
exten => _X.,1,Set(PRE_DID_NUM=${EXTEN})
same => n,Goto(process,1)
exten => _+X.,1,Set(PRE_DID_NUM=${EXTEN})
same => n,Goto(process,1)
exten => process,1,Gosub(sub-fix-cid,s,1)
same => n,Gosub(sub-dial-last-caller,s,1)
same => n,Goto(from-trunk,${PRE_DID_NUM},1)
в итоге при входящем вызове сразу получаю
[2022-06-28 16:50:09] VERBOSE[1252][C-00000020] pbx.c: Executing [999@from-trunk-pre:1] Set("PJSIP/TG400_MTS_37533XXXXX5-0000001f", "DID_NUM=999") in new stack
[2022-06-28 16:50:09] VERBOSE[1252][C-00000020] pbx.c: Executing [999@from-trunk-pre:2] Goto("PJSIP/TG400_MTS_37533XXXXX5-0000001f", "process,1") in new stack
[2022-06-28 16:50:09] VERBOSE[1252][C-00000020] pbx_builtins.c: Goto (from-trunk-pre,process,1)
[2022-06-28 16:50:09] WARNING[1252][C-00000020] pbx.c: Channel 'PJSIP/TG400_MTS_37533XXXXX5-0000001f' sent to invalid extension but no invalid handler: context,exten,priority=from-trunk-pre,process,1
подскажите знающие в чем прикол , вроде бы по логике все верно
контекст для транка указываю from-trunk-pre
взял за основу эту статью https://voxlink.ru/kb/asterisk-configur ... -abonenta/
добавил в /var/www/html/admin/modules/core/etc/extensions.conf
следующий код
;----------для направления входящего вызова на последнего абонента
[sub-dial-last-caller]
exten => s,1,GotoIf($[${LEN(${CALLERID(num)})} < 10]?end)
same => n,Set(LC_MYSQL_DATE_FROM=${STRFTIME(${EPOCH},,%Y-%m-%d)} 00:00:00)
same => n,Set(ARRAY(LC_LAST_CALL_SRC,LC_LAST_CALL_RESULT,LC_LAST_CALL_BILLSEC,LC_LAST_CALL_CHANNEL)=${ODBC_LAST_OUTBOUND_CALL_TO_NUMBER(${CALLERID(num)},${LC_MYSQL_DATE_FROM})})
same => n,GotoIf($[«${LC_LAST_CALL_SRC}» = «»]?end)
same => n,Set(LC_TARGET_DEVICE=${CUT(LC_LAST_CALL_CHANNEL,\-,1)})
same => n,GotoIf($[«${LC_TARGET_DEVICE}» = «»]?end)
same => n,GotoIf($[«${EXTENSION_STATE(${LC_LAST_CALL_SRC}@ext-local)}» != «NOT_INUSE»]?end)
same => n,GotoIf($[«${LC_LAST_CALL_RESULT}» = «ANSWERED» & ${LC_LAST_CALL_BILLSEC} > 4]?end)
same => n,Macro(user-callerid)
same => n,Gosub(sub-record-check,s,1(in,${LC_LAST_CALL_SRC},yes))
same => n,Set(DIALSTATUS=)
same => n,Dial(${LC_TARGET_DEVICE},15,t)
same => n,ExecIf($[«${DIALSTATUS}» = «ANSWER»]?Hangup)
same => n(end),Return
;-------------------------------------------------------------------------------
[sub-fix-cid]
exten => s,1,GotoIf($[${REGEX(«^[0-9]{3}$» ${CALLERID(num)})} = 0]?cont1)
same => n,Set(CALLERID(num)=3752${CALLERID(num)})
same => n,Set(CALLERID(ANI-num)=${CALLERID(num)})
same => n,Goto(end)
same => n(cont1),GotoIf(${REGEX(«^[78]?[2-9][0-9]{9}$» ${CALLERID(num)})}?fix_cid)same => n,GotoIf(${REGEX(«^\+?3[2-9][0-9]{9}$» ${CALLERID(num)})}?fix_cid)
same => n,Goto(end)
same => n(fix_cid),Set(CALLERID(num)=3${CALLERID(num):-10})
same => n,Set(CALLERID(ANI-num)=${CALLERID(num)})
same => n(end),Return
;----------самописный контекст для вызова функций "приведения номера к виду и поиск номера в базе"
[from-trunk-pre]
exten => _X.,1,Set(PRE_DID_NUM=${EXTEN})
same => n,Goto(process,1)
exten => _+X.,1,Set(PRE_DID_NUM=${EXTEN})
same => n,Goto(process,1)
exten => process,1,Gosub(sub-fix-cid,s,1)
same => n,Gosub(sub-dial-last-caller,s,1)
same => n,Goto(from-trunk,${PRE_DID_NUM},1)
в итоге при входящем вызове сразу получаю
[2022-06-28 16:50:09] VERBOSE[1252][C-00000020] pbx.c: Executing [999@from-trunk-pre:1] Set("PJSIP/TG400_MTS_37533XXXXX5-0000001f", "DID_NUM=999") in new stack
[2022-06-28 16:50:09] VERBOSE[1252][C-00000020] pbx.c: Executing [999@from-trunk-pre:2] Goto("PJSIP/TG400_MTS_37533XXXXX5-0000001f", "process,1") in new stack
[2022-06-28 16:50:09] VERBOSE[1252][C-00000020] pbx_builtins.c: Goto (from-trunk-pre,process,1)
[2022-06-28 16:50:09] WARNING[1252][C-00000020] pbx.c: Channel 'PJSIP/TG400_MTS_37533XXXXX5-0000001f' sent to invalid extension but no invalid handler: context,exten,priority=from-trunk-pre,process,1
подскажите знающие в чем прикол , вроде бы по логике все верно
контекст для транка указываю from-trunk-pre