sid*_*491 5 python chatbot node.js dialogflow-es
我在对话框流中填充插槽/参数时遇到问题。我无法搜索关于如何使用 webhooks/backend-code 进行参数填充的任何好的文档。
我的用例是,我想提取date但如果用户没有提供 YEAR 那么它应该询问用户“哪一年?”。然后填回去date。
我使用$date.partial的value,因此是给UUUU全年的一部分,但我怎么能提示用户给予一年,这样我可以在参数填充得到完整的日期。
任何帮助表示赞赏。
有时将参数设置为required是不够的,因为您不仅需要该参数存在,而且还需要特定格式的参数,还有一种替代方法是使用events.
有多个步骤,但是一旦您熟悉了它,就会很快完成。
1)创建 2 个新意图:Year - Confirmation&Year - Confirmed
2)在第一个意图中添加一个事件:意图>事件> ask-year(或任何你喜欢的名字)
3)添加输出上下文:year-confirmation
4)设置要求用户输入年份的响应:Please provide the year...
5)设置参数:
#ask-year.date 这将来自事件数据,您将从后端发送)6)在你的第二个意图上Year - Confirmed,添加作为输入上下文:(year-confirmation前一个意图的输出)
7)设置与您的主要意图相同的操作:insurance
8)添加一些可以匹配年份的训练短语:
现在你将拥有$year作为参数。
9)添加一个额外的参数:
#year-confirmation.date 这将来自年份确认上下文)10)在您的后端,当您收到未完成的日期时,您应该发送ask-year事件。
Node.js 示例,我不知道 python
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
}
Run Code Online (Sandbox Code Playgroud)
现在,当日期不完整时,事件将被触发Year - Confirmation并执行,您将被要求提供年份。在您提供一个之后,Year - Confirmed您的响应将执行意图。现在您的后端将接收insurance带有附加参数的操作,year
| 归档时间: |
|
| 查看次数: |
4049 次 |
| 最近记录: |