Как реализовать запросы к API Манго Офис из 1С: от простых GET-запросов до сложных POST с подписью

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

Интеграция 1С с облачными АТС, такими как Манго Офис (Mango Office), является стандартной задачей для автоматизации отделов продаж. Однако на практике разработчики часто сталкиваются с трудностями при формировании HTTP-запросов: сервер возвращает ошибку "404 Not Found", "401 Unauthorized" или присылает пустые ответы. В этой статье мы подробно разберем, как правильно настроить обмен данными, учитывая различия между внутренними сервисами Манго.

Различие между Widget API и vPBX API

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

  1. Widget API (Calltracking): Используется для получения отчетов по коллтрекингу (например, список звонков с их источниками). Работает через домен widgets-api.mango-office.ru. Здесь чаще всего применяется простая авторизация через access_token, передаваемый прямо в строке запроса (GET).
  2. vPBX API (Виртуальная АТС): Используется для управления звонками в реальном времени, получения информации о посетителе по номеру телефона (UTM-метки) и работы с журналом звонков АТС. Здесь требуется сложная авторизация с использованием ключа, "соли" и формирования подписи по алгоритму SHA-256.

Рассмотрим по шагам реализацию каждого из вариантов.

Решение 1: Получение данных из Widget API через GET-запрос

Если у вас есть ссылка, которая корректно открывается в браузере и возвращает JSON, значит, вам нужен GET-запрос. Ошибка многих разработчиков заключается в попытке передать параметры запроса в теле (body) POST-запроса, в то время как сервер ожидает их в строке URL.

Разберем пример кода для получения списка звонков коллтрекинга:


Сервер = "widgets-api.mango-office.ru";
// Обратите внимание: ресурс начинается со слеша и содержит все параметры
Токен = "ВАШ_ТОКЕН";
ID_Виджета = "27067";
ДатаНачала = "2022-11-17T23:59Z";
ДатаОкончания = "2022-11-23T23:59Z";

Ресурс = "/v1/calltracking/" + ID_Виджета + "/calls.json?dateStart=" + ДатаНачала + "&dateEnd=" + ДатаОкончания + "&access_token=" + Токен;

// Обязательно используем защищенное соединение
Соединение = Новый HTTPСоединение(Сервер, , , , , 5, Новый ЗащищенноеСоединениеOpenSSL());

Запрос = Новый HTTPЗапрос(Ресурс);
Попытка
    Ответ = Соединение.Получить(Запрос);
    Если Ответ.КодСостояния = 200 Тогда
        Сообщить("Данные получены: " + Ответ.ПолучитьТелоИзСтроки());
    Иначе
        Сообщить("Ошибка запроса. Код состояния: " + Ответ.КодСостояния);
    КонецЕсли;
Исключение
    Сообщить("Не удалось установить соединение: " + ОписаниеОшибки());
КонецПопытки;

Проанализируем важные моменты: мы используем объект ЗащищенноеСоединениеOpenSSL, так как современные API работают исключительно по протоколу HTTPS. Также обратите внимание на формат дат — Манго требует формат ISO 8601 с указанием временной зоны (символ Z в конце).

Решение 2: Формирование сложного POST-запроса с подписью (vPBX API)

Для получения детальной информации о звонящем (например, через метод user_info_by_dct_number) необходимо использовать авторизацию через подпись sign. Посмотрим, как вычислить хэш SHA-256 и отправить данные.

Алгоритм создания подписи следующий: склеиваем в одну строку vpbx_api_key + JSON-параметры + vpbx_api_salt и вычисляем хэш. Выясним, как это выглядит в коде 1С:


// 1. Подготовка исходных данных
API_Key = "ваш_ключ";
API_Salt = "ваша_соль";

ПараметрыЗвонка = Новый Структура;
ПараметрыЗвонка.Вставить("number", "79991234567"); // Номер, по которому ищем инфо

// 2. Преобразование структуры в JSON-строку
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
ЗаписатьJSON(ЗаписьJSON, ПараметрыЗвонка);
СтрокаJSON = ЗаписьJSON.Закрыть();

// 3. Вычисление подписи SHA-256
Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256);
Хеширование.Добавить(API_Key);
Хеширование.Добавить(СтрокаJSON);
Хеширование.Добавить(API_Salt);
Подпись = НРег(СтрЗаменить(Строка(Хеширование.ХешСумма), " ", ""));

// 4. Формирование тела запроса
// Важно: Манго часто ждет данные в формате x-www-form-urlencoded
ТелоЗапроса = "vpbx_api_key=" + API_Key + "&sign=" + Подпись + "&json=" + СтрокаJSON;

// 5. Отправка
Сервер = "path.to.mango.api"; // Замените на актуальный адрес из документации
Ресурс = "/vpbx/queries/user_info_by_dct_number";

Соединение = Новый HTTPСоединение(Сервер, , , , , , Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос(Ресурс);
Запрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);

В этом примере мы использовали метод ОтправитьДляОбработки, который соответствует HTTP-методу POST. Важно установить заголовок Content-Type в значение application/x-www-form-urlencoded, так как именно в этом формате API Виртуальной АТС принимает ключи и JSON.

Типичные ошибки и способы их отладки

Если вы получаете ошибку "Страница не найдена" (404), проанализируйте следующие параметры:

Разберем ситуацию, когда запрос возвращает пустые значения при получении UTM-меток. Это не всегда означает ошибку в коде. Данные коллтрекинга доступны только для звонков на динамические номера. Если клиент позвонил на обычный номер компании, информация о его веб-сессии (источнике перехода) просто отсутствует в базе Манго.

Следуя этим шагам и внимательно разделяя методы авторизации для разных сервисов Манго, вы сможете построить надежную систему интеграции телефонии с вашей конфигурацией 1С.

← На главную