Отправка файлов в Телеграм

1. Redinternational 86 19.12.18 06:00 Сейчас в теме +1 $m
Несколько дней бьюсь с отправкой файлов боту в Телеграм, в ответ прилетает ошибка данного плана - {“ok”:false,“error_code”:401,“description”:“Unauthorized”}. Прокси рабочий, сообщения шлются нормально через него, а вот файлы не хотят уходить, пробовал без прокси, но запрос не уходит, кто компетентен, подскажите выход.

Код процедуры:

Процедура ОтправитьФайл(Сотрудник, ИмяФайла, Токен)
	
    chat_id = Сотрудник.Chat_ID;
    Таб = Новый ТабличныйДокумент;
    Отчеты.ЗависшиеЗадачи.Создать().СкомпоноватьРезультат(Таб);
    
    ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
    
    Таб.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
    
    СтрокаСоединения = "bot" + Токен + "/sendDocument";

    Boundary = "----"+Строка(Новый УникальныйИдентификатор());

    //Определяем массив для процедуры ОбъединитьФайлы 

    МассивФайловДляОбъединения = Новый Массив; 

    //Формируем начальный фрагмент файла POST-запроса 

    ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("xlsx"); 
    ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8); 

    //Формируем конечный фрагмент файла POST-запроса 

    ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("xlsx"); 
    ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8);

    ТекстДляОтправки = "";

    ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;    
    ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""chat_id""" + Символы.ПС + Символы.ПС;    
    ТекстДляОтправки = ТекстДляОтправки + chat_id + Символы.ПС;
    
    ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;    
    ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""document""; filename=""report.xlsx""" + Символы.ПС;    
    
    ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки);
    ФайлОтправкиНачало.Закрыть(); 
    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало); 

    МассивФайловДляОбъединения.Добавить(СокрЛП(ИмяФайла)); 

    ТекстДляОтправки = "" + Символы.ПС;
    ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary+"--";
    ФайлаОтправкиКонец.ЗаписатьСтроку(ТекстДляОтправки);
    ФайлаОтправкиКонец.Закрыть(); 
    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец); 
    
    
    ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("xlsx");
    ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
    
    HTTPЗапрос = Новый HTTPЗапрос;
    Заголовки = Новый Соответствие;

    HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive"); 
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary); 

    HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);    
    HTTPЗапрос.АдресРесурса = СтрокаСоединения; 
	
	ПроксиСервер		= "socks5://phobos.public.opennetwork.cc"; // Собственно вот здесь мы и обращаемся через socks5
					ПроксиПорт		= 1090;
					ПроксиПользователь	= "256370577";
					ПроксиПароль		= "PfZWriDZ";
					ИнтернетПрокси = Новый ИнтернетПрокси;
					ИнтернетПрокси.Установить("https", ПроксиСервер, ПроксиПорт, ПроксиПользователь, ПроксиПароль);
	
	
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows, Новый 
    СертификатыУдостоверяющихЦентровWindows);
    HTTPСоединение = Новый HTTPСоединение("api.telegram.org",,,,ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL());

    Попытка 
        ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    Исключение
        Сообщить("Ошибка выполенния запроса!");
    КонецПопытки;	
	
	 ДанныеКакСтрока = ОтветHTTP.ПолучитьТелоКакСтроку();
	Сообщить("Отчет:");
	Сообщить(ДанныеКакСтрока);
КонецПроцедуры
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. rintik 19 19.12.18 08:42 Сейчас в теме
Когда-то так уходили файлики
Для Каждого знМассивФайла из МассивФайлы Цикл
			знФайл = Справочники.ХранилищеДополнительнойИнформации.ПолучитьСсылку(знМассивФайла);
			//Если Не ЗначениеЗаполнено(знФайл.ПолучитьОбъект().Ссылка) Тогда
			//	Возврат;
			//КонецЕсли;
			СтрокаСоединения = "/bot" + Ключ + "/sendDocument";
			знРасширение = РаботаСФайлами.ПолучитьРасширениеФайла(знФайл.ИмяФайла);
			Если знРасширение = "" Тогда
				Продолжить;
			КонецЕсли;	
			ИмяФайла = ПолучитьИмяВременногоФайла(знРасширение);
			ВнешнийФайл = знФайл.Хранилище.Получить();
			Попытка
				ВнешнийФайл.Записать(ИмяФайла);
			Исключение
				Сообщение = "Ошибка при сохранении файла: " + ОписаниеОшибки();
				ЗаписьЖурналаРегистрации("Сообщение телеграм", , , ,ПолучательID+" "+Сообщение);
				Возврат;
			КонецПопытки;

			Сервер = "api.telegram.org";
			Команда = "sendDocument";
			Boundary = "----"+Строка(Новый УникальныйИдентификатор());
	    	//Определяем массив для процедуры ОбъединитьФайлы
	    	МассивФайловДляОбъединения = Новый Массив;
	    
	    	//Формируем начальный фрагмент файла POST-запроса
	   		ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
	    	ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8);
	    
	    	//Формируем конечный фрагмент файла POST-запроса
	    	ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt");
	    	ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8);
	    
	    	ТекстДляОтправки = "";
	    
	    	ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;
	    	ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""chat_id""" + Символы.ПС + Символы.ПС;
	    	ТекстДляОтправки = ТекстДляОтправки + ПолучательID + Символы.ПС;
	    
	    	ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;
	    	ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""document""; filename="+знФайл.ИмяФайла+"" + Символы.ПС;
	    
	    	ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки );
	    	ФайлОтправкиНачало.Закрыть();
			
			МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);
			МассивФайловДляОбъединения.Добавить(СокрЛП(ИмяФайла));
    		ТекстДляОтправки = "" + Символы.ПС;
    		ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary+"--";
    		ФайлаОтправкиКонец.ЗаписатьСтроку(ТекстДляОтправки);
   		 	ФайлаОтправкиКонец.Закрыть();
    		МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец);
   	 		ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt");
    		ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
    
    		HTTPЗапрос = Новый HTTPЗапрос;
    		Заголовки = Новый Соответствие;
    
    		HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive");
    		HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
    
    		HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);
    		HTTPЗапрос.АдресРесурса = СтрокаСоединения;
    
			//ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows, Новый СертификатыУдостоверяющихЦентровWindows);
			//HTTPСоединение = Новый HTTPСоединение(Сервер,,,,,, ЗащищенноеСоединение);
 			Соединение = Новый HTTPСоединение(Сервер,,,,,,Новый ЗащищенноеСоединениеOpenSSL);
   
   			Попытка
        		ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
   			Исключение
        		ЗаписьЖурналаРегистрации("Сообщение телеграм", , , ,ПолучательID+" "+ОписаниеОшибки());
    		КонецПопытки;
		КонецЦикла;

	КонецЕсли;
Показать
3. Redinternational 86 19.12.18 10:37 Сейчас в теме
4. rintik 19 19.12.18 11:56 Сейчас в теме
(3) Без прокси - это если не в зоне ограничений роскомнадзора. В этом месте наверное надо поменять
ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("xlsx");
    ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);

На
ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt");
    ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
5. Redinternational 86 25.12.18 05:53 Сейчас в теме
(4)к сожалению не работает, дальше 401 ошибки ни куда не ушел
6. Redinternational 86 25.12.18 05:54 Сейчас в теме
Буду рад любым идеям как реализовать данный механизм! =)
Оставьте свое сообщение

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