Совершение исходящего вызова или выполнение Shell скрипта.
Делайте замену символов на «безопасные» в среде 1С. Например, символ пробела нужно заменить последовательностью %20, символ / заменяем на %2F и т.д.
Первое, совершается вызов по каналу, указанному в параметре 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».
Процедура 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, Результат); Сообщить("Результат оригинации "+Результат); Исключение Сообщить("Исключение при "+Элемент.Имя+" ошибка:"+ИнформацияОбОшибке()); КонецПопытки; КонецПроцедуры
Следующий пример демонстрирует выполнение команды Playback для проигрывания сотруднику c с внутренним номером 26 записи разговора из файла.
Процедура ПрослушатьЗвонок(ИмяФайлаЗаписи) Экспорт Если НЕ ЗначениеЗаполнено(ИмяФайлаЗаписи) Тогда Возврат; КонецЕсли; Если Найти(ИмяФайлаЗаписи,ПутьКЗаписямРазговоров)=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, Результат); СообщитьОтладочнуюИнформацию("Начало прослушивания разговора "+ИмяФайлаБезРасширения,Результат); Исключение СообщитьОтладочнуюИнформацию("Ошибка при прослушивании разговора "+ИмяФайлаБезРасширения,Результат,ОписаниеОшибки()); КонецПопытки; КонецПроцедуры