|
отправка картинок в телеграмм бот не работает | ☑ | ||
---|---|---|---|---|
0
r2d24
22.04.21
✎
15:17
|
В апреле у телеграмма появилось обновление, но не пойму, было ли изменен алгоритм API для обмена картинок
Ранее был написал алгоритм чат бота с телеграмом, все работало. Сейчас при попытки отправить картинку, возникает ошибка 400 и пустой текст ошибки, данных об ошибки нет |
|||
1
Dzenn
гуру
22.04.21
✎
15:22
|
1) проверил на своём давно разработанном боте, отправляющем в том числе картинки из 1С - всё работает
2) Если бы был изменён алгоритм, то мне пришла бы куча тикетов по моему продающемуся решению по интеграции телеги с 1С |
|||
2
r2d24
29.04.21
✎
16:35
|
Обновляю тему. Не удалось найти решение проблемы, даже не знаю в какую сторону смотреть?
|
|||
3
r2d24
29.04.21
✎
17:50
|
может кто выслать пример рабочего кода, для отправки картинки?
Вот мой код: Токен = параметры.токен; URL = "https://" + "api.telegram.org" + "/bot" + Токен + "/" + структураОтвет.Получить("method"); //URL = "https://" + "api.telegram.org" + "/bot" + Токен + "/" + структураОтвет.Получить("method"); ИнтернетПрокси = Неопределено; ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); HTTPЗапрос = Новый HTTPЗапрос(); ДанныеКартинки = структураОтвет.Получить("photo"); Если ДанныеКартинки <> Неопределено Тогда Расширение = ДанныеКартинки.Расширение; Картинка = ПолучитьИзВременногоХранилища(ДанныеКартинки.СсылкаНаДвоичныеДанныеФайла); Boundary = "--" + СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; charset=UTF-8; boundary=" + Boundary); Поток = Новый ПотокВПамяти(); ЗаписьДанных = Новый ЗаписьДанных(Поток); // Заголовки ЗаписьДанных.ЗаписатьСтроку("--" + Boundary); ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""photo""; filename="""+ДанныеКартинки.ИмяФайла+""); ЗаписьДанных.ЗаписатьСтроку("Content-Type: image/"+Расширение); ЗаписьДанных.ЗаписатьСтроку(""); // Тело ЗаписьДанных.Записать(Картинка); ЗаписьДанных.Закрыть(); КартинкаПоток = Поток.ЗакрытьИПолучитьДвоичныеДанные(); Тело = Новый ПотокВПамяти(); ЗаписьДанных = Новый ЗаписьДанных(Тело); ЗаписьДанных.Записать(КартинкаПоток); // разделитель multipart/form-data ЗаписьДанных.ЗаписатьСтроку(""); ЗаписьДанных.ЗаписатьСтроку("--" + Boundary + "--"); // конец multipart/form-data ЗаписьДанных.Закрыть(); ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные(); HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела); КонецЕсли; //проверим картинку, выведем на форму Если ДанныеКартинки <> Неопределено Тогда ДвДанные = ПолучитьИзВременногоХранилища(ДанныеКартинки.СсылкаНаДвоичныеДанныеФайла); ТестиВыведемКартинку(ДвДанные); КонецЕсли; Если структураОтвет.Получить("chat_id") <> Неопределено Тогда URL = URL + "?chat_id=" + Формат(структураОтвет.Получить("chat_id"), "ЧГ=0"); КонецЕсли; Если структураОтвет.Получить("text") <> Неопределено Тогда URL = URL + "&text=" + структураОтвет.Получить("text"); //URL = URL +"&parse_mode=html"; КонецЕсли; Если структураОтвет.Получить("reply_markup") <> Неопределено Тогда URL = URL + "&reply_markup=" + структураОтвет.Получить("reply_markup"); //кнопки КонецЕсли; Если структураОтвет.Получить("caption") <> Неопределено Тогда URL = URL + "&text=" + структураОтвет.Получить("caption");// //URL = URL + "&caption=" + структураОтвет.Получить("caption"); //заголовок КонецЕсли; Если структураОтвет.Получить("message_id") <> Неопределено Тогда URL = URL + "&message_id=" + структураОтвет.Получить("message_id"); КонецЕсли; СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); HTTPЗапрос.АдресРесурса = СтруктураURI.ПутьНаСервере; HTTPСоединение = Новый HTTPСоединение(СтруктураURI.Хост, СтруктураURI.Порт,,, ИнтернетПрокси, 20, ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение()); Попытка HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос); Исключение Сообщить("Не удалось подключиться"); Возврат Неопределено; КонецПопытки; Если HTTPОтвет.КодСостояния = 200 Тогда Ответ = HTTPОтвет.ПолучитьТелоКакСтроку(); ОтветСоответствие = ЧтениеJSONВСтруктуру(Ответ, Истина); Если ОтветСоответствие.Получить("ok") = Истина Тогда Возврат ОтветСоответствие; Иначе КонецЕсли; Иначе Сообщить("не удалось отправить новое сообщение: " +HTTPОтвет.КодСостояния +" - " + HTTPОтвет.ПолучитьТелоКакСтроку()); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |