如何使用Alexa技能在样本话语中传递广告位值?

时间:2018-07-23 11:14:43

标签: alexa alexa-skills-kit alexa-skill alexa-slot

我正在使用Alexa技能中的自定义插槽。我创建了一个插槽,其中pName为插槽名称,插槽类型为 ProductName 。 当我打开技能后呼唤我的意图时,它总是用于未处理的输入。 我已经按照文档创建了自定义插槽,但是仍然没有成功。 例如//我的样本话语如下: 我有一个具有样本话语的意图名称OnHandQuantityIntent 项目{pName}的现货库存

用户输入:商品xyz234的现货 Alexa响应:内部未处理的意图。

型号:

{
"interactionModel": {
    "languageModel": {
        "invocationName": "ebs demo",
        "intents": [
            {
                "name": "AMAZON.FallbackIntent",
                "samples": []
            },
            {
                "name": "AMAZON.CancelIntent",
                "samples": []
            },
            {
                "name": "AMAZON.HelpIntent",
                "samples": []
            },
            {
                "name": "AMAZON.StopIntent",
                "samples": []
            },
            {
                "name": "OnHandQuantityDemoIntent",
                "slots": [
                    {
                        "name": "PName",
                        "type": "Product_Type"
                    }
                ],
                "samples": [
                    "Onhand quantity {PName}",
                    "get onhand quantity for item {PName}",
                    "provide me onhand quantity for {PName}"
                ]
            }
        ],
        "types": [
            {
                "name": "Product_Type",
                "values": [
                    {
                        "id": "AT23808",
                        "name": {
                            "value": "AT23808",
                            "synonyms": [
                                "at23808",
                                "AT23808"
                            ]
                        }
                    }
                ]
            }
        ]
    }
    }
}

这是我的alexa.js函数

'use strict';
const Alexa = require('alexa-sdk');
const APP_ID = undefined;
const SKILL_NAME = 'DemoForDirectCall';
const GET_ITEM_MESSAGE = "ITEM DETAIL: ";
const HELP_MESSAGE = 'WE can get real time on hand quantity for Product';
const HELP_REPROMPT = 'What can I help you with?';
const STOP_MESSAGE = 'Goodbye!';



const handlers = {
   'LaunchRequest': function () {
    this.response.speak("Welcome to Demo for direct call");
    this.response.shouldEndSession(false);
    this.emit(':responseReady');
},
'OnHandQuantityDemoIntent': function () {
    console.log(JSON.stringify(this.event.request));
    var productName = "NONE";
    var intent = this.event.request.intent;
    if(!intent.slots.PName)
        productName = intent.slots.PName.value;
    const speechOutput = "You have entered "+productName;
    this.response.speak(speechOutput);
    this.emit(':responseReady');
 },
 'AMAZON.HelpIntent': function () {
    const speechOutput = HELP_MESSAGE;
    const reprompt = HELP_REPROMPT;
    this.response.speak(speechOutput).listen(reprompt);
    this.emit(':responseReady');
 },
 'AMAZON.CancelIntent': function () {
    this.response.speak(STOP_MESSAGE);
    this.emit(':responseReady');
 },
 'AMAZON.StopIntent': function () {
    this.response.speak(STOP_MESSAGE);
    this.emit(':responseReady');
 },
 'Unhandled': function () {
    console.log("Inside unhandled Intent");
    this.response.speak("Inside Unhandled Intent");
    this.emit(':responseReady');
 },
};

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

用户输入:打开ebs演示 Alexa回复欢迎消息 用户输入:AT23808的现有数量 Alexa回应:内部未处理的互联网。

2 个答案:

答案 0 :(得分:1)

它进入Unhandled是因为AMAZON.FallbackIntent没有意图处理器。提到的用户输入正在触发此意图,最终成为“未处理”。

广告位值中的缩写和数字

在处理诸如AT或ATZ或XYZ之类的缩写时,您必须提供这样的广告位值。 (尝试提供更多变化)

x. y. z. two four seven nine
A. T. Z. one two three four
A. T. two three eight zero eight

在“测试模拟器”中进行测试时,请使用类似

的发音
  

询问x的库存ebs演示。 y。 z。五三七

有了您的交互模型和我提到的更改,对于上述话,我收到了这样的请求

"intent": {
            "name": "OnHandQuantityDemoIntent",
            "confirmationStatus": "NONE",
            "slots": {
                "PName": {
                    "name": "PName",
                    "value": "XYZ537",
...

此外,将您的调用名称从ebs更改为e. b. s.

答案 1 :(得分:0)

让我们假设我必须输入用户的产品。所以product是我的广告位,而productType是我的广告位类型。

Slot Types: productType 
  Values: washing machine.
product is of type: ProductType

Sample Utterance: My {product} is not working.

User input: My washing machine is not working.

这应该有效。

在您的情况下,我想您需要为您的ProductName添加字母数字的示例值。这样就可以正常工作了。 一切顺利。