Интеграция 1С с облачными АТС, такими как Манго Офис (Mango Office), является стандартной задачей для автоматизации отделов продаж. Однако на практике разработчики часто сталкиваются с трудностями при формировании HTTP-запросов: сервер возвращает ошибку "404 Not Found", "401 Unauthorized" или присылает пустые ответы. В этой статье мы подробно разберем, как правильно настроить обмен данными, учитывая различия между внутренними сервисами Манго.
Перед тем как писать код, важно проанализировать, к какому именно сервису мы обращаемся. В экосистеме Манго Офис существует два принципиально разных API, которые часто путают:
widgets-api.mango-office.ru. Здесь чаще всего применяется простая авторизация через access_token, передаваемый прямо в строке запроса (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 в конце).
Для получения детальной информации о звонящем (например, через метод 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), проанализируйте следующие параметры:
HTTPСоединение адрес сервера указывается без "https://" и без слеша в конце (например, просто widgets-api.mango-office.ru).ИспользованиеByteOrderMark.НеИспользовать. Наличие невидимых символов в начале строки JSON приведет к ошибке авторизации на стороне сервера.Разберем ситуацию, когда запрос возвращает пустые значения при получении UTM-меток. Это не всегда означает ошибку в коде. Данные коллтрекинга доступны только для звонков на динамические номера. Если клиент позвонил на обычный номер компании, информация о его веб-сессии (источнике перехода) просто отсутствует в базе Манго.
Следуя этим шагам и внимательно разделяя методы авторизации для разных сервисов Манго, вы сможете построить надежную систему интеграции телефонии с вашей конфигурацией 1С.