微信小程序最近比较热门,再加上自然语义理解也越来越被人关注,于是我想赶赶潮流,做一个小程序试试。想来想去快递查询应该是一种比较普遍的需求。
如果你也在通过自然语言接口做点什么,希望我的这篇博客能帮到你。感兴趣的朋友可以加入互通有无。或者你也可以直接下载代码试一试。
----------代码下载:-------------
----------------功能介绍: 我的小程序名字叫“智能生活宝”------------------------
1. 通过自然语言对话查询
现在在微信里,如果你参加一个什么活动,一般都是在输入框里写上关键字或者数字,这样才能获取你所需要的服务。而通过自然语言接口,可以让用户像跟人对话一样和你的小程序对话。比如:
我要查快递,帮我查一下快递,查快递122343,甚至直接输入快递运单号,小程序就能做出相应的回应。
2. 多功能查询
目前支持快递查询,聊天,日历查询,菜谱查询,讲笑话,讲故事,计算,算24点功能。
原本我只是准备支持快递查询功能,后来发现OLAMI开放平台有许多内置的模块,于是也顺便添加了一下。
----------------功能展示:------------------------------------------------------------------------
1. 快递查询页面如下图所示,只要在下方的输入框中输入查询句子,就会在text控件中返回结果。
也可以点击“例句”按钮和“更换例句”按钮体验一下。
2. 点击例句后的效果图,触摸例句就会在text控件中看到效果。
3. 输入语句: “查询中通快递765325527325”
4. 点击更换例句按钮可以更换例句
5. 其他模块体验
点击左下角的切换按钮,会发现右下角的查快递变成了“聊天”
。
6. 点击“例句”按钮,这时候例句里就是其他模块的例句了。
7. 同样可以通过“更换例句”按钮进行例句更换
8. 查日期
9. 讲笑话
10. 查菜谱
----------------开发步骤----------------------------------------
1. 微信小程序相关
首先要申请一个微信小程序公众号,注意不是微信公众号,然后仔细阅读小程序的框架和功能介绍。有些JS的功能小程序里是不能用的。我之前也没有做过JS,但上起手来感觉还是很快的,几乎没有太多阻碍。网上有很多教程,我就不多说了。
网址: 微信小程序开发文档
2. 快递查询的API接口
注意寻找合适的API接口时,要选用支持https的访问接口,微信小程序目前仅支持https的访问。
我选用的是快递鸟快递API里面的即使查询API,因为免费嘛,呵呵。而且每天可以访问3000次,足够了。你需要自己注册,获取自己的API key和商户ID。
注意:注册之后,需要在自己的账号界面申请对应的API接口才能使用,免费的也要申请。如下图所示:
3. 欧拉蜜(OLAMI)人工智能开发平台
这个非常重要,决定了你能支持多少种模块,多少种句子。毕竟这种接口看起来还是很复杂的,总结一下我的心得:
* 写语法
在使用自然语言语义API之前,首先得写语法,仔细阅读语法文档,这个很重要。当然你也可以登录进去,看看平台内置的语法是否符合你的要求,如果只是为了测试,完全可以先导入一个内置的模块试试。点击下图中的“进入NLI系统”。
进入NLI系统之后,点击“导入”按钮,既可以看到内置模块,选中添加即可,如下图所示。每个模块的作用可以在NLI 自然语言语义互动系统 / 内置模块列表看到详细描述。
下图中是我的NLI系统,里面有我自己写的快递模块"expressage"和添加了内置模块"music".
2...创建应用,配置模块
写好语法并发布之后后,就可以创建自己的应用了,并在应用里添加模块即可。我在配置模块的过程中,发现OLAMI有内置的模块可以使用,于是我创建了两个应用,一个叫查询工具,用来专门查询快递;另一个叫工具,选了内置的模块。
为什么我没有将这些应用放在一起呢?因为我的快递模块语法中有一个会抓整个句子,导致内置模块无法正常工作。
你如果想验证自己的功能是否可用,可以点“测试”按钮测试一下看看。
快递应用配置:
其他查询应用配置(这个语法完全不用自己写,还有对应的输出结果,很好用):
应用创建好之后,你就可以查看OLAMI分配给你的Key信息,这可是访问API接口的必备信息。
3. 访问API
如果你在你的应用中测试结果很满意,也就是你要捕获的句子都支持,那么就可以尝试调用API了。然后分析API的结果,做出对应的回应。
比如我的快递查询APP的语法通过modifier支持的四种功能,如下表所示:
modifier |
含义 |
例句 |
query | 输入的句子只是说要查快递,没有提供快递公司名称和运单号 |
我要查快递 查一下快 帮我查查快递呗 |
query_num | 输入的句子中提供了运单号 |
12112311111 查一下运单号是123423的快递 |
query_name | 输入的句子中提供了快递公司名称 |
我想查圆通快 看一下申通快递 |
query_name_num | 输入的句子中提供了运单编号和快递公司名称 | 查申通快递1122333 |
我的语法中仅涉及了两个关键信息,即两个slot,“expnumber”抓取快递单号,'expname'用来抓取快递公司的名称。
因此当OLAMI 的API接口返回语法信息之后,我只需要根据modifier的值就可以做出对应的操作,而使用slot的值去快递鸟的API接口查询快递信息。
我的快递APP功能逻辑如下:
* 如果仅提供运单号,则先用运单号查询快递公司编号,如果快递公司编号有一个,则直接用运单号和公司编号查物流信息。
如果有多个,则请用户选择快递公司。
* 如果提供运单号和快递公司,则直接调用运单号+快递code接口查询。
* 如果仅提供快递公司名称,则记录并查询对应快递公司code,并请用户提供运单编号。
其他的查询功能,因为用的是内置模块,直接就有回复,不需要我再去调用其他接口,直接显示即可,很有意思。
----------代码下载:-------------