如何在 Alexa 中创建家庭卡

物联网 亚历克斯 亚马逊回声
2021-06-26 02:21:28

我正在尝试发展我的第一项技能,但我没有找到有关如何创建家庭卡的正确信息

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/providing-home-cards-for-the-amazon-alexa-app#creating-a-basic-home-card-显示文本

说我必须将它添加到 JSON 响应中,我不明白 JSON 响应到底在哪里?

任何帮助深表感谢。

3个回答

创建基本家用卡片来显示文本

要创建一个简单的卡片,请card在您的 JSON 响应中包含该属性:将 设置typeSimple

  • titlecontent属性设置为要显示的文本。
  • 使用“\r\n”“\n”在 内content插入换行符。
 {
   "version": "1.0",
   "response": {
     "outputSpeech": {"type":"PlainText","text":"Text to speak back to the user."},
     "card": {
       "type": "Simple",
       "title": "Example of the Card Title",
       "content": "Example of card content. This card has just plain text content.\nThe content is formatted with line breaks to improve readability."
     }
   }
 }

上面的代码片段grey是 JSON 代码片段。请注意"card":代码段中文本。

来自亚马逊教程:

使用 Java 库时:

创建一个 SimpleCard 对象。

调用对象的 setTitle() 和 setContent() 方法来设置标题和内容。

将卡片对象传递给任一

SpeechletResponse.newTellResponse() 
   or 
SpeechletResponse.newAskResponse() 

获取包含卡片的 SpeechletResponse。

因此,基本上在 Java 解决方案中,将数据从 json 放置到代码中的 Java 函数调用中。

关于 SpechletResponse 的更完整示例在HelloWorldSpeechlet 中

您可以将现成的存储库作为 Lambda 函数的基本解决方案(以上代码是其中的一部分),并根据需要修改源代码。

您将在开发人员门户中创建具有意图的技能,例如创建 Lambda 函数。在 Java 中(至少 Node.js 和 Python 也是可能的)并将其运行在 AWS 中并与 Developer Portal 中的技能映射在一起。

之后就是 jsoning 的地方:测试阶段。您将 json 数据推送到服务并在 json 中对其进行验证。

旁注:在卡片案例中,响应应包含卡片,因此在此上下文中放置 json 有点错过领先。您只需让 Alexa 服务生成它。

alexa 技能的 Java 版本,包含您需要的所有必要代码:

https://github.com/amzn/alexa-skills-kit-java/blob/master/README.md

在代码中,如果您使用的是 node.js,它可能看起来像这样

const LaunchRequestHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
    },
    handle(handlerInput) {
        var reprompt = '';
        const speakOutput = 'Protokollaufnahme gestartet.';
        return handlerInput.responseBuilder
            .speak(speakOutput)
            .reprompt(reprompt)
            .withSimpleCard('Protokollaufnahme', speakOutput)
            .withShouldEndSession(false)
            .getResponse();
    },
};

该卡在响应中初始化如下:

.withSimpleCard('title', 'content')

有了这个,它会自动添加到 json 输出中