Первый модуль · 1module.ru

Простая отправка сообщений из 1С в MAX

Простая отправка сообщений из 1С в MAX — это один POST-запрос на шлюз https://1module.ru/gw/ga-gateway.php. В теле передаются idInstance, apiTokenInstance, apiUrl и метод Green API. Шлюз вызывает Green API и возвращает ответ в 1С.

POST https://1module.ru/gw/ga-gateway.php

Запрос

Заголовок: Content-Type: application/json; charset=utf-8. Таймаут — 30 секунд. Другие HTTP-методы не принимаются.

ПолеТипОграничение
idInstanceстрока1–64 символа, латиница и цифры
apiTokenInstanceстрока1–128 символов: латиница, цифры, _, -
apiUrlстрокаhttps, хост green-api.com или *.green-api.com, без логина, пароля, порта и пути
methodстрокаcheckAccount, sendMessage или getMessage
bodyстрока или объектJSON тела метода Green API. Пустая строка уходит как {}

Шлюз выполняет POST {apiUrl}/waInstance{idInstance}/{method}/{apiTokenInstance} и отдаёт код состояния вместе с телом ответа Green API. Поле reason в ответе с кодом 200 означает, что вызов не выполнен.

Простая отправка сообщений из 1С в MAX: вызов шлюза

Общая функция собирает конверт шлюза и читает JSON-ответ. ТелоJSON — уже готовая строка тела метода Green API.

