Вы здесь

Простой IVR или автоответчик на маршрутизаторе

В среде Call Manager мы можем принимать входные звонки с использованием автоответчика или IVR.

Для организации IVR у нас есть несколько путей:

Последний пункт хорош тем, что ничего не надо ставить дополнительного. Если в региональном офисе есть маршрутизатор с поддержкой голоса, на нем можно поднять простой скрипт IVR.

Скрипт IVR также накладывает и ограничение: с ним нельзя использовать MGCP.

приведенный ниже пример скрипта включает в себя 5 файлов:
router#show flash
25 3293 Apr 21 2011 12:22:48 +06:00 vxml-ivr/My.vxml
26 45754 Apr 21 2011 11:39:16 +06:00 vxml-ivr/newfirst_announcement.wav
27 38458 Apr 21 2011 12:37:30 +06:00 vxml-ivr/absent_number.wav
28 48058 Apr 21 2011 12:38:12 +06:00 vxml-ivr/number_busy.wav
29 45754 Apr 21 2011 12:37:52 +06:00 vxml-ivr/no_answer.wav

Работа скрипта:
При входящем звонке снимается трубка и звучит приветствие. При этом можно набрать 3-х значный внутренний номер либо дождаться ответа секретаря.
0 – Секретарь
9 – Факс

Настройка IOS:

Включение сервиса vxml
application
service ivrr flash:/vxml-ivr/My.vxml
!
global
service alternate default

Настройка физического порта FXO. Входящий звонок будет перенаправлен на внутренний номер 550.
voice-port 1/0/8
supervisory disconnect dualtone mid-call
echo-cancel coverage 32
timeouts call-disconnect 1
timeouts ringing 20
timeouts wait-release 1
connection plar 550
caller-id enable

Данный диалпир направляет звонки на внутренний номер 550 на скрипт.
dial-peer voice 1000 pots
service ivrr
incoming called-number 550
port 1/0/8

Скрипт возвращает трехзначный номер абонента. Его отдаем на Call Manager:
dial-peer voice 3001 voip
description Short calls
destination-pattern [1-5]..
session target ipv4:10.16.0.11
dtmf-relay h245-alphanumeric
codec g711ulaw
no vad

При изменении скрипта или файлов необходимо перезапустить:
application
no service ivrr flash:/vxml-ivr/My.vxml
service ivrr flash:/vxml-ivr/My.vxml

Запись звуковых файлов:
Самое простое: приложение sndrec32, там выбираем тип формата CCITT u-Law 8,000 и приступаем к записи.
sndrec32_ciscomaster.ru.jpg

Проверка
debug voip application digitcollect
show call active voice compact

Вариант скрипта самый простой:
My2.vxml

Вариант скрипта посложней
My1.vxml

Также см.
Пример рабочего IVR CME + E1

Возможные проблемы

При настройке данного скрипта для работы с SIP провайдером может не проходить трансфер, решить можно попытаться:

Tags: 

Комментарии

Спасибо за труд! Подскажите по переводу звонка. Попадает внешний звонок на IVR (CUBE sip-шлюз) трансферится на внутренний номер 555. Какой диал-пир у вас отрабатывает? Как звонок попадает на CallManager?

В статье звонок отдается на IVR. Если IVR возвращает, к примеру, трех-значный номер, тогда диалпир на CUCM будет примерно таким:
dial-peer voice 3001 voip
description Short calls
destination-pattern [1-5]..
session target ipv4:10.16.0.11
dtmf-relay h245-alphanumeric
codec g711ulaw
no vad

Тут указан IP CUCM, и кодек должен совпадать с кодеком в настройках CUCM region

Спасибо.

