【问题标题】:Hosting a custom skill to Alexa by implementing a web service通过实施 Web 服务向 Alexa 托管自定义技能
【发布时间】:2016-09-22 14:20:22
【问题描述】:

我正在开发一个 Web 服务,用于处理 Alexa 发送的请求,并在 .net 框架中以特定响应进行响应。 Alexa 以 JSON 格式向您的服务发送的请求正文,如下所示:

{
  "version": "string",
  "session": {
    "new": true,
    "sessionId": "string",
    "application": {
      "applicationId": "string"
    },
    "attributes": {
      "string": {}
    },
    "user": {
      "userId": "string",
      "accessToken": "string"
    }
  },
  "context": {
    "System": {
      "application": {
        "applicationId": "string"
      },
      "user": {
        "userId": "string",
        "accessToken": "string"
      },
      "device": {
        "supportedInterfaces": {
          "AudioPlayer": {}
        }
      }
    },
    "AudioPlayer": {
      "token": "string",
      "offsetInMilliseconds": 0,
      "playerActivity": "string"
    }
  },
  "request": {}
}

响应正文语法在下面的Json格式:

{
  "version": "string",
  "sessionAttributes": {
    "string": object
  },
  "response": {
    "outputSpeech": {
      "type": "string",
      "text": "string",
      "ssml": "string"
    },
    "card": {
      "type": "string",
      "title": "string",
      "content": "string",
      "text": "string",
      "image": {
        "smallImageUrl": "string",
        "largeImageUrl": "string"
      }
    },
    "reprompt": {
      "outputSpeech": {
        "type": "string",
        "text": "string",
        "ssml": "string"
      }
    },
    "directives": [
      {
        "type": "string",
        "playBehavior": "string",
        "audioItem": {
          "stream": {
            "token": "string",
            "url": "string",
            "offsetInMilliseconds": 0
          }
        }
      }
    ],
    "shouldEndSession": boolean
  }
}

我在亚马逊开发者论坛Hosting a Custom Skill as a Web ServiceHandling Requests Sent by Alexa上进行了研究,但我无法实现这件事,而且我没有使用 Lambda 功能,我想制作一个自定义技能和我的位置不在美国北部

我得到了 Lib。来自 github here 并在我的网络服务中使用,但无法与此库同步,这里的任何人都可以给我一个方向,我该怎么做,或者我该如何开始提前谢谢。

【问题讨论】:

    标签: c# json web-services alexa alexa-skills-kit


    【解决方案1】:

    我刚刚发布了一个使用您提到的相同 AlexaSkillsKit.NET 包的项目。目标是帮助每个人使用可以轻松部署到 Azure 的 .NET + Visual Studio 创建 Alexa 自定义技能。

    https://github.com/tamhinsf/Azure4Alexa

    有一个示例技能实现,您可以将其用作您自己的自定义技能的模式。它利用了 httpClient 和通常的异步模式。

    只需下载并启动 Visual Studio 即可开始使用!

    【讨论】:

    • 嗨@Tam,感谢您的回复,我有一个问题,我可以在自己的 IIS 远程服务器而不是 Azure 上部署,如果是,那么我需要将什么文件设置为启动文件/页面谢谢。
    • 嘿,我已经将此项目实现为 Web API,因此没有像在 MVC 项目中那样配置起始页。如果您想向用户指出一些东西来介绍您的自定义技能,项目根目录中有一个名为“default.htm”的静态页面。
    • 嗨@Tam 感谢您的回复,我已按照github.com/tamhinsf/Azure4Alexa/blob/master/README.md 的说明步骤操作,但收到错误:“调用远程端点时出错,返回 HTTP 405:不允许方法" 知道为什么会这样。
    • 当您转到 yourserver/default.htm 时会发生什么 - Azure4Alexa 静态 HTML 页面加载正常吗?
    • 是的,它加载了 default.htm,但是当我尝试在测试中输入话语“管上有没有好的服务”时,我得到了响应:-“调用远程端点时出错,它返回 HTTP 405 : Method Not Allowed”。端点网址是:myservername.com/alexa 目前我真的不知道为什么会这样,请帮助我或分享你的 id,我可以告诉你整个过程谢谢。
    【解决方案2】:

    写最后一个答案已经有一段时间了,再加上 Azure4Alexa 示例实现的示例,使用不推荐使用的基类,对于您可能想要使用 Alexa 请求的“上下文”部分的情况,您想要实现SpeechletBase, ISpeechWithContext 在最后的 Speechlet 课程中。

    老实说,我知道AlexaSkillsKit.net 上的 README.md 非常密集,但如果你确实给它一些时间,并通过 AlexaSkillsKit.Sample 项目,并通过实现基类的定义,您将彻底了解请求处理。

    让我也借此机会分解一下我是如何理解这些类及其结构的:

    SampleSessionSpeechlet 类 - 只是记录您的请求的最后一个类,并实现了ISpecchletWithContext(它要求实现OnSessionStarted()OnLaunch()OnIntent()OnSessionEnded())这四个函数是基本上是 Alexa 可以发送到您的 Web 服务的所有请求的处理程序。

    SpecchletBase 类 - 基本上围绕 SpeechletService 类,它实际上完成了所有繁重的工作。

    SpeechletService 类 - 你基本上称它为 GetResponseAsync()SpeechletSeriveGetResponse() 包装)它接受传递的 Alexa 请求,将其解析成一个可爱的小数据类,称为 SpeechletRequestEnvelope,进行会话管理,将SpeechletRequestEnvelope 传递给您对OnSessionStarted()OnLaunch()OnIntent()OnSessionEnded() 方法的实现,获取您返回的对象并将您的Alexa 响应作为一个名为SpeechletResponseEnvelope 的类返回

    希望对一些快速实施有所帮助,但我强烈建议您浏览 Lib 目录并了解其工作原理。谁知道呢?贡献!

    【讨论】:

      猜你喜欢
      • 2020-07-03
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 2017-04-21
      • 2018-11-04
      • 2017-08-28
      相关资源
      最近更新 更多