通过实施Web服务为Alexa托管自定义技能

时间:2016-09-22 14:20:23

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

我正在开发一个用于处理Alexa发送的请求的Web服务,并在.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 功能我想制作一个自定义技能和我的位置不在北美

我得到了自由党。来自github here并在我的网络服务中使用但无法与此库同步,此处的任何人都可以指导我如何做到这一点,或者我如何才能提前感谢。

2 个答案:

答案 0 :(得分:2)

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

https://github.com/tamhinsf/Azure4Alexa

您可以使用示例技能实现作为自定义技能的模式。它使用了httpClient和通常的异步模式。

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

答案 1 :(得分:1)

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

说实话,我知道AlexaSkillsKit.net上的README.md非常密集,但是如果您花一点时间,请遍历AlexaSkillsKit.Sample项目,并遍历已实现的库的定义。类,您将不断了解请求处理。

让我也借此机会细分一下我对类及其结构的理解:

SampleSessionSpeechlet类-只是记录您的请求并实现ISpecchletWithContext(这是强制执行OnSessionStarted()OnLaunch(),{{1} }和OnIntent())这四个函数基本上是Alexa可以发送到您的Web服务的所有请求的处理程序。

OnSessionEnded()类-基本上围绕SpecchletBase类进行包装,而实际上,这些类实际上可以完成所有繁重的工作。

SpeechletService类-您基本上称呼它的SpeechletServiceGetResponseAsync()的{​​{1}}包装),它接受传递的Alexa请求,将其解析为一个可爱的小dataClass称为SpeechletSerive的会话管理,将GetResponse()传递给您的SpeechletRequestEnvelopeSpeechletRequestEnvelopeOnSessionStarted()OnLaunch()方法的实现,您返回的对象并以称为OnIntent()

的类返回Alexa响应

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