用于插槽填充的 Webhooks

Webhooks for slot filling

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

我的用例是,我想提取 date,但如果用户没有提供 YEAR,那么它应该询问用户 "which year?"。然后填回date.

我将 $date.partial 用作 value,因此年份部分为 UUUU,但我如何提示用户提供年份以便我可以填写它在参数中获取完整日期。

感谢任何帮助。

勾选标记为Required的参数旁边的框,然后点击参数右侧的Add prompt并添加提示Which year?

有时将参数设置为 required 是不够的,因为您不仅需要该参数存在,而且还需要它以特定格式出现,还有一种替代方法是使用 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 (@sys.number:年份)
  • 年份是@sys.number:year(这个使用模板模式)

现在您将有 $year 作为参数。

9) 多加一个参数:

  • 姓名: 日期
  • 实体: -
  • 值: #year-confirmation.date(这将来自 year-confirmation 上下文)

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
}

现在当日期不完整时,将触发事件,执行Year - Confirmation,并要求您提供年份。在您提供一个之后,Year - Confirmed 意图将由您的响应执行。现在您的后端将收到带有附加参数 year

insurance 操作