отдать IVR вызываемой стороне
Способы отдачи IVR вызываемой стороне
Откуда: UA
Сообщений: 11
|
отдать IVR вызываемой стороне
Возникла задача когда необходимо передать IVR вызываемому абоненту. И если с управлением конференцией звонящим абонентов все понятно, то здесь не понятно совсем.
Как работает сейчас
ш1-отрабатывает CallBack на мобильный и входит чел. который впоследствии будет вызывающей стороной
ш2-с помощью IVR он указывает группу менагеров которая его интересует
ш3-отрабатывает скрипт который выдает номер мобилы менагера
ш4-идет дозвон этому менагеру (если звонок неудачен, то за счет выходов их скрипта на екстеншен s c другими аргументами, подставляется другой менагер)
ш5-Происходит беседа которая заканчивается разрывом соединения
"Без воды" так:
[looking-for-menager]
exten => s,1,AGI(ref-menager.so, ${scancodeID}, ${statNUMBER}, ${daytime})
exten => call,n(lbl_looking-for-menager_1),Dial(${OPSOS}/${DIALEDID})
exten => call,n,GotoIf($["${DIALSTATUS}" = "CHANUNAVAIL"]?lbl_looking-for-menager_2:)
exten => call,n,GotoIf($["${DIALSTATUS}" = "CONGESTION"]?lbl_looking-for-menager_3:)
exten => call,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?lbl_looking-for-menager_4:)
exten => call,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?lbl_looking-for-menager_5:)
exten => call,n,GotoIf($["${DIALSTATUS}" = "CANCEL"]?lbl_looking-for-menager_6:)
exten => call,n,GotoIf($["${DIALSTATUS}" = "DONTCALL"]?lbl_looking-for-menager_7:)
exten => call,n,GotoIf($["${PLAYBACKSTATUS}" = "SUCCESS"]?:lbl_looking-for-menager_3)
exten => call,n(lbl_looking-for-menager_2),Log(DEBUG,)
exten => call,n(lbl_looking-for-menager_3),Hangup()
exten => call,n(lbl_looking-for-menager_4),AGI(menager-no-menager.so)
exten => call,n(lbl_looking-for-menager_5),AGI(menager-l-order.so)
exten => call,n(lbl_looking-for-menager_6),AGI(menager-contact-t-order.so)
exten => call,n(lbl_looking-for-menager_7),Hangup()
exten => call,n,Hangup()
Как без костылей дополнить схему следующими шагами?
ш6-во время беседы у менагера есть возможность закрепить за собой вызывающего или не закрепить (IVR->скриптAGI-> оповещением звуковым файлом в канал)
ш7-безусловный разрыв соединения людой стороной возможен только если менагером был сделан выбор(закрепить за собой вызывающего или не закрепить) впротивном случаи на него подсовывается CallBack/Callfile/Dial.
|
Откуда: Уфа
Сообщений: 5856
|
Re: отдать IVR вызываемой стороне
в команде dial есть опция М, которая указывает на макрос, который выполнится в момент соединения с вызываемым и для вызываемого. В него-то и можно поместить IVR
|
Откуда: UA
Сообщений: 11
|
Re: отдать IVR вызываемой стороне
Спасибо за отличный совет. А то я это сделал через конференцию (вышло с кучей костылей, условий, план растянулся почти на 260 строк), а оказывается можно лекго и просто.
|
Откуда: Уфа
Сообщений: 5856
|
Re: отдать IVR вызываемой стороне
да на здоровье!
Пользуйтесь простым принципом:
Вероятность того, что люди сделали до вас то, что делаете вы, около 98%.
Ищите и найдете!
|
Откуда: UA
Сообщений: 11
|
Re: отдать IVR вызываемой стороне
Чет не получается.
Чесгря не могу понять философию соединения каналов и как результат как правильно это сделать.
Судя по информации CLI переход на макрос осушествляется и начинается запись с помошью миксмонитора, но реакции на нажатие кнопок не происходит, хотя обе стороны слышат тон кнопок.
Результат одинаков при применении М и при Gosub
exten => call,n(lbl_looking-for-seller_1),Dial(${OPSOS}/${DIALEDID},,S(120))
exten => call,n,GotoIf($["${DIALSTATUS}" = "CHANUNAVAIL"]?lbl_looking-for-seller_2:)
exten => call,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?lbl_looking-for-seller_3:)
exten => call,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?lbl_looking-for-seller_4:)
exten => call,n,GotoIf($["${DIALSTATUS}" = "CANCEL"]?lbl_looking-for-seller_5:)
exten => call,n,GotoIf($["${DIALSTATUS}" = "DONTCALL"]?lbl_looking-for-seller_6:)
exten => call,n,Gosub(getignororder,s,1)
Вар2
exten => call,n(lbl_looking-for-seller_1),Dial(${OPSOS}/${DIALEDID},,M(getignororder)S(120))
При макросе
[macro-getignororder]
exten => s,1,MixMonitor(/var/log/asterisk/mixmon.wav)
exten => s,n(lbl_macro-getignororder_0),NoOp()
exten => s,n(lbl_macro-getignororder_1),WaitExten(1)
exten => s,n,Goto(lbl_macro-getignororder_0)
exten => #,1,AGI(ignor.so)
exten => #,n,Playback(2)
exten => #,n,GotoIf($["${PLAYBACKSTATUS}" = "SUCCESS"]?:lbl_macro-getignororder_2)
exten => #,n,StopMixMonitor()
exten => #,n(lbl_macro-getignororder_2),Congestion()
exten => h,1,DeadAGI(call-confirm.so)
exten => h,n,StopMixMonitor()
exten => h,n,Hangup()
exten => i,1,AGI(get-order.so)
exten => i,n,Playback(1)
exten => i,n,Goto(s,lbl_macro-getignororder_1)
Может нужно диал засунуть в макрос?
|
Откуда: UA
Сообщений: 11
|
Re: отдать IVR вызываемой стороне
Диал засовывал в макрос - не помогло!
|
Откуда: Уфа
Сообщений: 5856
|
Re: отдать IVR вызываемой стороне
макрос по опции "М" отработает в тот момент, когда вызываемый абонент возьмет трубку.
у тебя в макрос чего-то понапихано непонятного, начни с простого.
|
Откуда: UA
Сообщений: 11
|
Re: отдать IVR вызываемой стороне
Так я так и делал когда пробовал по второму варианту.
КАжись проблема в том что мне не нужен бэкгроунд, а без него WaitExten не работает. А раз WaitExten не работает -то IVR-ра просто не существует.
АВ миксмонитором я пытался подменить бекгроунд.
С другой стороны задача не изменилась - при разговоре две кнопки должны реагировать на тон.
|
Откуда: Уфа
Сообщений: 5856
|
Re: отдать IVR вызываемой стороне
как можно заменить миксмонитором бекграунд, если он предназначен для ЗАПИСИ разговора, а не для воспроизведения?
|
Откуда: UA
Сообщений: 11
|
Re: отдать IVR вызываемой стороне
Ну это я уже за соломинку цеплялся
|
|