“ Alexa,打开Mighty Righty”; -// //“ Alexa,问Mighty Righty是谁,我还是我丈夫?”不起作用(嗯,我不知道那个) [英] "Alexa, open Mighty Righty" - works /// "Alexa, ask Mighty Righty who is right, me or my husband" doesn't work (hmm, I don't know that one)

查看:94
本文介绍了“ Alexa,打开Mighty Righty”; -// //“ Alexa,问Mighty Righty是谁,我还是我丈夫?”不起作用(嗯,我不知道那个)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Alexa,打开Mighty Righty可以调用我发布的技能,但是如果用户说 Alexa,问我或我的丈夫Mighty Righty是谁,该怎么做?

My published skill can be invoked by "Alexa, open Mighty Righty," but it won't work if a user says "Alexa, ask Mighty Righty who is right, me or my husband," how to do that?

https://www.amazon.com/dp/B07SGBR24G/

这是已发布的有效技能的链接。

This is the link to the working published skill.

#------------------------------Part1--------------------------------
# In this part we define a list that contains the player names, and 
# a dictionary with player biographies

Player_LIST = ["me or my wife", "me or my husband", "me or you"]

Player_BIOGRAPHY = {"me or my wife": ["She is. Do as she says, and you'll be OK.", "You", "Of course, your wife", "No doubt, it's you"],

"me or my husband": ["He is", "You are right", "He is not right", "Your husband. He is always right."],

"me or you": ["me", "You are, ... I mean... you are wrong, of course", "of course me", "It's me, don't you know that, my friend?", "you yourself, what do you think? Of course it's me", "I always know who is right, me or not me, so, it's me", "what do you think? I am Mighty Righty, so I am RIGHT"]}

#------------------------------Part2--------------------------------
# Here we define our Lambda function and configure what it does when 
# an event with a Launch, Intent and Session End Requests are sent. # The Lambda function responses to an event carrying a particular 
# Request are handled by functions such as on_launch(event) and 
# intent_scheme(event).

def lambda_handler(event, context):
    if event['session']['new']:
        on_start()
    if event['request']['type'] == "LaunchRequest":
        return on_launch(event)
    elif event['request']['type'] == "IntentRequest":
        return intent_scheme(event)
    elif event['request']['type'] == "SessionEndedRequest":
        return on_end()

#------------------------------Part3--------------------------------
# Here we define the Request handler functions

def on_start():
    print("Session Started.")

def on_launch(event):
    onlunch_MSG = "Hi, start with the word. Me. For example: who is right, me or my husband?"
    reprompt_MSG = "you can say, who is right, me or my wife?"
    card_TEXT = "Who is right, me or... ?."
    card_TITLE = "Choose your question."
    return output_json_builder_with_reprompt_and_card(onlunch_MSG, card_TEXT, card_TITLE, reprompt_MSG, False)

def on_end():
    print("Session Ended.")

#-----------------------------Part3.1-------------------------------
# The intent_scheme(event) function handles the Intent Request. 
# Since we have a few different intents in our skill, we need to 
# configure what this function will do upon receiving a particular 
# intent. This can be done by introducing the functions which handle 
# each of the intents.

def intent_scheme(event):

    intent_name = event['request']['intent']['name']

    if intent_name == "playerBio":
        return player_bio(event)        
    elif intent_name in ["AMAZON.NoIntent", "AMAZON.StopIntent", "AMAZON.CancelIntent"]:
        return stop_the_skill(event)
    elif intent_name == "AMAZON.HelpIntent":
        return assistance(event)
    elif intent_name == "AMAZON.FallbackIntent":
        return fallback_call(event)

#---------------------------Part3.1.1-------------------------------
# Here we define the intent handler functions

import random # this can be at the top of the file too
def player_bio(event):
    name=event['request']['intent']['slots']['player']['value']
    player_list_lower=[w.lower() for w in Player_LIST]
    if name.lower() in player_list_lower:
        reprompt_MSG = "Try to say something like. who is right me or them"
        card_TEXT = "You've picked " + name.lower()
        card_TITLE = "You've picked " + name.lower()
        return output_json_builder_with_reprompt_and_card(random.choice(Player_BIOGRAPHY[name.lower()]), card_TEXT, card_TITLE, reprompt_MSG, False)
    else:
        wrongname_MSG = "Some questions may not yet be present in my database. Try to rephrase your sentence."
        reprompt_MSG = "For example, who is right, me or my wife?"
        card_TEXT = "Use the full question."
        card_TITLE = "Wrong question."
        return output_json_builder_with_reprompt_and_card(wrongname_MSG, card_TEXT, card_TITLE, reprompt_MSG, False)

