从 LaunchRequest 中调用另一个 Alexa 意图

Calling Another Alexa intent from within LaunchRequest

我正在研究一项 Alexa 技能,当用户通过 LaunchRequest 打开该技能时,我想将用户重定向到一个意图。

然而,当我启动该技能并尝试按照上面第 2 步中所述从其中调用 AnotherIntent 时,Alexa 技能无法启动。

还有一件事要注意,当我在技能生成器中针对此场景测试相同的 Alexa 技能时,输出 json 正确地向我显示了被引出的 SLOT。不确定当我尝试从 Echo 设备 运行 时发生了什么。

我正在使用 NodeJS 和 Lambda 部署我的 Alexa 处理程序。

如有任何帮助,我们将不胜感激。

基于评论的进一步参考 -

处理程序 -

var handlers = {
'LaunchRequest': function () {
    console.log("LaunchRequest::" + JSON.stringify(this.event.request));
    this.emit('fooIntent');
},
'SessionEndedRequest': function () {
    console.log('session ended!');
},
'fooIntent': function () {
    const intentObj = this.event.request.intent;
     if (!intentObj || (intentObj && !intentObj.slots.WHEN.value)) {
        console.log('fooIntent::UserId' + this.event.session.user.userId);
        const slotToElicit = 'WHEN';
        const speechOutput = 'Ask a question here ?';
        const repromptSpeech = speechOutput;
        console.log("emitting elict now");
        this.emit(':elicitSlot', slotToElicit, speechOutput, repromptSpeech);   
    } else {
        // SLOT is filled, let's query the database to get the value for the slot.
        console.log("fooIntent intent:something is requested for " + this.event.request.intent.slots.WHEN.value);
        // All the slots are filled (And confirmed if you choose to confirm slot/intent)
       fooIntentFunction(this,this.event.request.intent.slots.WHEN.value);
    }
 },
'AMAZON.HelpIntent': function () {
    var speechOutput = "Need to come up with one.";
    var reprompt = "What can I help you with?";
    this.emit(':ask', speechOutput, reprompt);
},
'AMAZON.CancelIntent': function () {
    this.emit(':tell', 'Goodbye!');
},
'AMAZON.StopIntent': function () {
    this.emit(':tell', 'Goodbye!');
}

};

JSON 在 LaunchRequest

中捕获的请求
{
"type": "LaunchRequest",
"requestId": "amzn1.echo-api.request.972bb705-d181-495e-bf60-991f2bd8fbb1",
"timestamp": "2017-12-30T21:35:21Z",
"locale": "en-US"
}

JSON 从 LaunchRequest 调用时在 Intent 中捕获的请求。说明当时没有设置intent。我相信这就是为什么当我尝试在 fooIntent 实现中发出 elicit 时它总是失败,如上所示。

{
    "type": "LaunchRequest",
    "requestId": "amzn1.echo-api.request.972bb705-d181-495e-bf60-991f2bd8fbb1",
    "timestamp": "2017-12-30T21:35:21Z",
    "locale": "en-US"
}

Amazon's documentation 中所述,对话界面旨在填充特定意图的所有必需槽:

The questions and answers are intended to gather and confirm values for all of the intent’s required slots. The conversation continues until all slots needed for the intent are filled and confirmed.

在您的情况下,用户的请求不是意图(即 IntentRequest 类型),而是 LaunchRequest。因此,它没有交互模型,也没有可引出的插槽,即使它是由意图处理程序处理的。

你应该通过深度调用让你的技能按预期工作,比如

Alexa, tell xyz skill to make me a sandwich

(如果三明治意图,或者在你的情况下 fooIntent,有一个 WHEN 插槽可以引出)。

希望对您有所帮助!

试试这个,

this.emitWithState("IntentName");

希望这对您有所帮助。一切顺利:)

可以使用以下代码片段简单地从另一个意图调用一个意图 - \ this.emit("Intent name")

在您的第一个意图的响应中,给出您希望调用的意图的名称。