Отправка файла ICQ

1. kvaleksandr 23 17.09.22 11:52 Сейчас в теме
Здравствуйте. Если кто-то делал отправку файла в ICQ через бота подскажите с чем может быть связана ошибка. Не могу понять почему файл криво отправляется. В отчете от сервера пишется что файл отправлен, но он отправляется каким-то кривым.

Вот мой код для отправки файла

	HTTP =  Новый HTTPСоединение(Интеграция.Сервер,,,,,Истина); 
	ФайлЗапроса = ПолучитьИмяВременногоФайла();  
	ТекстовыйФайл = Новый ТекстовыйДокумент;   
	
	ПутьКФайлу = "C:\tmp\153324.pdf"; 
	ТелоЗапроса = Новый ДвоичныеДанные(ПутьКФайлу); 	
	
	ТекстовыйФайл.УстановитьТекст(ТелоЗапроса);           
	ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.ANSI);   
	
	ФайлОтправки = Новый Файл(ФайлЗапроса);
	РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());	     
	
	ФайлРезультата = ПолучитьИмяВременногоФайла();
	
	ЗаголовокHTTP = новый Соответствие;       
	ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
	ЗаголовокHTTP.Вставить("Content-Type","multipart/form-data");	    
	
	ПараметрыЗапроса = новый Соответствие;
	ПараметрыЗапроса.Вставить("caption","А это описание к файлу");
	ПараметрыЗапроса.Вставить("file",ТелоЗапроса);
	ПараметрыЗапроса.Вставить("parseMode","MarkdownV2");	
	ПараметрыЗапроса.Вставить("chatId",идКомуОтправить);	
	ПараметрыЗапроса.Вставить("token",Интеграция.Токен);	
	
	Ресурс = "/bot/v1" +"/messages/sendFile?"+УпаковатьПараметры(ПараметрыЗапроса);
	//Ресурс = "/bot/v1/messages/sendFile?token=001.0687406898.4239950246:1004863080&chatId=272484829&parseMode=MarkdownV2&file=25 50 44 46 2D 31 2E...&caption=А это описание к файлу
	
	HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс, ФайлРезультата, ЗаголовокHTTP);
	
	ТекстовыйФайлОтвет = Новый ТекстовыйДокумент;
	ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8);
	СтрокаОтветСервера = ТекстовыйФайлОтвет.ПолучитьТекст();
Показать


Для ознакомления с документацией как отправляю ссылка на апи бота. использую /messages/sendFile через POST.
API ICQ


Ниже прикрепил как файл приходит в ICQ. Файл весит 100кб, но почему-то всегда приходят байты.
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 17.09.22 12:08 Сейчас в теме
(1)
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);

Не надо передавать этот заголовок, платформа сама его добавит с правильным значением.
3. kvaleksandr 23 17.09.22 12:14 Сейчас в теме
(2) Спасибо за дополнительную информацию по этому поводу.

Жаль это не служит решением моей проблемы(
4. N_K_S 44 02.06.23 09:36 Сейчас в теме
Оставлю тут свой вариант, работает без нареканий.

Процедура ОтправитьФайлICQ(ПутьКФайлу)
	
	ФайлИмяПараметра = "file";
	ИмяФайла = "Планирование_" + Формат(ТекущаяДата(), "ДФ=yyyy.MM.dd_HH.mm") + ".xlsx";	
	Разделитель = СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");
	
	Тело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Тело, , , Символы.ВК + Символы.ПС, "");
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + ФайлИмяПараметра + "; filename=" + ИмяФайла);
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.Записать(Новый ДвоичныеДанные(ПутьКФайлу));
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
	ЗаписьДанных.Закрыть();
	
	ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
	
	
	Сервер = "api.icq.net/bot/v1";
	Токен = "000.0000000000.0000000000:00000000";
	Идентификатор = "XXXXXXXXXXX";
	
	АдресРесурса = "/messages/sendFile"
	+ "?token="  + Токен
	+ "&chatId=" + Идентификатор;
	
	HTTPСоединение = Новый HTTPСоединение(Сервер);
	ЗаголовкиHTTP = Новый Соответствие;
	ЗаголовкиHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
	
	HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, ЗаголовкиHTTP);			
	HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);	
	HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
	
	Сообщить(HTTPОтвет.ПолучитьТелоКакСтроку());	
	HTTPСоединение = Неопределено;
	
КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот