如何解决添加OAUTH范围时如何不执行“ onAddToSpace”
我正在尝试使用GoogleChatAPI创建一个机器人。
这就是我想要做的:
-
如果用户添加了我正在创建的机器人,我希望该机器人显示使用该机器人的警告信息。
-
如果用户在漫游器中发布消息,则漫游器会将该消息发布到另一个聊天室。 发布消息的方法是“ 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
更新
-
添加机器人后,
-
onAddToSpace
未执行。 - 我发布了一条消息并批准了OAuth,然后执行了
onMessage
。 - 当我批准OAuth后,一旦我删除了该漫游器,便再次添加了它,
onAddToSpace
已经按照我的预期执行了...
我想知道是否有可能,如果可以,在必须批准OAuth之前如何执行onAddToSpace
。
Update2
onAddToSpace
成功(1)的示例
- 设置范围
script.external_request
和chat
。 - 添加了漫游器。
onAddToSpace
当时未执行,因为日志未显示在屏幕上并且漫游器未发布消息(代码中的(* 1)点)。 - 发布了一条消息。
onMessage
成功。当时我批准了OAuth。 - 删除了漫游器并再次添加。
onAddToSpace
是第一次执行。
onAddToSpace
成功(2)的示例
- 已删除范围
script.external_request
和chat
。并删除了“ UrlFetchApp.fetch”。 - 添加了机器人。
onAddToSpace
从头开始执行。当然,它不是OAuth。 - 发布了一条消息。
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": {
}
}
更新
我了解到您想在配置机器人之前显示自定义消息
出于安全原因,这是不可能的
- 这是Google OAuth身份验证概念的一部分,您的漫游器在被用户授权之前不能执行任何操作(甚至不写消息)
- 正如他所言documentation
onAddToSpace(e)
当您的机器人被添加到一个空间时,将执行此功能。
- 在授权访问之前,您的漫游器已被不添加到空间
WORKAROUND
- 您可以在GCP控制台中自定义OAuth2集中屏幕
- 不幸的是,无法将自定义消息添加到同意屏幕,但是您可以包括/将其设置为“应用程序名称”:
- 这样做之后,您的内容屏幕将如下所示:
如何测试
为了再次触发授权
- 继续https://myaccount.google.com/security
- 具有帐户访问权限的第三方应用程序
- 删除机器人
- 现在您可以在新的同意屏幕上测试授权