AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Asterisk AGI IVR

Asterisk IP PBX 25 сообщений 03.11.2009 11:00 - 21.08.2010 08:23
#1 03.11.2009 11:00

Asterisk AGI IVR


В результате долгих работ и переписывания отдельных частей Asterisk2Billing,
набралось по немногу готовых частей кода на PHP, которые я почистил и соединил
в проекте http://sourceforge.net/projects/phpivr/.
Интересующихся темой создания многоуровневого IVR на базе Asterisk приглашаю к использованию и обсуждению возможностей.
Задачи, которые стояли передо мной, текущим проектом покрыты. Все новшества будут реализовываться по надобности и возможности.
Баги, замечания, предложения и прочее можно постить непосредственно в этот топик, но лучше в соответствующие разделы проекта на SF.net
Желающих принять участие в разработке прошу обращаться в личку.

Кстати этот же IVR я интегрировал в Asterisk2Billing на входящие вызовы для тех у кого есть прямые входящие номера.
#2 05.11.2009 14:24

Вышел новый релиз 0.9.4.
Основное нововведение - конфигурация в формате JSON
#3 06.11.2009 11:46

На текущий момент IVR конфигурируется из консоли и конфиг его лежит в /etc/asterisk/phpivr.conf
Предположим что нам необходимо сделать интерактивный автоответчик, который вкратце скажет в какую компанию
поступил звонок и переадресовать вызов на отдел (1001) продаж если нажать 1, отдел копоративных клиентов (1002) по нажатию 2.
Ну и как обычно бывает - соединить с секретарем (1000) если нажать 0 или дождаться окончания сообщения. Также предусмотрим
случай, когда с терминала введут dtmf не предусмотренный меню - сообщим о том чтобы еще раз прослушали меню
и проиграем его заново.

Для реализации этой простой задачи нам потребуется:
1) звуковой файл приветствия - welcome.gsm
2) звуковой файл описывающий доступное меню (его можно совместить с приветствием) - main-menu.gsm
3) звуковой файл с просьбой прослушать меню еще раз и сделать свой выбор - please-make-your-choice.gsm

Записанные файлы положим в папку /var/lib/asterisk/sounds/ivr, установим на них соответствующие права

в phpivr.conf пишем:
Код:
{
"common" : {
"name" : "Main menu of my company IVR"
,"options" : "say=ivr/welcome|say=ivr/main-menu,prompt,loop=1|transfer=1000"
,"inputs" : {
"0" : "transfer=1000"
,"1" : "transfer=1001"
,"2" : "transfer=1002"
}

,"inputnotfound_act" : "say=ivr/please-make-your-choice|menu=common"
}

}

Здесть надо отметить, что во время проигрывания welcome нажатие любой клавиши приведет к его завершению, и
сразу же будет проигрываться main-menu. И можно опустить опцию loop=1 поскольку количество проигрываний по
умолчанию равно 1, но дописано мной для лучшего понимания написанного.

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

Added after 1 minutes:

В процессе написания примера был обнаружен баг:
Завершалось меню если небыло введено ни одного dtmf в случае ожидания по команде transfer или prompt

Собственно вышел новый bugfix release 0.9.5
#4 06.11.2009 12:20

Большое спасибо за проект! Up
Уже пробую. Сама концепция очень хорошая. Меньше телодвижений, меньше исправлений, меньше ошибок, но нужный результат.
#5 12.11.2009 10:12

Спасибо за такую чудесную нужную разработку!!!
Очень удобно ! Единственное чего не хватает, такого же удобного веб-интерфейса. Rolling Eyes
#6 12.11.2009 15:18

В проекте
#7 08.12.2009 12:24

Добавлена команда "*", которая позволяет запускать команды Asterisk не завершая меню среди прочих команд.
Механизм в превую очередь находит применение в организации пауз между проигрыванием сообщений.
Код:
say=some-wav|*=Wait 5|say=another-wav

собственно сам релиз http://sourceforge.net/project/platformd ... _id=285035
#8 04.03.2010 16:23