Функция ВызватьШлюзMAX(ИмяМетода, ТелоJSON, ИдЭкземпляра, Токен, Хост, ОписаниеОшибки)

	ОписаниеОшибки = "";

	Запись = Новый ЗаписьJSON;
	Запись.УстановитьСтроку();
	Запись.ЗаписатьНачалоОбъекта();
	Запись.ЗаписатьИмяСвойства("idInstance");
	Запись.ЗаписатьЗначение(СокрЛП(ИдЭкземпляра));
	Запись.ЗаписатьИмяСвойства("apiTokenInstance");
	Запись.ЗаписатьЗначение(СокрЛП(Токен));
	Запись.ЗаписатьИмяСвойства("apiUrl");
	Запись.ЗаписатьЗначение("https://" + Хост);
	Запись.ЗаписатьИмяСвойства("method");
	Запись.ЗаписатьЗначение(ИмяМетода);
	Запись.ЗаписатьИмяСвойства("body");
	Запись.ЗаписатьЗначение(ТелоJSON);
	Запись.ЗаписатьКонецОбъекта();

	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
	Запрос = Новый HTTPЗапрос("/gw/ga-gateway.php", Заголовки);
	Запрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8);

	Соединение = Новый HTTPСоединение("1module.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);

	Попытка
		Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
	Исключение
		ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
		Возврат Неопределено;
	КонецПопытки;

	Если Ответ.КодСостояния <> 200 Тогда
		ОписаниеОшибки = СтрШаблон("Код: %1 Ошибка: %2", Ответ.КодСостояния, Ответ.ПолучитьТелоКакСтроку());
		Возврат Неопределено;
	КонецЕсли;

	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
	Данные = ПрочитатьJSON(Чтение);
	Чтение.Закрыть();

	Причина = "";
	Если ТипЗнч(Данные) = Тип("Структура")
		И Данные.Свойство("reason", Причина)
		И ЗначениеЗаполнено(Причина) Тогда
		ОписаниеОшибки = Строка(Причина);
		Возврат Неопределено;
	КонецЕсли;

	Возврат Данные;

КонецФункции

Скачать готовое решение для 1С, бесплатно

checkAccount

Проверяет номер в MAX и возвращает chatId. phoneNumber передаётся числом: 11 цифр с 7 для России или 12 цифр с 375 для Беларуси.

Функция ИдентификаторЧатаMAX(НомерТелефона, ИдЭкземпляра, Токен, Хост, ОписаниеОшибки)

	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписьJSON.ЗаписатьНачалоОбъекта();
	ЗаписьJSON.ЗаписатьИмяСвойства("phoneNumber");
	ЗаписьJSON.ЗаписатьЗначение(Число(НомерТелефона));
	ЗаписьJSON.ЗаписатьКонецОбъекта();

	Данные = ВызватьШлюзMAX("checkAccount", ЗаписьJSON.Закрыть(),
		ИдЭкземпляра, Токен, Хост, ОписаниеОшибки);
	Если Данные = Неопределено Тогда
		Возврат "";
	КонецЕсли;

	Если Не Данные.Свойство("exist") Или Данные.exist <> Истина Тогда
		ОписаниеОшибки = "На номере нет аккаунта MAX.";
		Возврат "";
	КонецЕсли;

	ИдентификаторЧата = "";
	Данные.Свойство("chatId", ИдентификаторЧата);
	Возврат Строка(ИдентификаторЧата);

КонецФункции

Успешный ответ Green API: {"exist": true, "chatId": "123456"}.

Скачать готовое решение для 1С, бесплатно

sendMessage

Отправляет текст в чат, полученный из checkAccount. В ответе нужен idMessage.

Функция ОтправитьСообщениеMAX(ИдентификаторЧата, ТекстСообщения, ИдЭкземпляра, Токен, Хост, ОписаниеОшибки)

	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписьJSON.ЗаписатьНачалоОбъекта();
	ЗаписьJSON.ЗаписатьИмяСвойства("message");
	ЗаписьJSON.ЗаписатьЗначение(СокрЛП(ТекстСообщения));
	ЗаписьJSON.ЗаписатьИмяСвойства("chatId");
	ЗаписьJSON.ЗаписатьЗначение(Строка(ИдентификаторЧата));
	ЗаписьJSON.ЗаписатьКонецОбъекта();

	Данные = ВызватьШлюзMAX("sendMessage", ЗаписьJSON.Закрыть(),
		ИдЭкземпляра, Токен, Хост, ОписаниеОшибки);
	Если Данные = Неопределено Тогда
		Возврат "";
	КонецЕсли;

	ИдентификаторСообщения = "";
	Данные.Свойство("idMessage", ИдентификаторСообщения);
	Возврат СокрЛП(Строка(ИдентификаторСообщения));

КонецФункции

Успешный ответ Green API: {"idMessage": "BAE5F4886F6F2D05"}.

Скачать готовое решение для 1С, бесплатно

Пример простой отправки сообщения из 1С в MAX

Сначала по номеру получается chatId, затем в этот чат уходит текст. Хост — часть адреса из поля apiUrl, без https://.

Процедура ОтправитьТекстВMAX(НомерТелефона, ТекстСообщения, ИдЭкземпляра, Токен, Хост)

	ОписаниеОшибки = "";
	ИдентификаторЧата = ИдентификаторЧатаMAX(НомерТелефона, ИдЭкземпляра, Токен, Хост, ОписаниеОшибки);
	Если Не ЗначениеЗаполнено(ИдентификаторЧата) Тогда
		Сообщить(ОписаниеОшибки);
		Возврат;
	КонецЕсли;

	ИдентификаторСообщения = ОтправитьСообщениеMAX(ИдентификаторЧата, ТекстСообщения, ИдЭкземпляра, Токен, Хост, ОписаниеОшибки);
	Если Не ЗначениеЗаполнено(ИдентификаторСообщения) Тогда
		Сообщить(ОписаниеОшибки);
		Возврат;
	КонецЕсли;

	Сообщить("Сообщение отправлено: " + ИдентификаторСообщения);

КонецПроцедуры

ОтправитьТекстВMAX(
	"79001234567",
	"Текст сообщения",
	"1103123456",
	"token",
	"1103.api.green-api.com");

Скачать готовое решение для 1С, бесплатно

getMessage

Возвращает статус доставки по chatId и idMessage.

Функция СтатусСообщенияMAX(ИдентификаторЧата, ИдентификаторСообщения, ИдЭкземпляра, Токен, Хост, ОписаниеОшибки)

	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписьJSON.ЗаписатьНачалоОбъекта();
	ЗаписьJSON.ЗаписатьИмяСвойства("chatId");
	ЗаписьJSON.ЗаписатьЗначение(ИдентификаторЧата);
	ЗаписьJSON.ЗаписатьИмяСвойства("idMessage");
	ЗаписьJSON.ЗаписатьЗначение(ИдентификаторСообщения);
	ЗаписьJSON.ЗаписатьКонецОбъекта();

	Данные = ВызватьШлюзMAX("getMessage", ЗаписьJSON.Закрыть(),
		ИдЭкземпляра, Токен, Хост, ОписаниеОшибки);
	Если Данные = Неопределено Тогда
		Возврат "";
	КонецЕсли;

	Статус = "";
	Данные.Свойство("statusMessage", Статус);
	Возврат НРег(СокрЛП(Строка(Статус)));

КонецФункции

Функция ПредставлениеСтатусаMAX(СтатусGreenAPI)

	Статус = НРег(СокрЛП(Строка(СтатусGreenAPI)));
	Если Статус = "sent" Тогда
		Возврат "Отправлено";
	ИначеЕсли Статус = "delivered" Или Статус = "read" Тогда
		Возврат "Доставлено";
	ИначеЕсли Статус = "failed" Или Статус = "noaccount" Или Статус = "notingroup" Тогда
		Возврат "НеДоставлено";
	ИначеЕсли Статус = "queued" Или Статус = "pending" Тогда
		Возврат "Отправляется";
	КонецЕсли;

	Возврат "Ошибка";

КонецФункции

Скачать готовое решение для 1С, бесплатно

Ошибки шлюза

Эти ответы приходят с кодом 200 и полем reason.

reasonКогда
Ожидается POST.Метод запроса не POST
Пустой запрос к шлюзу.Нет тела
Некорректный JSON шлюза.Тело не является JSON-объектом
Некорректный idInstance.Пустой или недопустимый идентификатор
Некорректный apiTokenInstance.Пустой или недопустимый токен
Метод Green API не разрешен шлюзом.Метод не из списка трёх
Некорректный apiUrl. Допустимы только адреса Green API.Адрес не прошёл проверку

Вопросы об отправке из 1С в MAX

Как сделать простую отправку сообщений из 1С в MAX?

Выполните POST на https://1module.ru/gw/ga-gateway.php. В JSON передайте idInstance, apiTokenInstance, apiUrl, method со значением sendMessage и body со строкой JSON, в которой есть chatId и message.

Какой адрес шлюза для отправки из 1С в MAX?

Адрес шлюза: POST https://1module.ru/gw/ga-gateway.php. Заголовок Content-Type: application/json; charset=utf-8. Таймаут 30 секунд.

Какие методы принимает шлюз?

checkAccount получает chatId по номеру телефона, sendMessage отправляет текст, getMessage возвращает статус доставки.

Что означает поле reason в ответе шлюза?

Если в ответе с кодом 200 есть непустое поле reason, вызов не выполнен. Текст reason и есть описание ошибки.