gpt4 book ai didi

javascript - 如何确保 OAuth2 身份验证成功后重新发送原始 Google Chat 消息?

转载 作者:行者123 更新时间:2023-11-28 03:22:02 26 4
gpt4 key购买 nike

我正在使用 Google Apps 脚本编写一个 Google Hangouts 聊天机器人。该机器人使用应用程序脚本 OAuth2 库向第三方服务进行身份验证。如本 How-To 中所述,当机器人收到消息但需要第三方服务进行身份验证时,机器人会向聊天发送一个特殊的 REQUEST_CONFIG 回复,其中包含 configCompleteRedirectUrl

var scriptProperties = PropertiesService.getScriptProperties();

function onMessage(event) {
var service = getThirdPartyService();
if (!service.hasAccess()) {
return requestThirdPartyAuth(service, event);
}
Logger.log('execution passed authentication');
return { text: 'Original message ' + event.message.argumentText };
}

function getThirdPartyService() {
var clientId = scriptProperties.getProperty('CLIENT_ID');
var clientSecret = scriptProperties.getProperty('CLIENT_SECRET');
return OAuth2.createService('ThirdPartyApp')
// Set the endpoint URLs.
.setAuthorizationBaseUrl('https://...')
.setTokenUrl('https://.../oauth/token')

// Set the client ID and secret.
.setClientId(clientId)
.setClientSecret(clientSecret)

// Set the name of the callback function that should be invoked to
// complete the OAuth flow.
.setCallbackFunction('authThirdPartyCallback')

// Set the property store where authorized tokens should be persisted.
.setPropertyStore(PropertiesService.getUserProperties())
.setCache(CacheService.getUserCache())
.setLock(LockService.getUserLock())

// Set the scope and other parameters.
.setScope('...')
.setParam('audience', '...')
.setParam('prompt', 'consent');
}

function requestThirdPartyAuth(service, event) {
Logger.log('Authorization requested');
return { "actionResponse": {
"type": "REQUEST_CONFIG",
"url": service.getAuthorizationUrl({
configCompleteRedirectUrl: event.configCompleteRedirectUrl
})
}};

/**
* Handles the OAuth callback.
*/
function authThirdPartyCallback(request) {
var service = getThirdPartyService();
var authorized = service.handleCallback(request);
if (authorized) {
Logger.log("user authorized");
//https://stackoverflow.com/a/48030297/9660
return HtmlService.createHtmlOutput("<script>window.top.location.href='" + request.parameter.configCompleteRedirectUrl + "';</script>");
} else {
Logger.log("user denied access");
return HtmlService.createHtmlOutput('Denied');
}
}

该服务定义了一个回调身份验证函数,该函数又将浏览器发送到configCompleteRedirectUrl。到达此 URL 后,应再次发送或重新发送原始消息(请参阅 How-To step 7.3 )。

身份验证回调成功,因为浏览器 OAuth 流程中显示的最后一页是在 event.configCompleteRedirectUrl 中指定的页面。在聊天窗口中,配置提示被删除,原始消息更改为公开。但是,原始消息不会再次发送。 apps script console中显示的最后一条日志来自认证回调事件。

我是否做错了什么,导致原始消息无法再次发送?

最佳答案

much back and forth之后与 Google 支持团队成员交谈后发现,针对 V8 Apps 脚本运行时运行时,Hangouts Chat 实现存在一个错误。

我的 appsscript.json 文件设置了 "runtimeVersion": "V8"。在这种情况下,重新调度不起作用。在我恢复到 appsscript.json 中的 "runtimeVersion": "STABLE" 并重新部署我的脚本后,重新调度开始工作。

关于javascript - 如何确保 OAuth2 身份验证成功后重新发送原始 Google Chat 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59056255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com