@gleb_uk

Asterisk AGI, проверка статуса заказа путем ввода клиентов DTMF номера. Как реализовать?

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

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

Вариант с определением номера:
;Вызваем 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[1];
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
 
// Получили статус предположим что они бывают Ready и Please_Wait
$status=$row["status"];
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();
?>
  • Вопрос задан
  • 953 просмотра
Решения вопроса 1
sptm
@sptm
software developer / DevOps engineer
Получить от клиента DTMF можно как-то так:
$sound = 'enter_digits_and_press_#'; //файл со звуковым сообщением
$timeout = 20000; //таймаут для ввода DTMF - 20 секунд (в миллисекундах)
$max_dtmf_input = 10; //разрешить максимум 10 символов DTMF

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

Далее содержимое переменной $code можно использовать в SQL-запросе для определения статуса заказа.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
falsebyte
@falsebyte
Я бы считал DTMF до вызова AGI средствами Asterisk
exten => s,n,DigitTimeout(4)  
exten => s,n,ResponseTimeout(5) 
exten => s,n,Read(code,say-enter-dtmf-code,10)
exten => s,n,AGI(check_status.php, ${code})

И передал аргументом в AGI код который считан по DTMF.
Соотвественно в скрипте у вас $argv[1] - номер заказа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы