2020年8月5日 记录与天猫精灵的对接
- 前言
做之前参考过很多大神写的文章,但完全没看懂, 或者没看懂大神们的具体需求,有些很有意义的博客看到最后跟着尝试等等,最后实现发现我们需求完全不一样,所以走了很多弯路,至此想自己写一篇关于我的天猫精灵的对接经验,也仅仅是我们公司这类的需求,如果此文有参考价值我会很欣慰,如果此文无参考价值也免得浪费大家宝贵时间,继续自行寻找其他参考文章。
- 需求
先说一下需求,并不是传统意义上的硬件设备对接。公司有一个监控平台在会议室,这个监控项目是B/S架构开发,监控时用网页打开F11全屏,给人感觉就像时整个监控软件一样。
领导觉得每次给客户或者参观的人员展示这套监控软件时除了介绍功能等还需要用鼠标操作,感觉很low,然后有了想法看看是否能用天猫精灵(或小爱同学、小度小度等等)来控制操作,因为公司有天猫精灵的设备,所以就先用这个来研究了。
开工之前,我想的很简单,天猫精灵后台设置某句话,然后天猫精灵调用我提供的webapi,其他业务逻辑在webapi中处理,这样就可以实现了,但在实际操作中,看了很多智能硬件的对接,我差点没放弃,因为天猫精灵需要多次认证HTTPS等等,但在快要放弃的时候,我发现所有的事情又回到了我之前所想的,最后实现起来也和之前所想一样简简单单的实现了,但之前走了不少弯路。
- 环境
服务器是阿里云的 windowsServer2019 IIS C# Framework 4.7.2 MVC MYSQL (实际做的时候我用的 .netCore2.1)
- Before Do
做之前,和很多小伙伴一样先上网搜搜相关文章,参考文档之类的等等,所以我找到了以下:
1. https://www.cnblogs.com/Frank-Jan/p/9117923.html 此文章写的非常好,从第一部如何对接到最后一步如何开发,也都是C#的项目,但没太多需求说明,但我真的认真拜读并跟着操作,发现有些代码即使改了也是报错(与天猫精灵对接时),而且最后发现我们需求也并不一致,耽误了不少时间(2天左右),但也学会了很多相关知识(HTTPS)等等,以后如果做智能硬件此文章应该是精华!
2. https://www.aligenie.com/doc/357834/yg08kg 天猫精灵的官方文档,是有很大帮助的,但可能是版本问题,目前的文档和实际平台有所出入,也会被误导。。。。注:不要只盯着自己关注的功能,多看看其他的文档,会发现豁然开朗。我当时就因为砖牛角尖又耽误了不少时间,后来发现原来我纠结的问题在其他的章节里有介绍。。。。。
3. https://mkaliez.com/all/1815.html 这个文章写的很简短,但大体上和我的需求一样,但从搜索到这篇文章,到我认认真真看完,经历了无数次关闭和打开,因为这篇是个python的文章,而且还是个用天猫精灵关机的功能,直到最后我是在没有兴趣在搜索其他文章了,沉下心认真看,才发现里面的奥秘。
4. 还有很多很多 参考文章
- Do
前面过的坑浪费的时间与废话我就不多说了,直接开始如何实现。
1. 首先进入 天猫精灵 开发者平台 https://www.aligenie.com/ 点击登录 淘宝/支付宝账号登录
2. 登录成功后 有两个选择 进入控制台 查看文档, 文档是可以多看看的
3. 我选择技能 → 创建语音技能
4. 创建技能中
技能名称:随便填写,就是个名字
技能属性:建议选择 似有技能(我的需求就是私有技能)
技能调用词:有调用词 ---- 下面填写调用词,就是在实际操作中 对天猫精灵说什么词 让天猫精灵做出反馈。
后面的选项都是必填,但也都是随便填写就好
5. 创建完技能后,下一步就是能力申请 ,我遇见的坑也都是在此,我的需求是无需申请能力的,这个块完完全全可越过,但我却在此耽误了2天左右时间,不过学习到了很多知识,有兴趣的小伙伴可以继续研究研究这块,我这就直接越过了。
6. 我真正需要做的事 意图 创建意图 创建意图时需要填写 意图名称,意图标识,意图描述 等
创建后 编辑意图 如下:
按照我本人以上设置的意图,在与天猫精灵对话的时候 “天猫精灵” + “技能名” +“一二三” 天猫精灵就会做出反馈,在测试里可以看到
虽然天猫精灵做出了解析,但没有正确的回馈 下一步我要配置回复逻辑。
7. 回复逻辑
在默认逻辑 webhook 中 选择要回馈的意图 点击详情
其中 需要配置好 URL 这个URL 就是 天猫精灵在 得到关键字后调用的 我理解成 这就是 webapi (原谅我对webhook的知识匮乏)
下载认证文件,这个认证文件如果不下载 并部署好,这个URL是永远设置不成功的!!
下载好的认证文件无需重命名,放在 URL的根目录/aligenie 即可
例如 url是:http://xxx.xxx.com/webapi/test 认证文件在 http://xxx.xxx.com/aligenie/认证文件xxxxx(名字无需修改).txt
并保证认证文件在以上链接中是可访问的 即可,然后配置好URL 提交就行了
8. 编码 服务端的webapi 编码 我用的事 .netCore2.1 c# 完成的,如下:
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;namespace NetCore.Api {[Route("api/AliGenie")][ApiController]public class AliGenieController : Controller {[HttpPost("Test")]public IActionResult Test([FromBody] JObject json) {Models.ReturnMsgModels ret = new Models.ReturnMsgModels {returnCode = "0",returnErrorSolution = "",returnMessage = "",returnValue = new Models.ReturnvalueModel {reply = "好的,正在操作",resultType = "RESULT",executeCode = "SUCCESS",msgInfo = ""}};return Ok(ret);}}
}
至此功能结束 可以对接, 之后都是业务逻辑处理
简单的对接结束