def stop_the_skill(event):
    stop_MSG = "Bye for now and feel free to ask mighty righty who is right"
    reprompt_MSG = "next time just tell me. Open Mighty righty"
    card_TEXT = "Bye."
    card_TITLE = "Bye Bye."
    return output_json_builder_with_reprompt_and_card(stop_MSG, card_TEXT, card_TITLE, reprompt_MSG, True)

def assistance(event):
    assistance_MSG = "start with the word. Me."
    reprompt_MSG = "For example, who is right me or him"
    card_TEXT = "You've asked for help."
    card_TITLE = "Help"
    return output_json_builder_with_reprompt_and_card(assistance_MSG, card_TEXT, card_TITLE, reprompt_MSG, False)

def fallback_call(event):
    fallback_MSG = "Try to say, for example, who is right, me or him?"
    reprompt_MSG = "Certain answers may not yet be in my database. Use personal pronouns, for example: me, or her, me, or him, me, or them. They can cover pretty much everybody"
    card_TEXT = "You've asked a wrong question."
    card_TITLE = "Wrong question."
    return output_json_builder_with_reprompt_and_card(fallback_MSG, card_TEXT, card_TITLE, reprompt_MSG, False)

#------------------------------Part4--------------------------------
# The response of our Lambda function should be in a json format. 
# That is why in this part of the code we define the functions which 
# will build the response in the requested format. These functions
# are used by both the intent handlers and the request handlers to 
# build the output.

def plain_text_builder(text_body):
    text_dict = {}
    text_dict['type'] = 'PlainText'
    text_dict['text'] = text_body
    return text_dict

def reprompt_builder(repr_text):
    reprompt_dict = {}
    reprompt_dict['outputSpeech'] = plain_text_builder(repr_text)
    return reprompt_dict

def card_builder(c_text, c_title):
    card_dict = {}
    card_dict['type'] = "Simple"
    card_dict['title'] = c_title
    card_dict['content'] = c_text
    return card_dict    

def response_field_builder_with_reprompt_and_card(outputSpeach_text, card_text, card_title, reprompt_text, value):
    speech_dict = {}
    speech_dict['outputSpeech'] = plain_text_builder(outputSpeach_text)
    speech_dict['card'] = card_builder(card_text, card_title)
    speech_dict['reprompt'] = reprompt_builder(reprompt_text)
    speech_dict['shouldEndSession'] = value
    return speech_dict

def output_json_builder_with_reprompt_and_card(outputSpeach_text, card_text, card_title, reprompt_text, value):
    response_dict = {}
    response_dict['version'] = '1.0'
    response_dict['response'] = response_field_builder_with_reprompt_and_card(outputSpeach_text, card_text, card_title, reprompt_text, value)
    return response_dict

这是JSON文件。可能略有不同,因为出于这个问题的目的,我试图尽可能缩短文件的长度,但这并不重要,因为此处的主要组件都位于当前的工作应用程序中:

