我在对话框流中填充插槽/参数时遇到问题。我无法搜索任何关于如何使用webhooks / backend-code进行参数填充的好文档。
我的用例是,我想提取date
,但如果用户没有提供YEAR,那么它应该询问用户“哪一年?”。然后将其填入date
。
我正在使用$date.partial
作为value
因此它为年份部分提供了UUUU
,但是如何提示用户提供年份以便我可以填写年份获取完整日期的参数。
感谢任何帮助。
答案 0 :(得分:4)
有时将参数设置为required
是不够的,因为您不需要存在该参数,但是您需要以特定格式使用它,可以使用{替代方法{1}}。
有多个步骤,但一旦您熟悉它,您就会非常快速地完成。
1)创建2个新意图:events
& Year - Confirmation
2)在第一个意图中添加一个事件:Intent>活动> Year - Confirmed
(或任何你喜欢的名字)
3)添加输出背景:ask-year
4)设置回复,要求用户输入年份:year-confirmation
5)设置参数:
Please provide the year...
(这将来自事件数据,您将从后端发送) 6)在您的第二个意图#ask-year.date
上,添加为输入上下文:Year - Confirmed
(前一个意图的输出)
7)设置与主要目标相同的操作:year-confirmation
8)添加一些可以匹配年份的培训短语:
现在你将insurance
作为参数。
9)添加一个额外参数:
$year
(这将来自年度确认背景) 10)在你的后端,当你收到未完成的日期时,你应该发送#year-confirmation.date
事件。
Node.js示例,我不知道python
ask-year
现在,当日期不完整时,将触发事件,执行const 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 - Confirmed
insurance
操作
答案 1 :(得分:-2)
选中标有Required
的参数旁边的框,然后点击参数右侧的Add prompt
并添加提示Which year?