====== Работа с компонентом в тонком клиенте ====== Прежде всего рекомендую ознакомиться со способами подключения внешнего компонента: * [[doc:1cajam:init|см. также]] ===== Установка ===== Для начала работы с компонентом необходимо произвести его установку. Пример процедуры может выглядеть следующим &НаКлиенте // Процедура должна вызываться лишь один раз при первичной установке компонента, // либо при обновлении его версии Процедура УстановитьКомпонент() АдресАрхиваКомпонента = "Обработка.МИКО_ПанельТелефонииДляCRM.Макет.AddInWindows32"; Попытка УстановитьВнешнююКомпоненту(АдресАрхиваКомпонента); Исключение Сообщить("Не удалось устанвить внешнюю компоненту."); КонецПопытки; КонецПроцедуры в этом случае компонент, упакованный в ZIP архив расположен в макете обработки. Далеев режиме 1С предприятия необходимо инициализировать вызов этой процедуры: {{ :doc:1cajam:ustanovit_komponent.png |}} В случае успешной установки компонента, в каталоге **%APPDATA%\1C\1Cv82\ExtCompT** (для windows 7) будет распакован файл компонента. Рядом с распакованным файлом в файл **registry.xml** будут дописаны сведения об установленном компоненте. Пример registry.xml файла: Для дальнейшей работы с компонентом, имеет смысл определить переменную модуля: &НаКлиенте Перем Компонент; ===== Инициализация ===== * [[doc:1cajam:init|см. также]] Пример процедуры инициализации компонента: &НаКлиенте Процедура Инициализаровать() АдресАрхиваКомпонента = "Обработка.МИКО_ПанельТелефонииДляCRM.Макет.AddInWindows32"; Если ПодключитьВнешнююКомпоненту(ПутьКМакету,"Comp",ТипВнешнейКомпоненты.Native) Тогда Компонент = Новый ("AddIn.Comp.MikoAjam"); Иначе СообщитьОтладочнуюИнформацию("Не удалось подключить внешнюю компоненту",""); КонецЕсли; КонецПроцедуры ===== Авторизация на сервере Asterisk ===== Далее пример авторизации: * [[doc:1cajam:connect|см. также...]] &НаКлиенте Процедура Login() Если Компонент = Неопределено Тогда Сообщить("Компонент не подключен, сначала инициализируйте его!"); Возврат; КонецЕсли; Компонент.Хост = "test.ru"; Компонент.Порт = "4443"; result=""; // результат выполнения Попытка Компонент.Login("МенеджерЛогин","МенеджерПароль",result); Исключение Сообщить("Ошибка при авторизации: " + result); КонецПопытки; КонецПроцедуры ===== Отключение от cервера Asterisk ===== &НаКлиенте Процедура Logoff(Команда) Если Компонент = Неопределено Тогда Сообщить("Компонент не подключен"); Возврат; КонецЕсли; Попытка Результат = ""; Компонент.Logoff(Результат); Исключение Сообщить("Исключение при отключении..."); КонецПопытки; Сообщить("Результат " + Результат); КонецПроцедуры ===== Пинг ===== [[doc:1cajam:api:ping|Описание:Ping]] Пример процедуры для проверки соединения с Asterisk: &НаКлиенте Процедура Ping(Команда) Если Компонент = Неопределено Тогда Сообщить("Компонент не подключен!"); Возврат; КонецЕсли; Попытка respose =""; Результат=Компонент.Ping(respose); // Результат - возвращается значение типа булево Исключение Сообщить("Исключение при пинге"); КонецПопытки; КонецПроцедуры ===== Выполнение произвольной команды Asterisk (Command) ===== [[doc:1cajam:api:Command|Описание Command]] &НаКлиенте Процедура CommandНажатие(Элемент) Command = ПрозвольнаяКоманда; // Command: Asterisk команда CLI интерфейса. (Не команда шелла!) ActionID = "110"; // ActionID: Необязательный ID команды, который будет возвращен в ответе. Если Компонент = Неопределено Тогда Сообщить("Компонент не подключен"); Возврат; КонецЕсли; Попытка //Результат=Компонент.command(Command,ActionID); Результат=""; Компонент.doc:1cami:api:Command(Command,ActionID,Результат); Исключение Сообщить("Исключение при отправке произвольной комманды "); КонецПопытки; Сообщить("Результат комманды "+Результат); КонецПроцедуры ===== Инициализация звонка (Originate) ===== [[doc:1cajam:api:Originate|Описание:Originate]] Пример процедуры инициализации исходящего вызова: &НаКлиенте // http://wiki.miko.ru/doc:1cami:api:Originate Процедура Originate(Команда) Channel = НашКаналФильтр; // Channel: Название канала, с которого совершается исходящий вызов Context = Контекст; // Context: Название контекста для совершения исходящего вызова Exten = КомуЗвонимНомер;// Exten: Extension to use on connect Priority = "1"; // Priority: Priority to use on connect Timeout = ""; // Timeout: Таймаут (в миллисекундах) для соединения с инициатором CallerID = "MIKO_Abonent"; // CallerID: Значение CallerID, используемое для совершения исходящего вызова. Variable = ""; // Variable: Установка переменных канала (максимум 32). Account = "miko"; // Account: Значение для “Account code” исходящего вызова. Application = ""; // Application: Команда плана набора Data = ""; // Data : Параметры команды плана набора Async = "1"; // Async: Если указано “true” исходящий вызов будет производиться асинхронно. ActionID = "114"; // ActionID: Не обязательный идентификатор запроса. Если Компонент = Неопределено Тогда Сообщить("Компонент не подключен"); Возврат; КонецЕсли; Попытка Компонент.Originate(Channel,Context,Exten,Priority,Timeout, CallerID,Variable,Account,Application, Data,Async,ActionID,Результат); Исключение Сообщить("Исключение при, ошибка"); КонецПопытки; Сообщить("Результат оригинации "+Результат); КонецПроцедуры ===== Запись разговора (Monitor) ===== [[doc:1cajam:api:Monitor|Описание:Monitor]] &НаКлиенте Процедура Monitor(Команда) Channel = АктивныйКанал1; File = ""; // File: Не обязательный параметр. Имя файла, которое будет Format1C = "wav"; // Format: Не обязательный параметр. Формат, в котором будет сохранен звуковой файл. Mix = "1"; // Mix: Не обязательный булевой параметр. Определяет, миксировать или нет поступающий //и исходящий из канала аудиопоток после окончания записи. ActionID = "115"; // ActionID: Необязательный ID команды, который будет возвращен в ответе. Если Компонент = Неопределено Тогда Сообщить("Компонент не подключен"); Возврат; КонецЕсли; Попытка //Результат=Компонент.Monitor(Channel,File,Format1C,Mix,ActionID); Результат=""; Компонент.Monitor(Channel,File,Format1C,Mix,ActionID,Результат); Исключение Сообщить("Исключение при выполнении "+Команда.Имя+" ошибка"); КонецПопытки; Сообщить("Результат команды "+Команда.Имя+" "+Результат); КонецПроцедуры ===== Остановка записи разговора (StopMonitor) ===== [[doc:1cajam:api:stopmonitor|Команда Asterisk Manager API: StopMonitor]] &НаКлиенте // Процедура StopMonitor(Команда) Channel = АктивныйКанал1; // Channel: Канал, для которого нужно прекратить запись вызова // например: SIP/1310-089e1000 (обязательный параметр) ActionID= "116"; // ActionID: Не обязательный ID команды, который будет возвращен в ответе. Если Компонент = Неопределено Тогда Сообщить("Компонент не подключен"); Возврат; КонецЕсли; Попытка Результат=""; Компонент.StopMonitor(Channel,ActionID,Результат); Исключение Сообщить("Исключение при выполнении "+Команда.Имя+" ошибка: "+ИнформацияОбОшибке()); КонецПопытки; Сообщить("Результат команды "+Команда.Имя+" "+Результат); КонецПроцедуры ===== Донабор номера (PlayDTMF) ===== &НаКлиенте Процедура PlayDTMF(Команда) Channel = АктивныйКанал1; // Channel: Имя канала, в который нужно отправить // DTMF последовательность. (Обязательный параметр) Digit = Строка(СигналDTMF); // Digit: DTMF последовательность, // которую нужно отправить. (Обязательный параметр) ActionID = "117"; // ActionID: Необязательный ID команды, // который будет возвращен в ответе. Если Компонент = Неопределено Тогда Сообщить("Компонент не подключен"); Возврат; КонецЕсли; Попытка Результат=""; Компонент.PlayDTMF(Channel,Digit,ActionID,Результат); Исключение Сообщить("Исключение при выполнении "+Элемент.Имя+" ошибка: "+ИнформацияОбОшибке()); КонецПопытки; Сообщить("Результат команды "+Элемент.Имя+" "+Результат); КонецПроцедуры ===== Положить трубку (Hangup) ===== [[doc:1cajam:api:hangup|Описание: Hangup]] &НаКлиенте Процедура Hangup(Команда) Результат=""; Channel = АктивныйКанал1; // Channel: Канал, на котором необходимо закончить вызов. ActionID = "120"; // ActionID: Необязательный ID команды, который будет возвращен в ответе. Если Компонент = Неопределено Тогда Сообщить("Компонент не подключен"); Возврат; КонецЕсли; Попытка Компонент.Hangup(Channel,ActionID,Результат); Исключение Сообщить("Исключение при выполнении "+Команда.Имя+" ошибка: "+ИнформацияОбОшибке()); КонецПопытки; Сообщить("Результат команды "+Команда.Имя+" "+Результат); КонецПроцедуры ===== Без консультативный перевод звонка===== [[doc:1cajam:api:redirect|Описание: Redirect]] &НаКлиенте // Инициирование перевода звонка Процедура Redirect(Команда) Channel = АктивныйКанал1; // Channel: Название канала, для которого производиться перевод вызова (обязательный параметр). ExtraChannel= АктивныйКанал2; // ExtraChannel: Название канала второго плеча вызова (второй абонент), // который тоже участвует при переводе вызова (не обязательный параметр). Exten = НомерКудаПереводимЗвонокRedirect;// Exten: Название екстеншена в плане набора, куда переводиться вызов Context = Контекст; // Context: Название контекста в плане набора, куда переводиться вызов Priority= "1"; // Priority: Номер приоритета в плане набора, куда переводиться вызов ActionID= "119"; // ActionID: Не обязательный ID команды, который будет возвращен в ответе. Если Компонент = Неопределено Тогда Сообщить("Компонент не подключен"); Возврат; КонецЕсли; Попытка Результат=""; Компонент.Redirect(Channel,ExtraChannel,Exten,Context,Priority,ActionID,Результат); Исключение Сообщить("Исключение при выполнении "+Команда.Имя+" ошибка: "+ИнформацияОбОшибке()); КонецПопытки; Сообщить("Результат команды "+Команда.Имя+" "+Результат); КонецПроцедуры ===== Перевод консультационный ===== [[doc:1cajam:api:atxfer|Описание: Atxfer]] &НаКлиенте Процедура Atxfer(Команда) Channel = АктивныйКанал1; // Channel - Название канала, для которого производиться перевод вызова Context = Контекст;// Context - Название контекста в плане набора, куда переводиться вызов Exten = КудаПереводимЗвонокAtxfer;// Exten -Название екстеншена в плане набора, куда переводиться вызов Priority="1"; // Priority - Номер приоритета в плане набора, куда переводиться вызов (обязательный параметр) ActionID="118"; // ActionID -Не обязательный ID команды, который будет возвращен в ответе. Если Компонент = Неопределено Тогда Сообщить("Компонент не подключен"); Возврат; КонецЕсли; Попытка Результат=""; Компонент.Atxfer(Channel,Context,Exten,Priority,ActionID,Результат); Исключение Сообщить("Исключение при выполнении "+Элемент.Имя+" ошибка: "+ИнформацияОбОшибке()); КонецПопытки; Сообщить("Результат команды "+Элемент.Имя+" "+Результат); КонецПроцедуры