====== Работа с компонентом в тонком клиенте ======
Прежде всего рекомендую ознакомиться со способами подключения внешнего компонента:
* [[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,Результат);
Исключение
Сообщить("Исключение при выполнении "+Элемент.Имя+" ошибка: "+ИнформацияОбОшибке());
КонецПопытки;
Сообщить("Результат команды "+Элемент.Имя+" "+Результат);
КонецПроцедуры