-
DuerOS开放平台
-
技能开放平台
-
自定义技能
- 自定义技能简介
- 自定义技能创建
-
有屏技能
-
技能交互模型
-
自定义技能协议
- 处理DuerOS发送的请求
-
技能部署
-
技能开发样例
- 账户关联
-
技能测试
-
技能发布
-
技能付费
-
个性化服务
-
内容播报技能
-
小技能
-
平台能力扩展
-
SDK
-
预览版功能
- 全双工(Preview)
-
APP技能(Preview)
-
-
智能家居开放平台
- 品牌使用规范
-
开发者服务条款
上一节完成了查询个税技能交互模型的创建,接下来开发技能业务代码,并将技能进行部署,完成技能的实现。
首先设置技能回复方式。在交互模型
->意图
->技能回复
中勾选服务配置满足
。这样DuerOS会将解析后的用户请求信息发送到技能的Web服务上,技能根据这些具体的信息做出相应的业务逻辑处理。
技能部署选择使用百度云CFC,下面介绍部署过程。
-
选择导航栏中的
配置服务
页面,在服务部署
中选择百度云CFC
。 -
点击邀请链接进入CFC界面。
-
选择“从模版创建函数”。
-
选择
dueros-bot
模板,填写技能名称inquiry_tax
。 - 选择在线编辑技能,实现技能的业务逻辑,具体步骤请参见技能代码实现。文件index.js存放技能的代码,请先清除在线编辑的内容,然后拷贝文件的内容,点击保存。
-
函数创建成功后,设置触发器。在
配置
->触发器
中,添加DuerOS触发器
。 -
填写BRN和Public Key信息, 在百度云CFC上复制BRN和Public Key信息,
并粘贴到控制台对应的位置。
技能实现用户请求时,主要针对DuerOS发送的用户请求信息进行处理。DuerOS发送的用户请求主要有LaunchRequest、IntentRequest和SessionEndedRequest三种请求。查询个税技能会针对这三种请求进行相应处理。
-
当用户调用技能时,如用户说“打开查询个税”,此时DuerOS会向用户发送LaunchRequest请求消息,函数addLaunchHandler()实现了对LaunchRequest请求的处理,播报欢迎语,并在屏幕上展现欢迎界面。
this.addLaunchHandler(() => { this.waitAnswer(); let card = new Bot.Card.StandardCard(); card.setTitle('查询个税'); card.setContent('欢迎使用查询个税'); card.setImage('http://dbp-resource.gz.bcebos.com/2d304133-8784-e088-8bae-fec4b6d64e9e/home.jpg?authorization=bce-auth-v1%2Fa4d81bbd930c41e6857b989362415714%2F2018-05-23T06%3A43%3A18Z%2F-1%2F%2F98879ccd1c547f06ea71e6e4508425c8ab76efa98d1641a1c2fb8c78aee98504'); return { card: card, outputSpeech: '欢迎使用查个税!' }; });
-
当技能打开后,用户表达信息会存放在IntentRequest消息里发送给技能。在查询个税技能中,以下情况DuerOS会发送IntentRequest消息。
- 当用户说“我想查个税”时,DuerOS会发送IntentRequest消息,技能处理消息时,确认意图信息,发现没有工资(sys.number)和城市(sys.city)信息,所以进行槽位追问。
- 当用户说“我工资8000”,DuerOS会发送IntentRequest消息,技能记录下工资(sys.number),发现没有城市(sys.city)信息,所以继续追问。
- 当用户说“我在北京”,DuerOS会发送IntentRequest消息,技能记录下城市(sys.city)信息,并确认已经获得完整的用户请求信息,开始处理用户请求,并向用户返回处理结果。
this.addIntentHandler('inquiry_tax', () => { let loc = this.getSlot('sys.city'); let monthlySalary = this.getSlot('sys.number'); if (!monthlySalary) { this.nlu.ask('sys.number'); let card = new Bot.Card.TextCard('你工资多少'); return Promise.resolve({ card: card, outputSpeech: '你工资多少' }); } if (!loc) { let card = new Bot.Card.TextCard('你在哪个城市'); this.nlu.ask('sys.city'); return { card: card, outputSpeech: '你在哪个城市' }; } if (this.request.isDialogStateCompleted()) { let card = new Bot.Card.TextCard('你需要缴纳税款167.40元,缴纳社保及公积金1776元,税后工资是6056.60元'); return { card: card, outputSpeech: '<speak>你需要缴纳税款<say-as type="number">167.40</say-as>元,缴纳社保及公积金<say-as type="number">1776</say-as>元,税后工资是<say-as type="number">6056.60</say-as>元</speak>' }; } });
-
当用户想要退出查询个税技能时,会说“退出”,此时DuerOS会向技能发送SessionEndedRequest请求,技能收到请求会退出技能,并播报退出语。
this.addSessionEndedHandler(() => { this.endSession(); return { outputSpeech: '谢谢使用查个税', }; });
说明:查询个税技能使用SDK来实现代码逻辑,涉及到对话指令及卡片等功能的使用,这里没有对SDK的功能进行详细的说明,你可以参考SDK常用功能了解更多的功能,可以在index.js增加修改代码,尝试SDK其他功能。
在配置服务
页面最右侧进行技能测试(可以使用语音输入,请确保扬声器和麦克风处于正常工作状态)。
- 输入“打开查询个税”,技能回复“欢迎使用查询个税”,并弹出技能欢迎页面的图片。
- 输入“我想查个税”,技能回复“你工资多少”。
- 输入“我工资8000”,技能回复“你在哪个城市”。
- 输入“我在北京”, 技能回复“你需要缴纳税款167.40元,缴纳社保及公积金1776元,税后工资是6056.60元”。
测试结果与预期一样,说明技能可以正常完成用户的请求。