"Test as add-on" 模式下的错误“302 临时移动”(电报)

Error "302 Moved Temporarily" in "Test as add-on" mode (Telegram)

  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));
}

一个 webhook aTelegram-bot 和这个 webapp 已设置。

  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);
}

Here是过程的短视频(英文字幕)。

  1. I 运行 sendPost() 一切正常。项目 2 将数据发送到 returns 的 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.***.***"}}
  1. 现在我正在发送与机器人聊天的消息。 Web 应用程序中的 doPost(e) 函数接受它并将其写入电子表格。 然而,一切并不局限于一条消息。来自机器人的请求来来往往,记录器在电子表格中创建越来越多的新行。直到我重新部署带有 doPost () 函数注释掉的 webapp 时,才会发生这种情况。我试图弄清楚这是否是一个有限循环。我的耐心只够 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. 谷歌搜索揭示了几个可能的原因。来自 to MITM in your network。 我不太相信 MITM,我想这是因为电子表格作为附加组件在测试模式下打开,并且 webapp 的 URL 在这种模式下发生了变化。如果是这样,那么我不确定这是否是测试系统的正确行为。理论上应该已经规定了这样的情况,webapurl应该保持不变。但也许我错了,原因不同,所以

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

refers to redirection. If ContentService is used, Google temporarily redirects the resource to a another domain to serve the content。使用 HtmlService 时不执行此重定向。因此,如果问题与重定向有关,请改用 HtmlService