如何使用Dialogflow实现库WebhookClient类设置“结束对话”标志?如果有问题,我正在使用由Cloud Functions for Firebase提供支持的内联编辑器。
这种情况是特定意图不能被访问超过3次。在第一次和第二次访问时,您会得到答复,它使您可以说些什么并继续;在第三次访问时,它应该给出响应,然后结束对话/关闭麦克风/杀死该应用程序(无论使用什么合适的术语)
对于非结束响应,我使用WebhookClient.add(),并且混合使用丰富响应和用于文本到语音的字符串。
根据我在github(https://github.com/dialogflow/dialogflow-fulfillment-nodejs)上阅读的内容,我认为WebhookClient.end()将是我想要的。但是,当我使用它时,sript崩溃了,我什么也没得到。
以下是exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {...}
const agent = new WebhookClient({ request, response });
const fbContext = 'fallbackcount';
function fallback(agent) {
//all fallbacks use this fulfillment, we give up after 3 bunk responses
//check if we've been here before - we will find a context with a counter if we have
let countContext = agent.getContext(fbContext);
let fbcount = 0;
if (countContext)
{
if (typeof countContext.parameters !== "undefined" )
{
if(typeof countContext.parameters.count !== "undefined" )
{
fbcount = countContext.parameters.count;
}
}
}
console.log("current tracking" + fbcount.toString());
switch(fbcount) {
case 0:
{
agent.add(`Fallback response 1");
break;
}
case 1:
{
agent.add("Fallback response 2");
break;
}
default:
{
//intention: die on third bunk response
//reality: following line causes a problem and i get no response, and the app doesn't close
agent.end("Fallback response 3 - Goodbye!");
}
}
let newcount = fbcount + 1;
console.log("new tracking " + newcount.toString());
agent.setContext({
name: fbContext,
lifespan: 1,
parameters:{count: newcount}
});
}
我在做什么错了?
请注意,这不是Actions on Google: Unable to Close Convo in DialogFlow Fulfillment的副本,因为他询问的是Google行动库,而我正在使用dialogflow-fulfillment-nodejs
我也看到过Dialogflow API V2 "End of conversation" flag in webhook request,而且似乎在处理原始json,我认为应该避免从文档中看到的情况
答案 0 :(得分:0)
在这种情况下,我不知道这是否是正确的方法,但是我想您可以使用有效负载响应来关闭对话,在该对话中,您将“ expectedUserResponse”设置为“ false”:>
const googlePayloadJson = {
"expectUserResponse": false
};
let payload = new Payload(agent.ACTIONS_ON_GOOGLE, {});
payload.setPayload(googlePayloadJson);
agent.add(payload);
答案 1 :(得分:0)
这对我有用:
function close(message){
let conv = agent.conv();
conv.close(message);
agent.add(conv);
}