Внимание!
Эта wiki об устаревших версиях
Документация к актуальной версии интеграции 1С и телефонии доступна по ссылке

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

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


doc:1cajam:api:originate

Это старая версия документа!


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

Совершение исходящего вызова или выполнение Shell скрипта.

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

  • 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: Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать, когда выполняется несколько асинхронных запросов одновременно.
Для переменной Variable не применяется URLENCODE, имейте это ввиду при передаче сложных переменных!

Последовательность событий при совершении исходящего вызова

Первое, совершается вызов по каналу, указанному в параметре 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",,);

Комментарии

doc/1cajam/api/originate.1328107142.txt.gz · Последние изменения: 2014/11/14 22:32 (внешнее изменение)