Метод sendDocument для Телеграм бота
Добрый день.
Есть задача передать файл pdf в телеграмм-бот по нажатию кнопки в боте.
Данные о нажатии кнопки приходят в 1С.
Я делаю следующее:
код проходит без ошибок, но ничего не передается.
я понимаю, что как-то я не так передаю сам файл.
Все что нашёл - это передача файла через getUpdates
Прошу помочь...
Есть задача передать файл pdf в телеграмм-бот по нажатию кнопки в боте.
Данные о нажатии кнопки приходят в 1С.
Я делаю следующее:
Если ДанныеЗапроса.text = "Получить документ" Тогда
стр.Вставить("method", "sendDocument");
стр.Вставить("chat_id", Чат);
ПолныйПуть = "d:\1111.pdf";
ИмяФайла = "1111.pdf";
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
РазделительСтрок = Символы.ВК + Символы.ПС;
ТипКонтента = "multipart/form-data; boundary=" + Boundary;
Док = "";
Док = Док + "--"+ Boundary+ РазделительСтрок;
док = док + "Content-Disposition: form-data; name=""chat_id"""+РазделительСтрок;
док = док + СтрЗаменить(Строка(Чат), Символы.НПП, "") + РазделительСтрок;
Док = Док + "--"+ Boundary+ РазделительСтрок;
док = док + "Content-Disposition: form-data; name=""document""; filename="""+ ИмяФайла+""""+РазделительСтрок;
док = док + "Content-Type: application/pdf"+РазделительСтрок;
ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть);
док = док + ДвоичныеДанные + РазделительСтрок;
док = док + "--" + Boundary + "--" + РазделительСтрок;
стр.Вставить("document", док);
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ЗаписьJSON(стр));
Ответ.Заголовки.Вставить("Content-Type", ТипКонтента);
Ответ.Заголовки.Вставить("Connection", "keep-alive");
Возврат Ответ;
Показатькод проходит без ошибок, но ничего не передается.
я понимаю, что как-то я не так передаю сам файл.
Все что нашёл - это передача файла через getUpdates
Прошу помочь...
По теме из базы знаний
Найденные решения
(3)
Какой вебхук? Пост запрос же!
МойToken = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11";
АдресTelegramAPI = "api.telegram.org";
ПроксиАдрес = "159.138.22.170";
ПроксиПорт = 3128;
ЧатID = "882646417";
ПутьКФайлу = "C:\1.pdf";
Boundary = "----"+Строка(Новый УникальныйИдентификатор());
Файл = Новый Файл(ПутьКФайлу);
//Определяем массив для процедуры ОбъединитьФайлы
МассивФайловДляОбъединения = Новый Массив;
МассивФайловДляОбъединения.Добавить(ПолучитьИмяВременногоФайла("txt"));
ФайлОтправкиНачало = Новый ЗаписьТекста(МассивФайловДляОбъединения[0], КодировкаТекста.UTF8);
НачальныеДанные = "--%Разделитель%
|Content-Disposition: form-data; name=""chat_id""
|
|%ЧатID%
|--%Разделитель%
|Content-Disposition: form-data; name=""document""; filename=""%ИмяФайла%""
|";
НачальныеДанные = СтрЗаменить(НачальныеДанные,"%Разделитель%",Boundary);
НачальныеДанные = СтрЗаменить(НачальныеДанные,"%ЧатID%",ЧатID);
НачальныеДанные = СтрЗаменить(НачальныеДанные,"%ИмяФайла%",Файл.Имя);
ФайлОтправкиНачало.ЗаписатьСтроку(НачальныеДанные );
ФайлОтправкиНачало.Закрыть();
МассивФайловДляОбъединения.Добавить(ПутьКФайлу);
МассивФайловДляОбъединения.Добавить(ПолучитьИмяВременногоФайла("txt"));
ФайлаОтправкиКонец = Новый ЗаписьТекста(МассивФайловДляОбъединения[2], КодировкаТекста.UTF8);
КонечныеДанные = "
|--%Разделитель%--";
КонечныеДанные = СтрЗаменить(КонечныеДанные,"%Разделитель%",Boundary);
ФайлаОтправкиКонец.ЗаписатьСтроку(КонечныеДанные);
ФайлаОтправкиКонец.Закрыть();
ИмяИтоговогоФайла = ПолучитьИмяВременногоФайла("txt");
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяИтоговогоФайла);
Прокси = Новый ИнтернетПрокси;
Прокси.Установить("https", ПроксиАдрес, ПроксиПорт);
Прокси.Установить("http", ПроксиАдрес, ПроксиПорт);
СоединениеHTTP = Новый HTTPСоединение(АдресTelegramAPI,443,,,Прокси,,Новый ЗащищенноеСоединениеOpenSSL());
АдресЗапроса = "bot"
+ МойToken
+ "/sendDocument";
ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
ЗапросHTTP.Заголовки.Вставить("Connection", "keep-alive");
ЗапросHTTP.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
ЗапросHTTP.УстановитьИмяФайлаТела(ИмяИтоговогоФайла);
Попытка
ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ПоказатьКакой вебхук? Пост запрос же!
Всё получилось.
Резюмирую.
1. Через вебхук нельзя передать файл с компьютера, т.е. ответом на запрос бота (можно только когда он доступен в интернете или уже был загружен в телеграм).
2. Чтобы загрузить файл при получении запроса по вебхуку, нужно его выгрузить методом, который указал - (4.) Xershi
Метод всё же рабочий, но нужно уделить внимание, что chat_id выгружается, как число. Поэтому его нужно привести в вид -
СтрЗаменить(Строка(ДанныеЗапроса.chat.id), Символы.НПП,"");
3. После того, как будет загружен файл обязательно нужно ответить на вебхук запрос, чтобы он не завис.
2 и 3 пункты можно поменять местами, это как на любителя.
Всем большое спасибо за помощь.
Резюмирую.
1. Через вебхук нельзя передать файл с компьютера, т.е. ответом на запрос бота (можно только когда он доступен в интернете или уже был загружен в телеграм).
2. Чтобы загрузить файл при получении запроса по вебхуку, нужно его выгрузить методом, который указал - (4.) Xershi
Метод всё же рабочий, но нужно уделить внимание, что chat_id выгружается, как число. Поэтому его нужно привести в вид -
СтрЗаменить(Строка(ДанныеЗапроса.chat.id), Символы.НПП,"");
3. После того, как будет загружен файл обязательно нужно ответить на вебхук запрос, чтобы он не завис.
2 и 3 пункты можно поменять местами, это как на любителя.
Всем большое спасибо за помощь.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Сразу нашел статьюTelegram bot API - разбор документации с примерами
Копировать код, который работал у автора думаю не стоит сюда?
Остались вопросы как его под вас переписать?
sendDocument
Сразу нашел статью
Копировать код, который работал у автора думаю не стоит сюда?
Остались вопросы как его под вас переписать?
(3)
Какой вебхук? Пост запрос же!
МойToken = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11";
АдресTelegramAPI = "api.telegram.org";
ПроксиАдрес = "159.138.22.170";
ПроксиПорт = 3128;
ЧатID = "882646417";
ПутьКФайлу = "C:\1.pdf";
Boundary = "----"+Строка(Новый УникальныйИдентификатор());
Файл = Новый Файл(ПутьКФайлу);
//Определяем массив для процедуры ОбъединитьФайлы
МассивФайловДляОбъединения = Новый Массив;
МассивФайловДляОбъединения.Добавить(ПолучитьИмяВременногоФайла("txt"));
ФайлОтправкиНачало = Новый ЗаписьТекста(МассивФайловДляОбъединения[0], КодировкаТекста.UTF8);
НачальныеДанные = "--%Разделитель%
|Content-Disposition: form-data; name=""chat_id""
|
|%ЧатID%
|--%Разделитель%
|Content-Disposition: form-data; name=""document""; filename=""%ИмяФайла%""
|";
НачальныеДанные = СтрЗаменить(НачальныеДанные,"%Разделитель%",Boundary);
НачальныеДанные = СтрЗаменить(НачальныеДанные,"%ЧатID%",ЧатID);
НачальныеДанные = СтрЗаменить(НачальныеДанные,"%ИмяФайла%",Файл.Имя);
ФайлОтправкиНачало.ЗаписатьСтроку(НачальныеДанные );
ФайлОтправкиНачало.Закрыть();
МассивФайловДляОбъединения.Добавить(ПутьКФайлу);
МассивФайловДляОбъединения.Добавить(ПолучитьИмяВременногоФайла("txt"));
ФайлаОтправкиКонец = Новый ЗаписьТекста(МассивФайловДляОбъединения[2], КодировкаТекста.UTF8);
КонечныеДанные = "
|--%Разделитель%--";
КонечныеДанные = СтрЗаменить(КонечныеДанные,"%Разделитель%",Boundary);
ФайлаОтправкиКонец.ЗаписатьСтроку(КонечныеДанные);
ФайлаОтправкиКонец.Закрыть();
ИмяИтоговогоФайла = ПолучитьИмяВременногоФайла("txt");
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяИтоговогоФайла);
Прокси = Новый ИнтернетПрокси;
Прокси.Установить("https", ПроксиАдрес, ПроксиПорт);
Прокси.Установить("http", ПроксиАдрес, ПроксиПорт);
СоединениеHTTP = Новый HTTPСоединение(АдресTelegramAPI,443,,,Прокси,,Новый ЗащищенноеСоединениеOpenSSL());
АдресЗапроса = "bot"
+ МойToken
+ "/sendDocument";
ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
ЗапросHTTP.Заголовки.Вставить("Connection", "keep-alive");
ЗапросHTTP.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
ЗапросHTTP.УстановитьИмяФайлаТела(ИмяИтоговогоФайла);
Попытка
ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ПоказатьКакой вебхук? Пост запрос же!
(4) Что такое webhook - это когда стучится телеграм бот в 1С... он всегда стучится методом ПОСТ!!!
Что такое getUpdates - это когда я стучусь из 1С в телеграм бот и тоже методом ПОСТ!!!
Все передачи между телеграм-ботом и 1С через POST работают.
Да, Вы правы, если я принудительно отправлю телеграм-боту Файл, то всё как Вы описали.
Но я хочу просто ответить на его запрос файлом.
Такое возможно???
Что такое getUpdates - это когда я стучусь из 1С в телеграм бот и тоже методом ПОСТ!!!
Все передачи между телеграм-ботом и 1С через POST работают.
Да, Вы правы, если я принудительно отправлю телеграм-боту Файл, то всё как Вы описали.
Но я хочу просто ответить на его запрос файлом.
Такое возможно???
(8)
Ты сейчас очень мужественным и волевым голосом оповестил всех о том, что 99% REST сервисов интернета не работают, потому что их ответы "никто не будет обрабатывать"
пост запрос не предполагает ответ в теле запроса, ответ отправить можно конечно же, но никто его не будет обрабатывать,
Какая милота.
Ты сейчас очень мужественным и волевым голосом оповестил всех о том, что 99% REST сервисов интернета не работают, потому что их ответы "никто не будет обрабатывать"
(4) Данный код тоже не работает выдается ошибка 400
я уже прочитал, что сразу ответом на запрос телеграм-бота отправить файл нельзя, нужно его как-то положить на сервера телеграм-бота.
Но как??
Подскажите, кто-нибудь рабочий код для отправки файла в телеграм-бот с компьютера.
я уже прочитал, что сразу ответом на запрос телеграм-бота отправить файл нельзя, нужно его как-то положить на сервера телеграм-бота.
Но как??
Подскажите, кто-нибудь рабочий код для отправки файла в телеграм-бот с компьютера.
Всё получилось.
Резюмирую.
1. Через вебхук нельзя передать файл с компьютера, т.е. ответом на запрос бота (можно только когда он доступен в интернете или уже был загружен в телеграм).
2. Чтобы загрузить файл при получении запроса по вебхуку, нужно его выгрузить методом, который указал - (4.) Xershi
Метод всё же рабочий, но нужно уделить внимание, что chat_id выгружается, как число. Поэтому его нужно привести в вид -
СтрЗаменить(Строка(ДанныеЗапроса.chat.id), Символы.НПП,"");
3. После того, как будет загружен файл обязательно нужно ответить на вебхук запрос, чтобы он не завис.
2 и 3 пункты можно поменять местами, это как на любителя.
Всем большое спасибо за помощь.
Резюмирую.
1. Через вебхук нельзя передать файл с компьютера, т.е. ответом на запрос бота (можно только когда он доступен в интернете или уже был загружен в телеграм).
2. Чтобы загрузить файл при получении запроса по вебхуку, нужно его выгрузить методом, который указал - (4.) Xershi
Метод всё же рабочий, но нужно уделить внимание, что chat_id выгружается, как число. Поэтому его нужно привести в вид -
СтрЗаменить(Строка(ДанныеЗапроса.chat.id), Символы.НПП,"");
3. После того, как будет загружен файл обязательно нужно ответить на вебхук запрос, чтобы он не завис.
2 и 3 пункты можно поменять местами, это как на любителя.
Всем большое спасибо за помощь.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот