Команда Asterisk Manager API: Originate
Назначение
Совершение исходящего вызова.
Параметры команды
- Channel: Название канала, с которого совершается исходящий вызов (В том же формате, как если бы Вы совершали вызов этому абоненту командой Dial.)
- Context: Название контекста для совершения исходящего вызова (используется только совместно с параметрами Exten и Priority)
- Exten: Extension to use on connect (используется только совместно с параметрами Context и Priority)
- Priority: Priority to use on connect (используется только совместно с параметрами Context и Exten)
- Timeout: Таймаут (в миллисекундах) для соединения с инициатором исходящего вызова (значение по умолчанию: 30000 миллисекунд).
- CallerID: Значение CallerID, используемое для совершения исходящего вызова.
- Variable: Установка переменных канала (максимум 32). Переменные будут установлены для обоих каналов, участвующих в соединении (локального, для абонента от которого совершается вызов и для вызываемого канала).
- Account: Значение для “Account code” исходящего вызова.
- Application: Команда плана набора, используемая для совершения исходящего вызова (используется параметр “Data”, для указания ее параметров)
- Data : Параметры команды плана набора, используемой для совершения исходящего вызова.
- Async: Если указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды, совершающей исходящий вызов)
- ActionID: Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать, когда выполняется несколько асинхронных запросов одновременно.
Последовательность событий при совершении исходящего вызова
- Первое, совершается вызов по каналу, указанному в параметре Channel.
- Далее, после того как установлено соединение по этому каналу (на вызов ответили), будет запущена процедура исходящего вызова.
- Это может быть или выполнение команд из указанной точки плана набора: номер екстеншена, указанного в параметре Exten, в контексте из параметра Context, с номером приоритета из “Priority”.
- Или вызов совершается с помощью команды плана набора из параметра “Application” с ее параметрами из “Data”.
Использование параметра Async приводит к генерации manager API события (Event) - OriginateResponse, которое содержит код ошибки в поле reason, если оно есть.
Код ошибки может принимать следующие значения:
0 = Номер или екстеншен не найден.
1 = Нет ответа (no answer)
4 = Успешное выполнение (answered)
8 = Перегрузка или абонент не доступен (congested or not available)
Пример
Совершение вызова с канала SIP на указанный номер.
В данном случае исходящий вызов на номер внешнего абонента не будет совершаться до тех пор, пока наш SIP абонент не ответит на вызов:
Action: Originate
Channel: SIP/101test
Context: default
Exten: 8135551212
Priority: 1
Callerid: 3125551212
Timeout: 30000
Variable: var1=23|var2=24|var3=25
ActionID: ABC45678901234567890
Channel: SIP/101test
Context: default
Exten: 8135551212
Priority: 1
Callerid: 3125551212
Timeout: 30000
Variable: var1=23|var2=24|var3=25
ActionID: ABC45678901234567890
Где номер 8135551212 – это локальный городской номер телефона.
В данном примере также показано, как устанавливать переменные канала в Originate запросе.
Обратите внимание: Что параметры (в данном случае набор переменных канала) в версии 1.6 (и выше) должны отделяться друг от друга символом “,” (запятой), а не символом “|”. Чтобы полностью быть уверенным, какой разделитель используется в Вашей версии, можно в исходных кодах взглянуть на содержимое файла “include/asterisk/app.h”, на предмет определения конструкции с именем “AST_STANDARD_APP_ARGS”. Там вы сразу поймете, какой символ используется в качестве разделителя в наборе параметров.
При использовании данного примера, вызов абонента SIP/101test будет завершен, если он не ответит в течение 30 секунд.
Пример
Совершение вызова с внешнего канала на локальный екстеншен.
В данном случае вызов локального екстеншена не будет совершаться до тех пор, пока не ответят по внешнему ZAP каналу:
Action: Originate
Channel: Zap/g2/8135551212
Context: default
Exten: 101
Priority: 1
Timeout: 30000
Callerid: 3125551212
Channel: Zap/g2/8135551212
Context: default
Exten: 101
Priority: 1
Timeout: 30000
Callerid: 3125551212
Тут екстеншен 101 – это наш локальный SIP телефон.
Пример
Данный, насколько странный пример, демонстрирует, как с помощью AMI команды Originate выполнить команду операционной системы:- Если Вам нужно, совершить вызов с “пустого места” в какую-либо точку плана набора, то в качестве “пустого места” можно использовать канал типа Local.
- Экстеншен 1 в контексте dummy, может представлять собой конструкцию вида: 1,Answer() 2,Wait(30). Команда Wait в этой конструкции необходима, чтобы дать время на выполнение команды на другом конце соединения (команды операционной системы). При необходимости вы можете определить в запросе переменную, которая будет использоваться в качестве параметры команды Wait(), что позволит динамически задавать таймаут для выполнения команды операционной системы.
Замечание: Подобные запросы нужно использовать с большой осторожностью, т.к. если кто-либо получит доступ к Manager API, то он сможет выполнить команду операционной системы на вашем сервере, что совсем не безопасно!