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

1. kvaleksandr 22 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 34 17.09.22 12:08 Сейчас в теме
(1)
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);

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

Жаль это не служит решением моей проблемы(
4. N_K_S 43 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Соединение = Неопределено;
	
КонецПроцедуры
Показать
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)