Команда 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”.
Обратите внимание, что таймаут, указанный в “Timeout”, имеет отношение только к первой стадии вызова (совершение вызова по каналу из “Channel”). Все остальные таймауты вызова второй стороны могут быть указаны, например, в параметрах команды Dial.


Использование параметра 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

Где номер 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(), что позволит динамически задавать таймаут для выполнения команды операционной системы.

Замечание: Подобные запросы нужно использовать с большой осторожностью, т.к. если кто-либо получит доступ к Manager API, то он сможет выполнить команду операционной системы на вашем сервере, что совсем не безопасно!

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