Интеграция телефонии с CRM-системой — один из ключевых шагов к автоматизации продаж и повышению качества обслуживания клиентов. В этой статье мы подробно рассмотрим, как связать конфигурацию 1С:Управление торговлей 11 с облачной АТС Zadarma (которая на территории РФ предоставляет услуги под брендом Novofon). Нашей главной задачей будет реализация этой интеграции без ежемесячной абонентской платы сторонним сервисам-посредникам.
Мы проанализируем два основных пути решения этой задачи: использование готовых модулей с разовой оплатой (открытый код) и создание собственной интеграции с нуля с помощью бесплатного API Zadarma/Novofon. Выясним преимущества каждого подхода и разберем практические примеры кода для реализации Click-to-Call и обработки входящих звонков.
Прежде чем перейти к технической части, отметим важный организационный момент. Сервис Zadarma в российском сегменте полностью перешел под бренд Novofon. С технической точки зрения структура API, форматы вебхуков, адреса серверов и логика работы личного кабинета остались абсолютно идентичными. Поэтому всё, что описано для Zadarma, в полной мере применимо к Novofon, и наоборот.
---
Если вы хотите получить готовый инструмент «здесь и сейчас», не переплачивая при этом за ежемесячную подписку, обратите внимание на готовые решения с открытым кодом 1С. Рассмотрим основные варианты, представленные на рынке:
Это полностью готовое расширение, разработанное специально под конфигурации на управляемых формах (УТ 11, ERP 2, КА 2). Программа поставляется с полностью открытым исходным кодом 1С, устанавливается в базу как стандартное расширение без снятия конфигурации с поддержки.
Преимущества: Прямая работа с API АТС без промежуточных серверов, интеграция со стандартными механизмами CRM в 1С (документ ТелефонныйЗвонок), умная маршрутизация входящих звонков на ответственного менеджера, автоматическое открытие карточки клиента при входящем вызове.
Существует множество специализированных обработок и расширений, реализующих базовую интеграцию по API. Они приобретаются один раз и работают напрямую с вашей базой. В таких модулях уже реализован основной необходимый минимум: Click-to-Call, всплывающее окно звонка и фиксация истории.
---
Если у вас есть штатный разработчик или вы хотите полностью контролировать логику обмена информацией, лучшим решением будет написать интеграцию самостоятельно. API у Zadarma полностью бесплатный и детально документированный. Рассмотрим по шагам, как построить архитектуру такого решения.
Для того чтобы менеджер мог совершать звонки в один клик прямо из карточки контрагента или контактного лица в 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, привязав к ней выполнение этой функции.
---
Для того чтобы в 1С при входящем звонке открывалась карточка клиента, необходимо настроить механизм Webhooks (уведомления о событиях) в личном кабинете Zadarma/Novofon.
Разберем этот процесс по шагам:
/hs/telephony/v1/event.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С или регулярный опрос базы через обработчик ожидания на клиенте, который ищет новые записи в регистре сведений "АктивныеЗвонки").
---
После завершения разговора АТС Zadarma отправляет на наш HTTP-сервис финальное событие NOTIFY_END. Это событие содержит исчерпывающие данные о звонке:
recording_link).При получении события NOTIFY_END мы создаем в 1С:УТ 11 документ ТелефонныйЗвонок. Проанализируем пример заполнения реквизитов документа:
Процедура ЗафиксироватьЗвонокВБазе(ДанныеЗвонка)
НовыйЗвонок = Документы.ТелефонныйЗвонок.СоздатьДокумент();
НовыйЗвонок.Дата = ТекущаяДата();
НовыйЗвонок.Направление = ПредопределенноеЗначение("Перечисление.НаправленияВходящегоИсходящегоЗвонка.Входящий");
НовыйЗвонок.Длительность = ДанныеЗвонка.duration;
// Ищем контрагента по номеру телефона в базе
НайденныйАбонент = НайтиПартнераПоНомеруТелефона(ДанныеЗвонка.caller_id);
Если ЗначениеЗаполнено(НайденныйАбонент) Тогда
НовыйЗвонок.Абонент = НайденныйАбонент;
КонецЕсли;
// Заполняем текстовое описание и ссылку на запись
ОписаниеЗвонка = "Разговор завершен со статусом: " + ДанныеЗвонка.disposition;
Если ДанныеЗвонка.Свойство("recording_link") Тогда
ОписаниеЗвонка = ОписаниеЗвонка + Символы.ПС + "Ссылка на запись: " + ДанныеЗвонка.recording_link;
КонецЕсли;
НовыйЗвонок.Описание = ОписаниеЗвонка;
Попытка
НовыйЗвонок.Записать(РежимЗаписиДокумента.Записать);
Исключение
ЗаписатьЛогОшибки("Не удалось сохранить документ звонка: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Если вы хотите, чтобы менеджеры могли прослушивать разговоры прямо из интерфейса 1С:УТ 11, можно добавить кнопку "Прослушать" в форму документа ТелефонныйЗвонок. При нажатии на нее 1С будет скачивать аудиофайл по полученной API-ссылке во временное хранилище компьютера пользователя и запускать его через стандартный проигрыватель операционной системы.
---
Интеграция 1С:УТ 11 и АТС Zadarma (Novofon) без абонентской платы абсолютно реальна и имеет несколько путей решения:
Оба этих метода избавляют вас от необходимости переплачивать сторонним сервисам за каждого пользователя ежемесячно, делая интеграцию надежной, безопасной и полностью независимой.