This Is the JSON file. It might be slightly different, because I tried to shorten the file as much as possible for the purpose of this question, but it doesn't matter because the main components here - are present in the current working app:

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "mighty righty",
            "intents": [
                {
                    "name": "AMAZON.FallbackIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.CancelIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.StopIntent",
                    "samples": []
                },
                {
                    "name": "playerBio",
                    "slots": [
                        {
                            "name": "player",
                            "type": "playerNames"
                        }
                    ],
                    "samples": [
                        "who is right {player}"
                    ]
                },
                {
                    "name": "AMAZON.NoIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.NavigateHomeIntent",
                    "samples": []
                }
            ],
            "types": [
                {
                    "name": "playerNames",
                    "values": [
                        {
                            "name": {
                                "value": "me or you",
                                "synonyms": [
                                    "you or me"
                                ]
                            }
                        },
                        {
                            "name": {
                                "value": "me or them",
                                "synonyms": [
                                    "I am or they are",
                                    "I am or them",
                                    "I am or they",
                                    "I or they are",
                                    "I or them",
                                    "me or they are",
                                    "me or they"
                                ]
                            }
                        },
                        {
                            "name": {
                                "value": "me or him",
                                "synonyms": [
                                    "I or him",
                                    "I or he",
                                    "I'm or he is",
                                    "I'm or him",
                                    "me or he is",
                                    "me or he's"
                                ]
                            }
                        },
                        {
                            "name": {
                                "value": "me or her",
                                "synonyms": [
                                    "I'm or she's",
                                    "I am or she is",
                                    "I'm or she",
                                    "I'm or her",
                                    "me or she is",
                                    "me or she"
                                ]
                            }
                        },
                        {
                            "name": {
                                "value": "me or my wife",
                                "synonyms": [
                                    "me or my wifey"
                                ]
                            }
                        },
                        {
                            "name": {
                                "value": "me or my husband",
                                "synonyms": [
                                    "my husband"
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    }
}

顺便说一句,您可以看到同义词,但Alexa不会使用它们。很好的例子:

By the way, as you can see there are synonyms, but Alexa won't use them. Very good example:

Alexa,谁是对的,我还是你? (作品)

Alexa, who is right, me or you? (works)

Alexa,谁是对的,您还是我吗? (无效)

Alexa, who is right, you or me? (won't work)

但是在JSON中,它表示:

But in the JSON it says:

                                "value": "me or you",
                                "synonyms": [
                                    "you or me"
                                ]

但是我想为此我要问另一个问题...

But I think for that I need to ask another question...

我去了Alexa开发人员控制台,测试标签,写道:

I went to Alexa Developer Console, Test tab, wrote:

alexa,问谁是对的,我还是我的丈夫

"alexa, ask mighty righty who is right, me or my husband"

她说:

嗯,我不知道。

JSON输入和输出窗口中没有任何内容,但我在设备日志中找到了这一行:

Nothing in JSON input and output windows, but I found this line in device logs:

[21:11:35:676]-事件:Text.TextMessage

[21:11:35:676] - Event: Text.TextMessage

我单击了此处,并打开了它(如果需要的话):

I clicked there and it opened this (if this is what is needed):

{
    "event": {
        "header": {
            "namespace": "Text",
            "name": "TextMessage",
            "messageId": "messageId",
            "dialogRequestId": "numbers-and-letters-separated-with-sashes-that-i-deletedxxxxxxxxxxxxxxxxxxxxxxxxxxx506"
        },
        "payload": {
            "textMessage": "alexa, ask mighty righty who is right, me or my husband"
        }
    },
    "context": [
        {
            "header": {
                "namespace": "System",
                "name": "SettingsState",
                "payloadVersion": "1"
            },
            "payload": {
                "settings": [
                    {
                        "key": "com.amazon.alexa.characteristics.viewport.experiences",
                        "value": "[{\"arcMinuteWidth\":\"246\",\"arcMinuteHeight\":\"144\",\"canRotate\":\"false\",\"canResize\":\"false\"}]"
                    },
                    {
                        "key": "com.amazon.alexa.characteristics.viewport.shape",
                        "value": "RECTANGLE"
                    },
                    {
                        "key": "com.amazon.alexa.characteristics.viewport.pixelWidth",
                        "value": "1024"
                    },
                    {
                        "key": "com.amazon.alexa.characteristics.viewport.pixelHeight",
                        "value": "600"
                    },
                    {
                        "key": "com.amazon.alexa.characteristics.viewport.dpi",
                        "value": "160"
                    },
                    {
                        "key": "com.amazon.alexa.characteristics.viewport.currentPixelWidth",
                        "value": "1024"
                    },
                    {
                        "key": "com.amazon.alexa.characteristics.viewport.currentPixelHeight",
                        "value": "600"
                    },
                    {
                        "key": "com.amazon.alexa.characteristics.viewport.touch",
                        "value": "[\"SINGLE\"]"
                    },
                    {
                        "key": "com.amazon.alexa.characteristics.viewport.video",
                        "value": "{\"codecs\": [\"H_264_42\",\"H_264_41\"]}"
                    }
                ]
            }
        },
        {
            "header": {
                "namespace": "SpeechSynthesizer",
                "name": "SpeechState"
            },
            "payload": {
                "token": "amzn1.as-ct.v1.ThirdPartySdkSpeechlet#ACRI#ValidatedSpeakDirective_amzn1.ask.skill.some-kind-of-numbers-and-letters-here-i-deleted-it_they-are-seperated-with-dashes-and-1-underscore-in-the-middlexxxxxxxxxxxxxxxxxxxxxxxx",
                "offsetInMilliseconds": 1000,
                "playerActivity": "FINISHED"
            }
        },
        {
            "header": {
                "namespace": "AudioPlayer",
                "name": "PlaybackState"
            },
            "payload": {
                "token": "",
                "offsetInMilliseconds": 0,
                "playerActivity": "IDLE"
            }
        },
        {
            "header": {
                "namespace": "Alerts",
                "name": "AlertsState"
            },
            "payload": {
                "activeAlerts": [],
                "allAlerts": []
            }
        },
        {
            "header": {
                "namespace": "AudioFocusManager",
                "name": "AudioFocusState"
            },
            "payload": {
                "dialog": {
                    "component": "SpeechSynthesizer",
                    "idleTimeInMilliseconds": 0
                }
            }
        }
    ]
}

之后的下一个日志

[21:11:36:703] -指令:SkillDebugger.CaptureDebuggingInfo

[21:11:36:703] - Directive: SkillDebugger.CaptureDebuggingInfo

它说

{
    "header": {
        "namespace": "SkillDebugger",
        "name": "CaptureDebuggingInfo",
        "messageId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx38"
    },
    "payload": {
        "skillId": null,
        "timestamp": "2019-06-02T01:11:34.189Z",
        "dialogRequestId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx506",
        "skillRequestId": null,
        "type": "ConsideredIntents",
        "content": {
            "intents": [
                {
                    "name": "<IntentForDifferentSkill>",
                    "confirmationStatus": null,
                    "slots": null
                },
                {
                    "name": "<IntentForDifferentSkill>",
                    "confirmationStatus": null,
                    "slots": null
                },
                {
                    "name": "<IntentForDifferentSkill>",
                    "confirmationStatus": null,
                    "slots": null
                }
            ]
        }
    }
}

下一个[21:11:36:932]-指令:SpeechSynthesizer.speak:

the next one [21:11:36:932] - Directive: SpeechSynthesizer.Speak:

{
    "header": {
        "namespace": "SpeechSynthesizer",
        "name": "Speak",
        "messageId": "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "dialogRequestId": "xxxxxxxxxxxxxxxxxxxxxxxxxxx506",
        "keys": {
            "isBlocking": true,
            "channel": "audio"
        }
    },
    "payload": {
        "caption": "Hmm, I don't know that.",
        "url": "https://tinytts.amazon.com/path to file here/resource.mp3",
        "format": "AUDIO_MPEG",
        "token": "amzn1.as-ct.v1.Domain:Global:Fallback#ACRI#DeviceTTSRendererV4_xxxxxxxxx5c",
        "ssml": "<speak><prosody volume=\"x-loud\">Hmm, I don&apos;t know that.</prosody><metadata><promptMetadata><promptId>NotUnderstood</promptId><namespace>SmartDJ.MusicQA</namespace><locale>en_US</locale><overrideId>default</overrideId><variant>2017_Variant 5</variant><condition/><weight>1</weight><stageVersion>Adm-xxxxxxxxxxxxxx</stageVersion></promptMetadata></metadata></speak>"
    }
}

以及其中一些日志,就是这样,这就是我所发现的。

and a couple of more of these logs and that's it, that's what I found.

预期结果:


  • Alexa,请问Mighty Righty是谁,我还是我的妻子?

  • 您的妻子
    (或Player_BIOGRAPHY我或我的妻子发出的另一个随机答复)

实际结果:


  • Alexa,打开Mighty Righty。

  • 你可以说......

  • 谁是正确的,我还是我的妻子?

  • 您的妻子
    (或Player_BIOGRAPHY我或我的妻子发出的另一个随机答复)

  • Alexa, open Mighty Righty.
  • Hi, you can say ......
  • Who is right, me or my wife?
  • your wife (or another random response from Player_BIOGRAPHY "me or my wife")

得到回复的方式更长(取决于Mighty Righty的欢迎响应)

As you can see, the way to get to the response is much longer (depending on Mighty Righty's welcome response)

请帮忙! (我不是编码人员,我只是按照教程进行操作)。

Please, help! (I am not a coder, I just followed a tutorial)

推荐答案

此错误消息嗯,我不知道当Alexa无法理解某项技能之外的输入,从而无法识别您在问什么或要使用哪种技能时,就会发出该字样。因此,应该不会出现插槽或意图错误。

This error message of "Hmm, I don't know that" is delivered when Alexa cannot understand the input outside of a skill, and so does not recognize what you are asking or what skill to use. So it shouldn't be an error with the slots or intents.

Alexa捕获语音输入时,它不会插入任何标点符号,而诸如逗号之类的标点符号似乎破坏了Alexa理解输入的能力。

When Alexa captures voice input, it does not insert any punctuation, and the punctuation such as commas seem to break Alexa's ability to understand the input.

因此,在使用Alexa Console测试聊天时,请勿在文本输入中写任何标点符号。

So when using the Alexa Console test chat, do not write any punctuation into the text input.

然后在进行语音测试时,清晰地输入您的输入,并仔细检查您的日志以查看Alexa如何解释语音。您使用的技能越多,Alexa就应该学会更好地正确捕获关键字。

And when testing with voice, pronounce your input clearly and double check your logs to view how Alexa interpretted the voice. The more you use your skill, the better Alexa should learn to capture the key words correctly.

这篇关于“ Alexa,打开Mighty Righty”; -// //“ Alexa,问Mighty Righty是谁,我还是我丈夫?”不起作用(嗯,我不知道那个)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