C# 通过实现web服务向Alexa托管自定义技能
我正在开发一个web服务,用于处理Alexa发送的请求,并在.net framework中以特定的响应进行响应。Alexa以JSON格式向您的服务发送的请求正文如下:C# 通过实现web服务向Alexa托管自定义技能,c#,json,web-services,alexa,alexa-skills-kit,C#,Json,Web Services,Alexa,Alexa Skills Kit,我正在开发一个web服务,用于处理Alexa发送的请求,并在.net framework中以特定的响应进行响应。Alexa以JSON格式向您的服务发送的请求正文如下: { "version": "string", "session": { "new": true, "sessionId": "string", "application": { "applicationId": "string" }, "attributes": {
{
"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
}
}
我在亚马逊开发者论坛上进行了研究,但我无法实现这一点,有一件事我没有使用Lambda功能,我想定制一项技能,我的位置不在美国北部
我被解雇了。来自github,用于我的web服务,但无法与此库同步,这里的任何人都可以为我提供如何执行此操作或如何启动的指导,提前感谢。我刚刚发布了一个使用您提到的相同AlexaSkillsKit.NET包的项目。目标是帮助每个人使用.NET+Visual Studio创建Alexa自定义技能,您可以轻松地将其部署到Azure 这里有一个示例技能实现,您可以将其用作自定义技能的模式。它利用了httpClient和通常的异步模式
只需下载并启动Visual Studio即可开始 上一个答案已经写了一段时间了,再加上Azure4Alexa示例实现的示例,使用了不推荐的基类,对于您可能希望使用Alexa请求的“上下文”部分的情况,您可能希望在最终的Speechlet类中实现
SpeechletBase,ISpeechWithContext
老实说,我知道上的README.md非常密集,但是如果您给它一些时间,并通过AlexaSkillsKit.Sample项目,以及通过实现基类的定义,您将完全理解请求处理
我还想借此机会详细介绍一下我是如何理解这些类及其结构的:
SampleSessionSpeechlet
类-是记录您的请求的最后一个类,它实现了ispechletWithContext
(它强制实现onSessionStart()
,OnLaunch()
,onContent()
和OnSessionEnded()
)这四个函数基本上是Alexa可以发送到Web服务的所有请求的处理程序
SpecchletBase
类-基本上围绕着SpeechletService
类,该类实际上完成了所有繁重的工作
SpeechletService
类-基本上调用它的GetResponseAsync()
(由SpeechletSerive
的GetResponse()
包装),它接受传递的Alexa请求,将其解析成一个可爱的小数据类,名为SpeechletRequestEnvelope
,进行会话管理,将SpeechletRequestEnvelope
传递给OnSessionStarted()
、OnLaunch()
、OnIntent()
或onsessionend()
方法的实现,获取返回的对象并将Alexa响应作为名为speechletresponseendevelope
的类返回
希望这对快速实现有所帮助,但我强烈建议浏览Lib目录并了解工作原理。谁知道呢?贡献 Hi@Tam,感谢您的回复我有一个问题我可以在自己的IIS远程服务器而不是Azure上部署吗,如果可以,那么我需要将哪个文件设置为启动文件/页面谢谢。嘿,我已经将此项目实现为Web API,因此没有像MVC项目中那样配置启动页面。如果您想让用户了解您的自定义技能,在项目根目录中有一个名为“default.htm”的静态页面。Hi@Tam感谢您的回复,我按照您的说明步骤进行了操作,但收到错误:“调用远程端点时出错,返回HTTP 405:Method Not Allowed”你知道为什么会发生这种情况吗。当你转到-Azure4Alexa静态HTML页面加载正常吗?是的,它加载了default.htm,但当我试图在测试中输入话语“管道上是否有良好的服务”时,我得到了响应:-“调用远程端点时出错,返回了HTTP 405:Method Not Allowed”。端点url是:目前我真的不知道为什么会发生这种情况,请帮助我或共享您的id,我可以告诉您整个过程,谢谢。