Я использую phpagi $agi->get_data
для чтения цифры от пользователя.
В некоторых телефонах пользователь не нажимал ни одной клавиши, но воспроизведение звука немедленно останавливалось и получалось "D"
!!
Я много искал об этом, и похоже, что $agi-get_dat
получает данные DTMF, содержащие 0-9*#ABCD
.
1-й вопрос: почему мои пользователи получают "D"
, не нажимая ни одной клавиши!
2-й вопрос: как я могу игнорировать эти символы, чтобы не прерывать мой ivr.
Звездочка, игнорировать специальные символы DTMF в GET DATA
Ответы (2)
Phpagi getdata сделать этот вызов
https://wiki.asterisk.org/wiki/display/AST/AGICommand_stream+file
поэтому вы можете расширить его, добавив параметр разрешенных цифр. PhpAGI lib имеет открытый исходный код и исходный код.
На самом деле вы можете просто использовать вызов stream_file
stream_file (строка 677)
Воспроизведение данного аудиофайла, позволяющее прерывать воспроизведение цифрой DTMF. Эта команда аналогична команде GET DATA, но эта команда возвращается после нажатия первой цифры DTMF, в то время как GET DATA может накапливать любое количество цифр перед возвратом.
return: see evaluate for return information. ['result'] is -1 on hangup or error, 0 if playback completes with no digit received,
в противном случае десятичное значение тона DTMF. Используйте chr() для преобразования в ASCII. ссылка: http://www.voip-info.org/wiki-stream+file пример: проверка IP-адреса
массив, stream_file (строка $filename, [string $escape_digits = ''], целое число $offset)
string $filename: without extension, often in /var/lib/asterisk/sounds string $escape_digits integer $offset
вы можете проверить журналы с помощью следующей команды:
звездочка -ввввв
и вы можете проверить значение ввода, например, в php-коде:
$val = $agi->get_data exec("echo $val >> /tmp/output")
а затем проверьте этот файл: /tmp/output