Как настроить интеграцию IP-телефонов Yealink с 1С для набора номера и всплывающих карточек при входящем звонке

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Современные IP-телефоны Yealink поддерживают управление по сети через механизмы Action URI (прием команд от внешних систем) и Action URL (отправка HTTP-запросов на сервер при наступлении событий, таких как входящий или исходящий вызов). Разберем, как объединить телефонный аппарат с платформой 1С:Предприятие для решения двух ключевых задач: исходящего набора номера из карточки контрагента и автоматического оповещения пользователя с открытием формы клиента при входящем звонке.

Исходящий вызов из 1С через Action URI

Для инициации звонка прямо из интерфейса 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С.

Обработка входящего вызова: передача события в интерфейс 1С

Когда на телефон поступает входящий вызов, аппарат может автоматически выполнить Action URL — отправить GET-запрос на заданный адрес с подстановкой макросов:

  1. $caller_id или $remote — номер звонящего абонента;
  2. $caller_name или $display_remote — имя абонента из телефонной книги;
  3. $local — внутренний номер (SIP-аккаунт) аппарата;
  4. $ip / $mac — сетевые реквизиты звонящего устройства.

Пример шаблона Action URL, настраиваемого в телефонном аппарате для события Incoming Call:

http://АдресСервера1С/base/hs/yealink/incoming?remote=$remote&local=$local

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

Способ 1. Использование встроенного HTTP-сервиса и Системы взаимодействия

Это наиболее надежный и современный вариант архитектуры для управляемого приложения 1С, не требующий внешних веб-серверов или костылей на PHP.

  1. Создаем в конфигурации HTTP-сервис (например, с шаблоном /incoming), который принимает параметры remote (номер клиента) и local (внутренний номер сотрудника).
  2. По внутреннему номеру определяем пользователя 1С, за которым закреплен данный аппарат.
  3. Через механизм СистемаВзаимодействия отправляем целевое сообщение конкретному пользователю или в специальный контекстный диалог.
  4. На клиенте в обработчике входящих сообщений Системы взаимодействия перехватываем переданные данные, выполняем поиск в справочнике Контрагенты и открываем форму.

Посмотрим на пример кода в обработчике метода HTTP-сервиса на стороне 1С:


Функция IncomingGet(Запрос)
    ПараметрыURL = Запрос.ПараметрыЗапроса;
    НомерКлиента = ПараметрыURL.Получить("remote");
    ВнутреннийНомер = ПараметрыURL.Получить("local");
    
    ПользовательПриемник = НайтиПользователяПоВнутреннемуНомеру(ВнутреннийНомер);
    
    Если ЗначениеЗаполнено(ПользовательПриемник) Тогда
        // Формируем структуру данных для передачи на клиент
        ДанныеЗвонка = Новый Структура;
        ДанныеЗвонка.Вставить("Событие", "ВходящийЗвонок");
        ДанныеЗвонка.Вставить("Номер", НомерКлиента);
        
        // Отправка через Систему взаимодействия пользователю
        ИнтеграцияТелефонииСервер.ОтправитьУведомлениеОЗвонке(ПользовательПриемник, ДанныеЗвонка);
    КонецЕсли;
    
    Возврат Новый HTTPСервисОтвет(200);
КонецФункции

На стороне клиентского сеанса при получении оповещения открываем карточку или выводим всплывающее окно:


&НаКлиенте
Процедура ОбработатьОповещениеОЗвонке(ДанныеЗвонка)
    НайденныйКлиент = НайтиКонтрагентаПоНомеруНаСервере(ДанныеЗвонка.Номер);
    Если ЗначениеЗаполнено(НайденныйКлиент) Тогда
        ПараметрыФормы = Новый Структура("Ключ", НайденныйКлиент);
        ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыФормы);
    Иначе
        ПоказатьОповещениеПользователя("Входящий звонок", , "Номер: " + ДанныеЗвонка.Номер);
    КонецЕсли;
КонецПроцедуры

Способ 2. Очередь событий через регистр сведений и обработчик ожидания

Если Система взаимодействия в информационной базе не подключена, можно применить схему с буферизацией вызовов в регистре сведений:

  1. HTTP-сервис 1С при получении вызова от телефона делает запись в регистр сведений (поля: Пользователь, НомерТелефона, ДатаВремя, Обработано).
  2. В клиентском приложении при старте системы запускается периодическая проверка с помощью метода ПодключитьОбработчикОжидания("ПроверитьВходящиеВызовы", 1).
  3. При обнаружении новой необработанной записи для текущего пользователя клиентский сеанс открывает форму контрагента и помечает запись в регистре как обработанную.

Способ 3. Прямая отправка через внешнее событие (Native API)

Для локальных рабочих станций существует вариант без использования HTTP-сервисов на стороне центрального сервера 1С. В этом случае на клиентском компьютере в сеансе 1С подключается внешняя компонента, открывающая локальный порт (например, 127.0.0.1:8080). Телефон отправляет Action URL напрямую на локальный IP-адрес компьютера сотрудника, а компонента генерирует событие, обрабатываемое процедурой ОбработкаВнешнегоСобытия(Источник, Событие, Данные) в модуле приложения 1С.

Сетевые требования и ограничения

При настройке взаимодействия напрямую с аппаратами Yealink важно учитывать следующие особенности инфраструктуры:

  1. Маршрутизация и Voice VLAN: Телефоны часто работают в выделенной голосовой подсети. Межсетевые экраны должны разрешать прохождение HTTP-трафика между клиентскими ПК, телефонами и сервером 1С.
  2. Сложная логика звонков: Прямая интеграция с телефонным аппаратом фиксирует только факты звонка на конкретную трубку и не предоставляет данных об очередях АТС, голосовых меню (IVR) и аудиозаписях разговоров. Если требуется полноценная сквозная аналитика, интеграцию рекомендуется выполнять на уровне IP-АТС (Asterisk, CTI или облачная телефония).
← На главную