FreePBX and timeconditions, bug
Добавлено: 20 ноя 2011, 19:26
Имеется FreePBX 2.9.0.7, asterisk 1.6.2.20.
Создан входящий маршрут от шлюза (DID=300), Направление - Правила по времени - Incoming calls.
Смотрим в контекст timeconditions:
Здесь интересуют 2 строки
[falsegoto] 4. GotoIf($["${TCMAINT}"!="RETURN"]?incoming-night,${EXTEN},1) [pbx_config]
[truegoto] 9. GotoIf($["${TCMAINT}"!="RETURN"]?incoming-day,${EXTEN},1) [pbx_config]
Так вот, выявлено, что при входящем в ${EXTEN} передается последний вызванный экстеншн (3). Пруф:
Собственно, может ли кто-нибудь подсказать, где исправить ${EXTEN} на ${FROM_DID} ? Перерыл все functions.inc.php (в /core и в /timeconditions), но в php не силен
PS: пока что выходом из ситуации стало прямое редактировние в SQL-таблице timeconditions значений truegoto и falsegoto.
Создан входящий маршрут от шлюза (DID=300), Направление - Правила по времени - Incoming calls.
Код: Выделить всё
Asterisk*CLI> dialplan show ext-did-0002
'300' => 1. Set(__FROM_DID=${EXTEN}) [pbx_config]
2. ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)})) [pbx_config]
3. Set(__CALLINGPRES_SV=${CALLERPRES()}) [pbx_config]
4. Set(CALLERPRES()=allowed_not_screened) [pbx_config]
[dest-ext] 5. Goto(timeconditions,3,1) [pbx_config]
Код: Выделить всё
[ Context 'timeconditions' created by 'pbx_config' ]
'3' => 1. GotoIfTime(09:00-19:59,mon-sun,*,*?truestate) [pbx_config]
[falsestate] 2. GotoIf($["${DB(TC/3):0:4}" = "true"]?truegoto) [pbx_config]
3. ExecIf($["${DB(TC/3)}" = "false"]?Set(DB(TC/3)=)) [pbx_config]
[falsegoto] 4. GotoIf($["${TCMAINT}"!="RETURN"]?incoming-night,${EXTEN},1) [pbx_config]
5. Set(TCSTATE=false) [pbx_config]
6. Return() [pbx_config]
[truestate] 7. GotoIf($["${DB(TC/3):0:5}" = "false"]?falsegoto) [pbx_config]
8. ExecIf($["${DB(TC/3)}" = "true"]?Set(DB(TC/3)=)) [pbx_config]
[truegoto] 9. GotoIf($["${TCMAINT}"!="RETURN"]?incoming-day,${EXTEN},1) [pbx_config]
10. Set(TCSTATE=true) [pbx_config]
11. Return() [pbx_config]
Include => 'timeconditions-custom' [pbx_config]
[falsegoto] 4. GotoIf($["${TCMAINT}"!="RETURN"]?incoming-night,${EXTEN},1) [pbx_config]
[truegoto] 9. GotoIf($["${TCMAINT}"!="RETURN"]?incoming-day,${EXTEN},1) [pbx_config]
Так вот, выявлено, что при входящем в ${EXTEN} передается последний вызванный экстеншн (3). Пруф:
Код: Выделить всё
-- Executing [300@from-trunk-sip-400:1] Set("SIP/400-00000024", "GROUP()=OUT_2") in new stack
-- Executing [300@from-trunk-sip-400:2] Goto("SIP/400-00000024", "from-trunk,300,1") in new stack
-- Goto (from-trunk,300,1)
-- Executing [300@from-trunk:1] Set("SIP/400-00000024", "__FROM_DID=300") in new stack
-- Executing [300@from-trunk:2] ExecIf("SIP/400-00000024", "0 ?Set(CALLERID(name)=400)") in new stack
-- Executing [300@from-trunk:3] Set("SIP/400-00000024", "__CALLINGPRES_SV=allowed_not_screened") in new stack
-- Executing [300@from-trunk:4] Set("SIP/400-00000024", "CALLERPRES()=allowed_not_screened") in new stack
-- Executing [300@from-trunk:5] Goto("SIP/400-00000024", "timeconditions,3,1") in new stack
-- Goto (timeconditions,3,1)
-- Executing [3@timeconditions:1] GotoIfTime("SIP/400-00000024", "09:00-19:59,mon-sun,*,*?truestate") in new stack
-- Goto (timeconditions,3,7)
-- Executing [3@timeconditions:7] GotoIf("SIP/400-00000024", "0?falsegoto") in new stack
-- Executing [3@timeconditions:8] ExecIf("SIP/400-00000024", "0?Set(DB(TC/3)=)") in new stack
-- Executing [3@timeconditions:9] GotoIf("SIP/400-00000024", "1?incoming-day,3,1") in new stack
-- Goto (incoming-day,3,1)
[Nov 20 19:17:30] WARNING[23152]: pbx.c:4416 __ast_pbx_run: Channel 'SIP/400-00000024' sent into invalid extension '3' in context 'incoming-day', but no invalid handler
PS: пока что выходом из ситуации стало прямое редактировние в SQL-таблице timeconditions значений truegoto и falsegoto.