我知道我可以通过添加到我的actions.json深入链接到我的Google Home应用程序。
我也知道我可以从默认提供的app.StandardIntents.TEXT
意图中解析原始字符串值,我目前正在这样做:
if(app.getRawInput() === 'make payment') {
app.ask('Enter payment information: ');
}
else if(app.getRawInput() === 'quit') {
app.tell('Goodbye!');
}
但Google上的动作是否会在创建后续意图时提供直接支持,可能是在某些用户语音输入之后?
会话流程的一个示例是:
确定Google,与我的应用对话。
欢迎使用我的应用,我可以订购您最近的购买或您保存的收藏。您更喜欢哪种?
最近购买。
我应该使用您的首选地址和付款方式吗?
是的
好的,我已经下了订单。
答案 0 :(得分:1)
我以前的答案在测试后无法正常工作。 这是经过测试的版本。
exports.conversationComponent = functions.https.onRequest((req, res) => {
const app = new ApiAiApp({request: req, response: res});
console.log('Request headers: ' + JSON.stringify(req.headers));
console.log('Request body: ' + JSON.stringify(req.body));
const registerCallback = (app, funcName)=>{
if (!app.callbackMap.get(funcName)){
console.error(`Function ${funcName} required to be in app.callbackMap before calling registerCallback`);
return;
}
app.setContext("callback_followup", 1, {funcName});
}
const deRegisterCallback = (app)=>{
const context = app.getContext("callback_followup");
const funcName = app.getContextArgument("callback_followup", "funcName").value;
const func = app.callbackMap.get(funcName);
app.setContext("callback_followup", 0);
return func;
}
app.callbackMap = new Map();
app.callbackMap.set('endSurvey', (app)=>{
if (app.getUserConfirmation()) {
app.tell('Stopped, bye!');
}
else {
app.tell('Lets continue.');
}
});
app.callbackMap.set('confirmationStartSurvey', (app)=>{
const context = app.getContext("callback_follwup");
if (app.getUserConfirmation()) {
registerCallback(app, 'endSurvey');
app.askForConfirmation('Great! I\'m glad you want to do it!, do you want to stop?');
} else {
app.tell('That\'s okay. Let\'s not do it now.');
}
});
// Welcome
function welcome (app) {
registerCallback(app, 'confirmationStartSurvey');
const prompt = "You have one survey in your task list, do you want to proceed now?";
app.askForConfirmation(prompt);
}
function confirmationCalbackFollowup (app) {
const context = app.getContext("callback_followup");
if (! context){
console.error("ERROR: confirmationCallbackFollowup should always has context named callback_followup. ");
return;
}
const callback = deRegisterCallback(app);
return callback(app);
}
const actionMap = new Map();
actionMap.set(WELCOME, welcome);
actionMap.set('confirmation.callback.followup', confirmationCalbackFollowup );
app.handleRequest(actionMap);
});

之前的解决方案无法运行,因为每次调用action函数时都会生成app。我试图将回调函数保存到app.data中,但它不会存在下一个意图。所以我改变了另一种方式。将回调函数注册到函数内的app.callbackMap。无论如何它会在那里。
为了使它工作,一个重要的事情是Api.Ai需要在意图中定义上下文。 See the Api.Ai Intent here.
确保您拥有事件,背景和行动。否则,这个意图不会被触发。
如果您可以使用此解决方案,请与我们联系。抱歉我之前的错误解决方案。
感谢
答案 1 :(得分:0)
您能举例说明您正在尝试做的对话流程吗?
如果您可以使用API.AI,则会有Follow Up intents in the docs。
答案 2 :(得分:0)
我不认为你的代码
<field name="one2many_field" context="{'default_field_name' : parent.last_added_value}">
<tree string="Title" editable="bottom">
<field name="field_name"/>
</tree>
</field>
是个好主意。我建议您有两种不同的意图处理“付款信息”和“退出”。