Как правильно настроить отправку сообщений через WhatsApp Cloud API из 1С: решаем проблемы авторизации и структуры запроса

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

Интеграция 1С с мессенджерами — это одна из самых востребованных задач современного бизнеса. Использование прямого WhatsApp Cloud API от Meta позволяет отправлять уведомления клиентам без использования дорогостоящих посредников. Однако при реализации протокола HTTP в 1С разработчики часто сталкиваются с неочевидными ошибками. В этой статье мы разберем классический пример реализации POST-запроса, выявим причину отказа в доступе и изучим критические нюансы, необходимые для стабильной работы системы.

Анализ базового кода отправки сообщения

Для начала рассмотрим типовую структуру запроса, которую мы будем использовать в 1С. Основная задача — перенести параметры из стандартного cURL в объекты платформы. Для взаимодействия с внешними веб-сервисами в 1С используются объекты HTTPСоединение и HTTPЗапрос. Разберем пример формирования запроса для отправки шаблонного сообщения hello_world.

Посмотрим на программный код, который выполняет подключение и передачу данных:


// 1. Создаем защищенное соединение
Защита = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("graph.facebook.com", 443, , , , 30, Защита);

// 2. Указываем авторизационные данные
Токен = "ВАШ_БЕССРОЧНЫЙ_ТОКЕН";

// 3. Формируем заголовки запроса
ЗаголовокЗапросаHTTP = Новый Соответствие();
// КРИТИЧЕСКИЙ МОМЕНТ: Обязательно добавляем пробел после Bearer
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Bearer " + Токен);
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json");

// 4. Настраиваем адрес ресурса (используем Phone Number ID)
ПутьКРесурсу = "v21.0/PHONE_NUMBER_ID/messages";
ЗапросHTTP = Новый HTTPЗапрос(ПутьКРесурсу, ЗаголовокЗапросаHTTP);

// 5. Формируем тело запроса в формате JSON
СтруктураЯзыка = Новый Структура("code", "en_US");
СтруктураСообщения = Новый Структура("name, language", "hello_world", СтруктураЯзыка);
Данные = Новый Структура("messaging_product, to, type, template", "whatsapp", "79001234567", "template", СтруктураСообщения);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
СтрокаДляТела = ЗаписьJSON.Закрыть();

// 6. Устанавливаем тело и отправляем запрос
ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаДляТела, КодировкаТекста.UTF8);
HTTPОтвет = Соединение.ВызватьHTTPМетод("POST", ЗапросHTTP);
Результат = HTTPОтвет.ПолучитьТелоКакСтроку();

Разбор ошибки авторизации: важность пробела

Проанализируем наиболее частую причину, по которой сервер Meta возвращает ошибку 401 (Unauthorized) или сообщает о некорректных правах доступа. При сборке строки заголовка Authorization многие программисты объединяют слова Bearer и сам токен без разделителя. Выясним причину проблемы: стандарт HTTP строго регламентирует формат этого заголовка. Между типом токена и его значением обязательно должен стоять пробел.

Если в коде написано:

ЗаголовокЗапросаHTTP.Вставить("Authorization", "Bearer" + Токен);

Сервер воспримет это как единую непонятную строку и отклонит запрос. Правильный вариант всегда должен содержать пробел: "Bearer ".

Идентификатор в URL: Phone Number ID против App ID

Рассмотрим вторую по популярности ошибку. В официальной документации Meta часто упоминаются различные идентификаторы (ID). Для отправки сообщений через Cloud API в строке адреса (ресурса) необходимо указывать не App ID (ID приложения), а Phone Number ID.

Многие ошибочно вставляют идентификатор из настроек самого приложения в Facebook Dashboard. Чтобы найти правильный Phone Number ID, необходимо в панели разработчика перейти в раздел WhatsApp -> Getting Started. Именно этот уникальный идентификатор привязан к вашему номеру телефона и позволяет отправлять сообщения.

Работа с токенами: временные и системные пользователи

Проанализируем ситуацию со сроком действия доступа. При первом создании приложения Meta выдает "временный токен" (Temporary Access Token). Важно понимать, что он действует всего 24 часа. Если вы встроите его в код 1С, на следующий день интеграция перестанет работать.

Для промышленной эксплуатации 1С необходимо выполнить следующие шаги:

  1. Создать Системного пользователя (System User) в Business Manager.
  2. Назначить этому пользователю роль администратора или соответствующие права на работу с WhatsApp.
  3. Сгенерировать Бессрочный токен (Permanent Token).

Только при таком подходе обмен данными будет стабильным и не потребует ежедневного обновления настроек в 1С.

Форматирование номеров телефонов и кодировка данных

Выясним требования к данным получателя. WhatsApp Cloud API крайне чувствителен к формату номера. Номер телефона должен передаваться строго в международном формате E.164. Это означает:

Например, вместо +7 (900) 123-45-67 в структуру JSON должна попасть строка 79001234567. Перед отправкой рекомендуется программно очищать номер в 1С, используя функцию СтрСоединить(СтрРазделить(Номер, "+-() ")) или регулярные выражения.

Также обратим внимание на метод УстановитьТелоИзСтроки. При работе с кириллицей или специальными символами в шаблонах всегда явно указывайте кодировку КодировкаТекста.UTF8. Это гарантирует, что JSON будет корректно интерпретирован на стороне серверов Meta.

Ограничение 24-часового окна

Разберем логику взаимодействия с клиентами. WhatsApp накладывает ограничения на тип отправляемых сообщений:

  1. Template messages (Шаблоны): Вы можете отправить их в любое время. Шаблон должен быть предварительно одобрен Meta.
  2. Session messages (Свободный текст): Вы можете отправить обычное текстовое сообщение только в том случае, если пользователь сам написал вам в течение последних 24 часов.

Если 1С пытается отправить обычный текст (тип text вместо template) пользователю, который не выходил на связь более суток, API вернет ошибку, даже если ваш программный код написан идеально. Всегда анализируйте возвращаемый JSON ответа, чтобы понимать причину недоставки.

Заключение и Webhooks

Рассмотренный нами метод позволяет отправлять сообщения из 1С в одностороннем порядке. Для создания полноценного чата или получения статусов доставки (отправлено, доставлено, прочитано) вам потребуется настроить Webhook.

Это подразумевает создание в 1С HTTP-сервиса, который будет опубликован на внешнем веб-сервере (например, через Apache или IIS) с использованием защищенного протокола HTTPS. Meta будет присылать POST-запросы на ваш адрес при каждом изменении статуса сообщения или получении ответа от клиента, что позволит вашей системе 1С мгновенно реагировать на действия пользователя.

← На главную