Какой у Вас ИОС, на котором работает IVR. У меня с2901 ИОС 15.0(1)M, только проигрывает приветствие и максимум может перевести вызов по таймауту. Набор внутреннего номера абонента не хочет понимать и переводить((

Ну тут может быть множество причин:
- Включен ли тон у клиента
- Если это SIP, то важен кодек и передача DTMF в диал-пире в случае G729
- Что воспринимает сам скрипт, прерывается ли он при попытке набрать номер
- MGCP при неправильной настройке может дублировать dtmf
- Был еще случай, когда городская АТС была с кривотой и давала "левые" символы DTMF в линию POTS

Проверьте есть ли вообще тон, пусть клиент соединится по тайм ауту и понажимает кнопки в эфире, будет ли слшен тон или бипы?
Проверьте что выдает deb voip app digitcollect

А IOS у вас старый, у меня стоит 151-4.M. Ставьте последний, желательно "М"

у меня на таком иосе все работает.

вопрос по поводу:
При изменении скрипта или файлов необходимо перезапустить:
application
no service ivrr flash:/vxml-ivr/My.vxml
service ivrr flash:/vxml-ivr/My.vxml
-------------
изменил звуковой файл. Сделал эти команды, но ничего не изменилось. Помогает только перезагрузка маршрутизатора. подскажите, как решить такую проблему?

У меня такое поднято на нескольких 2951, а также на 3925. Версия IOS 151-4.M1
Собственно этих команд достаточно для применения новых файлов

У меня ios 12.3.8 и помогает только перезагрузка.

извиняюсь, у меня 15.0.1

там полно глюков, Обновите до последней

Тут надо еще из в самом верхнем режиме дать команду audio-prompt load.
Применительно к нашей ситуации, рекомендую сделать алиас, и забыть про жуткие ребуты роутера.
alias exec ivr audio-prompt load flash:/vxml-ivr/newfirst_announcement.wav

Вопрос такой, как тогда будет выглядить конфига, если звонок на CME поступает по sip?

SIP приносит с собой номера called и calling.
Конфиг будет тем же, только автоответчик придётся повесить на реальный called number (DNIS), либо этот номер нужно транслировать (скорее более предпочтительно) на внутренний.
Также тут возможны нюансы связанные с кодеком, не уверен что данный IVR заведётся с 729 без транскодера.
Если же ваш SIP ITSP на 711 всё должно завестись без проблем

у меня такой вопрос. Есть у меня ivr на маршрутизаторе и приходит на него 24 FXO порта. Самое быстрое наверное настроить 24 dial-peer, но не хочется увеличивать конфиг. Попробовал указать с помощью connection plar, чтобы был один dial-peer, но он посылает приходящие звонки по FXO к sip провайдеру. Может есть решение как побороть это?

У вас наверное перепутались внешний и внутренний диалплан.
Возьмите за правило: все номера что идут наружу должны быть с 9-кой, т.е. 9-ку не отрезайте на Call Manager, пусть она идёт до шлюза и отрезается там - в этом случае диалпиры будут отличать внутренние и внешние номера однозначно. Исключение - MGCP шлюз, где управление полностью под CUCM.

Я ради эксперимента зашутдаунил dial-peer через который пытался выйти звонок. Как я понял connection plar действует на voip dial-peer, а не на pots. Видимо придется писать 24 штуки dial-peer

Добрый день!

у меня такой конфиг:
voice-port 0/3/3
supervisory disconnect dualtone mid-call
echo-cancel coverage 32
timeouts call-disconnect 1
timeouts ringing 20
timeouts wait-release 1
connection plar 550
caller-id enable

dial-peer voice 5000 pots
service ivrr
incoming called-number 550
port 0/3/3

dial-peer voice 5001 voip
description Short calls
destination-pattern [1-5]..
session target ipv4:10.12.27.254
dtmf-relay h245-alphanumeric
codec g711ulaw
no vad

при звонке после третьего гудка дает поднимает трубку и тут же дает "занято". скрипт взял "простой.

подскажите в чем проблема?

и вопрос: для 550 номера надо создавать ephone-dn? Если я указываю номер секретаря то он переводит без всяких голосовых меню.

Возможно запись в неправильной кодировке.
Попробуйте подставить один из файлов внизу статьи.

Для 550 ephone-dn не нужен, поскольку звонок уходит на сервис через dial-peer voice 5000 pots

использовал первый файл. результат тот же.

я тут нашел в интернете на форуме подобную проблему. человек написал что обновил прошивку и все заработало.
у меня работает Cisco IOS Software, 2801 Software (C2801-ADVENTERPRISEK9-M), Version 12.4(24)T3
может в этом проблема?

где только взять 15ую версию.. что-то гугль с яндексом не помогают =((

Прошивку обновить однозначно.
12 версия даже опасна, взломают - попадёте на деньги.
Предотвращение взлома Toll-Fraud

Загляните на рутракер и наберите cisco ios

обновил прошивку. результата нет. есть еще варианты куда копать?

ради эксперимента попробовал "сложный" скрипт со всем аудио-файлами. все точно так же, идет вызов, три гудка, поднимается трубка, сразу сигнал занято и завершение звонка.

Что-то с сервисом IVR.
У вас в конфиге ведь есть строки:
application
service ivrr flash:/vxml-ivr/My.vxml
!
global
service alternate default

Проверьте верен ли путь до файла:
more flash:/vxml-ivr/My.vxml

application
service ivrr flash:/vxml-ivr/My1.vxml
!
global
service alternate default
!
23 3293 Aug 2 2013 06:35:34 +00:00 vxml-ivr/My1.vxml
24 20994 Aug 1 2013 12:53:26 +00:00 vxml-ivr/absent_number.wav
25 45754 Aug 1 2013 12:53:46 +00:00 vxml-ivr/newfirst_announcement.wav
26 45754 Aug 1 2013 12:54:06 +00:00 vxml-ivr/no_answer.wav
27 48058 Aug 1 2013 12:54:20 +00:00 vxml-ivr/number_busy.wav

команда morе flash:/vxml-ivr/My1.vxml выводит содержимое файла...

была ошибка в регистре имени файла, исправил, но проблему не решило.

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

и опять не помогло :-))

Остаётся дебаг,
посмотрите ошибки при попытке звонка:
debug voip application

Прошу прощения за дурацкий вопрос... но как мне увидеть дебаг если я подключен по телнету? (роутер стоит удаленно и доступа к консоли нет)

Просто я не специалист и CISCO изучаю с помощью интернета и метода научного тыка =)).

