“作为附加组件测试”模式下出现“302 暂时移动”错误 (Telegram)

Bor*_*lys 2 web-applications add-on google-apps-script http-status-code-302 telegram-bot

  1. 该电子表格包含项目 1,部署为具有以下权限的 Web 应用程序:Execute as: Me, Who has access: Anyone

网络应用程序

function doPost(e) {
  myLog('Received from Addon: ' + JSON.stringify(e));
  // console.log('parameters from caller ' + JSON.stringify(e));
  return ContentService.createTextOutput(JSON.stringify(e));
}
Run Code Online (Sandbox Code Playgroud)

Webhook aTelegram-bot 和此 Web 应用程序已设置。

  1. 我正在使用此电子表格来测试(作为附加组件)另一个项目 2。

添加在

function sendPost() {
  var sheetURL = SpreadsheetApp.getActiveSpreadsheet().getUrl();

  // var webAppUrl = "https://script.google.com/macros/s/#####/exec"; // 7: Part_1 - WebApp: My
  var webAppUrl = "https://script.google.com/macros/s/###/exec"; // 7: Part_1 - WebApp: Tester

  // var auth = ScriptApp.getOAuthToken();
  // var header = { 'Authorization': 'Bearer ' + auth };
  var payload = { scriptName: 'updateData', sheetURL: 'sheetURL' };
  var options = {
    method: 'post',
    // headers: header,
    muteHttpExceptions: true,
    payload: payload
  };

  var resp = UrlFetchApp.fetch(webAppUrl, options);
  var respCode = resp.getResponseCode();
  console.log('resp: ' + respCode);
  myLog(respCode);
  var respTxt = resp.getContentText();
  myLog('Response from webApp: ' + respTxt);
  console.log('resp: ' + respTxt);
}
Run Code Online (Sandbox Code Playgroud)

是该过程的简短视频(EN 字幕)。

  1. 我运行 sendPost() ,一切正常。项目 2 将数据发送到 web 应用程序,然后 web 应用程序返回数据。由于这是一个容器绑定脚本而不是独立脚本,因此我无法查看 GCC 记录器中的日志。因此,我在自定义记录器中查看它们,并且条目已正常添加。

https://api.telegram.org/bot{API_token}/getWebhookInfo表明没有错误:

{"ok":true,"result": {"url":"https://script.google.com/macros/s/###/exec", "has_custom_certificate":false, "pending_update_count":0, "max_connections":40,"ip_address":"142.250.***.***"}}
Run Code Online (Sandbox Code Playgroud)
  1. 现在我正在通过与机器人的聊天发送消息。Web 应用程序中的 doPost(e) 函数接受它并将其写入电子表格。然而,一切并不局限于一条消息。来自机器人的请求不断出现,记录器在电子表格中创建越来越多的新行。直到我重新部署 web 应用程序并将 doPost () 函数注释掉为止,才会发生这种情况。我试图弄清楚这是否是一个有限循环。我的耐心只够进行 20 次这样的迭代,因为结果,消息开始以大约 1 分钟的间隔重复。然后我必须重新安装 webhook。

无论如何,它都会干扰插件的测试。

  1. GetWebhookInfo 现在显示存在“Webhook 响应错误:302 暂时移动”错误:

{"ok":true,"result": {"url":"https://script.google.com/macros/s/###/exec", "has_custom_certificate":false, "pending_update_count":1, "last_error_date":1635501472, "last_error_message":"Wrong response from the webhook: 302 Moved Temporarily", "max_connections":40,"ip_address":"142.250.1***.***"}}

  1. 谷歌搜索揭示了几个可能的原因。从url 到脚本已更改网络中的 MITM。我不太相信 MITM,我认为这是因为电子表格在测试模式下作为附加组件打开,并且 web 应用程序的 URL 在此模式下已更改。如果是这样,那么我不确定这是否是测试系统的正确行为。理论上,这种情况应该已经提供,并且 webap url 应该保持不变。但也许我错了,原因不同,所以

问题:是否有人遇到过这种情况,并会建议一种解决方法,说明如何在这种情况下将脚本作为插件进行测试?

The*_*ter 5

指的是重定向。如果ContentService使用,Google 会暂时将资源重定向到另一个域来提供内容。使用时不会执行此重定向HtmlService。因此,如果问题与重定向有关,请改用HtmlService