用于插槽填充的 Webhook

sid*_*491 5 python chatbot node.js dialogflow-es

我在对话框流中填充插槽/参数时遇到问题。我无法搜索关于如何使用 webhooks/backend-code 进行参数填充的任何好的文档。

我的用例是,我想提取date但如果用户没有提供 YEAR 那么它应该询问用户“哪一年?”。然后填回去date

我使用$date.partialvalue,因此是给UUUU全年的一部分,但我怎么能提示用户给予一年,这样我可以在参数填充得到完整的日期。

在此处输入图片说明

任何帮助表示赞赏。

Mar*_*nde 8

有时将参数设置为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)添加一些可以匹配年份的训练短语:

  • 2017 (@sys.number:year)
  • 年份是@sys.number:year(这一年使用模板模式)

在此处输入图片说明

现在你将拥有$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