Это старая версия документа!
Совершение исходящего вызова или выполнение Shell скрипта.
Первое, совершается вызов по каналу, указанному в параметре 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 абонент не ответит на вызов:
Процедура Originate() Channel = КаналАбонентаA; // Channel: Название канала, с которого совершается исходящий вызов (В том же формате, как если бы Вы совершали вызов этому абоненту командой Dial.) Context = Контекст; // Context: Название контекста для совершения исходящего вызова (используется только совместно с параметрами Exten и Priority) Exten = НомерАбонентаБ ;// Exten: Extension to use on connect (используется только совместно с параметрами Context и Priority) Priority = "1"; // Priority: Priority to use on connect (используется только совместно с параметрами Context и Exten) Timeout = ""; // Timeout: Таймаут (в миллисекундах) для соединения с инициатором исходящего вызова (значение по умолчанию: 30000 миллисекунд). CallerID = "MIKO_Abonent"; // CallerID: Значение CallerID, используемое для совершения исходящего вызова. Variable = ""; // Variable: Установка переменных канала (максимум 32). Переменные будут установлены для обоих каналов, участвующих в соединении (локального, для абонента от которого совершается вызов и для вызываемого канала). Account = "miko"; // Account: Значение для “Account code” исходящего вызова. Application = ""; // Application: Команда плана набора, используемая для совершения исходящего вызова (используется параметр “Data”, для указания ее параметров) Data = ""; // Data : Параметры команды плана набора, используемой для совершения исходящего вызова. Async = "1"; // Async: Если указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды, совершающей исходящий вызов) ActionID = "123123123"; // ActionID: Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать, когда выполняется несколько асинхронных запросов одновременно. Попытка Результат=""; Компонент.Originate(Channel,Context,Exten,Priority,Timeout,CallerID,Variable,Account,Application,Data,Async,ActionID,Результат); Сообщить("Результат оригинации "+Результат); Исключение Сообщить("Исключение при "+Элемент.Имя+" ошибка:"+ИнформацияОбОшибке()); КонецПопытки; КонецПроцедуры <code> Обратите внимание: Что параметры (в данном случае набор переменных канала) в версии 1.6 (и выше) должны отделяться друг от друга символом “,” (запятой), а не символом “|”. Чтобы полностью быть уверенным, какой разделитель используется в Вашей версии, можно в исходных кодах взглянуть на содержимое файла “include/asterisk/app.h”, на предмет определения конструкции с именем “AST_STANDARD_APP_ARGS”. Там вы сразу поймете, какой символ используется в качестве разделителя в наборе параметров. При использовании данного примера, вызов абонента SIP/101test будет завершен, если он не ответит в течение 30 секунд. При использовании AJAM запрос на оригинацию будет такой: <code> http://xxxxxxxx:8088/asterisk/mxml?action=Originate&channel=SIP/101test&context=default&exten=8135551212&priority=1&Callerid=3125551212&Timeout=30000&ActionID=ABC45678901234567890
Код на 1С
Компонента.Originate("SIP/101test","default","8135551212","1","30000","3125551212","var1=23|var2=24|var3=25",,,,,"1");
Пример
Совершение вызова с внешнего канала на локальный екстеншен. В данном случае вызов локального екстеншена не будет совершаться до тех пор, пока не ответят по внешнему ZAP каналу:
Action: Originate Channel: Zap/g2/8135551212 Context: default Exten: 101 Priority: 1 Timeout: 30000 Callerid: 3125551212
Тут екстеншен 101 – это наш локальный SIP телефон.
Код на 1С
Компонента.Originate("Zap/g2/8135551212","default","101","1","30000","3125551212",,,,,,"1");
Пример
Данный, насколько странный пример, демонстрирует, как с помощью AMI команды Originate выполнить команду операционной системы:
Action: Originate Channel: Local/1@dummy Application: System Data: /path/to/script
Код на 1С
Компонента.Originate("Local/1@dummy",,,,,,,,"System","/path/to/script",,);