Инструменты пользователя

Инструменты сайта


kb:asterisk:ami:originate

Команда Asterisk Manager API: Originate

Назначение

Совершение исходящего вызова.

Параметры команды

  1. Channel: Название канала, с которого совершается исходящий вызов (В том же формате, как если бы Вы совершали вызов этому абоненту командой Dial.)
  2. Context: Название контекста для совершения исходящего вызова (используется только совместно с параметрами Exten и Priority)
  3. Exten: Extension to use on connect (используется только совместно с параметрами Context и Priority)
  4. Priority: Priority to use on connect (используется только совместно с параметрами Context и Exten)
  5. Timeout: Таймаут (в миллисекундах) для соединения с инициатором исходящего вызова (значение по умолчанию: 30000 миллисекунд).
  6. CallerID: Значение CallerID, используемое для совершения исходящего вызова.
  7. Variable: Установка переменных канала (максимум 32). Переменные будут установлены для обоих каналов, участвующих в соединении (локального, для абонента от которого совершается вызов и для вызываемого канала).
  8. Account: Значение для “Account code” исходящего вызова.
  9. Application: Команда плана набора, используемая для совершения исходящего вызова (используется параметр “Data”, для указания ее параметров)
  10. Data : Параметры команды плана набора, используемой для совершения исходящего вызова.
  11. Async: Если указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды, совершающей исходящий вызов)
  12. 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, то он сможет выполнить команду операционной системы на вашем сервере, что совсем не безопасно!

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

kb/asterisk/ami/originate.txt · Последние изменения: 2014/11/14 22:32 (внешнее изменение)