В поле userfield теперь складывается история ввода DTMF с терминала.
Так если были нажаты клавиши (1, 4, 3, 0, 3, Cool, то в CDR(userfield) будет записано:
Код:
->1->4->3->0->3->8

Глядя в конфигурационный файл phpivr.conf можно запросто восстановить последовательность прохождения меню.
Дальше дело за аналитическим складом ума.
#9 10.03.2010 14:37

В проект добавлен online монитор, пока совсем простой, но все же...
Монитор с промежутками в 5 секунд показывает звонки которые обслуживаются IVR-ом

ссылка та же))
#10 10.03.2010 22:33

есть ли какието надежды увидеть веб интерфейс в скором будущем ?
#11 11.03.2010 12:49

есть, уже пишу ))
если под web интерфейсом понимается то в чем можно конфигурацию редактировать
#12 12.03.2010 15:46

а где "редактирование" там и добавление,удаление Wink
вообщем интерес есть, ждем результатов Smile
#13 18.03.2010 01:48

А поддержка sql есть/планируется?
#14 07.05.2010 08:10

Внимание!!! тех кто использует версию php 5.3 или новее, т.к. в phpIVR входит сборка phpAGI то его следует немного поправить

    - открываем phpagi.php
    - переходим на строчку 1184
    - перименовываем function goto($context, $extension='s', $priority=1) в function ast_goto($context, $extension='s', $priority=1)

http://asteriskforum.ru/viewtopic.php?p= ... pAgi#38743
#15 07.05.2010 15:19

Оппаньки ! спасибо Smile

Added after 2 minutes:

а есть какие то новости по PHPIVR ?
#16 19.05.2010 23:05

является ли параметр "name" обязательным ?
#17 04.06.2010 19:56

Как сделать, чтобы не бросало трубку, после окончания проигрывания файла и ожидания нажатия, как сделать чтобы ожидание нажатия было долгим?
#18 17.06.2010 11:27

bartram писал(а):
Как сделать, чтобы не бросало трубку, после окончания проигрывания файла и ожидания нажатия, как сделать чтобы ожидание нажатия было долгим?


phpivr.conf в студию

Added after 12 minutes:

fabi писал(а):
является ли параметр "name" обязательным ?

Нет, он используется только для вывода в консоли в строке
Код:
Разбираем опции меню NAME=Bla bla bla'
#19 05.07.2010 11:02

busc писал(а):
phpivr.conf в студию

Код:

"common" : {
"name" : "1st menu"
,"options" : "say=ivr/main,prompt"
,"inputs" : {
"1" : "menu=main-1-q"
,"0" : "menu=common"
}

,"inputnotfound_act" : "menu=common"
}

#20 12.07.2010 14:24

Вот два варианта.
Здесь проигрываний будет 3, а потом бросит трубку
Код:
,"options" : "say=ivr/main,prompt,loop=3"

Здесь проигрываний будет пока абонент не бросит трубку ))
Код:
,"options" : "say=ivr/main,prompt|menu=common"
#21 29.07.2010 13:17

admin@superserver:/etc/asterisk# cat ./phpivr.conf
Код:

{
"common" : {
"name" : "Common IVR menu"
,"options" : "*=WAIT 2|say=ivr/0,prompt,loop=1|menu=welcome_short"
,"inputs" : {
"3" : "transfer=351"
,"1" : "menu=time_work"
,"2" : "menu=services"

}
,"inputnotfound_act" : "say=ivr/invalid|menu=welcome_short"
}
}


подскажите почему не набирает номер по transfer=351, нажимаю "3" сразу же короткие гудки

Added after 2 minutes:

