Программное формирование отчета и отправка в чат Bitrix

08.07.24

Интеграция - Мессенджеры и боты

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

Начнем по порядку, для того, чтобы это реализовать, необходимо использовать 4 метода, соответственно будет 4 токена, это методы: 

im.message.add

disk.storage.getlist

im.disk.file.commit.json

disk.storage.uploadfile

Да, вот так все очень просто... Чтобы понять это, у меня ушло несколько дней.

Теперь мы начинаем по порядку, мой алгоритм был таков, начинаем с формирования отчета: 

Конкретно у меня есть обработка с таблицей значений, где можно выбрать отчет, и дальше идет его поиск по имени.

	ТабДок = Новый ТабличныйДокумент;
	ПутьКФайлу = КаталогВременныхФайлов();
	ИмяФайла = "Отчет " + Строка(МД_Отчет.Синоним) + " от " + Строка(Формат(ТекущаяДатаСеанса(),"ДФ=dd.MM.yy"));
	_ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.PDF;
	ИмяТекФайла = ПутьКФайлу + ИмяФайла + ".PDF";
	ТабДок.АвтоМасштаб = Истина;	

    Об_Отчет = Отчеты[МД_Отчет.Имя].Создать(); 
		
				
    Отчет = Об_Отчет;
		                 
		
	СхемаКомпоновкиДанных = Отчет.СхемаКомпоновкиДанных;  
		
		
	Настройки             = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
		
		
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
		
	ДанныеРасшифровкиКомпоновки = Новый ДанныеРасшифровкиКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровкиКомпоновки);
		
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровкиКомпоновки);
		
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ТабДок);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
		
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Отчет.СхемаКомпоновкиДанных, Настройки);
		
	Данныерасшифровки = ДанныеРасшифровкиКомпоновки;
		
	ТабДок.Записать(ИмяТекФайла,_ТипФайлаТабличногоДокумента);

 

После того как мы сформировали файл, который мы и будем отправлять, сделаем из него BASE64-строку, потому что битрикс с другими не может работать, и загрузим этот файл.

 

