Имя: Пароль:
1C
1С v8
отправка картинок в телеграмм бот не работает
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Ответ.ПолучитьТелоКакСтроку());
        

    КонецЕсли;