Asterisk AGI, проверка статуса заказа путем ввода клиентом DTMF номера - Форум об интернет-маркетинге
Этот сайт существует на доходы от рекламы.
Пожалуйста, выключите AdBlock.
Вернуться   Форум об интернет-маркетинге > >
Ответ
 
Опции темы
Старый 12.07.2017, 12:57   #1
Защитник острова
 
Аватар для savingleb
 
Регистрация: 15.04.2007
Адрес: Череповец > Tromsø
Сообщений: 1,353
Репутация: 218207

По умолчанию Asterisk AGI, проверка статуса заказа путем ввода клиентом DTMF номера

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

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

Вариант с определением номера, который сейчас есть:

PHP код:
;Вызваем php скрипт check_status.php  с аргументом номер клиента.
exten => s,n,AGI(check_status.php, ${CALLERID(number)})
 
<?php
//check_status.php скрипт для автоматического ответа по статусу заказа
//Подключаемся к базе данных (причем, можно отметить, что php имеет в своем наборе интерфейсы
//практически  ко всем типам баз данных которые только существуют)
$conn mysql_connect("localhost""mysql_user""mysql_password");
mysql_select_db("clients");
 
//Делаем выборку по номеру клиента
$sql "SELECT status
        FROM   clients
        WHERE  client_number = "
.$argv***91;1***93;;
$result mysql_query($sql);
$row mysql_fetch_assoc($result);
 
// Получили статус предположим что они бывают Ready и Please_Wait
$status=$row***91;"status"***93;;
mysql_free_result($result);
 
//Подключаем класс для работы с Asterisk
require('phpagi.php');
$agi = new AGI();
 
//Отвечаем на вызов клиента
$agi->answer();
 
// Проигрываем заранее заготовленные файлы Ready или Please_Wait /var/lib/asterisk/sounds
$agi->stream_file($status);
$agi->hangup();
?>
savingleb на форуме   Ответить с цитированием

Реклама
Старый 12.07.2017, 16:33   #2
hubbiton
Аспирант
 
Регистрация: 15.02.2010
Сообщений: 210
Репутация: 11278

По умолчанию Re: Asterisk AGI, проверка статуса заказа путем ввода клиентом DTMF номера

Это много проще делать в диалпланах самого астериска, чем писать на php и оттуда давать команды АТС. Или я неверно понял техзадание...
__________________
Продам домены с Google Apps Free.
hubbiton вне форума   Ответить с цитированием
Старый 12.07.2017, 16:49   #3
savingleb
Защитник острова
 
Аватар для savingleb
 
Регистрация: 15.04.2007
Адрес: Череповец > Tromsø
Сообщений: 1,353
Репутация: 218207

ТопикСтартер Re: Asterisk AGI, проверка статуса заказа путем ввода клиентом DTMF номера

Цитата:
Сообщение от hubbiton Посмотреть сообщение
Это много проще делать в диалпланах самого астериска, чем писать на php и оттуда давать команды АТС. Или я неверно понял техзадание...
Задание простое, человек звонит, попадает в IVR, один из пунктов который перенаправляет его на проверку готовности. Проигрывается запись с просьбой ввести номер заказа, человек вводит, введенный номер сверяется с базой (mysql, etc...) и после проверки выдается результат о готовности.
savingleb на форуме   Ответить с цитированием
Старый 12.07.2017, 16:53   #4
hubbiton
Аспирант
 
Регистрация: 15.02.2010
Сообщений: 210
Репутация: 11278

По умолчанию Re: Asterisk AGI, проверка статуса заказа путем ввода клиентом DTMF номера

Вполне реализуемо. Могу показать примеры "живьём". В личку.
hubbiton вне форума   Ответить с цитированием
Старый 13.07.2017, 16:25   #5
savingleb
Защитник острова
 
Аватар для savingleb
 
Регистрация: 15.04.2007
Адрес: Череповец > Tromsø
Сообщений: 1,353
Репутация: 218207

ТопикСтартер Re: Asterisk AGI, проверка статуса заказа путем ввода клиентом DTMF номера

Звонок - Просьба ввести номер квитанции, по результатам ответ о готовности, далее "Если хотите связаться с оператором, нажмите 0".

PHP код:
<?php
//check_status.php скрипт для автоматического ответа по статусу заказа
//Подключаемся к базе данных (причем, можно отметить, что php имеет в своем наборе интерфейсы
//практически  ко всем типам баз данных которые только существуют)
$conn mysql_connect("localhost""mysql_user""mysql_password");
mysql_select_db("clients");
 
//Подключаем класс для работы с Asterisk
require('phpagi.php');
$agi = new AGI();
 
//Отвечаем на вызов клиента
$agi->answer(); //ответить нужно до того, как мы попросим клиента ввести номер заказа

$sound 'enter_digits'//файл со звуковым сообщением
$timeout 20000//таймаут для ввода DTMF - 20 секунд (в миллисекундах)
$max_dtmf_input 6//разрешить максимум 10 символов DTMF

$dtmf $agi->get_data($sound$timeout$max_dtmf_input);
$code $dtmf***91;'result'***93;; //строка с введенными цифрами

//Делаем выборку по номеру заказа
$sql "SELECT status
        FROM   clients
        WHERE  client_number = "
.$code;
$result mysql_query($sql);
$row mysql_fetch_assoc($result);

$status=$row***91;"status"***93;;
mysql_free_result($result);
 
// Проигрываем заранее заготовленные файлы Ready или Please_Wait /var/lib/asterisk/sounds
$agi->stream_file($status);

$dtmf $agi->get_data('sound'200001); //проиграли sound, ждем кода длиной в 1 символ по DTMF
$code $dtmf***91;'result'***93;;

if(
$code == '0') {
    
$agi->exec('Goto',"ext-queues,61,1"); // номер очереди
} else {
    
$agi->hangup();
}
//$agi->hangup();

?>
savingleb на форуме   Ответить с цитированием
Старый 13.07.2017, 20:13   #6
hubbiton
Аспирант
 
Регистрация: 15.02.2010
Сообщений: 210
Репутация: 11278

По умолчанию Re: Asterisk AGI, проверка статуса заказа путем ввода клиентом DTMF номера

Вопрос, конечно, идеологический и "на вкус и цвет все фломастеры разные"...

Но, имхо, решать такую задачу таким путём примерно то же самое, как передавать переменные из одного php-скрипта в другой путём записи/чтения в файл или базу в то время, как существуют сессии и $_GET ))

Asterisk умеет работать напрямую с MYSQL и задача решается много проще без вызова внешних скриптов. При большой нагрузке, думаю, это будет иметь большое значение.
http://asterisk.ru/knowledgebase/Asterisk+cmd+MYSQL
hubbiton вне форума   Ответить с цитированием
Ответ




Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Текущее время: 15:44. Часовой пояс GMT +3.

Регистрация Справка Календарь Поддержка Все разделы прочитаны