Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
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(Channel, Context, Exten, Priority, Timeout, 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]] | ||
- | |||
- | ---- | ||
- | |||
- | |||
- | **Пример** | ||
- | |||
- | Данный, насколько странный пример, демонстрирует, как с помощью 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~~ |