【Dueross|技能进修】家居控制-服务端开发(CFC)
D****s · D****s 发布于2017-12-22 00:12 浏览:1510 回复:0

上面已经讲解了使用百度BAE 和 PHP SDK开发技能平台流程,接下来分享下如何使用百度CFC函数开发流程。

1、创建百度CFC

    登录百度云,在产品中找到函数计算CFC

    image.png

2、 创建函数

    点击"从模板创建函数",如下图

image.png


    点击"选择",填写函数名:smartHome

image.png

    点击"确认",如下图

image.png

注意:BRN和KEY,一会配置技能的服务信息时会用到。


3、编写处理意图函数

如果您已经看过上一篇PHP SDK的开发流程的话,下面的代码会非常简单。这里就不多对代码进行讲解,直接贴代码:

const Bot = require('bot-sdk');
const privateKey = require("./rsaKeys.js").privateKey;

class SmartHomeBot extends Bot {
    constructor(postData) {
        super(postData);

        this.addLaunchHandler(() => {
            this.waitAnswer();
            return {
                outputSpeech: '欢迎使用家居控制!请告诉我您要查找什么智能设备,比如"查找我的空调"'
            };
        });

        
        //查找我的设备
        this.addIntentHandler('dueros.device_interface.smart_device.search', () =>{
            //获取槽位值(槽位deviceName)
            let deviceName = this.getSlot('deviceName');
            if(!deviceName){
                //槽位值为空,再次询问槽位信息
                this.nlu.ask('deviceName');
                //构建返回数据,这里返回文本信息。如果有显示设备可以展示在设备上
                let card = new Bot.Card.TextCard('您要查找什么智能设备呢? 比如"查找我的空调"');
                return Promise.resolve({
                    card: card,
                    outputSpeech: '您要查找什么智能设备呢? 比如"查找我的空调"'
                });
            }else{
                //如果槽位不为空
                let text = '已查到卧室和客厅的智能' + deviceName + ',请告诉我要控制哪里的' + deviceName + '呢? 比如"控制卧室的' + deviceName +'"';
                let card = new Bot.Card.TextCard(text);
                return Promise.resolve({
                    card: card,
                    outputSpeech: ''+ text +''
                });
            }
        });

        //控制哪里的设备
        this.addIntentHandler('dueros.device_interface.smart_device.control', () =>{
            //获取槽位值(槽位location)
            let location = this.getSlot('location');
            if(!location){
                //槽位值为空,再次询问槽位信息
                this.nlu.ask('location');
                let deviceName = this.getSlot('deviceName');
                //构建返回数据,这里返回文本信息。如果有显示设备可以展示在设备上
                let card = new Bot.Card.TextCard('请告诉我要控制哪里的'+ deviceName + '呢?比如"控制卧室的空调"');
                return Promise.resolve({
                    card: card,
                    outputSpeech: '请告诉我要控制哪里的'+ deviceName + '呢?比如"控制卧室的空调"'
                });
            }else{
                //如果槽位不为空
                let text = '请告诉您的指令,比如"调小空调风速、设置温度为30度';
                let card = new Bot.Card.TextCard(text);
                return Promise.resolve({
                    card: card,
                    outputSpeech: ''+ text +''
                });
            }
        });

        //调节风速
        this.addIntentHandler('dueros.device_interface.smart_device.control_wind', () =>{
        
             if(!this.getSlot('device_action')){
                //槽位值为空,再次询问槽位信息
                this.nlu.ask('device_action');
                //构建返回数据,这里返回文本信息。如果有显示设备可以展示在设备上
                let card = new Bot.Card.TextCard('请问您要怎么控制设备呢,比如调小、调大');
                return Promise.resolve({
                    card: card,
                    outputSpeech: '请问您要怎么控制设备呢,比如调小、调大'
                });
            }else if(!this.getSlot('device_function')){
                //如果槽位不为空
                let text = '请问您要控制设备的什么功能呢,比如风速';
                let card = new Bot.Card.TextCard(text);
                return Promise.resolve({
                    card: card,
                    outputSpeech: ''+ text +''
                });
            }
            //此意图的所有槽位已经全部填充
            if(this.request.isDialogStateCompleted()){
                 let location = this.getSlot('location');
                 let deviceName = this.getSlot('deviceName');
                 let deviceAction = this.getSlot('device_action');
                 let deviceFun = this.getSlot('device_function');
                 let text = '您' + location + deviceName + '的' + deviceFun +'已经' + deviceAction+',您可以继续发送指令给我哦';
                 let card = new Bot.Card.TextCard(text);
                 return Promise.resolve({
                     card:card,
                     outputSpeech:'' + text + ''
                 });
             }
        });

        //设置设备温度
        this.addIntentHandler('dueros.device_interface.smart_device.control_temp', () =>{
        
             if(!this.getSlot('device_action')){
                //槽位值为空,再次询问槽位信息
                this.nlu.ask('device_action');
                //构建返回数据,这里返回文本信息。如果有显示设备可以展示在设备上
                let card = new Bot.Card.TextCard('请问您要怎么控制设备呢?比如设置温度');
                return Promise.resolve({
                    card: card,
                    outputSpeech: '请问您要怎么控制设备呢?比如设置温度'
                });
            }else if(!this.getSlot('device_function')){
                //如果槽位不为空
                let text = '请问您要怎么控制设备呢,比如设置温度';
                let card = new Bot.Card.TextCard(text);
                return Promise.resolve({
                    card: card,
                    outputSpeech: ''+ text +''
                });
            }
            //此意图的所有槽位已经全部填充
            if(this.request.isDialogStateCompleted()){
                 let location = this.getSlot('location');
                 let deviceName = this.getSlot('deviceName');
                 let deviceAction = this.getSlot('device_action');
                 let deviceFun = this.getSlot('device_function');
                 let temperature = this.getSlot('temperature');
                 let text = '您' + location + deviceName + '的' + deviceFun +'已经' + deviceAction+'为'+ temperature +',您可以继续发送指令给我哦';
                 let card = new Bot.Card.TextCard(text);
                 return Promise.resolve({
                     card:card,
                     outputSpeech:'' + text + ''
                 });
             }
        });
    }
}

exports.handler = function(event, context, callback) {
    try {
        let b = new SmartHomeBot(event);
        // 0: debug  1: online
        b.botMonitor.setEnvironmentInfo(privateKey, 0);
        b.run().then(function(result) {
            callback(null, result);
        }).catch(callback);
    } catch (e) {
        callback(e);
    }
}

这里简单的处理了查找设备、控制设备、调节风速和设置温度,其他的功能需要您自己可以扩展,期待你的好消息。

4、技能服务部署


    打开自己的技能,点开服务配置,选择百度云CFC

image.png

看到BRN和KEY了吧,这里填写CFC函数的BRN和KEY。这样技能的开发就已经完成了,是不是很简单。

5、技能测试


image.png

image.png

基于百度云CFC函数的技能开发到此结束,期待你的完善和点赞。。。



上一篇

【Dueross|技能进修】家居控制-服务端开发



下一篇

待续【Dueross|技能进修】家居控制-服务端开发(Node)


【Dueross|技能进修】技能进修目录

点赞  ( 0 )
收藏
评论(0)
TOP