Совершение исходящего вызова.
Первое, совершается вызов по каналу, указанному в параметре Channel. Далее, после того как установлено соединение по этому каналу (на вызов ответили), будет запущена процедура исходящего вызова. Это может быть или выполнение команд из указанной точки плана набора: номер екстеншена, указанного в параметре Exten, в контексте из параметра Context, с номером приоритета из “Priority”. Или вызов совершается с помощью команды плана набора из параметра “Application” с ее параметрами из “Data”. Обратите внимание, что таймаут, указанный в “Timeout”, имеет отношение только к первой стадии вызова (совершение вызова по каналу из “Channel”). Все остальные таймауты вызова второй стороны могут быть указаны, например, в параметрах команды Dial.
Использование параметра Async приводит к генерации manager API события (Event) - OriginateResponse, которое содержит код ошибки в поле reason, если оно есть. Код ошибки может принимать следующие значения:
В данном случае исходящий вызов на номер внешнего абонента не будет совершаться до тех пор, пока наш 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
Где номер 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
Тут екстеншен 101 – это наш локальный SIP телефон.
Данный, насколько странный пример, демонстрирует, как с помощью AMI команды Originate выполнить команду операционной системы:
Action: Originate Channel: Local/1@dummy Application: System Data: /path/to/script
Если Вам нужно, совершить вызов с “пустого места” в какую-либо точку плана набора, то в качестве “пустого места” можно использовать канал типа Local. Экстеншен 1 в контексте dummy, может представлять собой конструкцию вида: 1,Answer() 2,Wait(30). Команда Wait в этой конструкции необходима, чтобы дать время на выполнение команды на другом конце соединения (команды операционной системы). При необходимости вы можете определить в запросе переменную, которая будет использоваться в качестве параметры команды Wait(), что позволит динамически задавать таймаут для вполнения команды операционной системы.