【5】天猫精灵开放平台实验—基于天气查询模板创建开发屏显页面技能
文章目录
- 天猫精灵开放平台实验—基于模板创建开发屏显页面技能
- 一、前提准备
- 二、登录天猫精灵开放平台
- (一)创建新技能
- 1、创建语音技能
- 2、填写基本信息
- (二)创建后端服务
- 1、创建后端服务
- 2、关联阿里云账号
- 3、创建技能应用
- 4、调试代码
- 5、推送代码至远程分支
- 6、部署代码
- (三)创建屏显模板
- 1、新建屏显模板
- 2、填写模板名称、标识、描述
- (四)在线测试
- (五)真机测试
- 1、安装waft-cli 工具
- 2、创建项目
- 3、启动调试服务
- 4、打开天猫精灵开发者模式
- (1)在天猫精灵上,点击“更多设置”。
- (2)点击“升级更新”。
- (3)连续点击“系统版本”五下,打开“开发者模式”。
- (4)开启WAFT调试
- (5)打开调试面板,输入本地端的IP地址
- 4、打包
- 5、上传app.wasm
- 6、推送
- 7、添加测试设备
- 8、测试
天猫精灵开放平台实验—基于模板创建开发屏显页面技能
一、前提准备
使用本地 VSCode 快速开发一个技能屏显界面,并通过控制台的操作连接猫精设备进行真机测试。
- 1、本实验目前支持CentOS、Ubuntu、MacOS上支持。本实验采用Ubuntu 20.4系统。
- 2、在Ubuntu系统上安装VSCode开发软件。# 系列文章目录
二、登录天猫精灵开放平台
1、登录天猫精灵开放平台 ,登陆后点击控制台,选择技能应用平台并点击进入。
(一)创建新技能
1、创建语音技能
2、填写基本信息
(二)创建后端服务
1、创建后端服务
2、关联阿里云账号
登录阿里云账号
完成授权,点击下一步。
开通相关服务。
3、创建技能应用
创建应用
保存创建的服务
点击“前往开发”。
查看语音交互模型已经自动完成创建
4、调试代码
示例代码如下
package com.alibaba.ailabs;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;import com.alibaba.ailabs.common.AbstractEntry;
import com.alibaba.da.coin.ide.spi.meta.AskedInfoMsg;
import com.alibaba.da.coin.ide.spi.meta.ExecuteCode;
import com.alibaba.da.coin.ide.spi.meta.GwCommand;
import com.alibaba.da.coin.ide.spi.meta.ResultType;
import com.alibaba.da.coin.ide.spi.standard.ResultModel;
import com.alibaba.da.coin.ide.spi.standard.TaskQuery;
import com.alibaba.da.coin.ide.spi.standard.TaskResult;
import com.alibaba.fastjson.JSON;import com.aliyun.fc.runtime.Context;
import com.google.common.collect.Lists;/*** @Description 天猫精灵技能函数入口,FC handler:com.alibaba.ailabs.GenieEntry::handleRequest* @Version 1.0**/
public class GenieEntry extends AbstractEntry {@Overridepublic ResultModel<TaskResult> execute(TaskQuery taskQuery, Context context) {context.getLogger().info("taskQuery: " + JSON.toJSONString(taskQuery));//String screenStatus = taskQuery.getRequestData().get("screenStatus");String screenStatus = "online";// 从请求中获取意图参数以及参数值Map<String, String> paramMap = taskQuery.getSlotEntities().stream().collect(Collectors.toMap(slotItem -> slotItem.getIntentParameterName(), slotItem -> slotItem.getOriginalValue()));String reply;String city = paramMap.get("city");String date = paramMap.get("date");//处理名称为 weather 的意图if ("weather".equals(taskQuery.getIntentName())) {//weather 意图中 date 参数勾选了必选,请求数据中一定会携带 date 参数,只需要判断 city 参数有没有。if (city == null) {reply = "您要查询哪个城市的天气?";return askReply(reply, "city", taskQuery.getIntentId());}//TODO 根据参数获取天气信息,这里使用假数据替代reply = city + date + "天气 晴。";if ("online".equals(screenStatus)) {return weatherTplReply(reply, city);} else {return reply(reply);}//处理名称为 air_quality 的意图} else if ("air_quality".equals(taskQuery.getIntentName())) {//air_quality 意图中 date 参数勾选了必选,请求数据中一定会携带 date 参数,只需要判断 city 参数有没有。if (city == null) {reply = "您要查询哪个城市的空气质量?";return askReply(reply, "city", taskQuery.getIntentId());}//TODO 根据参数获取空气质量信息,这里使用假数据替代reply = city + date + "空气质量46 优。";if ("online".equals(screenStatus)) {return airTplReply(reply, city);} else {return reply(reply);}}reply = "请检查意图名称是否正确,或者新增的意图没有在代码里添加对应的处理分支。";return reply(reply);}/*** 结束对话的回复,回复后音箱闭麦*/private ResultModel<TaskResult> reply(String reply) {ResultModel<TaskResult> res = new ResultModel<>();TaskResult taskResult = new TaskResult();taskResult.setReply(reply);taskResult.setExecuteCode(ExecuteCode.SUCCESS);taskResult.setResultType(ResultType.RESULT);res.setReturnCode("0");res.setReturnValue(taskResult);return res;}/*** 指定追问参数,音箱自动开麦,用户的回答优先匹配追问的参数*/private ResultModel<TaskResult> askReply(String reply, String parameterName, Long intentId) {ResultModel<TaskResult> res = new ResultModel<>();TaskResult taskResult = new TaskResult();taskResult.setReply(reply);taskResult.setExecuteCode(ExecuteCode.SUCCESS);taskResult.setResultType(ResultType.ASK_INF);AskedInfoMsg askedInfoMsg = new AskedInfoMsg(parameterName, intentId);taskResult.setAskedInfos(Lists.newArrayList(askedInfoMsg));res.setReturnCode("0");res.setReturnValue(taskResult);return res;}/*** 天气查询意图的TPL回复*/private ResultModel<TaskResult> weatherTplReply(String reply, String city) {return commonReply(reply, city, reply);}/*** 空气质量查询意图的TPL回复*/private ResultModel<TaskResult> airTplReply(String reply, String city) {return commonReply(reply, city, reply);}private ResultModel<TaskResult> commonReply(String reply, String city, String detail) {//屏显模板数据需要使用gwCommands字段携带,会导致reply失效。回复内容通过speak指令返回GwCommand speakGwCommand = new GwCommand("AliGenie.Speaker", "Speak");HashMap<String, Object> payload = new HashMap<>();payload.put("type", "text");payload.put("text", reply);speakGwCommand.setPayload(payload);//携带屏显模板数据的指令GwCommand tplGwCommand = new GwCommand("AliGenie.Screen", "Render");HashMap<String, Object> payload1 = new HashMap<>();payload1.put("pageType", "TPL.RenderTemplate");payload1.put("pageTitle", "天气小助手");//模板标识数据HashMap<String, Object> data = new HashMap<>();data.put("template", "aligenie_weather_tpl");//模板中展示内容的字段 dataSourceHashMap<String, String> dataSource = new HashMap<>();dataSource.put("imageUrl", "https://ailabs-iot.aligenie.com/iap/platform3.0/weather-banner.png");dataSource.put("city", city);dataSource.put("minTemperature", "36°");dataSource.put("maxTemperature", "38°");dataSource.put("detail", detail);data.put("dataSource", dataSource);payload1.put("data", data);tplGwCommand.setPayload(payload1);return tplReply(Lists.newArrayList(speakGwCommand, tplGwCommand));}/*** 携带TPL数据的结束对话回复,回复后音箱闭麦*/private ResultModel<TaskResult> tplReply(List<GwCommand> gwCommands) {ResultModel<TaskResult> res = new ResultModel<>();TaskResult taskResult = new TaskResult();taskResult.setExecuteCode(ExecuteCode.SUCCESS);taskResult.setResultType(ResultType.RESULT);taskResult.setGwCommands(gwCommands);res.setReturnCode("0");res.setReturnValue(taskResult);return res;}
}
5、推送代码至远程分支
为防止您的代码丢失,请务必提交并推送代码到远程分支
[admin@f99f9e13-a8b9-4189-bada-d24034966e0e-77d8d5765d-h8vtm /home/admin/workspace/codeup.aliyun.com/618249ae404574409feabd87/workbench/repo_2021-11-10_2021111001491236]
$git status
On branch master
Your branch is up to date with 'origin/master'.Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: src/main/java/com/alibaba/ailabs/GenieEntry.javano changes added to commit (use "git add" and/or "git commit -a")[admin@f99f9e13-a8b9-4189-bada-d24034966e0e-77d8d5765d-h8vtm /home/admin/workspace/codeup.aliyun.com/618249ae404574409feabd87/workbench/repo_2021-11-10_2021111001491236]
$git add src[admin@f99f9e13-a8b9-4189-bada-d24034966e0e-77d8d5765d-h8vtm /home/admin/workspace/codeup.aliyun.com/618249ae404574409feabd87/workbench/repo_2021-11-10_2021111001491236]
$git commit -m "weather_tpl"
[master 4bf99d6] weather_tpl1 file changed, 1 insertion(+), 1 deletion(-)[admin@f99f9e13-a8b9-4189-bada-d24034966e0e-77d8d5765d-h8vtm /home/admin/workspace/codeup.aliyun.com/618249ae404574409feabd87/workbench/repo_2021-11-10_2021111001491236]
$git push
Counting objects: 9, done.
Delta compression using up to 5 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (9/9), 632 bytes | 42.00 KiB/s, done.
Total 9 (delta 2), reused 0 (delta 0)
To https://codeup.aliyun.com/618249ae404574409feabd87/workbench/repo_2021-11-10_2021111001491236.git4235ca4..4bf99d6 master -> master[admin@f99f9e13-a8b9-4189-bada-d24034966e0e-77d8d5765d-h8vtm /home/admin/workspace/codeup.aliyun.com/618249ae404574409feabd87/workbench/repo_2021-11-10_2021111001491236]
$
6、部署代码
(三)创建屏显模板
1、新建屏显模板
2、填写模板名称、标识、描述
(四)在线测试
(五)真机测试
参考链接:快速开始 · 语雀 (yuque.com)
1、安装waft-cli 工具
在Ubuntu系统上使用VSCode软件安装waft-cli 工具
PS: 权限问题使用sudo执行即可
npm i waft-cli -g
xyb@xyb-virtual-machine:~/waft$ sudo npm i waft-cli -g
[sudo] xyb 的密码:
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated @types/ora@3.2.0: This is a stub types definition. ora provides its own type definitions, so you do not need this installed.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated loadsh@0.0.4: This is a typosquat on the popular Lodash package. This is not maintained nor is the original Lodash package.
npm WARN deprecated @types/colors@1.2.1: This is a stub types definition. colors provides its own type definitions, so you don't need this installed.
npm WARN deprecated @types/table@6.3.2: This is a stub types definition. table provides its own type definitions, so you do not need this installed.
npm WARN deprecated @stylelint/postcss-markdown@0.36.2: Use the original unforked package instead: postcss-markdown
/usr/local/bin/waft -> /usr/local/lib/node_modules/waft-cli/bin/waft
/usr/local/bin/asc -> /usr/local/lib/node_modules/waft-cli/bin/asc> core-js-pure@3.19.1 postinstall /usr/local/lib/node_modules/waft-cli/node_modules/core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!The project needs your help! Please consider supporting of core-js:
> https://opencollective.com/core-js
> https://patreon.com/zloirock
> https://paypal.me/zloirock
> bitcoin: bc1qlea7544qtsmj2rayg0lthvza9fau63ux0fstcz Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)npm WARN notsup Unsupported engine for is-root@3.0.0: wanted: {"node":">=12"} (current: {"node":"10.19.0","npm":"6.14.4"})
npm WARN notsup Not compatible with your version of node/npm: is-root@3.0.0+ waft-cli@0.6.50
added 963 packages from 553 contributors in 202.846s
xyb@xyb-virtual-machine:~/waft$
2、创建项目
通过waft脚手架初始化项目,会引导您进行项目命名等,您将得到一个新project
sudo waft init
xyb@xyb-virtual-machine:~/waft$ sudo waft init
? What's project name? my-demo
? Which template package to from? waft-empty-template
【5】天猫精灵开放平台实验—基于天气查询模板创建开发屏显页面技能相关推荐
- 【1】天猫精灵开放实验平台实验—创建语音技能
天猫精灵开放实验平台-创建语音技能 基于 阿里云云开发平台 开发学习 https://workbench.aliyun.com/ 文章目录 天猫精灵开放实验平台-创建语音技能 一.创建语音技能 1.输 ...
- 【3】天猫精灵开放实验平台实验— 切换意图,参数传递
天猫精灵开放实验平台实验-- 切换意图,参数传递 基于 阿里云云开发平台 开发学习 https://workbench.aliyun.com/ 参考链接:AliGenie - 技能应用平台 一.创建两 ...
- 天猫精灵 AIoT 平台将研发门槛从1000万降至40万,缩减 3 倍研发周期
近几年来,物联网发展迅速:据中商产业研究院<2016--2021年中国物联网产业市场研究报告>显示,预计到2020年,中国物联网的整体规模将达2.2万亿元,产业规模比互联网大30倍. 物联 ...
- 天猫精灵AliGenie平台,Oauth token返回不正确解决方式
天猫精灵AliGenie平台,Oauth token返回不正确解决方式 这篇文章主要讲在使用PHP对接天猫精灵AliGennie平台时,Oauth对接出现如下图所出现的问题的解决方式: 因为本人也是刚 ...
- 安信可ESP8266模块实现对接天猫精灵IOT平台控制单路插座的教程
文章目录 一.材料准备 二.软件配置 一.材料准备 天猫精灵一个,ESP8266模块一个(为了方便接线我们直接使用了Nodemcu开发板),插座一个(方便查看现象),杜邦线若干,接线方式如下 Node ...
- 互联网API开放平台安全设计-基于OAuth2.0协议方式
基于OAuth2.0协议方式 什么是OAuth OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站 ...
- 亚马逊服务器 购买 流程_亚马逊环如何使我们对购买的每种产品都抱有偏执
亚马逊服务器 购买 流程 重点 (Top highlight) 非品牌 (Off Brand) A little over four years ago, my wife and I moved in ...
- 【智能家居平台】天猫精灵 -- 平台剖析
参考资料汇总: 天猫精灵官网:https://bot.tmall.com/ 天猫精灵开放平台(AliGenie):https://iap.aligenie.com/ 深度解密天猫精灵对话系统 http ...
- 高德天气 php,高德开放平台天气查询API
更多内容,请查看博客原文:高德开放平台天气查询API https://finolo.gy/2020/01/高德开放平台天气查询API/ 高德开放平台下的天气查询接口文档 https://lbs.ama ...
最新文章
- 达内出来的混得怎么样了_《士兵突击》主演现状:混得最好的不是王宝强,而是一向低调的他...
- SQL Server中临时表与表变量的区别
- 不允许使用不完整的类型解决方法
- nginx配置访问密码,让用户输入用户名密码才能访问
- 字符串 mysql索引,长字符串的MySQL索引
- Redis启动多端口,运行多实例(转)
- Linux TOP命令查询结果分析
- Qt 实现桌面右下角消息弹窗提示
- 神经网络之文本情感分析(四)
- php实现设计模式之 命令模式
- AndroidStudio打开的Gradle项目不识别成相应文件,gradle无响应
- 数据库截取字段 转换成int型函数
- 如何提升软件测试思维?
- 恶搞视频聊天偷拍源码
- matlab视频文件处理,Matlab处理视频文件1
- solidity投票(ballot)合约
- 金蝶软件界面文字全部变为乱码解决办法
- 全球及中国雾化铜和铜合金粉末行业产销需求及发展动态分析报告2022-2028年
- 05.ThreeJs开发指南-第五章-几何体
- 攻防世界 Crypto高手进阶区 3分题 wtc_rsa_bbq
热门文章