Asterisk app: AGI
Выполнить приложение Aasterisk Gateway Interface (AGI) в канале вызова.
Описание
AGI позволяет Asterisk запустить внешнюю программу, написанную на любом языке, для контроля над каналами связи, воспроизведением аудио, чтения DTMF сигналов и др., связываясь с Asterisk через стандартный потоковый ввод/вывод - stdin/stdout:
AGI >>>-stdout->>> Asterisk Asterisk >>>-stdin->>> AGI
AGI приложение отправляет команды через STDOUT,
Asterisk передает данные через STDIN.
По состоянию версии Asterisk 1.6.x, выполнение диалплана будет продолжаться даже после завершения вызова, пока скрипт явно не сигнализирует прекратить, просто закрыв соединение или соответствующей командой.
Запущенный локально AGI скрипт получит сигнал SIGHUP, при разъединении в канале, если только не используется DeadAGI
FastAGI (удаленный) сервер, соответственно, получит HANGUP. Оба этих сигнала могут быть отключены установкой переменной Set(AGISIGHUP=no), непосредственно перед выполнением скрипта AGI.
Если же требуется, чтобы AGI приложение завершалось немедленно, после получения информации о разъединении канала, установите переменную Set(AGIEXITONHANGUP=yes)
Используйте команду agi show commands CLI, для получения полного списка команд AGI или agi show commands topic <command_name> для описания указанной команды:
*CLI> agi show commands
- agi 'answer' - Ответить на вызов.
- agi 'asyncagi break' - Прервать Async AGI
- agi 'channel status' - Получить состояние канала.
- agi 'database del' - Удалить ключ/значение внутренней БД Asterisk.
- agi 'database deltree' - Удалить keytree/value внутренней БД Asterisk.
- agi 'database get' - Получить значение внутренней БД Asterisk.
- agi 'database put' Добавить/вставить данные во внутреннюю БД Asterisk.
- agi 'exec' - Выполнить команду диалплана Asterisk.
- agi 'get data' - Приготовиться получать DTMF сигналы из канала.
- get_full_variable - Evaluates a channel expression
- get_option - Stream file, prompt for DTMF, with timeout.
- get_variable - Gets a channel variable.
- hangup - Hangup a channel.
- noop - Does nothing.
- receive_char - Receives one character from channels supporting it.
- receive_text - Receives text from channels supporting it.
- record_file - Records to a given file.
- say_alpha - Says a given character string.
- say_digits - Says a given digit string.
- say_number - Says a given number.
- say_phonetic - Says a given character string with phonetics.
- say_date - Says a given date.
- say_time - Says a given time.
- say_datetime - Says a given time as specified by the format given.
- send_image - Sends images to channels supporting it.
- send_text - Sends text to channels supporting it.
- set_autohangup - Autohangup channel in some time.
- set_callerid - Sets callerid for the current channel.
- set_context - Sets channel context.
- set_extension - Changes channel extension.
- set_music - Enable/Disable Music on hold generator
- set_priority - Set channel dialplan priority.
- set_variable - Sets a channel variable.
- stream_file - Sends audio file on channel.
- control_stream_file - Sends audio file on channel and allows the listener to control the stream.
- tdd_mode - Toggles TDD mode.
- verbose - Logs a message to the asterisk verbose log.
- wait_for_digit - Waits for a digit to be pressed.
- speech_create - Creates a speech object.
- speech_set - Sets a speech engine setting.
- speech_load grammar - Loads a grammar.
- speech_unload grammar - Unloads a grammar.
- speech_activate grammar - Activates a grammar.
- speech_deactivate_grammar - Deactivates a grammar.
- speech_recognize - Recognizes speech.
- gosub - Cause the channel to execute the specified dialplan subroutine.
Приложение диалплана Asterisk AGI возвращает ${AGISTATUS} переменную с одним из следующих значений:
- SUCCESS
- FAILURE
- NOTFOUND
- HANGUP
Синтаксис
AGI(command,arg1,arg2,…)
$argv[1]
$argv[2]
Когда Asterisk запускает скрипт AGI, он подает переменные канала в скрипт через STDIN. Имена переменных начинаются с «agi_» и отделяются от значений двоеточием и пробелом. Хотя фактические имена переменных канала могут быть в верхнем регистре, но имена, передаваемые сценарием AGI всегда в нижнем регистре. Глобальные переменные не передаются в скрипт AGI. Для них используется команда AGI - get variable.
Переменные передаваемые из Asterisk в скрипт:
- agi_request: Имя файла скрипта AGI.
- agi_channel: Создаваемый канал.
- agi_language: Язык используемый каналом.
- agi_type: Тип (технология) создаваемого канала.
- agi_uniqueid: Уникальный идентификатор (unique ID) вызова.
- agi_version: Версия Asterisk (после Asterisk 1.6).
- agi_calleridv: Номер caller ID (или “unknown”).
- agi_calleridname: Имя caller ID (или “unknown”).
- agi_callingpres: Презентация callerid.
- agi_callingani2: Переменный ani2 PRI канала.
- agi_callington: Тип номера а PRI канале.
- agi_callingtns: An optional 4 digit number (Transit Network Selector).
- agi_dnid: The dialed number id (or “unknown”).
- agi_rdnis: The referring DNIS number (or “unknown”).
- agi_context: контекст в extensions.conf.
- agi_extension: Вызываемый номер (dnis).
- agi_priority: приоритет диалплана.
- agi_enhanced: Значение флага 1.0, если выполняется EAGI скрипт, иначе 0.0.
- agi_accountcode: Аккаунт-код создаваемого канала.
- agi_threadid: Thread ID AGI скрипта.
- agi_arg_N: Аргумент, где N, номер аргумента(ARG1..)
См. также