开发能力我还是太弱了,但是平常接触python会多一点,包括一些自动化运维之类的开发。我这里就编写一个简单的python后端脚本,通过paramiko模块ssh功能,实现天猫精灵通过语音召唤“还有内存吗”,自动化去查询我在阿里云上的ECS服务器内存剩余。
后续有时间,我可能会丰富一下功能,加入一些常用的运维查询功能。
天猫精灵技能应用平台提供了从语音交互模型定义、语义解析理解能力,到技能开发、测试、部署的一整套开发工具和便捷的可视化操作工作台,帮助开发者高效地将各类技能应用快速接入到天猫精灵音箱以及精灵生态硬件终端。
目前平台支持以下几种应用类型的接入:
- 语音技能
- 灵活定义语音交互方式,开发业务逻辑代码、创建屏显页面来响应任意的用户语音请求。
- 小程序
- 支持将支付宝小程序快速迁移到天猫精灵设备,同时也可利用内容模板小程序快速完成内容变现。
- 安卓Android APP应用
- 支持快速接入安卓生态应用,与天猫精灵带屏端设备无缝打通,同时支持语音交互能力。
- H5网页小游戏
- 无需开发,支持现成H5网页小游戏的快速接入,同时支持语音唤起。
一、创建语言技能
选择自定义技能
填写基本的信息,输入调用词,通过喊这个调用词实现唤出
选择FAAS
进入技能后,选择后端服务,选择服务部署,选择阿里云云原生开发
选择关联阿里云账户
授权访问
完成后选择Python开发语言,选择空白模板
完成后端的服务部署
二、配置语音交互模型
我这里实现比较简单,后端没有从前端json获取参数,交互就随意配置了
配置意图,简单写个名称
可以配置一些固定问答
三、后端代码开发
进入代码编辑,前往webide
进入给的默认模板index
大概看一下给的模板代码
import logging import json import base64 #导入模块 def handler(event, context): request = json.loads(event) logger = logging.getLogger() body = base64.b64decode(request['body']).decode() data = json.loads(body) logger.info(data) #定义了获取json数据,存放在body #响应数据库,回复内容在reply里面 response = { "isBase64Encoded": "false", "statusCode": "200", "headers": {"content-type": "application/json"}, "body": { "returnCode": "0", "returnErrorSolution": "", "returnMessage": "", "returnValue": { "reply": "欢迎使用", "resultType": "RESULT", "executeCode": "SUCCESS", "msgInfo": "" } } }
我们可以做个简单测试,看一下前端传参数json大概有什么,在reply这里将数据包的内容body显示。这样后续可以针对json包提取数据做其他功能
测试一下,可以看到json结构
PS:我后来发现原来在fc的日志里也可以看到,当然可以在日志里看了,为什么我一开始没想到呜呜QAQ
修改我们代码,我们通过paramiko模块实现SSH功能,在收到唤醒的请求后,直接运行ssh登录到服务器并执行查询内存的shell命令
# @by : Taoreset import logging import json import base64 import paramiko #导入paramiko模块 def handler(event, context): request = json.loads(event) logger = logging.getLogger() body = base64.b64decode(request['body']).decode() data = json.loads(body) logger.info(data) #在收到唤醒的请求后,直接进入ecs_mem_free()函数 replydata = ecs_mem_free() response = { "isBase64Encoded": "false", "statusCode": "200", "headers": {"content-type": "application/json"}, "body": { "returnCode": "0", "returnErrorSolution": "", "returnMessage": "", "returnValue": { "reply": replydata, #返回结果 "resultType": "RESULT", "executeCode": "SUCCESS", "msgInfo": "" } } } return response #定义一个执行SSH查询内存命令的函数 def ecs_mem_free(): cmd = 'cat /proc/meminfo |grep -w "MemFree" | tr -cd "[0-9]"' ##执行的shell命令 user = '用户名' passwd = '密码' host = '服务器地址' ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(host,'22',user,passwd) stdin, stdout, stderr = ssh.exec_command(cmd) res,err = stdout.read(),stderr.read() result = res if res else err ans = "您的ECS内存还有: "+result.decode()+' KB' ssh.close() return ans
由于paramiko不在平台的内置模块里,我们需要手动在终端执行打包下载paramiko模块依赖
python -m pip install --upgrade pip pip install -t . paramiko
所有修改完成了,需要在git里提交一下,修改保存到codeup代码仓库
最后部署,部署到预发环境进行测试
四、测试
最后效果,当然,剩余内存在动态变更
直接输入唤醒词,返回ECS上的查询结果。也可以定义一些固定的数据,进行预设的问答
后续可以将开发完成的技能进行发布,我这里功能太简单了,纯属体验,就不发布啦
就玩玩儿,图一乐