Вот строчки с лога, которые я как предполагаю относятся к моей проблеме (остальное повырезал)
Aug 2 11:13:44.274: //-1//AFW_:EE69542060000:/AFW_ExecEnv_AssignCall: Execenv = 0x69542060, Leg = 143, Peer_Tag = 4100
Aug 2 11:13:44.278: //143/6DBF52C68129/AFW_:/incrementIncomingDialPeerCallStats: Incrementing call-stat to [1] for dial-peer [4100]
Aug 2 11:13:44.282: //-1//AFW_:/AFW_Leg_IncomingTranslate: Tag(4100) calling[] redirect[] called[550]
Aug 2 11:13:44.282: //143//AFW_:/Open_SetupIndication: Calling #(), Calling Name (), Called #(550), peer_tag(4100)
Aug 2 11:13:44.282: //143/6DBF52C68129/AFW_:/AFW_Object_AddListener: adding Module Session as listener
Aug 2 11:13:44.282: //-1//AFW_:/SetupDestination: SetupDestination: afwSSApdu is NULL
Aug 2 11:13:44.282: //-1//AFW_:/AFW_Util_CopyLegServiceCodeToCallInfoContainer: Service Code not available on Leg
Aug 2 11:13:44.282: //-1//AFW_:/AFW_Util_CopyLegRouteCodeToCallInfoContainer: Route Code not available on Leg
Aug 2 11:13:44.282: //-1//AFW_:/AFW_Util_GetTgCicValue: CIC Not found for tag(56)
Aug 2 11:13:44.282: //143//AFW_:/ProcessSnrDestination:
Aug 2 11:13:44.286: //143//AFW_:/SetupValidateSharedln: calledNum=550, callingNum=, callID=143, callinf.peertag=4100, joinXtoID=0
Aug 2 11:13:44.286: //143//CSPK:/C_CallSetup_Start: ControlInfo = 0x6BE9D4C0, callInfo = 0x6BE8B76C, destination[0]=550

Как я понял из все вышеперечисленного почему то звонок уходит на 4100 диал-пир.

вот сам диал-пир

dial-peer voice 4100 pots
destination-pattern 8...T
port 0/3/3
forward-digits all

и тут возникает вопрос: кого хрена!? :-)

или я ошибаюсь на счет лога?

вырубил диал-пир и все заработало!!!! СПАСИБО ЗА ПОМОЩЬ!

terminal monitor

Доброго времени суток!
обнаружил еще один "баг" данной настойки:
при соединении с секретарем или любым внутренним номером звонок потом нельзя перевести куда либо еще на другой номер. Он просто повисает на второй линии как будто в режиме удержания, а не трансфера.

нарыл на антициско что нужно добавить в конфиг:
voice register global
call-forward system redirecting-expanded

но мне не помогло. есть еще варианты по решению этой проблемы?

Добрый день,
если IVR привязан к аналогу или Е1 (т.е. команда service ivrr стоит на диалпире pots) всё должно переводиться.
Перевод не работает, если к примеру service ivrr поставить на dialpeer voip.
Скрипт не умеет этого делать.
Остаётся либо вечно ковыряться с подобными скрптами или глючным bacd, или наконец купить UCCX :)

у меня линия аналоговая, конфиг я писал выше. Так за трансфер получается тоже отвечает скрипт, этот звонок уже не ходит как обычный, без IVR?

Нет, в вашем случае это должен быть обычный звонок, т.е. поток после транфера всё равно идет через шлюз.
Проверьте будет ли работать трансфер, если через plar перенаправить звонок сразу на секретаря, исключив скрипт.
Я имел в виду ситуацию, когда в результате транфера шлюз вообще исключается из потока, например если IVR повесить на voip dialpeer, на него позвонить от цифрового внутреннего телефона и попытаться перевести на внутренний цифровой же телефон - вот это точно не будет работать.

voice-port 0/3/3
supervisory disconnect dualtone mid-call
echo-cancel coverage 32
timeouts call-disconnect 1
timeouts ringing 20
timeouts wait-release 1
connection plar 101
caller-id enable
!

звонок все равно почему то попадает на голосовое меню

ну как минимум еще 5000 уберите, вам же виднее, какой у вас конфиг :)

Я же говорил что в этих делах полное "палено" =))

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

странно только что имя звонящего определяется как назначено на порту FXS voice-port 0/1/0. Он то здесь каким боком вылез?

здравствуйте, у меня такая же проблема, Вам удалось найти решение?

Добрый день,
часто проблема не в скрипте, но в настройках шлюза.
Могу сказать, что скрипт точно рабочий при подключении через FXO, а также через E1.
Для начала попробуйте исключить скрипт: пусть входящие звонки валятся напрямую на секретаря. Проверьте, будет ли работать перевод в cлучае отсутствия скрипта.

Привет!
подскажите. сделал все по вашей инструкции. меню работает как надо, но теперь я не могу настроить исходящие звонки. есть два диалпира, первый по идеи реагирует на входящие звонки, второй на исходящие:
dial-peer voice 5000 pots
service ivrr
incoming called-number 550
port 0/1/0

dial-peer voice 1000 pots
destination-pattern 8T
port 0/1/0
forward-digits all