&НаСервере
Функция ЗагрузитьОтчетНаBX24(Чат,Base64,ИмяФайла,Соединение)
	
	ЗапросЗагрузкаФайла = Новый HTTPЗапрос("rest/***/" + Чат.TOKENДиска + "/disk.storage.uploadfile.json?");
	ЗапросЗагрузкаФайла.Заголовки.Вставить("Content-type", "application/json;charset=utf-8");
	
	СтруктураJSON = Новый Структура("id,fileContent,generateUniqueName,data",Число(Чат.DiskId),Base64,Ложь,Новый Структура("NAME",ИмяФайла+".pdf"));
	
	Запись = Новый ЗаписьJSON; 
	Запись.УстановитьСтроку();
	ЗаписатьJSON(Запись,СтруктураJSON);
	JSON = Запись.Закрыть(); 
	
	
	//СтрокаJSON = "{
	//			"id": ***,
	//			"fileContent": "***",
	//			"generateUniqueName": true,
	//			"data": {"Name": "Абоба.jpeg"}
	//			}";

	ЗапросЗагрузкаФайла.УстановитьТелоИзСтроки(СтрЗаменить(JSON, " ",""),КодировкаТекста.UTF8);
	
	Попытка 
		ОтветФайл = Соединение.ВызватьHTTPМетод("POST",ЗапросЗагрузкаФайла);
	Исключение	
		ОбщегоНазначения.СообщитьПользователю(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		ВызватьИсключение;
	КонецПопытки;
	
	СтруктураОтвета = ***_ПрочитатьJSON(ОтветФайл.ПолучитьТелоКакСтроку());
	
	Если СтруктураОтвета.Свойство("error") Тогда
		ОбщегоНазначения.СообщитьПользователю(СтруктураОтвета.error_description); 
		ВызватьИсключение("Ошибка при загрузке файла",
					КатегорияОшибки.ОшибкаСети, "error.client.config", "error.client.config additional info");
	КонецЕсли;
	
	Возврат СтруктураОтвета;
КонецФункции

Здесь очень важно!!! Потому что битрикс очень чувствителен к тому, что написано, допустим, между Тегом имени JSON и Значением, не должно быть пробела и в целом их не должно быть особо, а также обязательно иметь заголовок: "Content-type", "application/json;charset=utf-8".

Так же data - это не массив, то что написано в документации, это обман! Обман который стоил мне много нервов 

На самом деле это должна быть структура, с полем NAME.

 

 

Вот пример разговора с инженерной линией поддержки: 

 

 

Далее, мы отправляем сообщение в чат битрикс: 

&НаСервере
Процедура ОтправитьСообщение(Чат,ИмяФайла,Соединение)
	ЗапросСообщение = Новый HTTPЗапрос("rest/***/"+Чат.TOKEN
					+"/im.message.add.json?DIALOG_ID="+Чат.ChatId+"&MESSAGE="+ИмяФайла);	

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

	Если СтруктураОтвета.Свойство("error") Тогда
		ОбщегоНазначения.СообщитьПользователю(СтруктураОтвета.error_description); 
		ВызватьИсключение("Ошибка при отправке сообщения",
					КатегорияОшибки.ОшибкаСети, "error.client.config", "error.client.config additional info");
	КонецЕсли;
	
КонецПроцедуры

 

После всего этого отправляем в чат сам файл 

 

&НаСервере
Процедура КомитОтчетаBX24(Чат,UPLOAD_ID,Соединение)
	
	ЗапросФайлКомит = Новый HTTPЗапрос("rest/***/"+Чат.TOKENКомита
						+"/im.disk.file.commit.json?CHAT_ID="+
									СтрЗаменить(Чат.ChatId,"chat","")+
											"&UPLOAD_ID="+Строка(Формат(UPLOAD_ID,"ЧГ=0")));

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

	СтруктураОтвета = ***_ПрочитатьJSON(ОтветКомит.ПолучитьТелоКакСтроку());

	Если СтруктураОтвета.Свойство("error") Тогда
		ОбщегоНазначения.СообщитьПользователю(СтруктураОтвета.error_description); 
		ВызватьИсключение("Ошибка при отправке сообщения с файлом",
										КатегорияОшибки.ОшибкаСети, "error.client.config", "error.client.config additional info");	
	Иначе
		ОбщегоНазначения.СообщитьПользователю("Сообщение отправлено");
	КонецЕсли;

	

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

 

Здесь тоже есть 1 прикол. Потому что в остальных методах мы отправляем ID чата в формате chat****, а именно в file.comit, мы отправляем без chat, иначе все ломается.

На этом все, я надеюсь эта статья будет вам полезна, я потратил кучу своего времени на изучение всего этого.

Прошу не судите строго, я начинающий, если есть, где покритиковать, то пишите, всегда открыт к диалогу.

#Битрикс #bitrix24 #отправка сообщений #отправка сообщений в битрикс #программирование #работасapi

См. также

SALE! 25%

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 1С:Конвертация данных Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 9900 руб.

27.12.2021    36716    98    161    

192

Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Интеграция мессенджера WhatsApp и 1С: УНФ, УТ, КА, ERP - отправка и получение сообщений, картинок, файлов и видео прямо в 1С. Расширение работает с сервисом GreenApi.

15600 руб.

23.06.2023    7937    49    11    

27

Мессенджеры и боты Программист Пользователь Платформа 1С v8.3 Платные (руб)

Мощный модуль для интеграции 1С с чат-ботами: Telegram, Viber, WhatsApp, WhatsApp Business, Instagram, ICQ, Facebook, Vkontakte, Skype, Одноклассники, Яндекс.Алиса, Avito а так же виджеты чата для сайтов: Verbox, Jivochat. Это универсальное и эффективное решение с большими возможностями, простым интерфейсом, наличием визуального конструктора, базовыми сценариями поведения из коробки, позволяющий запустить чат-ботов в течении 1-го дня.

65000 руб.

08.10.2019    59892    35    0    

157

Мессенджеры и боты Системный администратор Программист Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 Платные (руб)

Развитие популярного решения для интеграции мессенджера Telegram с нашей любимой 1С - конструктор чат-ботов в Телеграм.

15000 руб.

18.06.2021    63796    307    272    

360

Документооборот и делопроизводство (СЭД) Мессенджеры и боты Учет документов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    29364    33    48    

67

Мессенджеры и боты SMS рассылки Платформа 1С v8.3 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Решение реализовано в виде расширения. Заменяет отправку смс на отправку в WhatsApp через Green-api. Отправка чека картинкой.

7800 руб.

15.05.2024    1190    3    6    

4
Оставьте свое сообщение