Страница 1 из 1

FreePBX and timeconditions, bug

Добавлено: 20 ноя 2011, 19:26
aizek
Имеется FreePBX 2.9.0.7, asterisk 1.6.2.20.
Создан входящий маршрут от шлюза (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]
Смотрим в контекст timeconditions:

Код: Выделить всё

[ 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]
Здесь интересуют 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). Пруф:

Код: Выделить всё

    -- 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
Собственно, может ли кто-нибудь подсказать, где исправить ${EXTEN} на ${FROM_DID} ? Перерыл все functions.inc.php (в /core и в /timeconditions), но в php не силен :(
PS: пока что выходом из ситуации стало прямое редактировние в SQL-таблице timeconditions значений truegoto и falsegoto.

Re: FreePBX and timeconditions, bug

Добавлено: 20 ноя 2011, 20:45
zzuz
А 'incoming-day' случаем не кастомный контекст?

Re: FreePBX and timeconditions, bug

Добавлено: 20 ноя 2011, 21:14
aizek
Да, создан через Custom Context

Re: FreePBX and timeconditions, bug

Добавлено: 20 ноя 2011, 22:10
ded
Не хотите попробовать сделать всё через вэб интерфейс? Модули Time groups & Time condition.

Re: FreePBX and timeconditions, bug

Добавлено: 20 ноя 2011, 22:21
aizek
В Time Group создано две группы:
incoming-day & incoming-night (вторая вобщем-то не используется пока)

В Time condition создано 1 правило с Time Group - incoming-day, в котором

Destination if time matches: Custom Context - INCOMING DAY
Destination if time does not match: Custom Context - INCOMING NIGHT

Re: FreePBX and timeconditions, bug

Добавлено: 20 ноя 2011, 23:00
ded
Зачем Custom Context - INCOMING DAY & INCOMING NIGHT?
Что такого специального потребовало создания особых сценариев Custom Context?

Re: FreePBX and timeconditions, bug

Добавлено: 21 ноя 2011, 06:14
aizek
Немного разная обработка входящих в рабочее и в нерабочее время. Поэтому захотелось раскидать по incoming-day-custom&incoming-night-custom. Разве Custom Context нужен только для создания from-internal-custom?

Re: FreePBX and timeconditions, bug

Добавлено: 21 ноя 2011, 11:18
ded
Я догадался, что нужна разная обработка. Хотя это очевидно.

Упростите схему для тестирования - входящий у Вас кидает на [dest-ext] 5. Goto(timeconditions,3,1)
где покрутите по простым сценариям
[falsegoto] 4. GotoIf($["${TCMAINT}"!="RETURN"]?- направить на внутр. экстен или группу, а
[truegoto] 9. GotoIf($["${TCMAINT}"!="RETURN"]? [pbx_config] на Music on Hold например, и потестируйте.

Re: FreePBX and timeconditions, bug

Добавлено: 21 ноя 2011, 21:04
aizek
[falsegoto] 4. GotoIf($["${TCMAINT}"!="RETURN"]? - направлял на внутренний экст-н и очередь и МоН - работает
[truegoto] 9. GotoIf($["${TCMAINT}"!="RETURN"]? - также работает при смене на любое другое назначение

Re: FreePBX and timeconditions, bug

Добавлено: 21 ноя 2011, 21:12
ded
Таким образом экспериментально доказано, что в timeconditions нету bug.
А он где-то в
Destination if time matches: Custom Context - INCOMING DAY
Destination if time does not match: Custom Context - INCOMING NIGHT