【问题标题】:Alexa Spelling Skill - How to trigger answer intent when a word is misspelledcAlexa Spelling Skill - 如何在单词拼写错误时触发回答意图
【发布时间】:2018-12-17 01:25:39
【问题描述】:

我目前正在编写一个 alexa 拼写技巧来询问不同的拼写并根据我们拥有的数据检查用户输入。我创建了以下意图和插槽来完成预期的工作:

意图: SpellingIntent - 从单词列表中询问一个随机单词 AnswerIntent - 验证用户输入

插槽: 单词 - 跟踪所有单词 拼写 - 点分隔格式的单词拼写

例如,如果单词是apple,那么spellings slot 会有a.p.p.l.e

如果用户正确拼写单词,我的应用程序可以正常工作,但如果用户拼错单词,那么在 answerIntent 验证之前我不会收到事件。

我对此进行了研究,发现亚马逊弃用了 Amazon.LITERAL 内置插槽类型来触发用户说出的任何单词,我必须使用 SearchQuery。但无论用户说什么,我都不知道如何让事件触发我的回答意图。

谁能帮我解决这个问题?

【问题讨论】:

    标签: alexa


    【解决方案1】:

    我没有对此进行测试,但我建议尝试以下解决方案。

    1 - 停止使用AMAZON.SearchQuery,而是定义一个自定义槽值,如下所示:

    {
      "types": [
        {
          "name": "LETTER",
          "values": [
            {
              "name": {
                "value": "a",
                "synonyms": []
              }
            },
            {
              "name": {
                "value": "b",
                "synonyms": []
              }
            },
            {
              "name": {
                "value": "c",
                "synonyms": []
              }
            },
    
            // ... and so on
    
          ]
        }
      ]
    }
    

    2 - 重新定义您的 AnswerIntent 以接受不同数量的 LETTER 槽值,如下所示:

    {
      "intents": [
        {
          "name": "AnswerIntent",
          "slots": [
            {
              "name": "LetterOne",
              "type": "LETTER"
            },
            {
              "name": "LetterTwo",
              "type": "LETTER"
            },
            {
              "name": "LetterThree",
              "type": "LETTER"
            },
    
            // ... and so on
    
          ],
          "samples": [
            "{LetterOne}",
            "{LetterOne} {LetterTwo}",
            "{LetterOne} {LetterTwo} {LetterThree}",
    
            // ... and so on
    
          ]
        }
      ]
    }
    

    理论上,此设置应在用户说出一系列字母时触发AnswerIntent。然后,您应该能够收集在槽值中传递的字母并将它们与正确的拼写进行比较。

    作为一个潜在的附加步骤,您可以尝试将同义词添加到语音匹配单词的槽值中,如下所示。然后通过键值访问代码中的槽。

    {
      "name": {
        "value": "b",
        "synonyms": [
          "be",
          "bee"
        ]
      }
    }
    

    【讨论】:

    • 我在 answerIntent 中尝试捕获用户口语字母时遇到问题。我试图得到这样的答案 - let answer = intent['slots']['LETTER']['value']。这样做时出现未定义的错误。你能告诉我如何解决它吗
    • 所以您的AnswerIntent 现在正在触发?这是与您的原始帖子不同的问题。它还需要进一步澄清(即,您触发意图的话语是什么?意图有多少个槽?捕获了多少个值,它们是什么?)。
    • 我按照建议创建了 LETTER 类型和话语,但在我的 github 项目中尝试在 index.js 的第 164 行说出示例单词“abcdef”时在 answerIntent 中出现错误,如下所示:github.com/uday060/AlexaSpellChecker/blob/master/src/index.js。这是导致问题的代码。 let answer = intent['slots']['LETTER']['value'].您能否通过一次,让我知道我在这里缺少什么
    • 如果您记录您的意图对象,您的问题的答案应该会变得清晰。 LETTER 不是您任何插槽的 name,而是它们的 type。您收到未定义的错误,因为 intent.slots.LETTER 不存在,因此您无法检查其上的 value 属性。您需要检查intent.slots.LetterOne、intent.slots.LetterTwo 等上的值。
    猜你喜欢
    • 1970-01-01
    • 2022-06-21
    • 2019-11-09
    • 2019-04-19
    • 2020-09-19
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多