вместе они не работают. выключаю второй, работает IVR, но нельзя позвонить наружу. включаю его - не работает IVR.

Можете подсказать, как настроить в данном случае исходящую связь?
спасибо!

Да, бывает такая проблема. Попробуйте поменять диалпиры местами. Т.е. удалите оба, затем довьте в нужной последовательности. И, кстати, по возможности избегайте "T". Сделайте отдельные диалпиры под город, межгород, только интернациональные будут с "т"

Сделал как вы посоветовали. после этого у меня почему то входящий звонок вообще перестал реагировать на эти диалпиры, как на 5000, так и на 1000.

лог пишет следующее:
Oct 10 09:54:52.312: //-1/xxxxxxxxxxxx/DPM/dpMatchSafModulePlugin:
dialstring=NULL, saf_enabled=0, saf_dndb_lookup=0, dp_result=-1
Oct 10 09:54:52.312: //-1/xxxxxxxxxxxx/DPM/dpAssociateIncomingPeer:exit@6613
Oct 10 09:54:52.312: //-1/xxxxxxxxxxxx/DPM/dpMatchPeersCore:
Calling Number=, Called Number=550, Peer Info Type=DIALPEER_INFO_SPEECH
Oct 10 09:54:52.312: //-1/xxxxxxxxxxxx/DPM/dpMatchPeersCore:
Match Rule=DP_MATCH_DEST; Called Number=550
Oct 10 09:54:52.312: //-1/xxxxxxxxxxxx/DPM/dpMatchCore:
Dial String=550, Expanded String=550, Calling Number=
Timeout=TRUE, Is Incoming=FALSE, Peer Info Type=DIALPEER_INFO_SPEECH
Oct 10 09:54:52.312: //-1/xxxxxxxxxxxx/DPM/dpMatchCore:
Result=-1
Oct 10 09:54:52.312: //-1/xxxxxxxxxxxx/DPM/dpMatchPeersCore:
No Outgoing Dial-peer Is Matched; Result=NO_MATCH(-1)
Oct 10 09:54:52.312: //-1/xxxxxxxxxxxx/DPM/dpMatchSafModulePlugin:
dialstring=550, saf_enabled=0, saf_dndb_lookup=1, dp_result=-1
Oct 10 09:54:52.312: //-1/xxxxxxxxxxxx/DPM/dpMatchPeersMoreArg:
Result=NO_MATCH(-1)
Oct 10 09:54:52.312: //-1/D7C61F9E802C/DPM/dpMatchPeersCore:
Calling Number=, Called Number=550, Peer Info Type=DIALPEER_INFO_SPEECH
Oct 10 09:54:52.312: //-1/D7C61F9E802C/DPM/dpMatchPeersCore:
Match Rule=DP_MATCH_DEST; Called Number=550
Oct 10 09:54:52.312: //-1/D7C61F9E802C/DPM/dpMatchCore:

и что-то танцы с бубнами не помогают, перезагрузка тоже.

Приведу рабочий пример:
Здесь входящие и иисходящие звонки распределяются между 4 FXO портами

