Несколько дней бьюсь с отправкой файлов боту в Телеграм, в ответ прилетает ошибка данного плана - {“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
- Подробнее о создании ботов Телеграм с помощью расширения Боцман
- Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram
- Отправка в чат телеграм документов и справочников с вложением печатной формы
- Отправка и получение сообщений из 1С 7.7 в Telegram
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Когда-то так уходили файлики
Для Каждого знМассивФайла из МассивФайлы Цикл
знФайл = Справочники.ХранилищеДополнительнойИнформации.ПолучитьСсылку(знМассивФайла);
//Если Не ЗначениеЗаполнено(знФайл.ПолучитьОбъект().Ссылка) Тогда
// Возврат;
//КонецЕсли;
СтрокаСоединения = "/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) Без прокси - это если не в зоне ограничений роскомнадзора. В этом месте наверное надо поменять
На
ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("xlsx");
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
На
ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt");
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот