【问题标题】:Retrieve uttered intent and slot type from Alexa request in c# service从 c# 服务中的 Alexa 请求中检索说出的意图和插槽类型
【发布时间】:2019-05-20 23:29:52
【问题描述】:

我在 AWS Lambda 上运行了一个 c# 服务,FunctionHandler 正在正确接收请求并区分 Launch 类型和 Intent 类型。就像标题一样,我如何才能得到用户实际输入的内容?

意图称为“swap_screens”,示例话语是“switch screen to {display}”,自定义插槽有“computer”或“television”选项。

如何选择“电脑”或“电视”?

private SkillResponse skillResponse = null;

    /// <summary>
    /// A simple function that takes a string and does a ToUpper
    /// </summary>
    /// <param name="input"></param>
    /// <param name="context"></param>
    /// <returns></returns>

    public SkillResponse FunctionHandler(SkillRequest input, ILambdaContext ctx)
    {
        if (input.GetRequestType() == typeof(LaunchRequest))
        {
            skillResponse = LaunchRequestHandler(input);
        }
        else if (input.GetRequestType() == typeof(IntentRequest))
        {
            skillResponse = IntentRequestHandler(input);
        }


        return skillResponse;
    }

    private SkillResponse LaunchRequestHandler(SkillRequest skillRequest)
    {
        var skillResponse = new SkillResponse
        {
            Version = "1.0",
            Response = new ResponseBody()
        };

        skillResponse.Response.OutputSpeech = new PlainTextOutputSpeech
        {
            Text = "Launch."
        };

        return skillResponse;
    }

    private SkillResponse IntentRequestHandler(SkillRequest skillRequest)
    {
        var skillResponse = new SkillResponse
        {
            Version = "1.0",
            Response = new ResponseBody()
        };

        skillResponse.Response.OutputSpeech = new PlainTextOutputSpeech
        {
            Text = "Intent."
        };

        return skillResponse;
    }

谢谢。

【问题讨论】:

  • 像这样; var intentRequest = (IntentRequest)skillRequest.Request; string strSlotValue = intentRequest.Intent.Slots["slot name"].Value;

标签: c# amazon-web-services aws-lambda alexa alexa-skills-kit


【解决方案1】:

在这里,我假设您在同一意图/话语中可能有多个插槽。

Alexa 请求将数组中的所有插槽值转换,因此您可以使用以下代码访问插槽值。(这里“日期”是我的插槽名称)

       if (intentRequest.Intent.Slots.TryGetValue("date", out var dateSlot))
            {
                if (!string.IsNullOrEmpty(dateSlot.Value))
                {
                   //Slot value
                }
            }

【讨论】:

  • 你好。这是我所追求的现在已弃用的“字面”。
猜你喜欢
  • 2018-02-12
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多