Как интегрировать 1С:Управление торговлей 11 и телефонию Zadarma (Novofon) без абонентской платы

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

Интеграция телефонии с CRM-системой — один из ключевых шагов к автоматизации продаж и повышению качества обслуживания клиентов. В этой статье мы подробно рассмотрим, как связать конфигурацию 1С:Управление торговлей 11 с облачной АТС Zadarma (которая на территории РФ предоставляет услуги под брендом Novofon). Нашей главной задачей будет реализация этой интеграции без ежемесячной абонентской платы сторонним сервисам-посредникам.

Мы проанализируем два основных пути решения этой задачи: использование готовых модулей с разовой оплатой (открытый код) и создание собственной интеграции с нуля с помощью бесплатного API Zadarma/Novofon. Выясним преимущества каждого подхода и разберем практические примеры кода для реализации Click-to-Call и обработки входящих звонков.

Важное изменение бренда: Zadarma и Novofon

Прежде чем перейти к технической части, отметим важный организационный момент. Сервис Zadarma в российском сегменте полностью перешел под бренд Novofon. С технической точки зрения структура API, форматы вебхуков, адреса серверов и логика работы личного кабинета остались абсолютно идентичными. Поэтому всё, что описано для Zadarma, в полной мере применимо к Novofon, и наоборот.

---

Вариант 1. Готовые модули с единоразовой оплатой (без подписки)

Если вы хотите получить готовый инструмент «здесь и сейчас», не переплачивая при этом за ежемесячную подписку, обратите внимание на готовые решения с открытым кодом 1С. Рассмотрим основные варианты, представленные на рынке:

  1. Панель телефонии от Simplit (расширение для 1С)

    Это полностью готовое расширение, разработанное специально под конфигурации на управляемых формах (УТ 11, ERP 2, КА 2). Программа поставляется с полностью открытым исходным кодом 1С, устанавливается в базу как стандартное расширение без снятия конфигурации с поддержки.

    Преимущества: Прямая работа с API АТС без промежуточных серверов, интеграция со стандартными механизмами CRM в 1С (документ ТелефонныйЗвонок), умная маршрутизация входящих звонков на ответственного менеджера, автоматическое открытие карточки клиента при входящем вызове.

  2. Разработки на профильных маркетплейсах (Инфостарт и др.)

    Существует множество специализированных обработок и расширений, реализующих базовую интеграцию по API. Они приобретаются один раз и работают напрямую с вашей базой. В таких модулях уже реализован основной необходимый минимум: Click-to-Call, всплывающее окно звонка и фиксация истории.

---

Вариант 2. Разработка интеграции своими силами через API Zadarma

Если у вас есть штатный разработчик или вы хотите полностью контролировать логику обмена информацией, лучшим решением будет написать интеграцию самостоятельно. API у Zadarma полностью бесплатный и детально документированный. Рассмотрим по шагам, как построить архитектуру такого решения.

Шаг 1. Реализация исходящих звонков (Click-to-Call)

Для того чтобы менеджер мог совершать звонки в один клик прямо из карточки контрагента или контактного лица в 1С, мы будем использовать метод API /v1/request/callback/. Этот метод запрашивает у АТС обратный звонок (Callback): сначала АТС звонит на внутренний SIP-номер (софтфон или IP-телефон) менеджера, а при поднятии трубки инициирует вызов клиенту.

Рассмотрим подробнее пример функции отправки HTTP-запроса на встроенном языке 1С для инициации звонка:


Функция ВыполнитьИсходящийЗвонок(ВнутреннийНомерТелефона, НомерКлиента) Экспорт

    // Задаем параметры подключения к API
    KeyAPI = "Ваш_Ключ_API_Из_Личного_Кабинета";
    SecretAPI = "Ваш_Секрет_API_Из_Личного_Кабинета";
    
    // Формируем параметры запроса
    ПараметрыЗапроса = Новый Структура;
    ПараметрыЗапроса.Вставить("from", ВнутреннийНомерТелефона);
    ПараметрыЗапроса.Вставить("to", НомерКлиента);
    
    // Кодируем параметры в формат URL-encoded или JSON
    // Для авторизации в API Zadarma требуется подпись запроса (SHA256 HMAC)
    МетодAPI = "/v1/request/callback/";
    ЗапросURL = "https://api.zadarma.com" + МетодAPI;
    
    // Формируем HTTP-запрос
    НТТРСоединение = Новый HTTPСоединение("api.zadarma.com", 443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
    
    // Формируем заголовок авторизации. Согласно документации API:
    // Подпись состоит из md5 от параметров запроса и sha256 hmac от строки запроса
    СтрокаПараметров = "from=" + ВнутреннийНомерТелефона + "&to=" + НомерКлиента;
    ПодписьMD5 = ПолучитьMD5ХэшСтроки(СтрокаПараметров);
    
    СтрокаДляПодписи = МетодAPI + СтрокаПараметров + ПодписьMD5;
    ПодписьHMAC = ПолучитьHMACSHA256(СтрокаДляПодписи, SecretAPI);
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Authorization", KeyAPI + ":" + ПодписьHMAC);
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
    
    HTTPЗапрос = Новый HTTPЗапрос(МетодAPI, Заголовки);
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров, КодировкаТекста.UTF8, ИспользованиеМаркераВходаUTF8.НеИспользовать);
    
    Попытка
        HTTPОтвет = НТТРСоединение.ОтправитьДляОбработки(HTTPЗапрос);
        Если HTTPОтвет.КодСостояния = 200 Тогда
            Возврат Истина; // Запрос успешно отправлен, АТС совершает вызов
        Иначе
            ЗаписатьЛогОшибки("Ошибка API Zadarma: " + HTTPОтвет.ПолучитьТелоКакСтроку());
            Возврат Ложь;
        КонецЕсли;
    Исключение
        ЗаписатьЛогОшибки("Ошибка сетевого соединения с API Zadarma");
        Возврат Ложь;
    КонецПопытки;

КонецФункции

Данный код отправляет запрос в облако АТС. Нам остается лишь добавить кнопку вызова в форму списка партнеров и карточку контрагента в 1С:УТ 11, привязав к ней выполнение этой функции.

---

Шаг 2. Обработка входящих звонков и всплывающая карточка

Для того чтобы в 1С при входящем звонке открывалась карточка клиента, необходимо настроить механизм Webhooks (уведомления о событиях) в личном кабинете Zadarma/Novofon.

Разберем этот процесс по шагам:

  1. Наша база 1С:УТ 11 должна быть опубликована на веб-сервере (IIS или Apache) с внешним статическим IP-адресом.
  2. В конфигурации 1С мы создаем собственный HTTP-сервис с шаблоном URL, например, /hs/telephony/v1/event.
  3. В личном кабинете АТС в разделе интеграций мы указываем адрес нашего HTTP-сервиса для отправки уведомлений о звонках.
  4. При входящем вызове АТС отправляет POST-запрос с событием NOTIFY_START на наш адрес. Запрос содержит номер звонящего клиента (параметр caller_id).

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


Метод ПолучитьСобытиеЗвонка(Запрос)
    
    // Получаем тело POST-запроса от АТС Zadarma
    ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку("UTF-8");
    
    // Читаем JSON данные
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
    ДанныеСобытия = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    
    ТипСобытия = ДанныеСобытия.event; // Например, NOTIFY_START, NOTIFY_END
    
    Если ТипСобытия = "NOTIFY_START" Тогда
        
        НомерТелефона = ДанныеСобытия.caller_id;
        ВнутреннийНомер = ДанныеСобытия.destination; // SIP-номер сотрудника
        
        // Запускаем оповещение для конкретного пользователя в 1С
        ИнициироватьВсплывающееОкно(НомерТелефона, ВнутреннийНомер);
        
    КонецЕсли;
    
    // Возвращаем АТС успешный ответ 200 OK
    Ответ = Новый HTTPСервисОтвет(200);
    Возврат Ответ;

КонецМетода

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

---

Шаг 3. Фиксация истории звонков и запись разговоров

После завершения разговора АТС Zadarma отправляет на наш HTTP-сервис финальное событие NOTIFY_END. Это событие содержит исчерпывающие данные о звонке:

При получении события NOTIFY_END мы создаем в 1С:УТ 11 документ ТелефонныйЗвонок. Проанализируем пример заполнения реквизитов документа:


Процедура ЗафиксироватьЗвонокВБазе(ДанныеЗвонка)

    НовыйЗвонок = Документы.ТелефонныйЗвонок.СоздатьДокумент();
    НовыйЗвонок.Дата = ТекущаяДата();
    НовыйЗвонок.Направление = ПредопределенноеЗначение("Перечисление.НаправленияВходящегоИсходящегоЗвонка.Входящий");
    НовыйЗвонок.Длительность = ДанныеЗвонка.duration;
    
    // Ищем контрагента по номеру телефона в базе
    НайденныйАбонент = НайтиПартнераПоНомеруТелефона(ДанныеЗвонка.caller_id);
    Если ЗначениеЗаполнено(НайденныйАбонент) Тогда
        НовыйЗвонок.Абонент = НайденныйАбонент;
    КонецЕсли;
    
    // Заполняем текстовое описание и ссылку на запись
    ОписаниеЗвонка = "Разговор завершен со статусом: " + ДанныеЗвонка.disposition;
    Если ДанныеЗвонка.Свойство("recording_link") Тогда
        ОписаниеЗвонка = ОписаниеЗвонка + Символы.ПС + "Ссылка на запись: " + ДанныеЗвонка.recording_link;
    КонецЕсли;
    
    НовыйЗвонок.Описание = ОписаниеЗвонка;
    
    Попытка
        НовыйЗвонок.Записать(РежимЗаписиДокумента.Записать);
    Исключение
        ЗаписатьЛогОшибки("Не удалось сохранить документ звонка: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
    КонецПопытки;

КонецПроцедуры

Если вы хотите, чтобы менеджеры могли прослушивать разговоры прямо из интерфейса 1С:УТ 11, можно добавить кнопку "Прослушать" в форму документа ТелефонныйЗвонок. При нажатии на нее 1С будет скачивать аудиофайл по полученной API-ссылке во временное хранилище компьютера пользователя и запускать его через стандартный проигрыватель операционной системы.

---

Резюме и выводы

Интеграция 1С:УТ 11 и АТС Zadarma (Novofon) без абонентской платы абсолютно реальна и имеет несколько путей решения:

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

← На главную