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

Ошибка 302 при попытке вебхука отправить данные в apps script

Здравствуйте! Помогите разобраться и как-то исправить ошибку. У меня возникает ошибка 302 при попытке вебхука отправить данные в apps script
Вот мой apps script код: 

const config = {
  sheetId: "ТУТ ID ТАБЛИЦЫ",  // ID вашей таблицы
  token: "ТОКЕН API",  // API токен вашего бота
  userNameBot: "ЮЗЕРНЕЙМ БОТА",  // Имя пользователя бота в Telegram
  webUrl: "https://script.google.com/macros/s/ТУТ ИДЕНТИФИКАТОР РАЗВЕРТЫВАНИЯ/exec",  // URL веб-приложения
  apiUrl: "https://api.telegram.org/bot",  // Базовый URL для работы с Telegram API
};

/**
 * Получаем данные от Telegram
 */
function doPost(request) {  
  // получаем данные
  let update = JSON.parse(request.postData.contents);
  
  // направляем данные в объект WebHook
  new WebHook(update);
}

class WebHook {
  constructor(update) {
    // Разбираем данные из обновления
    let message = update.message;
    
    if (message && message.text) {
      // Извлекаем информацию из сообщения
      let userId = message.from.id;  // ID пользователя
      let messageText = message.text;  // Текст сообщения
      let messageId = message.message_id;  // ID сообщения (номер ответа)
      let source = "telegram";  // Источник сообщения

      // Записываем данные в Google Sheets
      this.saveToSheet(userId, messageText, source, messageId);
    }
  }
  
  saveToSheet(userId, messageText, source, messageId) {
    // Открываем нужную таблицу
    const sheet = SpreadsheetApp.openById(config.sheetId).getSheetByName("bot");

    // Добавляем новую строку с данными
    sheet.appendRow([new Date(), userId, messageText, messageId, source]);
  }
}

/**
 * Устанавливаем вебхук для Telegram бота
 */
function setWebHook() {
  const url = config.apiUrl + config.token + "/setWebhook?url=" + config.webUrl;
  const response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText());
}

/**
 * Получаем информацию о текущем вебхуке
 */
function getWebHookInfo() {
  const url = config.apiUrl + config.token + "/getWebhookInfo";
  const response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText());
}

При тесте через журнал выполнения функции setwebhook, он успешно устанавливается:
Информация {"ok":true,"result":true,"description":"Webhook is already set"}

Когда я запускаю функцию getWebhookInfo, мне выдает вот это:
Информация {"ok":true,"result":{"url":"https://script.google.com/macros/s/ЗДЕСЬ ТОТ ЖЕ САМЫЙ ИДЕНТИФИКАТОР, ЧТО И В ПЕРВОЙ ТАКОЙ ЖЕ ССЫЛКЕ/exec","has_custom_certificate":false,"pending_update_count":29,"last_error_date":1740138213,"last_error_message":"Wrong response from the webhook: 302 Moved Temporarily","max_connections":40,"

pending_update_count":29 - когда я отправляю сообщения в чат в телеграм, это число увеличивается, то есть, я так понимаю, он как бы видит сообщения, передает их в apps script по этому URL, который тут указан, но тот возвращает ошибку 302, т.к. URL поменялся? Или как? 



2) Я пробовал отправлять запросы через curl в командной строке типа 

 curl -X POST "https://script.google.com/macros/s/ИДЕНТИФИКАТОР РАЗВЕРТЫВАНИЯ/exec" -H "Content-Type: application/json" -d "{\"message\": {\"message_id\": 12345, \"text\": \"Привет, как дела?\", \"chat\": {\"id\": 1738000210673, \"first_name\": \"User\", \"last_name\": \"Name\", \"username\": \"user_example\"}, \"reply_to_message\": {\"message_id\": 12344, \"text\": \"User ID:user_1738000210673\\nSource:web\\nMessage:q\"}}}"

В этом случае все нормально работало, данные доходили до apps script, он их обрабатывал и записывал в мою гугл таблицу в соответствующие столбцы. 


Я использовал Make.com, делал там настройку для передачи данных из телеграм канала в google sheets с помощью модулей Telegram Bot и Google Sheets - все нормально работает, но напрямую при передаче данных в apps script идет ошибка 302

Как исправить ее? В чем проблема?

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

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

    Ошибка 302 (Moved Temporarily) указывает на то, что запрос перенаправляется на другой URL.

    В контексте Google Apps Script это часто связано с тем, что веб-приложение не развернуто как "Доступное всем, даже анонимным пользователям".

    По умолчанию, если веб-приложение не настроено правильно, Google Apps Script может перенаправлять запрос на страницу авторизации, что и вызывает ошибку 302.

  • Кирилл Дмитров [1 месяц назад]

    А как его правильно развернуть? 
    Я выбираю "начать развертывание - новое развертывание" - веб-приложение (запуск от моего имени). У кого есть доступ - ВСЕ. Начать развертывание. 


    И мне выдается:

    Идентификатор развертывания: то же самое, что в находится URL веб-приложения между /s/ и /exec

    Веб-приложение
    URL  в таком формате:
    https://script.google.com/macros/s/AKfycbzr-POMxSotbnJrNtH-cKKGvlA4B6wi3Ec........../exec



    Конкретно такого поля "Доступное всем, даже анонимным пользователям" в этих настройках нет. Оно где-то еще? 

  • iMakeBots [1 месяц назад → Кирилл Дмитров]

    да, верно

    права на работу с таблицами у приложения есть? 

  • Кирилл Дмитров [1 месяц назад]

    Да, в google sheets выбран максимально возможный доступ (для всех, редактирование), и если прямой запрос через curl в командной строке apps script обрабатывает и записывает корректно, по идее с этим проблем не должно быть

    Как я понимаю, происходит смена URL веб-приложения, в которое вебхук передает данные из телеграма канала. То есть я указываю один URL в коде, вебхук телеграм отправляет на него данные, но веб-приложение имеет уже другой URL?

  • iMakeBots [1 месяц назад → Кирилл Дмитров]

    развернул ваш скрипт - все норм - данные в таблице появились

    попробуйте развернуть приложение заново

    То есть я указываю один URL в коде, вебхук телеграм отправляет на него данные, но веб-приложение имеет уже другой URL?

    но исходя из вводных вы же по этому адресу направляете cURL и запись заходит в таблицу.

  • Кирилл Дмитров [1 месяц назад → iMakeBots]

    Я уже его очень много раз развернул, но все тщетно...(

    А при запуске функции getWebHookInfo в apps script у вас не возникает никаких ошибок? У меня сразу на этом этапе ошибка, и соответственно, если я пишу что-то в телеграм, никаких данных не появляется у меня в google sheets

    Я вижу такие логи в журнале выполнения при запуске функции getWebHookInfo в apps script:


    Журнал выполнения

    15:33:20 Примечание Выполнение начато

    15:33:21 Информация {"ok":true,"result":{"url":"https://script.google.com/macros/s/AKfycbzr-POMxSotbnJrNtH-cKKGvlA4B6wi3EcXwGCuq5USvoEOGPFV5UD0DIkiAQZwoZzW7Q/exec","has_custom_certificate":false,"pending_update_count":30,"last_error_date":1740141150,"last_error_message":"Wrong response from the webhook: 302 Moved Temporarily","max_connections":40,"ip_address":"192.178.49.174"}}

    15:33:20 Примечание Выполнение завершено




    Прямые curl запросы через командую строку работают, да
    У меня проблема, видимо, именно в самом подключении вебхука какая-то

  • iMakeBots [1 месяц назад → Кирилл Дмитров]

    у меня не было никаких ошибок при развертывании и настройки вебхука.

    попробуйте создать новый проект, именно проект (новый файл) не развертывание

  • Кирилл Дмитров [1 месяц назад]

    Я пробую исправить ошибку, но не выходит полностью от нее избавиться.
    Я пересоздал проект полностью в apps script, вставил в него код, подключил вебхук, подключение успешно, ошибок нет. Затем отправляю ответ на сообщение, первый ответ записывается в google sheets. Но после первого ответа вебхук опять выдает ошибку 302. То есть он как бы работает, но только один раз. Никакие URL не меняю. Развертываю скрипт как веб-приложение, получаю URL типа 
    https://script.google.com/macros/s
    Этот URL вставляю в функцию, и оно работает ровно на один ответ, дальше возникает ошибка.
    Что можно сделать еще? В чем вообще дело? Подскажите, пожалуйста


  • Кирилл Дмитров [1 месяц назад]

    Вроде решил проблему, заменив везде ContentService на HtmlService