Интеграция 1С с облачными телефонными станциями (АТС) — одна из наиболее востребованных задач для автоматизации отделов продаж и клиентских служб. В этой статье мы подробно разберем, как реализовать отправку данных в формате JSON через HTTP-запрос. Рассмотрим все этапы: от формирования структуры данных до настройки защищенного соединения и обработки ответа сервера.
Прежде чем отправлять запрос, нам необходимо подготовить данные, которые ожидает облачная АТС. Чаще всего это параметры звонка: кто звонит (внутренний номер сотрудника) и кому звоним (номер клиента). В 1С для работы с JSON рекомендуется использовать специализированные объекты, а не «склеивать» строки вручную. Это гарантирует корректность формата и кодировки.
Рассмотрим процесс формирования данных. Мы будем использовать объект Структура, который затем преобразуем в строку JSON с помощью объекта ЗаписьJSON. Проанализируем пример кода:
// Создаем структуру с данными для API
ДанныеЗапроса = Новый Структура;
ДанныеЗапроса.Вставить("user", "101"); // Внутренний номер сотрудника
ДанныеЗапроса.Вставить("address", "79991234567"); // Номер клиента
// Настраиваем запись JSON
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);
Запись.УстановитьСтроку(ПараметрыЗаписиJSON);
// Сериализуем структуру в JSON
ЗаписатьJSON(Запись, ДанныеЗапроса);
СтрокаJSON = Запись.Закрыть();
Обратим внимание на важный нюанс: современные веб-сервисы, включая Билайн, требуют кодировку UTF-8. Использование встроенных методов 1С позволяет избежать проблем с кодировкой кириллических символов или спецсимволов.
Облачные сервисы работают исключительно через протокол HTTPS. Для того чтобы 1С могла взаимодействовать с сервером по защищенному каналу, нам необходимо инициализировать объект ЗащищенноеСоединениеOpenSSL. Без этого параметра при попытке соединения возникнет ошибка «Нарушение протокола безопасности».
Разберем создание объекта HTTPСоединение. Выясним, какие параметры являются критически важными:
// Инициализация защищенного соединения
Защита = Новый ЗащищенноеСоединениеOpenSSL();
// Указываем адрес сервера (без префикса https://)
АдресСервера = "cloudpbx.beeline.ru";
Порт = 443;
// Создаем соединение
Соединение = Новый HTTPСоединение(АдресСервера, Порт, , , , 30, Защита);
Здесь АдресСервера — это доменное имя сервиса, а 30 — это таймаут ожидания ответа в секундах. Рекомендуется всегда устанавливать таймаут, чтобы сеанс пользователя не «завис» при проблемах со связью.
Теперь создадим сам HTTPЗапрос. Важно правильно указать путь к методу API и установить заголовки. Для большинства облачных АТС критически важны два заголовка: Content-Type (тип передаваемого контента) и ключ авторизации (токен).
Проанализируем пример настройки запроса для совершения вызова:
// Путь к конкретному методу API
ПутьКМетоду = "/api/v2/make_call";
// Создаем объект запроса
Запрос = Новый HTTPЗапрос(ПутьКМетоду);
// Устанавливаем заголовки
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("X-API-KEY", "ваш_секретный_токен_из_личного_кабинета");
// Помещаем подготовленный JSON в тело запроса
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Важный момент: Для авторизации в Билайн используется заголовок X-API-KEY. В других сервисах это может быть Authorization с префиксом Bearer. Всегда сверяйтесь с документацией конкретного провайдера.
Для отправки данных методом POST используется метод соединения ОтправитьДляОбработки. После выполнения запроса мы получим объект HTTPОтвет, который содержит код состояния и тело ответа (обычно тоже в формате JSON).
Посмотрим, как правильно обработать полученные данные и выясним причину возможной ошибки:
Попытка
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
КодСостояния = Ответ.КодСостояния;
Если КодСостояния = 200 Или КодСостояния = 204 Тогда
Сообщить("Запрос успешно отправлен, звонок инициирован.");
ИначеЕсли КодСостояния = 401 Тогда
Сообщить("Ошибка авторизации: проверьте API-ключ.");
Иначе
Сообщить("Сервер вернул ошибку: " + КодСостояния);
Сообщить("Текст ответа: " + Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
// Парсим ответ JSON, если сервер что-то вернул
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
РезультатСтруктура = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Исключение
Сообщить("Ошибка сетевого взаимодействия: " + ОписаниеОшибки());
КонецПопытки;
При реализации интеграции часто возникают ситуации, когда «машина не едет». Рассмотрим основные причины:
HTTPСоединение вы передаете только домен (например, api.beeline.ru), а в HTTPЗапрос — остальную часть пути (/api/v2/...). Нельзя вставлять https:// в параметры объекта.ЗащищенноеСоединениеOpenSSL потребует дополнительной настройки сертификатов, но в 99% случаев стандартных настроек достаточно.Используя этот алгоритм, вы сможете настроить взаимодействие с любой современной облачной АТС. Помните, что отладчик — ваш лучший друг в разборе структур JSON, которые возвращает сервер.