voice-port 1/0/8 supervisory disconnect dualtone mid-call dial-type pulse echo-cancel coverage 32 timeouts call-disconnect 1 timeouts ringing 20 timeouts wait-release 1 connection plar 508 description ### Multi caller-id enable ! voice-port 1/0/9 supervisory disconnect dualtone mid-call echo-cancel coverage 32 timeouts call-disconnect 1 timeouts ringing 20 timeouts wait-release 1 connection plar 509 description ### Multi caller-id enable ! voice-port 1/0/10 supervisory disconnect dualtone mid-call echo-cancel coverage 32 timeouts call-disconnect 1 timeouts ringing 20 timeouts wait-release 1 connection plar 510 description ### Multi caller-id enable ! voice-port 1/0/11 supervisory disconnect dualtone mid-call echo-cancel coverage 32 timeouts call-disconnect 1 timeouts ringing 20 timeouts wait-release 1 connection plar 511 description ### Multi caller-id enable dial-peer voice 1008 pots service ivrr incoming called-number 508 port 1/0/8 ! dial-peer voice 1009 pots service ivrr incoming called-number 509 port 1/0/9 ! dial-peer voice 1010 pots service ivrr incoming called-number 510 port 1/0/10 ! dial-peer voice 1011 pots service ivrr incoming called-number 511 port 1/0/11 ! dial-peer voice 3001 voip description Short calls destination-pattern [1-5].. session target ipv4:192.168.0.11 dtmf-relay h245-signal h245-alphanumeric cisco-rtp codec g711ulaw no vad ! dial-peer voice 3000 voip description Long calls destination-pattern [6-7].[1-5].. session target ipv4:192.168.0.11 dtmf-relay h245-signal h245-alphanumeric cisco-rtp rtp-nte codec g711ulaw no vad ! dial-peer voice 908 pots description Office -- Direct Locals preference 2 destination-pattern 9[2,3,5-7].... port 1/0/8 ! dial-peer voice 909 pots description Office -- Direct Locals preference 3 destination-pattern 9[2,3,5-7].... port 1/0/9 ! dial-peer voice 910 pots description Office -- Direct Locals preference 4 destination-pattern 9[2,3,5-7].... port 1/0/10 ! dial-peer voice 911 pots description Office -- Direct Locals preference 5 destination-pattern 9[2,3,5-7].... port 1/0/11 ! dial-peer voice 808 pots description Office -- Direct National preference 2 destination-pattern 98.......... port 1/0/8 forward-digits 11 ! dial-peer voice 809 pots description Office -- Direct National preference 3 destination-pattern 98.......... port 1/0/9 forward-digits 11 ! dial-peer voice 810 pots description Office -- Direct National preference 4 destination-pattern 98.......... port 1/0/10 forward-digits 11 ! dial-peer voice 811 pots description Office -- Direct National preference 5 destination-pattern 98.......... port 1/0/11 forward-digits 11

Я суть понял, но меня сейчас проблема другого плана. До этого я когда звонил дебаг писал что звонок попадает под диалпиры 1000 и 5000. Он обрабатывал первый и давал отбой звонка. Тут было все понятно, я выключал 1000 и у меня работал IVR через 5000.

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

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

Сложно сказать. Возможно у вас есть еще диалпиры помимо этих, и вновь созданные подключились в конце списка. В этом случае нужно удалить все диалпиры и пересоздать все в нужном порядке.
Создайте список нужных диалпиров, в последовательности подобной той что я привёл.

Далее вам пригодяится:
Проверка dial-plan
show dial-peer voice summary

show dialplan number 984843943652

Дебаг dialpeer
debug voip dialpeer

Здравствуйте, настроил все как положено, ivr работает, но нельзя переводить звонок

цитата
"Доброго времени суток!
обнаружил еще один "баг" данной настойки:
при соединении с секретарем или любым внутренним номером звонок потом нельзя перевести куда либо еще на другой номер. Он просто повисает на второй линии как будто в режиме удержания, а не трансфера."

точно такая же проблема, кто то уже нашёл как с этим бороться?

Добрый день,
часто проблема не в скрипте, но в настройках шлюза.
Могу сказать, что скрипт точно рабочий при подключении через FXO, а также через E1.
Для начала попробуйте исключить скрипт: пусть входящие звонки валятся напрямую на секретаря. Проверьте, будет ли работать перевод в cлучае отсутствия скрипта.

убрал настройки ivr, входящий вызов попадает на секретаря, после чего вызов перенаправляется на другие номера нармально
если входящий звонок идет на ivr и после этого перенаправляется на секретаря или на какой-то другой внутренний номер, то переводит не получается

Страницы

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Допустимые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и абзацы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и абзацы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Target Image