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

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

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


doc:1cajam:api:originate

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:1cajam:api:originate [2011/12/10 06:53]
127.0.0.1 внешнее изменение
doc:1cajam:api:originate [2014/11/14 22:32] (текущий)
Строка 1: Строка 1:
 ====== Команда Asterisk Manager API: Originate ====== ====== Команда Asterisk Manager API: Originate ======
  
- +Совершение исходящего вызова или выполнение Shell скрипта.
-===== Назначение ===== +
- +
- +
-Совершение исходящего вызова.+
  
 ===== Параметры команды ===== ===== Параметры команды =====
- 
  
   * **Channel**:​ Название канала,​ с которого совершается исходящий вызов (В том же формате,​ как если бы Вы совершали вызов этому абоненту командой Dial.)   * **Channel**:​ Название канала,​ с которого совершается исходящий вызов (В том же формате,​ как если бы Вы совершали вызов этому абоненту командой Dial.)
Строка 21: Строка 16:
   * **Data** : Параметры команды плана набора,​ используемой для совершения исходящего вызова.   * **Data** : Параметры команды плана набора,​ используемой для совершения исходящего вызова.
   * **Async**: Если указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды,​ совершающей исходящий вызов)   * **Async**: Если указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды,​ совершающей исходящий вызов)
