Команда Read()


Назначение

Чтение DTMF последовательности, которую набирает абонент.

Описание


В Asterisk версии 1.0.X:
Read(variable[|filename][|maxdigits][|option])

Начиная с Asterisk версии 1.2:
Read(variable[|filename][|maxdigits][|option][|attempts][|timeout])

Начиная с Asterisk версии 1.6:
Read(variable[,filename[&filename2...]][,maxdigits][,option][,attempts][,timeout])

Считывает в указанную переменную, вводимую пользователем, DTMF последовательность, завершенную символом '#', заданное число раз.

Параметры команды:
  • variable: имя переменной, в которой будет сохранена введенная пользователем последовательность.
  • filename: имя звукового файла (или файлов, начиная с версии 1.6) или тона, если используется опция 'i', проигрываемых пользователю до считывания последовательности.
  • maxdigits: максимально возможное число считываемых цифр. Считывание прекращается если введено максимальное количество цифр (в этом случае от пользователя не требуется нажатия кнопки '#'). Значение по умолчанию: 0 - нет лимита - команда ждет, пока пользователь не нажмет кнопку '#'. Любое значение меньше нуля приводят к такому же результату. Максимальное значение для этого параметра - 255.
  • option: дополнительные параметры, допустимые значения 's', 'i', 'n':
    • 's' - указывает немедленно закончить выполнение команды, если линия связи не в соединенном состоянии.
    • 'i' - вместо имени файла/файлов указаны "indication tone", из файла indications.conf.
    • 'n' - для чтения цифр, даже если линия не в соединенном состоянии.
  • attempts: если больше 1, то указывается число попыток чтения последовательности, в том случае, если пользователь ничего не набрал.
  • timeout: Количество секунд ожидания ввода пользователя. Если значение больше нуля, то это значение будет использоваться вместо значения таймаута по умолчанию. (Начиная с версии 1.6, могут использоваться не целые значения).



Начиная с версии 1.6, данное приложение по завершении устанавливает значение переменной канала READSTATUS в соответствии с результатом своей работы, в одно из значений:

OK | ERROR | HANGUP | INTERRUPTED | SKIPPED | TIMEOUT


Пример

 ; dial 307 = для перезапуска Asterisk
 ; Замечание: вместо Read() мы также можем использовать команду Authenticate() 
 exten => 307,1,DigitTimeout(4)         ; Установка Digit Timeout в 4 секунды
 exten => 307,2,ResponseTimeout(5)      ; Установка Response Timeout в 5 секунды
 ; Следующая команда проигрывает приглашение: "для перезапуска введите пароль"
 exten => 307,3,Read(Secret,posix-pass-restart-ast,3)   
 exten => 307,4,NoOp(${Secret})
 exten => 307,5,Gotoif($[${Secret} = 123]?6:9)
 exten => 307,6,Playback(posix-restarting) ; "Перезапуск asterisk"
 exten => 307,7,Wait(1)
 exten => 307,8,System(/usr/sbin/asterisk -rx reload)
 exten => 307,9,Hangup


Коды возврата:

Возвращает -1 при разрыве связи или ошибке, 0 - в противном случае.

Ссылки по теме