×

Предупреждение

  • Cisco Support Forums is in Read Only mode while the site is being migrated.
  • Cisco Support Forums is in Read Only mode while the site is being migrated.

И снова про VXML IVR + transfer full consult

Неотвеченый вопрос
сен 6th, 2016
User Badges:
Добрый день, коллеги. Прошу помощи и ваших мыслей.

Дано: Cisco 2801 Version 15.1(4)M9, входящий поток E1.

Настроен IVR:


application
!
service main_ivr flash:/vxml-ivr/ivr.vxml
!
global
service alternate Default
!

Подцеплен к DIAL peer'у:
!
dial-peer voice 100 pots
service main_ivr
incoming called-number 74950000000
no digit-strip
direct-inward-dial
port 0/1/0:15
!

Сам Скрипт:

<?xml version="1.0"?>
<vxml version="2.0" base="flash:/vxml-ivr/ivr.vxml">

<!-- Time is in UTC -->
<!-- Day of week: 0 - sunday, 1 - monday ... 6 - sunday -->
<var name="VAR_Hour" expr="new Date().getHours()"/>
<var name="VAR_Day" expr="new Date().getDay()"/>
<var name="number" />


<!-- Time condition -->
<form id="IVR_TimeCondition">
<block>
<if cond="9 &lt;= VAR_Hour &amp;&amp; VAR_Hour &lt; 19 &amp;&amp; 0 &lt; VAR_Day &amp;&amp; VAR_Day &lt; 6">
<goto next="#IVR_Business" />
<else />
<goto next="#IVR_NonBusiness" />
</if>
</block>
</form>

<form id="IVR_NonBusiness">
<block>
<prompt><audio src="flash:/vxml-ivr/lt_non_business.au"/></prompt>
</block>
</form>

<form id="IVR_Business">

<catch event="noinput">
<goto next="#no_answer" />
</catch>

<catch event="nomatch">
<goto next="#no_answer"/>
</catch>

<property name="timeout" value="3s" />
<block>
<prompt>
<audio src="flash:/vxml-ivr/lt_hello.au" />
</prompt>
</block>
<field name="num" type="number">
<grammar type="application/grammar+regex">[0-9][0-9][0-9]</grammar>
<filled>
<assign expr="'phone://' + num" name="number" />
<goto next="#ext" />
</filled>
</field>
</form>


<form id="ext">
<transfer connecttimeout="15s" name="mycall" transferaudio="flash:music-on-hold.au" destexpr="number" bridge="false">
<filled>
<if cond="mycall == 'busy'">
<prompt><audio src="flash:/vxml-ivr/lt_no_answer.au"/></prompt>
<goto next="#no_answer"/>
<elseif cond="mycall == 'noanswer'"/>
<prompt><audio src="flash:/vxml-ivr/lt_no_answer.au"/></prompt>
<goto next="#no_answer"/>
</if>
</filled>
</transfer>
</form>

<form id="no_answer">
<transfer name="mycall" transferaudio="flash:music-on-hold.au" dest="phone://720" bridge="false" />
</form>

</vxml>


Логика работы скрипта:
Если звонок приходит в рабочее время, звучит приветствие с возможностью донабора сотрудника. При донаборе звучит music-on-hold.au. Если сотрудник не принял вызов в течение 15s, звучит сообщение lt_no_answer.au о том, что сотрудник не поднимает трубку и происходит переадресация на секретаря. Если при первичном приветствии не было донабора, то, также - на секретаря.
Скрипт отрабатывает корректно.

Проблема:
Не работает трансфер с консультацией. ( без скрипта, естественно, данный трансфер работает).
Если звонок "прилетел" на секретаря или на любой экстеншн, не возможно далее переадресовать вызов. К примеру, звонящий донабрал на номер 700, поговорил с абонентом 700, далее абонент-700 переадресовывает на 701, может с ним поговорить, но переадресовать звонок дальше не получается ( ни по нажатию кнопки Transfer, ни если просто положить трубку).

В telephony-services, конечно, есть строки:
transfer-system full-consult
transfer-pattern .T


Что попробовал:
1) bridge=false, bridge=true пробовал, ничего не меняется.

2) Если оставить bridge=false и добавить в конфигу:
CME(config)#vxml version 2.0
CME(config)#vxml allow-star-digit
тогда full-consult работает, однако все прелести скрипта ( music on hold, отправка на секретаря с сообщением если extension не отвечает) не работает, то есть скрипт прекращает свою работу сразу после донабора или если без донабора улетел секретарю.

3) Transfer full-blind не пробовал, т.к этот вариант не приемлем.

Буду очень благодарен любым советам и помощи!
Loading.
Vladimir Savostin вс, 10/09/2016 - 07:47
User Badges:
  • Cisco Employee,

Добрый день Никита,


Я проверил ваш скрипт на нескольких платформах и версиях IOS:

3945 - 15.5.3M4, 15.1.4M9, 15.1.4M10

UC520 - 15.1.4M6 (последняя версия для UC520)


Скрипт работает с требуемой функциональностью только при настройке

telephony-service

  transfer-system local-consult


Где это заработало:

3945 - 15.5.3M4

UC520 - 15.1.4M6

3945 - 15.1.4M9/10 (только при включенных дебагах)


Дело в том, что при настройке трансфера local-consult для входящего звонка

фактически создается новый call leg после отключения абонента, делающего второй трансфер и этот новый call leg замыкается на call leg, того, кому идет этот трансфер.

По всей видимости на более быстрых платформах новый входящий call leg создается быстрее, чем готовы структуры данных второго абонента, поэтому звонок разрывается.

При включении дебагов создается дополнительная задержка и это способствует корректному трансферу.


В любой случае VXML скрипт остается в цепочке управления вызовом, но не реализует всех функций call control (управления вызовом), что является общим свойством VXML приложений.

По хорошему, после поднятия трубки первым абонентом (на которого скрипт делает трансфер)  нужно делать handoff и передавать управление в Default application:

<var name="appName" expr="'builtin://Default'"/>


<catch event="connection.disconnect.transfer">
    <goto next="#callhandoff"/>
</catch>

<form id="callhandoff">
 <object name="myhandoff" classid="builtin://com.cisco.callhandoff">
   <param name="return" expr="false"/>
   <param name="app-uri" expr="appName"/>
 </object>
</form>


При поднятии трубки создается событие connection.disconnect.transfer, которое и обрабатывается формой callhandoff.


Но дело в том, что на IOS-е 15.1.4M handoff завершается ошибкой:

Oct  9 14:15:36.784: //1235//AFW_:/vapp_callhandoff: app_uri=builtin://Default, wait_for_return=false, arg_string=
Oct  9 14:15:36.784: //-1//AFW_:/C_PackageSession_GetSigPeer:  
Oct  9 14:15:36.784: //1238/A9260295862C/AFW_:/C_PackageSession_GetSigPeer: No Interworking module on Leg, no signal peer
Oct  9 14:15:36.784: //-1//Hand:/ah_handoff_core: ERROR, bag check failed


Если это баг, то в этой версии его исправлять не будут.

На 3945 15.5.3M4 не проверял, т.к. скрипт там работает.


Отновительно настроек bridge в скрипте и команды vxml version 2.0 получились такие сочетания:

bridge="true" - работает всегда вне зависимости от присутствия команды vxml version 2.0, что объяснимо, т.к. event connection.disconnect.transfer приходит только после поднятия трубки абонентом и до этого момента скрипт полностью контролирует вызов

bridge="false" работает только в случае отсутствия команды vxml version 2.0, видимо потому что IOS не интерпретирует эту функцию в элементе transfer

bridge="true", vxml version 2.0 - после начала перевода скрипт сразу завершает работу и теряет контроль над звонком. Звонящий слышит сигнал вызова, а не мелодию.


Попробуйте сделать настроку transfer-system local-consult на 2801, возможно это поможет.

Если нет, то другие возможности выбора:

1. Стандартный скрипт ITS - приближен к функциональности вашего скрипта, но сразу переводит звонок на внутреннего абонента и теряет над ним контроль. Дальнейший call coverage можно выполнять на самих DN-ах - CfB, CfNA. В таком случае будет отсутствовать только уведомление о переводе на оператора.


