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

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

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


doc:1cajam:api:originate

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:1cajam:api:originate [2012/02/01 14:39]
nb
doc:1cajam:api:originate [2014/11/14 22:32] (текущий)
Строка 4: Строка 4:
  
 ===== Параметры команды ===== ===== Параметры команды =====
- 
  
   * **Channel**:​ Название канала,​ с которого совершается исходящий вызов (В том же формате,​ как если бы Вы совершали вызов этому абоненту командой Dial.)   * **Channel**:​ Название канала,​ с которого совершается исходящий вызов (В том же формате,​ как если бы Вы совершали вызов этому абоненту командой Dial.)
Строка 17: Строка 16:
   * **Data** : Параметры команды плана набора,​ используемой для совершения исходящего вызова.   * **Data** : Параметры команды плана набора,​ используемой для совершения исходящего вызова.
   * **Async**: Если указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды,​ совершающей исходящий вызов)   * **Async**: Если указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды,​ совершающей исходящий вызов)
-  * **ActionID**: Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать,​ когда выполняется несколько асинхронных запросов одновременно.+  * **Codecs**: Список кодеков разделенный ​запятыми для использования в текущем вызове. 
 +  * **EarlyMedia**:​ Если указать “true” произойдет принудительное соединение в другим каналом в режиме EarlyMedia ((Параметр появился в компоненте версии 1.0.20))  
 +  * **ActionID**:​ Идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать,​ когда выполняется несколько асинхронных запросов одновременно
 +  * **Result**: В эту переменную будет возвращен результат выполнения функции.
  
-<​note ​warning>Для ​переменной Variable не применяется URLENCODE, имейте это ​ввиду при передаче сложных переменных!</​note>​+<​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>​
 ===== Последовательность событий при совершении исходящего вызова ===== ===== Последовательность событий при совершении исходящего вызова =====
  
Строка 46: Строка 52:
  
 Совершение вызова с канала SIP на указанный номер. Совершение вызова с канала SIP на указанный номер.
-В данном случае исходящий вызов на номер внешнего абонента не будет совершаться до тех пор, пока наш SIP абонент не ответит на вызов:+В данном случае исходящий вызов ​с номера 26 на номер внешнего абонента ​74952293042 ​не будет совершаться до тех пор, пока наш SIP абонент ​26 не ответит на вызов
 +На телефоне во время вызова будет отображаться "​26->​74952293042",​ во время вызова будет использоваться контекст "​from-internal"​.
  
 <code 1c> <code 1c>
  ​Процедура Originate()  ​Процедура Originate()
    
- Channel = КаналАбонентаA;​ //​ Channel:​ Название канала,​ с которого совершается исходящий вызов (В том же формате,​ как если бы Вы совершали вызов этому абоненту командой Dial.) + Channel = "​SIP/​26"​;    // Channel: Название канала,​ с которого совершается исходящий вызов (В том же формате,​ как если бы Вы совершали вызов этому абоненту командой Dial.) 
- Context = Контекст;​ //​ Context:​ Название контекста для совершения исходящего вызова (используется только совместно с параметрами Exten и Priority) + Context = "​from-internal"​  ​// Context: Название контекста для совершения исходящего вызова (используется только совместно с параметрами Exten и Priority) 
- Exten = НомерАбонентаБ ​;// Exten: Extension to use on connect (используется только совместно с параметрами Context и Priority) + Exten = "​74952293042" ​   // Exten: Extension to use on connect (используется только совместно с параметрами Context и Priority) 
- Priority = "​1";​ //​ Priority:​ Priority to use on connect (используется только совместно с параметрами Context и Exten) + Priority = "​1";​    //​ Priority:​ Priority to use on connect (используется только совместно с параметрами Context и Exten) 
- Timeout = "";​ // Timeout: Таймаут (в миллисекундах) для соединения с инициатором исходящего вызова (значение по умолчанию:​ 30000 миллисекунд). + Timeout = "";​    // Timeout: Таймаут (в миллисекундах) для соединения с инициатором исходящего вызова (значение по умолчанию:​ 30000 миллисекунд). 
- CallerID = "​MIKO_Abonent";​ //​ CallerID:​ Значение CallerID, используемое для совершения исходящего вызова. + CallerID = "​26->​74952293042"; //​ CallerID:​ Значение CallerID, используемое для совершения исходящего вызова. 
- Variable = "";​ //​ Variable:​ Установка переменных канала (максимум 32). Переменные будут установлены для обоих каналов,​ участвующих в соединении (локального,​ для абонента от которого совершается вызов и для вызываемого канала). + Variable = "";​    //​ Variable:​ Установка переменных канала (максимум 32). Переменные будут установлены для обоих каналов,​ участвующих в соединении (локального,​ для абонента от которого совершается вызов и для вызываемого канала). 
- Account = "​miko";​ // Account: Значение для “Account code” исходящего вызова. + Account = "​miko";​    // Account: Значение для “Account code” исходящего вызова. 
- Application = "";​ //​ Application:​ Команда плана набора,​ используемая для совершения исходящего вызова (используется параметр “Data”, для указания ее параметров) + Application = "";​    //​ Application:​ Команда плана набора,​ используемая для совершения исходящего вызова (используется параметр “Data”, для указания ее параметров) 
- Data = "";​ // Data : Параметры команды плана набора,​ используемой для совершения исходящего вызова. + Data = "";​    // Data : Параметры команды плана набора,​ используемой для совершения исходящего вызова. 
- Async = "​1";​ // Async: Если указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды,​ совершающей исходящий вызов) + Async = "​1";​    // Async: Если указано “true” исходящий вызов будет производиться асинхронно. Результат ее выполнения будет возвращен позже, в пакете типа “Event” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды,​ совершающей исходящий вызов)
- ActionID = "​123123123";​ //​ ActionID:​ Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать,​ когда выполняется несколько асинхронных запросов одновременно.+        Codecs ​         =       "";​ 
 +        EarlyMedia ​     =       "";​ 
 + ActionID = "​123123123";​    //​ ActionID:​ Не обязательный идентификатор запроса. Позволяет сопоставить результат выполнения конкретному запросу. В качестве значения можно использовать или номер или строку. Очень полезно использовать,​ когда выполняется несколько асинхронных запросов одновременно.
    
  Попытка  Попытка
  Результат="";​  Результат="";​
