У моего намерения Алексы нет определенного слота, независимо от того, что я спрашиваю - PullRequest
0 голосов
/ 16 ноября 2018

Я использую пользовательскую лямбда-функцию для обработки своего пользовательского навыка Alexa.У меня есть один слот, который я хочу захватить.К сожалению, слот намерения никогда не заполняется каким-либо значением и, похоже, игнорируется, несмотря на то, что находится в запросе.

Вот мой код (примечание: JSON.stringify поможет мне в отладке):

'use strict';
var Alexa = require("alexa-sdk");

exports.handler = function(event, context, callback) {
    var alexa = Alexa.handler(event, context);
    alexa.registerHandlers(handlers);
    alexa.execute();
};

var handlers = {
    'LaunchRequest': function () {
        this.emit('Snow');
    },
    'Snow': function () {
        var place = this.event.request.intent.slots.Place;

        var text = 'Over the next 9 days you can expect 12 centimeters of snowfall in '+ JSON.stringify(place) +'.  The upper piste has a depth of 75 centimeters and the lower piste has a depth of 35 centimeters.  All 19 lifts are currently open.';

        this.emit(':tell', text);
    }
};

У меня есть Intent под названием «Snow» и слот под названием «Place».Вот моя модель взаимодействия:

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "ski club",
            "intents": [
                {
                    "name": "AMAZON.FallbackIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.CancelIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.StopIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.NavigateHomeIntent",
                    "samples": []
                },
                {
                    "name": "Snow",
                    "slots": [
                        {
                            "name": "Place",
                            "type": "AMAZON.City"
                        }
                    ],
                    "samples": [
                        "how the powder is",
                        "what the powder is like",
                        "how the snow is",
                        "what the snow is like",
                        "snow conditions",
                        "snow condition",
                        "snow fall",
                        "snowfall",
                        "powder levels",
                        "powder level",
                        "snow level",
                        "powder depth",
                        "snow levels",
                        "snow depth",
                        "powder",
                        "snow",
                        "the snow"
                    ]
                }
            ],
            "types": []
        },
        "dialog": {
            "intents": [
                {
                    "name": "Snow",
                    "confirmationRequired": false,
                    "prompts": {},
                    "slots": [
                        {
                            "name": "Place",
                            "type": "AMAZON.City",
                            "confirmationRequired": false,
                            "elicitationRequired": true,
                            "prompts": {
                                "elicitation": "Elicit.Slot.115004419453.153941565683"
                            }
                        }
                    ]
                }
            ]
        },
        "prompts": [
            {
                "id": "Elicit.Slot.115004419453.153941565683",
                "variations": [
                    {
                        "type": "PlainText",
                        "value": "Where would you like to know about the snow?"
                    }
                ]
            }
        ]
    }
}

Я бы ожидал, что смогу спросить:

Alexa ask my app how the snow is in Morzine

И я ожидаю ответа обратно со статическим текстомиз моей лямбда-функции, включая вставленное имя.Тем не менее, я получаю следующее:

{
    "body": {
        "version": "1.0",
        "response": {
            "outputSpeech": {
                "type": "SSML",
                "ssml": "<speak> Over the next 9 days you can expect 12 centimeters of snowfall in {\"name\":\"Place\",\"confirmationStatus\":\"NONE\"}.  The upper piste has a depth of 75 centimeters and the lower piste has a depth of 35 centimeters.  All 19 lists are currently open. </speak>"
            },
            "shouldEndSession": true
        },
        "sessionAttributes": {},
        "userAgent": "ask-nodejs/1.0.25 Node/v8.10.0"
    }
}

Кажется, Place никогда не имеет value.

Я получаю точно такой же ответ, если полностью опускаю слот Place:

Alexa ask my app how the snow is

Здесь я ожидал, что меня попросят дать слот.

Вот вход JSON от Alexa (я отредактировал некоторые ключи):

{
    "version": "1.0",
    "session": {
        "new": true,
        "sessionId": "amzn1.echo-api.session.***",
        "application": {
            "applicationId": "amzn1.ask.skill.***"
        },
        "user": {
            "userId": "amzn1.ask.account.***"
        }
    },
    "context": {
        "System": {
            "application": {
                "applicationId": "amzn1.ask.skill.***"
            },
            "user": {
                "userId": "amzn1.ask.account.***"
            },
            "device": {
                "deviceId": "amzn1.ask.device.***",
                "supportedInterfaces": {}
            },
            "apiEndpoint": "https://api.eu.amazonalexa.com",
            "apiAccessToken": "***.***.***
        },
        "Viewport": {
            "experiences": [
                {
                    "arcMinuteWidth": 246,
                    "arcMinuteHeight": 144,
                    "canRotate": false,
                    "canResize": false
                }
            ],
            "shape": "RECTANGLE",
            "pixelWidth": 1024,
            "pixelHeight": 600,
            "dpi": 160,
            "currentPixelWidth": 1024,
            "currentPixelHeight": 600,
            "touch": [
                "SINGLE"
            ]
        }
    },
    "request": {
        "type": "IntentRequest",
        "requestId": "amzn1.echo-api.request.92fc43d8-0dc2-4a08-a31a-70a031e2fef7",
        "timestamp": "2018-11-16T16:51:17Z",
        "locale": "en-GB",
        "intent": {
            "name": "Snow",
            "confirmationStatus": "NONE",
            "slots": {
                "Place": {
                    "name": "Place",
                    "confirmationStatus": "NONE"
                }
            }
        },
        "dialogState": "STARTED"
    }
}

1 Ответ

0 голосов
/ 17 ноября 2018

Мои намерения должны включать в себя сам слот, он не должен быть там, как я думал.Это делается путем добавления {Place}.

...