2. Стандартный скрипт B-ACD - реализует полнофункциональную очередь, но на основе hunt-group, для перевода на индивидуальный номер исп-ся меню 2-го уровня и после перевода также теряется контроль над звонком


Скрипты можно скачать отсюда:

https://software.cisco.com/download/release.html?mdfid=277641082&softwar...

Скрипт ITS находится в разделе 8.1


3. Сочетать TCL и VXML для реализации вашей логики. При этом TCL будет осуществлять обработку вызова, а VXML реализовывать голосовые формы.


P.S. Выше речь шла о конфигурации, когда телефоны зарегистрированы на самом шлюзе (CME).

Если скрипт будет делать трансфер на другую систему, например CUCM или СМЕ, то проблем с последующим переводом вызова внутри другой системы не будет.


Network Team чт, 10/27/2016 - 05:22
User Badges:

Подскажите, пожалуйста, не работает перехват телефона, номер которого донабрали из IVR (tcl или vxml). Это может зависеть от прошивки? версия 10.5 на текущий момент.

Vladimir Savostin чт, 10/27/2016 - 06:40
User Badges:
  • Cisco Employee,

Добрый день,


Речь идет о телефонах на CME или CUCM? Перехват в рамках той же pickup group?

Работает ли перехват если звонок приходит сразу на номер без скрипта?

Какой именно tcl скрипт использовали?

Network Team пт, 10/28/2016 - 04:34
User Badges:

Речь о CME. Перехват в пределах одной группы. Работает, если звонить на номер без скрипта, SIP транк с CUCM (через CUCM приходят городские на приветствие). Оба телефона в тесте SCCP, но есть и SIP телефоны, у них тоже перехват работает при звонках напрямую.

flash0:c3900-universalk9_npe-mz.SPA.154-3.M3.bin

Выдержки настроек:

telephony-service
  call-park system application
  call-forward pattern .T
 service directed-pickup gpickup
 call-park system application
 call-forward pattern .T
....
vxml version 2.0  // если тестировать vxml, c ним заработал перевод вызова
vxml allow-star-digit


Скрипты приложила во вложении. tcl - обрезанный на основе B-Acd, vxml делала по примерам в Интернете.

# Script Locked by: khom
# Script Version: 2.0.3.0
# Script Name: its_CISCO
# Script Lock Date: Wed Jul  2 09:22:04 2003
#------------------------------------------------------------------
#
# November 27, 2001, Satish Ananthanarayana ([email protected])
....


Файлы tcl и vxml здесь (с работы не могу закачать, поэтому так)

https://yadi.sk/d/pGb7LRLzxjjJq




MaximKulakov вт, 11/01/2016 - 05:45
User Badges:

Добрый день, Владимир,

Волею судеб совместно с коллегой занимаемся проблемой с пикапом вызовов после донабора через IVR (при этом любые другие вызовы перехватываются без проблем).

Благодаря вашему подробному описанию (за что вам огромное человеческое спасибо) пришли к выводу, что корень проблемы в скрипте: скрипт полностью контролирует вызов и ни при каких конфигурациях не отпускает вызов до тех пор, пока вызываемый не поднимет трубку.

Вопрос что с этим делать: либо как-то заставить скрипт сразу же после донабора номера не думать о дальнейшей судьбе вызова или как-то ещё научить CME перехватывать такие вызовы?

Перепробовали все вариации указанных вами комбинаций bridge (false-true) vxml version 2.0 (включено-выключено) и transfer-system (full-consult- local-consult- full-blind). При этом ни одна из комбинаций не позволяет уйти от скрипта до поднятия трубки. При любых комбинациях скрипт тащит вызов на себе и соседний телефон не видит звонков доступных к перехвату.

Изначально всё было организовано на стандартном TCL-e, сейчас на VXML-e – симптомы одинаковы – вызов с соседнего телефона остаётся не видимым.

Выводы напрашиваются следующие: либо в Вашем VXML скрипте есть что-то чего не хватает в нашем, либо на нашей версии (IOS V15.4(3)M3, CME V10.5) это в принципе никогда не заработает, либо есть что-то ещё интересное в Вашем конфиге.

Спасибо. Будем Вам очень благодарны за любую информацию.

Действия

Информация о дискуссии