вот лог
[code]
[Jul 29 18:17:29] IVR.php,common: Class.IVR.php:243 - Пытаемся получить IVR меню ID='common'
[Jul 29 18:17:29] IVR.php,common: Class.IVR.php:82 - Разбираем опции меню NAME='Common IVR menu' | ID='common'
[Jul 29 18:17:29] IVR.php,common: Class.IVR.php:83 - Array
[Jul 29 18:17:29] IVR.php,common: (
[Jul 29 18:17:29] IVR.php,common: [name] => Common IVR menu
[Jul 29 18:17:29] IVR.php,common: [options] => *=WAIT 2|say=ivr/0,prompt,loop=1|menu=welcome_short
[Jul 29 18:17:29] IVR.php,common: [inputs] => Array
[Jul 29 18:17:29] IVR.php,common: (
[Jul 29 18:17:29] IVR.php,common: [3] => transfer=351
[Jul 29 18:17:29] IVR.php,common: [1] => menu=time_work
[Jul 29 18:17:29] IVR.php,common: [2] => menu=services
[Jul 29 18:17:29] IVR.php,common: )
[Jul 29 18:17:29] IVR.php,common:
[Jul 29 18:17:29] IVR.php,common: [inputnotfound_act] => say=ivr/invalid|menu=welcome_short
[Jul 29 18:17:29] IVR.php,common: )
[Jul 29 18:17:29] IVR.php,common:
[Jul 29 18:17:29] IVR.php,common: Class.IVR.php:250 - IVR меню ID='common' успешно получено
[Jul 29 18:17:29] IVR.php,common: Class.IVR.php:252 - Выполняем меню ID='common'
[Jul 29 18:17:29] IVR.php,common: Class.IVR.php:135 - Опции обработчика : '*=WAIT 2|say=ivr/0,prompt,loop=1|menu=welcome_short'
[Jul 29 18:17:31] IVR.php,common: Class.IVR.php:94 - Устанавливаем счетчик проигрывания сообщения loop='1'
[Jul 29 18:17:31] IVR.php,common: Class.IVR.php:99 - Проигрываем сообщение 'ivr/0' с ожиданием нажатия
[Jul 29 18:17:31] IVR.php,common: Class.IVR.php:100 - Максимальное количество символов для ввода prompt_count='1'
[Jul 29 18:17:33] IVR.php,common: Class.IVR.php:274 - Была нажата кнопка '3'
[Jul 29 18:17:33] IVR.php,common: Class.IVR.php:281 - История ввода:->3
[Jul 29 18:17:33] IVR.php,common: Class.IVR.php:284 - Обработчик последовательности '3'
[Jul 29 18:17:33] IVR.php,common: Class.IVR.php:135 - Опции обработчика : 'transfer=351'
[Jul 29 18:17:33] IVR.php,common: Class.IVR.php:201 - Переадресовываем вызов на '351'
[Jul 29 18:17:33] IVR.php,common: IVR.php:25 - Array
[Jul 29 18:17:33] IVR.php,common: (
[Jul 29 18:17:33] IVR.php,common: [code] => 200
[Jul 29 18:17:33] IVR.php,common: [result] => 0
[Jul 29 18:17:33] IVR.php,common: [data] =>
[Jul 29 18:17:33] IVR.php,common: )
[Jul 29 18:17:33] IVR.php,common:
[/code]
#22 30.07.2010 12:13

koqep писал(а):

подскажите почему не набирает номер по transfer=351, нажимаю "3" сразу же короткие гудки

Dialplan настроен?
extensions.conf
#23 02.08.2010 07:32

с диалпланом и с phpivr все в порядке, косяк был у меня, для peer'а было выставлен call-limit=1
#24 16.08.2010 15:34

v0.13.0 выложена
Переименовал функцию PHPAGI goto в agigoto
Переписана ф-ция json_decode. Добавлена замена `имени файла` на его содержимое. Допускаются переносы строк в блоках команд.

Пара ошибок поправлено.
#25 21.08.2010 08:23

Домашняя страница переехала
http://sites.google.com/site/grygoriim/devel/phpivr

Внимание !!!!
С версии 0.12.0 таг inputnotfount_act был заменен на invalidinput_act.
Заметил только сейчас, что кругом была ошибка в конфигах.
При вводе dtmf, которого небыло в меню, ничего не происходило. т.е проигрывалось меню заново.