- Компонент.Originate(Channel,​Context,​Exten,​Priority,​Timeout,​CallerID,​Variable,​Account,​Application,​Data,​Async,​ActionID,​Результат);​+ Компонент.Originate(Channel,​ Context, Exten, Priority, Timeout, CallerID, Variable, Account, Application,​ Data, Async, Codecs, EarlyMedia, ActionID, Результат);​
    ​  ​       Сообщить("​Результат оригинации "​+Результат);​    ​  ​       Сообщить("​Результат оригинации "​+Результат);​
  Исключение  Исключение
Строка 74: Строка 83:
 КонецПроцедуры КонецПроцедуры
  
-<​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 
 </​code>​ </​code>​
  
-**Код на 1С** +Следующий пример демонстрирует выполнение команды Playback для ​проигрывания сотруднику c с внутренним номером 26 записи разговора из файла.
-<code 1c> +
-Компонента.Originate("​SIP/​101test","​default","​8135551212","​1","​30000","​3125551212","​var1=23|var2=24|var3=25",,,,,"​1"​);​ +
-</​code>​+
  
- 
----- 
- 
- 
-**Пример** 
- 
- 
-Совершение вызова с внешнего канала на локальный екстеншен. 
-В данном случае вызов локального екстеншена не будет совершаться до тех пор, пока не ответят по внешнему ZAP каналу:​ 
- 
-<​code>​ 
-Action: Originate 
-Channel: Zap/​g2/​8135551212 
-Context: default 
-Exten: 101 
-Priority: 1 
-Timeout: 30000 
-Callerid: 3125551212 
-</​code>​ 
- 
-Тут екстеншен 101 – это наш локальный SIP телефон. 
- 
-**Код на 1С** 
 <code 1c> <code 1c>
-Компонента.Originate("Zap/g2/8135551212","​default","​101","​1","​30000","​3125551212",,,,,,"​1");+Процедура ПрослушатьЗвонок(ИмяФайлаЗаписи) Экспорт  
 + Если НЕ ЗначениеЗаполнено(ИмяФайлаЗаписи) Тогда 
 + Возврат;​  
 + КонецЕсли;​  
 +  
 + Если Найти(ИмяФайлаЗаписи,​ПутьКЗаписямРазговоров)=0 Тогда // в имени файла ​не указан путь к записям разговоров 
 + ИмяФайлаБезРасширения = УбратьРасширениеВФайлеЗаписи(ПутьКЗаписямРазговоров + ИмяФайлаЗаписи);​  
 + Иначе 
 + ИмяФайлаБезРасширения = УбратьРасширениеВФайлеЗаписи(ИмяФайлаЗаписи);​ // в файле не должно быть указано расширение 
 + КонецЕсли;​  
 +  
 + Channel = "​SIP/​26";​ //​ Channel:​ Название канала,​ с которого совершается исходящий вызов (В том же формате,​ как если бы Вы совершали вызов этому абоненту командой Dial.
 + Context = "";​ //​ Context:​ Название контекста для совершения исходящего вызова ​(используется только совместно с параметрами Exten и Priority) 
 + Exten = ""; // Exten: Extension to use on connect (используется только совместно с параметрами Context и Priority) 
 + Priority = "";​ //​ Priority:​ Priority to use on connect (используется только совместно с параметрами Context и Exten) 
 + Timeout = "";​ //​ Timeout:​ Таймаут (в миллисекундах) для соединения с инициатором исходящего вызова (значение по умолчанию:​ 30000 миллисекунд). 
 + 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(ChannelContextExtenPriorityTimeoutCallerID, 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]]
  
- 
----- 
- 
- 
-**Пример** 
- 
-Данный,​ насколько странный пример,​ демонстрирует,​ как с помощью AMI команды Originate выполнить команду операционной системы:​ 
- 
-<​code>​ 
-Action: Originate 
-Channel: Local/​1@dummy 
-Application:​ System 
-Data: /​path/​to/​script 
-</​code>​ 
- 
-**Код на 1С** 
-<code 1c> 
-Компонента.Originate("​Local/​1@dummy",,,,,,,,"​System","/​path/​to/​script",,​);​ 
-</​code>​ 
  
 ===== Комментарии ===== ===== Комментарии =====
 ~~DISQUS~~ ~~DISQUS~~
doc/1cajam/api/originate.1328107142.txt.gz · Последние изменения: 2014/11/14 22:32 (внешнее изменение)