-  * **ActionID**: Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать,​ когда выполняется несколько асинхронных запросов одновременно.+  * **Codecs**: Список кодеков разделенный ​запятыми для использования в текущем вызове. 
 +  * **EarlyMedia**:​ Если указать “true” произойдет принудительное соединение в другим каналом в режиме EarlyMedia ((Параметр появился в компоненте версии 1.0.20))  
 +  * **ActionID**:​ Идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать,​ когда выполняется несколько асинхронных запросов одновременно
 +  * **Result**: В эту переменную будет возвращен результат выполнения функции.
  
 +<note important>​Все переменные передаваемые в функцию должны иметь тип Строка!</​note>​
 +
 +<note warning>​Для переменной Variable не применяется [[http://​ru.wikipedia.org/​wiki/​URL#​.D0.9A.D0.BE.D0.B4.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_URL|URLENCODE]],​ имейте это ввиду при передаче сложных переменных!
 +
 + ​Делайте замену символов на "​безопасные"​ в среде 1С. 
 +Например,​ символ пробела нужно заменить последовательностью %20, символ / заменяем на %2F и т.д. </​note>​
 ===== Последовательность событий при совершении исходящего вызова ===== ===== Последовательность событий при совершении исходящего вызова =====
  
Строка 48: Строка 52:
  
 Совершение вызова с канала SIP на указанный номер. Совершение вызова с канала SIP на указанный номер.
-В данном случае исходящий вызов на номер внешнего абонента не будет совершаться до тех пор, пока наш SIP абонент не ответит на вызов:+В данном случае исходящий вызов ​с номера 26 на номер внешнего абонента ​74952293042 ​не будет совершаться до тех пор, пока наш SIP абонент ​26 не ответит на вызов
 +На телефоне во время вызова будет отображаться "​26->​74952293042",​ во время вызова будет использоваться контекст "​from-internal"​.
  
-<​code>​ +<​code ​1c
-Action: ​Originate + Процедура ​Originate() 
-ChannelSIP/101test +  
-Context: ​default + Channel = "SIP/26";​  ​  //​ Channel:​ Название канала,​ с которого совершается исходящий вызов (В том же формате,​ как если бы Вы совершали вызов этому абоненту командой Dial.) 
-Exten: ​8135551212 + Context = "​from-internal"; ​  // Context: ​Название контекста для совершения исходящего вызова (используется только совместно с параметрами Exten и Priority) 
-Priority1 + Exten = "​74952293042"​ ;    // Exten: ​Extension to use on connect (используется только совместно с параметрами Context и Priority) 
-Callerid3125551212 + Priority = "1";​  ​  //​ PriorityPriority to use on connect (используется только совместно с параметрами Context и Exten) 
-Timeout: 30000 + Timeout = "";​  ​  //​ Timeout:​ Таймаут (в миллисекундах) для соединения с инициатором исходящего вызова (значение по умолчанию: 30000 миллисекунд). 
-Variable: ​var1=23|var2=24|var3=25 + CallerID = "​26->​74952293042";​ //​ CallerID:​ Значение CallerID, используемое для совершения исходящего вызова. 
-ActionIDABC45678901234567890 + Variable = "";​  ​  // Variable: ​Установка переменных канала (максимум 32). Переменные будут установлены для обоих каналов,​ участвующих в соединении (локального,​ для абонента от которого совершается вызов и для вызываемого канала). 
-</code>+ Account = "​miko";​  ​  //​ Account:​ Значение для “Account code” исходящего вызова. 
 + Application = "";​  ​  //​ Application:​ Команда плана набора,​ используемая для совершения исходящего вызова (используется параметр “Data”, для указания ее параметров) 
 + Data = "";​  ​  //​ Data : Параметры команды плана набора,​ используемой для совершения исходящего вызова. 
 + Async = "​1";​  ​  //​ AsyncЕсли указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды,​ совершающей исходящий вызов). 
 +        ​Codecs ​         =       "";​ 
 +        EarlyMedia ​     =       "";​ 
 + ActionID = "​123123123";​  ​  // ActionID: Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать,​ когда выполняется несколько асинхронных запросов одновременно. 
 +  
 + Попытка 
 + Результат="";​ 
 + Компонент.Originate(Channel,​ Context, Exten, Priority, Timeout, CallerID, Variable, Account, Application,​ Data, Async, Codecs, EarlyMedia, ActionID, Результат);​ 
 +   ​  ​       Сообщить("​Результат оригинации "​+Результат);​ 
 + Исключение 
 + Сообщить("​Исключение при "​+Элемент.Имя+"​ ошибка:"​+ИнформацияОбОшибке());​ 
 + КонецПопытки;​  
 +  
 +КонецПроцедуры
  
-Где номер 8135551212 – это локальный городской номер телефона. 
-В данном примере также показано,​ как устанавливать переменные канала в Originate запросе. 
- 
-Обратите внимание:​ Что параметры (в данном случае набор переменных канала) в версии 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 
 </​code>​ </​code>​
  
-<​note>​**Код на 1С** +Следующий пример демонстрирует выполнение команды Playback для ​проигрывания сотруднику c с внутренним номером 26 записи разговора из файла.
-<code 1C> +
-Компонента.Originate("​SIP/​101test","​default","​8135551212","​1","​30000","​3125551212","​var1=23|var2=24|var3=25",,,,,"​1"​);​ +
-</​code>​ +
-</​note>​+
  
- +<code 1c> 
----- +Процедура ПрослушатьЗвонок(ИмяФайлаЗаписи) Экспорт ​ 
- + Если НЕ ЗначениеЗаполнено(ИмяФайлаЗаписи) Тогда 
- + Возврат;​  
-**Пример** + КонецЕсли;​  
- +  
- + Если Найти(ИмяФайлаЗаписи,​ПутьКЗаписямРазговоров)=0 Тогда // в имени файла не указан путь к записям ​разговоров 
-Совершение вызова с внешнего канала на локальный екстеншен. + ИмяФайлаБезРасширения = УбратьРасширениеВФайлеЗаписи(ПутьКЗаписямРазговоров + ИмяФайлаЗаписи); ​ 
-В данном случае вызов локального екстеншена ​не будет совершаться ​до тех порпока не ответят по внешнему ​ZAP каналу: + Иначе 
- + ИмяФайлаБезРасширения = УбратьРасширениеВФайлеЗаписи(ИмяФайлаЗаписи);​ // в файле не должно быть указано ​расширение 
-<​code>​ + КонецЕсли;​  
-Action: Originate +  
-Channel: Zap/​g2/​8135551212 + Channel = "​SIP/​26";​ //​ Channel:​ Название канала,​ с которого совершается исходящий ​вызов ​(В том же формате, как если бы Вы совершали вызов этому абоненту ​командой Dial.) 
-Context: default + Context = "";​ //​ Context:​ Название контекста для совершения исходящего вызова (используется только совместно с параметрами Exten и Priority) 
-Exten: 101 + Exten = "";​ //​ Exten:​ Extension to use on connect (используется только совместно с параметрами Context и Priority) 
-Priority: 1 + Priority = "";​ //​ Priority:​ Priority to use on connect (используется только совместно с параметрами Context и Exten) 
-Timeout: 30000 + Timeout = "";​ //​ Timeout:​ Таймаут (в миллисекундах) для ​соединения с инициатором исходящего вызова (значение по умолчанию:​ 30000 миллисекунд)
-Callerid: 3125551212+ CallerID = "​CDR_RECORDS";​ //​ CallerID:​ Значение CallerID, используемое для совершения исходящего вызова. 
 + Variable = "";​ //​ Variable:​ Установка переменных канала (максимум 32). Переменные будут установлены для обоих каналов, ​участвующих в соединении (локального,​ для абонента от которого совершается ​вызов ​и для вызываемого канала). 
 + Account = "";​ //​ Account:​ Значение для “Account code” исходящего вызова. 
 + Application = "​Playback";​ //​ Application:​ Команда плана набора,​ используемая для ​совершения исходящего вызова (используется параметр “Data”, для указания ее параметров) 
 + Data = "​\"​+ИмяФайлаБезРасширения;​ //​ Data : Параметры команды плана набора, используемой для ​совершения исходящего вызова
 + Async = "​0";​ //​ Async:​ Если указано “true” исходящий вызов будет производиться ​асинхронно. Результат ее выполнения будет возвращен ​позже, в пакете типа “Event” (позволяет осуществлять ​несколько вызовов без ожидания результата предыдущей команды,​ совершающей исходящий вызов). 
 +        Codecs ​         =       "";​ 
 +        EarlyMedia ​     =       "";​ 
 + ActionID = "​114";​ //​ ActionID:​ Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать,​ когда выполняется несколько асинхронных запросов одновременно. 
 +  
 + Результат="";​ 
 + Попытка 
 + Компонент.Originate(ChannelContextExtenPriorityTimeout, CallerID, Variable, Account, Application,​ Data, Async, Codecs, EarlyMedia, ActionID, Результат);​ 
 + СообщитьОтладочнуюИнформацию("​Начало прослушивания разговора "​+ИмяФайлаБезРасширения,​Результат);​ 
 + Исключение 
 + СообщитьОтладочнуюИнформацию("​Ошибка при прослушивании разговора "​+ИмяФайлаБезРасширения,​Результат,​ОписаниеОшибки());​ 
 + КонецПопытки;​  
 +  
 +КонецПроцедуры
 </​code>​ </​code>​
 +===== Полезные ссылки =====
 +  * [[doc:​1cajam|Описание SDK: "​Компонента связи 1С и Asterisk"​]]
 +  * [[doc:​1cajam:​api|Все функции компоненты связи 1С и Asterisk]]
 +  * [[kb:​asterisk:​ami:​Originate|Прототип текущей функции,​ команда AMI Asterisk: Originate]]
 +  * [[kb:​asterisk:​ami|Интерфейс управления сервером Asterisk (Asterisk Manager API)]]
 +  * [[kb:​asterisk:​events|Список известных событий возвращаемых Asterisk Manager API]]
  
-Тут екстеншен 101 – это наш локальный SIP телефон. 
  
-<​note>​**Код на 1С** +===== Комментарии ​===== 
-<code 1C> +~~DISQUS~~
-Компонента.Originate("​Zap/​g2/​8135551212","​default","​101","​1","​30000","​3125551212",,,,,,"​1"​);​ +
-</​code>​ +
-</​note>​ +
- +
----- +
- +
- +
-**Пример** +
- +
-Данный, насколько странный пример, демонстрирует, как с помощью AMI команды Originate выполнить команду операционной системы:​ +
- +
-<​code>​ +
-Action: Originate +
-Channel: Local/​1@dummy +
-Application:​ System +
-Data: /​path/​to/​script +
-</​code>​ +
- +
-<​note>​**Код на 1С** +
-<code 1C> +
-Компонента.Originate("​Local/​1@dummy",,,,,,,,"​System","/​path/​to/​script",,​);​ +
-</​code>​ +
-</​note>​+
doc/1cajam/api/originate.1323499997.txt.gz · Последние изменения: 2014/11/14 22:32 (внешнее изменение)