AWS Lex lambda函数引出插​​槽

时间:2017-05-16 08:22:59

标签: node.js amazon-web-services aws-lambda amazon-lex

我现在正在构建AWS Lex聊天机器人,并且在lambda函数设置上遇到了一些问题。根据示例代码,它在对话结束时使用了这个lambda函数。这就是代码的原因:函数close(.....)

'use strict';

    // Close dialog with the customer, reporting fulfillmentState of Failed 
       or Fulfilled ("Thanks, your pizza will arrive in 20 minutes")
    function close(sessionAttributes, fulfillmentState, message) {
        return {
            sessionAttributes,
            dialogAction: {
                type: 'Close',
                fulfillmentState,
                message,
            },
        };
    }

但是我想要做的是使用DialogCodeHook而不是这个FulfillmentCodeHook。

Lex内部最简单的逻辑是问问题1 - >得到答案1 - >问题问题2 - >得到回答2 - >问问题2 - >得到答案3; 我想做的是 问题1-允许的响应值是1.1,1.2 如果响应值=值1.1 问问题2 如果响应值=值1.2 问问题3 问问题4-值4.1,值4.2 ..等等

在AWS论坛上,答案如下: 是的,您可以使用Lambda来实现决策树。 Lambda允许您使用' dialogAction'设置特定消息并引出一个插槽。

针对此特定对话流程<​​/ p>

if (response_value = 1.1) {
// set dialogAction.message = "Question 2"
...
// set type = ElicitSlot
...
// slotToElicit = answer2"

}

同样,您将定义条件以询问问题3,4等。

但我不知道我应该把它放在哪里,如果.....以及如何使用这个ElicitSlot函数。

关闭功能的完整版示例代码为:

'use strict';

// Close dialog with the customer, reporting fulfillmentState of Failed or Fulfilled ("Thanks, your pizza will arrive in 20 minutes")
function close(sessionAttributes, fulfillmentState, message) {
    return {
        sessionAttributes,
        dialogAction: {
            type: 'Close',
            fulfillmentState,
            message,
        },
    };
}

// --------------- Events -----------------------

function dispatch(intentRequest, callback) {
    console.log('request received for userId=${intentRequest.userId}, intentName=${intentRequest.currentIntent.intentName}');
    const sessionAttributes = intentRequest.sessionAttributes;
    const slots = intentRequest.currentIntent.slots;
    const crust = slots.crust;
    const size = slots.size;
    const pizzaKind = slots.pizzaKind;

    callback(close(sessionAttributes, 'Fulfilled',
    {'contentType': 'PlainText', 'content': `Okay, I have ordered your ${size} ${pizzaKind} pizza on ${crust} crust`}));

}

// --------------- Main handler -----------------------

// Route the incoming request based on intent.
// The JSON body of the request is provided in the event slot.
exports.handler = (event, context, callback) => {
    try {
        dispatch(event,
            (response) => {
                callback(null, response);
            });
    } catch (err) {
        callback(err);
    }
};

希望有人可以帮忙!非常感谢!!!!!!!!!!!!!!!!!!!!!

1 个答案:

答案 0 :(得分:0)

请检查此代码:https://github.com/nicholasjackson/slack-bot-lex-lambda/blob/master/src/dispatcher.js

它列出了所有可能场景的功能,包括你拥有的关闭(...),以及你之后的ElicitSlot(...)。 请注意,还有一个ElicitIntent对话框操作类型,它在代码中没有使用,但在某些情况下可能很有用。

希望它有所帮助。 蒂博尔