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

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

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


doc:1cajam:thin

Работа с компонентом в тонком клиенте

Прежде всего рекомендую ознакомиться со способами подключения внешнего компонента:

Установка

Для начала работы с компонентом необходимо произвести его установку. Пример процедуры может выглядеть следующим

        &НаКлиенте
	// Процедура должна вызываться лишь один раз при первичной установке компонента,
        // либо при обновлении его версии
	Процедура УстановитьКомпонент()
	   АдресАрхиваКомпонента = "Обработка.МИКО_ПанельТелефонииДляCRM.Макет.AddInWindows32";
	   Попытка
	      УстановитьВнешнююКомпоненту(АдресАрхиваКомпонента);
	   Исключение
	      Сообщить("Не удалось устанвить внешнюю компоненту.");   
	   КонецПопытки;
	КонецПроцедуры

в этом случае компонент, упакованный в ZIP архив расположен в макете обработки. Далеев режиме 1С предприятия необходимо инициализировать вызов этой процедуры:

В случае успешной установки компонента, в каталоге %APPDATA%\1C\1Cv82\ExtCompT (для windows 7) будет распакован файл компонента. Рядом с распакованным файлом в файл registry.xml будут дописаны сведения об установленном компоненте. Пример registry.xml файла:

        <?xml version="1.0" encoding="UTF-8"?>
        <registry xmlns="http://v8.1c.ru/8.2/addin/registry">
        	<component path="MIKO_phone_IP.dll" type="native"/>
        	<component path="MIKO_phone_IP_v_2_0.dll" type="native"/>
        	<component path="MIKO_ajamV009.dll" type="native"/>
        </registry>

Для дальнейшей работы с компонентом, имеет смысл определить переменную модуля:

        &НаКлиенте
        Перем Компонент;
 

Инициализация

Пример процедуры инициализации компонента:

	&НаКлиенте
	Процедура Инициализаровать()
	   АдресАрхиваКомпонента = "Обработка.МИКО_ПанельТелефонииДляCRM.Макет.AddInWindows32";
	   Если ПодключитьВнешнююКомпоненту(ПутьКМакету,"Comp",ТипВнешнейКомпоненты.Native) Тогда
		Компонент = Новый ("AddIn.Comp.MikoAjam");
	   Иначе
		СообщитьОтладочнуюИнформацию("Не удалось подключить внешнюю компоненту","");
   	   КонецЕсли;
	КонецПроцедуры 

Авторизация на сервере Asterisk

Далее пример авторизации: * см. также...

        &НаКлиенте
	Процедура Login()
		Если Компонент = Неопределено Тогда
			Сообщить("Компонент не подключен, сначала инициализируйте его!");
			Возврат;
		КонецЕсли; 
		Компонент.Хост = "test.ru";
		Компонент.Порт = "4443";
		result=""; // результат выполнения		
		Попытка
			Компонент.Login("МенеджерЛогин","МенеджерПароль",result);	
		Исключение
			Сообщить("Ошибка при авторизации: " + result);
		КонецПопытки; 
	КонецПроцедуры

Отключение от cервера Asterisk

	&НаКлиенте
	Процедура Logoff(Команда)
		Если Компонент = Неопределено Тогда
			Сообщить("Компонент не подключен");
			Возврат;
		КонецЕсли; 
 
		Попытка
			Результат = "";
			Компонент.Logoff(Результат);
		Исключение
			Сообщить("Исключение при отключении...");
		КонецПопытки; 
 
		Сообщить("Результат " + Результат);
	КонецПроцедуры

Пинг

Описание:Ping Пример процедуры для проверки соединения с Asterisk:

	&НаКлиенте	
	Процедура Ping(Команда)
		Если Компонент = Неопределено Тогда
			Сообщить("Компонент не подключен!");
			Возврат;
		КонецЕсли; 
		Попытка
			respose ="";
			Результат=Компонент.Ping(respose);
			// Результат - возвращается значение типа булево
		Исключение
			Сообщить("Исключение при пинге");
		КонецПопытки; 
	КонецПроцедуры

Выполнение произвольной команды Asterisk (Command)

Описание Command

	&НаКлиенте
	Процедура CommandНажатие(Элемент)
		Command	 =	ПрозвольнаяКоманда; //	Command: Asterisk команда CLI интерфейса. (Не команда шелла!)
		ActionID =	"110";  	    //	ActionID: Необязательный ID команды, который будет возвращен в ответе.
 
		Если Компонент = Неопределено Тогда
			Сообщить("Компонент не подключен");
			Возврат;
		КонецЕсли; 
 
		Попытка
			//Результат=Компонент.command(Command,ActionID);
			Результат="";
			Компонент.doc:1cami:api:Command(Command,ActionID,Результат);
		Исключение
			Сообщить("Исключение при отправке произвольной комманды ");
		КонецПопытки; 
 
		Сообщить("Результат комманды "+Результат);
 
	КонецПроцедуры

Инициализация звонка (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)

Описание: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)

Команда 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)

Описание: Hangup

	&НаКлиенте
	Процедура Hangup(Команда)
		Результат="";
		Channel		=	АктивныйКанал1;	//	Channel: Канал, на котором необходимо закончить вызов.
		ActionID	=	"120";			//	ActionID: Необязательный ID команды, который будет возвращен в ответе.
 
		Если Компонент = Неопределено Тогда
			Сообщить("Компонент не подключен");
			Возврат;
		КонецЕсли; 
 
		Попытка
			Компонент.Hangup(Channel,ActionID,Результат);
		Исключение
			Сообщить("Исключение при выполнении "+Команда.Имя+" ошибка: "+ИнформацияОбОшибке());
		КонецПопытки; 
 
		Сообщить("Результат команды "+Команда.Имя+" "+Результат);
 
	КонецПроцедуры

Без консультативный перевод звонка

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

Перевод консультационный

Описание: Atxfer

	&НаКлиенте
	Процедура Atxfer(Команда)
 
		Channel	= АктивныйКанал1; //  Channel - Название канала, для которого производиться перевод вызова 
		Context	= Контекст;//	Context - Название контекста в плане набора, куда переводиться вызов 
		Exten	= КудаПереводимЗвонокAtxfer;//	Exten -Название екстеншена в плане набора, куда переводиться вызов 
		Priority="1";   //	Priority - Номер приоритета в плане набора, куда переводиться вызов (обязательный параметр)
		ActionID="118";	//	ActionID -Не обязательный ID команды, который будет возвращен в ответе.
 
		Если Компонент = Неопределено Тогда
			Сообщить("Компонент не подключен");
			Возврат;
		КонецЕсли; 
 
		Попытка
			Результат="";
			Компонент.Atxfer(Channel,Context,Exten,Priority,ActionID,Результат);
		Исключение
			Сообщить("Исключение при выполнении "+Элемент.Имя+" ошибка: "+ИнформацияОбОшибке());
		КонецПопытки; 
 
		Сообщить("Результат команды "+Элемент.Имя+" "+Результат);
 
	КонецПроцедуры
doc/1cajam/thin.txt · Последние изменения: 2014/11/14 22:32 (внешнее изменение)