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

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

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


doc:1cajam:api:originate

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:1cajam:api:originate [2011/11/14 11:49]
nb
doc:1cajam:api:originate [2013/08/16 19:07]
nb [Последовательность событий при совершении исходящего вызова]
Строка 1: Строка 1:
 +====== Команда 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” (позволяет осуществлять несколько вызовов без ожидания результата предыдущей команды,​ совершающей исходящий вызов)
 +  * **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>​
 +===== Последовательность событий при совершении исходящего вызова =====
 +
 +
 +Первое,​ совершается вызов по каналу,​ указанному в параметре 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 на указанный номер.
 +В данном случае исходящий вызов с номера 26 на номер внешнего абонента 74952293042 не будет совершаться до тех пор, пока наш SIP абонент 26 не ответит на вызов.
 +На телефоне во время вызова будет отображаться "​26->​74952293042",​ во время вызова будет использоваться контекст "​from-internal"​.
 +
 +<code 1c>
 + ​Процедура Originate()
 + 
 + Channel = "​SIP/​26";​  ​  //​ Channel:​ Название канала,​ с которого совершается исходящий вызов (В том же формате,​ как если бы Вы совершали вызов этому абоненту командой Dial.)
 + Context = "​from-internal"; ​  //​ Context:​ Название контекста для совершения исходящего вызова (используется только совместно с параметрами Exten и Priority)
 + Exten = "​74952293042"​ ;    // Exten: Extension to use on connect (используется только совместно с параметрами Context и Priority)
 + Priority = "​1";​  ​  //​ Priority:​ Priority to use on connect (используется только совместно с параметрами Context и Exten)
 + Timeout = "";​  ​  //​ Timeout:​ Таймаут (в миллисекундах) для соединения с инициатором исходящего вызова (значение по умолчанию:​ 30000 миллисекунд).
 + CallerID = "​26->​74952293042";​ //​ CallerID:​ Значение CallerID, используемое для совершения исходящего вызова.
 + Variable = "";​  ​  //​ Variable:​ Установка переменных канала (максимум 32). Переменные будут установлены для обоих каналов,​ участвующих в соединении (локального,​ для абонента от которого совершается вызов и для вызываемого канала).
 + 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, Результат);​
 +   ​  ​       Сообщить("​Результат оригинации "​+Результат);​
 + Исключение
 + Сообщить("​Исключение при "​+Элемент.Имя+"​ ошибка:"​+ИнформацияОбОшибке());​
 + КонецПопытки; ​
 + 
 +КонецПроцедуры
 +
 +</​code>​
 +
 +Следующий пример демонстрирует выполнение команды Playback для проигрывания сотруднику c с внутренним номером 26 записи разговора из файла.
 +
 +<code 1c>
 +Процедура ПрослушатьЗвонок(ИмяФайлаЗаписи) Экспорт ​
 + Если НЕ ЗначениеЗаполнено(ИмяФайлаЗаписи) Тогда
 + Возврат;​
 + КонецЕсли; ​
 +
 + Если Найти(ИмяФайлаЗаписи,​ПутьКЗаписямРазговоров)=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(Channel,​ Context, Exten, Priority, Timeout, CallerID, Variable, Account, Application,​ Data, Async, Codecs, EarlyMedia, ActionID, Результат);​
 + СообщитьОтладочнуюИнформацию("​Начало прослушивания разговора "​+ИмяФайлаБезРасширения,​Результат);​
 + Исключение
 + СообщитьОтладочнуюИнформацию("​Ошибка при прослушивании разговора "​+ИмяФайлаБезРасширения,​Результат,​ОписаниеОшибки());​
 + КонецПопытки;​
 +
 +КонецПроцедуры
 +</​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]]
 +
 +
 +===== Комментарии =====
 +~~DISQUS~~
doc/1cajam/api/originate.txt · Последние изменения: 2014/11/14 22:32 (внешнее изменение)