技能功能实现示例

上一节完成了查询个税技能交互模型的创建,接下来开发技能业务代码,并将技能进行部署,完成技能的实现。

技能部署及功能实现

设置技能回复方式

首先设置技能回复方式。在交互模型->意图->技能回复中勾选服务配置满足。这样DuerOS会将解析后的用户请求信息发送到技能的Web服务上,技能根据这些具体的信息做出相应的业务逻辑处理。

配置部署技能

技能部署选择使用百度云CFC,下面介绍部署过程。

  1. 选择导航栏中的配置服务页面,在服务部署中选择百度云CFC

  2. 点击邀请链接进入CFC界面。

  3. 选择“从模版创建函数”。

  4. 选择dueros-bot模板,填写技能名称inquiry_tax

  5. 选择在线编辑技能,实现技能的业务逻辑,具体步骤请参见技能代码实现。文件index.js存放技能的代码,请先清除在线编辑的内容,然后拷贝文件的内容,点击保存。
  6. 函数创建成功后,设置触发器。在配置->触发器中,添加DuerOS触发器

  7. 填写BRN和Public Key信息, 在百度云CFC上复制BRN和Public Key信息,

    并粘贴到控制台对应的位置。

技能代码实现

技能实现用户请求时,主要针对DuerOS发送的用户请求信息进行处理。DuerOS发送的用户请求主要有LaunchRequestIntentRequestSessionEndedRequest三种请求。查询个税技能会针对这三种请求进行相应处理。

  • LaunchRequest

    当用户调用技能时,如用户说“打开查询个税”,此时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

    当技能打开后,用户表达信息会存放在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>'
            };
        }
    });
  • SessionEndedRequest

    当用户想要退出查询个税技能时,会说“退出”,此时DuerOS会向技能发送SessionEndedRequest请求,技能收到请求会退出技能,并播报退出语。

    this.addSessionEndedHandler(() => {  
        this.endSession();  
        return {  
            outputSpeech: '谢谢使用查个税',  
        };  
    });  

说明:查询个税技能使用SDK来实现代码逻辑,涉及到对话指令及卡片等功能的使用,这里没有对SDK的功能进行详细的说明,你可以参考SDK常用功能了解更多的功能,可以在index.js增加修改代码,尝试SDK其他功能。

测试配置服务

配置服务页面最右侧进行技能测试(可以使用语音输入,请确保扬声器和麦克风处于正常工作状态)。

  1. 输入“打开查询个税”,技能回复“欢迎使用查询个税”,并弹出技能欢迎页面的图片。
  2. 输入“我想查个税”,技能回复“你工资多少”。
  3. 输入“我工资8000”,技能回复“你在哪个城市”。
  4. 输入“我在北京”, 技能回复“你需要缴纳税款167.40元,缴纳社保及公积金1776元,税后工资是6056.60元”。

测试结果与预期一样,说明技能可以正常完成用户的请求。

下一步

技能模拟测试示例

相关主题

SDK常用功能介绍
Web Service部署
百度云CFC部署
百度云服务部署