有时将param设置为required是不够的,因为您不仅需要该param存在,而且需要以特定的格式显示,还有一种使用events的替代方法。在
有多个步骤,但一旦你熟悉了,你会做得很快。在
1)创建2个新的意图:Year - Confirmation&;Year - Confirmed
2)在第一个意图中添加一个事件:intent>;Events>;ask-year(或任何您喜欢的名称)
3)添加输出上下文:year-confirmation
4)设置一个请求用户输入年份的响应:Please provide the year...
5)设置参数:姓名:日期
实体:-
值:#ask-year.date(这将来自事件数据,您将从后端发送它)
6)在您的第二个意图Year - Confirmed,添加为输入上下文:year-confirmation(前一个意图的输出)
7)设置与您的主要意图相同的操作:insurance
8)添加一些可以与年份匹配的培训短语:2017年(@系统编号:年)
今年是@系统编号:year(对这个使用模板模式)
现在您将有$year作为参数。在
9)添加一个额外参数:姓名:日期
实体:-
值:#year-confirmation.date(这将来自年份确认上下文)
10)在后端,当您收到未完成日期时,您应该发送ask-year事件。在
节点.js例如,我不知道pythonconst apiai = require('apiai');
const client = apiai('my-dev-token');
function sendEvent(data) {
const request = client.eventRequest(data, {
sessionId: 'current-session'
});
request.on('response', response => {
// Push message to your UI
console.log(response.result.fulfillment.speech); // Please provide the year...
});
request.on('error', error => {
console.error('Event error: ', error);
});
request.end();
}
/* ... */
// Your insurance action handler
function insuranceHandler(result) {
const { parameters } = result;
if(parameters.date || parameters.date.includes('UUUU')) { // Or whatever check for invalid year
// Send previous date as data, so you will have it in the event response
return sendEvent({
name: 'ask-year',
data: {
date: parameters.date
}
});
}
// Year comes from `ask-year` intent
if(parameters.year)
parameters.date = parameters.date.replace('UUUU', parameters.year);
// Do whatever you need
}
现在,当日期不完整时,将触发事件,执行Year - Confirmation,并要求您提供年份。在您提供一个之后,Year - Confirmedintent将由您的响应执行。现在,您的后端将接收到insurance操作和一个附加参数year