← Вернуться к списку тем

GoogleAppScript отправить фото телеграм ботом, используя мультипарт-форм-дата

Здравствуйте. В этой теме https://imakebots.ru/article/primer-bot-magazina-na-google-app-script в комментариях было приведено решение для отправки фото через метод апи sendPhoto с помощью file-id.

Подскажите, как можно отправить картинку с помощью GoogleAppScript, используя мультипарт-форм-дата? Перекопал пол стэкОверфлоу... не нашел примера, чтобы хоть на что-то опереться.

Авторизуйтесь через Telegram, чтобы оставить комментарий.
Откройте по ссылке или QR бот @iMakeBot, нажмите кнопку Старт/Start.
Следуйте инструкциям бота.

  • iMakeBots [10 месяцев назад]

    Для того чтобы направить картинку через multipart/form-data нужно иметь физический доступ к ней

    GAPPS выполняется на серверах Google, поэтому нужно, чтобы картинка была на его сервере, для этого можно в хранилище или закачать сначала картинку по внешнему url или в ручную загрузить

    В качестве хранилища можно использовать Google DRIVE

    Вот пример для отправки картинки используя доступный (расшаренный) файл с Google Drive

    // id картинки на google drive
    const file_id = "1EWwZ4md----------NS1tybVFd06Qo_h";
    // id пользователя в телеграм
    const chat_id = 00000000;
    // данные
    const config = {
      apiUrl: "https://api.telegram.org/bot",
      token: "340600000:AAGgh1-------wdiVQs23jSzxKVW3qILFpY"
    }
    
    /**
     * Выполним запрос
     */
    function send() {
      sendPhoto(chat_id, file_id);
    }
    
    /**
     * Отправим картинку с Google Drive
     */
    function sendPhoto(chat_id, file_id, text = null) {
      // подготовим набор данных
      let payload = {
        method: "sendPhoto",
        chat_id: String(chat_id),
        photo: DriveApp.getFileById(file_id).getBlob(),
        parse_mode: "HTML"
      };
      if(text != null) {
       payload.caption = text;
      }
      // вернем результат отправки
      return query(payload);
    }
    
    /**
     * Направляем запрос в Телеграм
     */
    function query(payload) {
      let data = {
        method: "post",
        payload: payload
      };
      return JSON.parse(UrlFetchApp.fetch(config.apiUrl + config.token + "/", data).getContentText());
    }

    Замените на свои данные, сохраните и выполните функцию send() - потребуется выдать права скрипту на доступ к Google DRIVE.

    file_id можно получить из url картинки:

    https://drive.google.com/file/d/1EWwZ4md----------NS1tybVFd06Qo_h/view

  • Dmitriy Bryantsev [10 месяцев назад → iMakeBots]

    Спасибо! Работает! )