添加OAUTH范围时如何不执行“ onAddToSpace”

问题描述

我正在尝试使用GoogleChatAPI创建一个机器人。

这就是我想要做的:

  1. 如果用户添加了我正在创建的机器人,我希望该机器人显示使用该机器人的警告信息。

  2. 如果用户在漫游器中发布消息,则漫游器会将该消息发布到另一个聊天室。 发布消息的方法是“ UrlFetchApp.fetch”(并同时添加OAUTH范围)

要完成任务1,我使用了代码onAddToSpace。 为了完成任务2,我使用了代码onMessage

但是,当用户添加机器人时,onAddToSpace不会被点燃。该事件不在执行列表中。 但是,当我删除代码UrlFetchApp.fetch(并同时删除OAUTH范围)时,onAddToSpace被点燃。

如何编写代码以同时实现我想做的两件事? 还是有可能?

代码:

function onMessage(event) {
  var name = "";
  var message = "ご依頼承りました!情シスからご連絡いたしますので少々お待ち下さい。";
  postICTRoom(event);
  return { "text": message };
}

function onAddToSpace(event) {
  var message = "情シスへ質問、依頼ができるbotです。送信したメッセージは、ユーザー名付きですべて情シスチームチャットに送信されます。遊びが一切ないbotです、ご利用の際は十分ご注意ください。ここは万事屋ではありません。";
  return { "text": message };(*1)
}

function onRemoveFromSpace(event) {
  console.info("Bot removed from ",(event.space.name ? event.space.name : "this chat"));
}

function postICTRoom(event){
  var messageDate = new Date()  
  var url = "https://chat.googleapis.com/v1/spaces/...";
  var thread = "spaces/..."
  var payload = {
    "text" : event.user.displayName + " " + Utilities.formatDate(messageDate,"JST",'yyyy/MM/dd_HH:mm:ss') + "\n" + event.message.text,"thread": {
    "name": thread
    }
  }
  var json = JSON.stringify(payload);
  var options = {
    'method': 'POST','contentType': 'application/json; charset=UTF-8',"payload" : json
  };
  var response = UrlFetchApp.fetch(url,options);

清单:

{
  "timeZone": "Asia/Tokyo","dependencies": {
  },"exceptionLogging": "STACKDRIVER","runtimeVersion": "V8","chat": {
  }
}

OAuthScope

https://www.googleapis.com/auth/script.external_request

更新

    添加机器人后,
  1. onAddToSpace未执行。
  2. 我发布了一条消息并批准了OAuth,然后执行了onMessage
  3. 当我批准OAuth后,一旦我删除了该漫游器,便再次添加了它,onAddToSpace已经按照我的预期执行了...

我想知道是否有可能,如果可以,在必须批准OAuth之前如何执行onAddToSpace

Update2

onAddToSpace成功(1)的示例

  1. 设置范围script.external_requestchat
  2. 添加了漫游器。onAddToSpace当时未执行,因为日志未显示在屏幕上并且漫游器未发布消息(代码中的(* 1)点)。
  3. 发布了一条消息。 onMessage成功。当时我批准了OAuth。
  4. 删除了漫游器并再次添加。 onAddToSpace是第一次执行。

onAddToSpace成功(2)的示例

  1. 已删除范围script.external_requestchat。并删除了“ UrlFetchApp.fetch”。
  2. 添加了机器人。 onAddToSpace从头开始执行。当然,它不是OAuth。
  3. 发布了一条消息。 onMessage成功。

我想让onAddToSpace在成功(1)-Step2时执行。 我不知道该怎么做。

Update3

清单(已修改):

{
  "timeZone": "Asia/Tokyo","chat": {
    "addToSpaceFallbackMessage": "情シスへ質問、依頼ができるbotです。送信したメッセージは、ユーザー名付きですべて情シスチームチャットに送信されます。遊びが一切ないbotです、ご利用の際は十分ご注意ください。ここは万事屋ではありません。"
  }
}

解决方法

为使代码正常运行,您需要在清单中包括必要的OAuth范围

为此,请修改清单如下:

{
"timeZone": "Asia/Tokyo","dependencies": {
  },"exceptionLogging": "STACKDRIVER","oauthScopes": ["https://www.googleapis.com/auth/chat","https://www.googleapis.com/auth/script.external_request"],"runtimeVersion": "V8","chat": {
  }
}

更新

我了解到您想在配置机器人之前显示自定义消息


enter image description here


enter image description here


enter image description here


出于安全原因,这是不可能的

  • 这是Google OAuth身份验证概念的一部分,您的漫游器在被用户授权之前不能执行任何操作(甚至不写消息)
  • 正如他所言documentation

onAddToSpace(e)

当您的机器人被添加到一个空间时,将执行此功能。

  • 在授权访问之前,您的漫游器已被添加到空间

WORKAROUND

  • 您可以在GCP控制台中自定义OAuth2集中屏幕

enter image description here


enter image description here


  • 不幸的是,无法将自定义消息添加到同意屏幕,但是您可以包括/将其设置为“应用程序名称”:

enter image description here


  • 这样做之后,您的内容屏幕将如下所示:

enter image description here


如何测试

为了再次触发授权

enter image description here


enter image description here


  • 删除机器人

enter image description here


  • 现在您可以在新的同意屏幕上测试授权

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...