Отбой после второго цикла по экстеншену.
Добавлено: 21 апр 2015, 10:19
Добрый день уважаемые форумчане!
Мне нужно настроить звонок на случайному номер из определенного списка. Причем звонок будет уходить через транк на стороннюю атс (фирмы alcatel). Все эти номера уже работают как агенты алкателевского колл-центра. Звонки с астериска имеют особенность – агент должен услышать сообщение информирующее его о том, что звонок необычный. На алкателе невозможно воспроизвести сообщение агенту, поэтому пришлось выкручиваться с помощью астериска. Написал следующий диалплан:
Здесь rnd.php случайным образом выбирает номер из массива. В случае дозвона воспроизводим сообщение с помощью макроса “privet”. Если из транка вернулся статус занято, перегрузка и т.д. заново генерим номер и снова пытаемся дозвонится. По данному алгоритму заработало, за исключением небольшого бага. Идет звонок – агент не берет трубку, диаплан отрабатывает заново и идет звонок второму случайному агенту. Если и второй агент не берет трубку, тогда происходит отбой. А может быть это вовсе не баг, а защита от дурака такая. Вот что происходит в консоли в это время:
Помогите пожалуйста разобраться.
ЗЫ
Звонок создается колл-файлом, поэтому он инициарован через Local-channel
Связь с алкатель через chan_h323, однако и сип ведет себя аналогично.
Можно конечно размножить кусок диаплана с рандомным звонком, но не хочется ставить костыль.
Мне нужно настроить звонок на случайному номер из определенного списка. Причем звонок будет уходить через транк на стороннюю атс (фирмы alcatel). Все эти номера уже работают как агенты алкателевского колл-центра. Звонки с астериска имеют особенность – агент должен услышать сообщение информирующее его о том, что звонок необычный. На алкателе невозможно воспроизвести сообщение агенту, поэтому пришлось выкручиваться с помощью астериска. Написал следующий диалплан:
Код: Выделить всё
[callback]
exten => 1,1, GoSub(SUB_CALLBACK,start,1)
same => n, GotoIf($[$["${DIALSTATUS}" = "BUSY"] | $["${DIALSTATUS}" = "CONGESTION"] | $["${DIALSTATUS}" = "CHANUNAVAIL"] | $["${DIALSTATUS}" = "NOANSWER"] | $["${DIALSTATUS}" = "FAILED"]]?agian)
same => n(agian),GoSub(SUB_CALLBACK,start,1)
same => n, Hangup()
[SUB_CALLBACK]
exten => start,1, AGI(/scripts/rnd.php)
same => n, Set(nmbr=${rnd_num})
same => n, Dial(H323/${nmbr}@alcatel,90,t|5|M(privet))
same => n, GotoIf($[$["${DIALSTATUS}" = "BUSY"] | $["${DIALSTATUS}" = "CONGESTION"] | $["${DIALSTATUS}" = "CHANUNAVAIL"] | $["${DIALSTATUS}" = "NOANSWER"] | $["${DIALSTATUS}" = "FAILED"]]?agian)
same => n(agian), Goto(start,1)
same => n, Hangup()
[macro-privet]
exten => s,1, AGI(google_voice.php,"Тескт сообщения для оператора")
same => n, Playback(${GVOICE})
Код: Выделить всё
asterisk*CLI> //////ПЕРВЫЙ ЗВОНОК
-- Attempting call on Local/1@callback for 89105554433@contex-for-tests:1 (Retry 1)
-- Executing [1@callback:1] Gosub("Local/1@callback-0000000f;2", "SUB_CALLBACK,start,1") in new stack
-- Executing [start@SUB_CALLBACK:1] AGI("Local/1@callback-0000000f;2", "/scripts/rnd.php") in new stack
-- Launched AGI Script /scripts/rnd.php
-- <Local/1@callback-0000000f;2>AGI Script /scripts/rnd.php completed, returning 0
-- Executing [start@SUB_CALLBACK:2] Set("Local/1@callback-0000000f;2", "nmbr=5715") in new stack
-- Executing [start@SUB_CALLBACK:3] Dial("Local/1@callback-0000000f;2", "H323/5715@alcatel,90,t|10|M(privet)") in new stack
== Using H323 RTP TOS bits 184
== Using H323 RTP CoS mark 6
== Using UDPTL TOS bits 184
== Using UDPTL CoS mark 6
-- Requested transfer capability: 0x00 - SPEECH
-- Called H323/5715@alcatel
-- H323/alcatel-73 is ringing
-- H323/alcatel-73 is ringing
-- H323/alcatel-73 is making progress passing it to Local/1@callback-0000000f;2
asterisk*CLI>
asterisk*CLI> //////ВТОРОЙ ЗВОНОК
== Everyone is busy/congested at this time (1:1/0/0)
-- Executing [start@SUB_CALLBACK:4] GotoIf("Local/1@callback-0000000f;2", "1?again") in new stack
-- Goto (SUB_CALLBACK,start,5)
-- Executing [start@SUB_CALLBACK:5] Goto("Local/1@callback-0000000f;2", "start,1") in new stack
-- Goto (SUB_CALLBACK,start,1)
-- Executing [start@SUB_CALLBACK:1] AGI("Local/1@callback-0000000f;2", "/scripts/rnd.php") in new stack
-- Launched AGI Script /scripts/rnd.php
-- <Local/1@callback-0000000f;2>AGI Script /scripts/rnd.php completed, returning 0
-- Executing [start@SUB_CALLBACK:2] Set("Local/1@callback-0000000f;2", "nmbr=5160") in new stack
-- Executing [start@SUB_CALLBACK:3] Dial("Local/1@callback-0000000f;2", "H323/5160@alcatel,90,t|10|M(privet)") in new stack
== Using H323 RTP TOS bits 184
== Using H323 RTP CoS mark 6
== Using UDPTL TOS bits 184
== Using UDPTL CoS mark 6
-- Requested transfer capability: 0x00 - SPEECH
-- Called H323/5160@alcatel
-- H323/alcatel-74 is ringing
-- H323/alcatel-74 is ringing
-- H323/alcatel-74 is making progress passing it to Local/1@callback-0000000f;2
asterisk*CLI>
asterisk*CLI> //////Гудбай
== Spawn extension (SUB_CALLBACK, start, 3) exited non-zero on 'Local/1@callback-0000000f;2'
> [INSERT INTO cdr (calldate,clid,src,dst,dcontext,channel,lastapp,lastdata,duration,billsec,disposition,amaflags,uniqueid) VALUES ({ ts '2015-04-21 09:17:51' },'89105554433','89105554433','89105554433','contex-for-tests','Local/1@callback-0000000f;1','Dial','Local/1@callback',0,0,'FAILED',3,'1429597041.112')]
[Apr 21 09:17:51] WARNING[4221][C-0000000f]: pbx.c:6643 __ast_pbx_run: Channel 'OutgoingSpoolFailed' sent to invalid extension but no invalid handler: context,exten,priority=contex-for-tests-recorded,failed,1
> [INSERT INTO cdr (calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition,amaflags,uniqueid) VALUES ({ ts '2015-04-21 09:17:21' },'89105554433','89105554433','start','SUB_CALLBACK','Local/1@callback-0000000f;2','H323/alcatel-74','Dial','H323/5160@alcatel,90,t|5|M(privet)',30,0,'NO ANSWER',3,'1429597041.113')]
== Begin MixMonitor Recording OutgoingSpoolFailed
> [INSERT INTO cdr (calldate,dst,dcontext,channel,lastapp,lastdata,duration,billsec,disposition,amaflags,uniqueid,filename,realdst) VALUES ({ ts '2015-04-21 09:17:51' },'failed','contex-for-tests','OutgoingSpoolFailed','Goto','contex-for-tests-recorded,failed,1',0,0,'NO ANSWER',3,'1429597071.116','1429597071.116-2015-04-21-09_17--failed.mp3','failed')]
[Apr 21 09:17:51] NOTICE[4221]: pbx_spool.c:389 attempt_thread: Call failed to go through, reason (3) Remote end Ringing
[Apr 21 09:17:51] NOTICE[4221]: pbx_spool.c:392 attempt_thread: Queued call to Local/1@callback expired without completion after 0 attempts
ЗЫ
Звонок создается колл-файлом, поэтому он инициарован через Local-channel
Связь с алкатель через chan_h323, однако и сип ведет себя аналогично.
Можно конечно размножить кусок диаплана с рандомным звонком, но не хочется ставить костыль.