我们正在发送一个带有JWT令牌的HTTP标头,我们已经在dialogflow控制台中配置了这个标头。
我们希望在上一步中验证此令牌,以便将请求发送到特定意图,例如welcome_intent。
我们使用“中间件”作为上一步,验证是正确的,它应用于每一次通信。我们想知道,
如果JWT出错,我们希望返回一个错误,并且不继续使用相关的意图,例如: welcome_intent。
我们尝试在“中间件”中以"conv.close“结束流,但我们已经看到流仍在继续,并且它转到与查询相关联的意图。
我们如何跳出流程并在中间件函数中返回错误?
const {
dialogflow
} = require('actions-on-google');
const fulfillment = dialogflow({
clientId: "clientIdDialogflow",
debug: true
});
const jwt = require('jsonwebtoken');
fulfillment.middleware(async (conv) => {
let tokenIncorrect = await utils.verifyJWT(conv);
if (tokenIncorrect) {
conv.close("Lo siento pero no puedes continuar con la conversación.");
}
});
// Intents functions
fulfillment.intent("welcome_intent", .....);
发布于 2020-07-21 22:45:44
您应该能够抛出一个UnauthorizedError
来终止意图处理程序内部的会话。
下面是一些相关文档和一些示例代码:https://actions-on-google.github.io/actions-on-google-nodejs/2.12.0/classes/_service_actionssdk_conversation_conversation_.unauthorizederror.html
但是,这在中间件中是行不通的。正如您在https://github.com/actions-on-google/actions-on-google-nodejs/blob/9f8c250a385990d28705b3658364c74aa3c19adb/src/service/actionssdk/actionssdk.ts#L345-L350中看到的,中间件在UnauthorizedError处理之前应用,该处理包装了对意图处理程序的调用:https://github.com/actions-on-google/actions-on-google-nodejs/blob/9f8c250a385990d28705b3658364c74aa3c19adb/src/service/actionssdk/actionssdk.ts#L370-L389
在实现时,中间件不能直接用于优雅地结束实现。但是,您可以修改conv对象。例如,您可以在这些情况下更改目标意图(conv.intent = 'UNAUTHORIZED'
),然后为该意图添加一个始终抛出UnauthorizedError
的处理程序。
https://stackoverflow.com/questions/61652967
复制相似问题