Современные IP-телефоны Yealink поддерживают управление по сети через механизмы Action URI (прием команд от внешних систем) и Action URL (отправка HTTP-запросов на сервер при наступлении событий, таких как входящий или исходящий вызов). Разберем, как объединить телефонный аппарат с платформой 1С:Предприятие для решения двух ключевых задач: исходящего набора номера из карточки контрагента и автоматического оповещения пользователя с открытием формы клиента при входящем звонке.
Для инициации звонка прямо из интерфейса 1С достаточно отправить GET-запрос к телефонному аппарату по протоколу HTTP. В зависимости от версии прошивки телефона формат строки запроса может иметь вид:
http://IP_телефона/cgi-bin/ConfigManApp.com?number=НОМЕР или http://IP_телефона/servlet?key=number=НОМЕР
Рассмотрим, как отправить команду набора номера средствами встроенного языка 1С:
Соединение = Новый HTTPСоединение(АдресТелефона, 80, Логин, Пароль, , 5);
СтрокаЗапроса = "/cgi-bin/ConfigManApp.com?number=" + СокрЛП(НомерТелефона);
Запрос = Новый HTTPЗапрос(СтрокаЗапроса);
Ответ = Соединение.Получить(Запрос);
Важный нюанс безопасности: по умолчанию аппарат Yealink при получении удаленной команды блокирует действие и выводит на экран физический запрос подтверждения Allow Remote Control?. Чтобы набор происходил без участия пользователя, необходимо разрешить отправку команд с конкретных IP-адресов. В веб-интерфейсе телефона или в конфигурационном файле автопровизионинга задается параметр features.action_uri_limit_ip, куда вносится IP-адрес компьютера пользователя или сервера 1С.
Когда на телефон поступает входящий вызов, аппарат может автоматически выполнить Action URL — отправить GET-запрос на заданный адрес с подстановкой макросов:
$caller_id или $remote — номер звонящего абонента;$caller_name или $display_remote — имя абонента из телефонной книги;$local — внутренний номер (SIP-аккаунт) аппарата;$ip / $mac — сетевые реквизиты звонящего устройства.Пример шаблона Action URL, настраиваемого в телефонном аппарате для события Incoming Call:
http://АдресСервера1С/base/hs/yealink/incoming?remote=$remote&local=$local
Основная сложность заключается в том, чтобы связать входящий запрос к серверу 1С с открытым сеансом конкретного пользователя и вывести карточку звонящего клиента на экран. Проанализируем основные способы реализации этой задачи.
Это наиболее надежный и современный вариант архитектуры для управляемого приложения 1С, не требующий внешних веб-серверов или костылей на PHP.
/incoming), который принимает параметры remote (номер клиента) и local (внутренний номер сотрудника).СистемаВзаимодействия отправляем целевое сообщение конкретному пользователю или в специальный контекстный диалог.Контрагенты и открываем форму.Посмотрим на пример кода в обработчике метода HTTP-сервиса на стороне 1С:
Функция IncomingGet(Запрос)
ПараметрыURL = Запрос.ПараметрыЗапроса;
НомерКлиента = ПараметрыURL.Получить("remote");
ВнутреннийНомер = ПараметрыURL.Получить("local");
ПользовательПриемник = НайтиПользователяПоВнутреннемуНомеру(ВнутреннийНомер);
Если ЗначениеЗаполнено(ПользовательПриемник) Тогда
// Формируем структуру данных для передачи на клиент
ДанныеЗвонка = Новый Структура;
ДанныеЗвонка.Вставить("Событие", "ВходящийЗвонок");
ДанныеЗвонка.Вставить("Номер", НомерКлиента);
// Отправка через Систему взаимодействия пользователю
ИнтеграцияТелефонииСервер.ОтправитьУведомлениеОЗвонке(ПользовательПриемник, ДанныеЗвонка);
КонецЕсли;
Возврат Новый HTTPСервисОтвет(200);
КонецФункции
На стороне клиентского сеанса при получении оповещения открываем карточку или выводим всплывающее окно:
&НаКлиенте
Процедура ОбработатьОповещениеОЗвонке(ДанныеЗвонка)
НайденныйКлиент = НайтиКонтрагентаПоНомеруНаСервере(ДанныеЗвонка.Номер);
Если ЗначениеЗаполнено(НайденныйКлиент) Тогда
ПараметрыФормы = Новый Структура("Ключ", НайденныйКлиент);
ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыФормы);
Иначе
ПоказатьОповещениеПользователя("Входящий звонок", , "Номер: " + ДанныеЗвонка.Номер);
КонецЕсли;
КонецПроцедуры
Если Система взаимодействия в информационной базе не подключена, можно применить схему с буферизацией вызовов в регистре сведений:
Пользователь, НомерТелефона, ДатаВремя, Обработано).ПодключитьОбработчикОжидания("ПроверитьВходящиеВызовы", 1).Для локальных рабочих станций существует вариант без использования HTTP-сервисов на стороне центрального сервера 1С. В этом случае на клиентском компьютере в сеансе 1С подключается внешняя компонента, открывающая локальный порт (например, 127.0.0.1:8080). Телефон отправляет Action URL напрямую на локальный IP-адрес компьютера сотрудника, а компонента генерирует событие, обрабатываемое процедурой ОбработкаВнешнегоСобытия(Источник, Событие, Данные) в модуле приложения 1С.
При настройке взаимодействия напрямую с аппаратами Yealink важно учитывать следующие особенности инфраструктуры: