Страница 1 из 1

Asterisk AGI IVR

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

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

Добавлено: 05 ноя 2009, 14:24
busc
Вышел новый релиз 0.9.4.
Основное нововведение - конфигурация в формате JSON

Добавлено: 06 ноя 2009, 11:46
busc
На текущий момент 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

Добавлено: 06 ноя 2009, 12:20
Obi Van
Большое спасибо за проект! :up:
Уже пробую. Сама концепция очень хорошая. Меньше телодвижений, меньше исправлений, меньше ошибок, но нужный результат.

Добавлено: 12 ноя 2009, 10:12
fabi
Спасибо за такую чудесную нужную разработку!!!
Очень удобно ! Единственное чего не хватает, такого же удобного веб-интерфейса. :roll:

Добавлено: 12 ноя 2009, 15:18
busc
В проекте

Добавлено: 08 дек 2009, 12:24
busc
Добавлена команда "*", которая позволяет запускать команды Asterisk не завершая меню среди прочих команд.
Механизм в превую очередь находит применение в организации пауз между проигрыванием сообщений.

Код: Выделить всё

say=some-wav|*=Wait 5|say=another-wav
собственно сам релиз http://sourceforge.net/project/platform ... _id=285035

Добавлено: 04 мар 2010, 16:23
busc
В поле userfield теперь складывается история ввода DTMF с терминала.
Так если были нажаты клавиши (1, 4, 3, 0, 3, 8), то в CDR(userfield) будет записано:

Код: Выделить всё

->1->4->3->0->3->8
Глядя в конфигурационный файл phpivr.conf можно запросто восстановить последовательность прохождения меню.
Дальше дело за аналитическим складом ума.

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

ссылка та же))

Добавлено: 10 мар 2010, 22:33
fabi
есть ли какието надежды увидеть веб интерфейс в скором будущем ?

Добавлено: 11 мар 2010, 12:49
busc
есть, уже пишу ))
если под web интерфейсом понимается то в чем можно конфигурацию редактировать

Добавлено: 12 мар 2010, 15:46
fabi
а где "редактирование" там и добавление,удаление ;)
вообщем интерес есть, ждем результатов :)

Добавлено: 18 мар 2010, 01:48
someone
А поддержка sql есть/планируется?

Добавлено: 07 май 2010, 08:10
koqep
Внимание!!! тех кто использует версию 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

Добавлено: 07 май 2010, 15:19
fabi
Оппаньки ! спасибо :)

Added after 2 minutes:

а есть какие то новости по PHPIVR ?

Добавлено: 19 май 2010, 23:05
fabi
является ли параметр "name" обязательным ?

Добавлено: 04 июн 2010, 19:56
bartram
Как сделать, чтобы не бросало трубку, после окончания проигрывания файла и ожидания нажатия, как сделать чтобы ожидание нажатия было долгим?

Добавлено: 17 июн 2010, 11:27
busc
bartram писал(а):Как сделать, чтобы не бросало трубку, после окончания проигрывания файла и ожидания нажатия, как сделать чтобы ожидание нажатия было долгим?
phpivr.conf в студию

Added after 12 minutes:
fabi писал(а):является ли параметр "name" обязательным ?
Нет, он используется только для вывода в консоли в строке

Код: Выделить всё

Разбираем опции меню NAME=Bla bla bla'

Добавлено: 05 июл 2010, 11:02
bartram
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"
        }


Добавлено: 12 июл 2010, 14:24
busc
Вот два варианта.
Здесь проигрываний будет 3, а потом бросит трубку

Код: Выделить всё

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

Код: Выделить всё

,"options" : "say=ivr/main,prompt|menu=common" 

Добавлено: 29 июл 2010, 13:17
koqep
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:

вот лог

Код: Выделить всё

[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]

Добавлено: 30 июл 2010, 12:13
busc
koqep писал(а): подскажите почему не набирает номер по transfer=351, нажимаю "3" сразу же короткие гудки
Dialplan настроен?
extensions.conf

Добавлено: 02 авг 2010, 07:32
koqep
с диалпланом и с phpivr все в порядке, косяк был у меня, для peer'а было выставлен call-limit=1

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

Пара ошибок поправлено.

Добавлено: 21 авг 2010, 08:23
busc
Домашняя страница переехала
http://sites.google.com/site/grygoriim/devel/phpivr

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