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

前面讲解了如何配置技能的意图、常用表达语、创建槽位、创建字典。接下来讲解技能平台的服务端开发,撸起袖子,撸代码的时间又到了。

1、回顾上文

上一篇结尾讲解到了配置服务,如下图:

4af9f21919de46dd87cce0c90a27b06c.png

如果自己没有服务器只能选择CFC来调试自己的技能了。今天先讲解如何在自己的服务器上使用PHP SDK来调试自己的技能。后面陆续会讲解Node.js以及百度CFC上Node.js的使用。

2、安装PHP SDK

2.1 点击上图的“PHP SDK 技术文档”链接查看文档。

e334dff4a9f83c59516bd5beee4f5d6f.png

如文档所述:PHP版本的SDK采用PSR-4规范自动加载,执行如下命令进行安装。

composer require dueros/bot-sdk

执行此命令我猜你会出问题,哈哈因为你没有安装composer。

2.2 安装composer

请移步到composer官网或composer中文网查看各个系统的安装教程,安装过程有点慢,请耐心等待。安装完composer后即可下载bot-sdk了

3、SDK目录

3c76fa9b315b7080ef8def58f4a509d9.png

vendor目录里面是PHP SDK的全部内容,

cd vendor/dueros/bot-sdk

ll

4c40beda76a10b0b542edec68fee1866.png

上面是bot-sdk目录结构,这里我们主要看下samples目录,里面有栗子哦。

5d26bbe0029308d1d1e700568d3152b5.png

我们来看下BAE的例子,我们进入查看下目录结构

cd bae-sample

e51155cbfd633e51a7456669c787c254.png

好了,这里我们最关心的其实四src目录的文件,Bot的实现都在src目录,进入src查看

cd src

呵呵,里面只有Bot.php文件,如果你已经看过PHP SDK的文档的话,你就会感觉很简单了。

4、Bot 讲解

4.1 先看下文件内容:

class Bot extends \Baidu\Duer\Botsdk\Bot{

/**

* @param null

* @return null

**/

public function __construct($postData = []) {

parent::__construct($postData);

$this->addHandler('LaunchRequest', function(){

$this->waitAnswer();

$card = new TextCard('欢迎进入');

return [

'card' => $card,

//'outputSpeech' => '欢迎光临'

'outputSpeech' => '欢迎进入',

];

});

//注意注意注意 这里可以换成新的方法addIntentHandler

$this->addHandler('#test.inquiry888', function(){

if($this->request->isDialogStateCompleted()) {

$card = new TextCard('你应该缴税121212');

$this->endDialog();

$directive = new Play('http://other.web.rh01.sycdn.kuwo.cn/f2e1e2e47647e9644a1a736804ac1338/59de0d2c/resource/n2/9/66/3331052726.mp3');

return [

'directives' => [$directive],

'card' => $card,

'outputSpeech' => '你应该缴税121212',

];

}

if(!$this->getSlot('city')) {

$card = new TextCard('这是来自于测试程序返回的结果,请问你在哪?');

$this->nlu->ask('city');

return [

'card' => $card,

'reprompt' => '这是来自于测试程序返回的结果,请问你在哪?',

'outputSpeech' => '这是来自于测试程序返回的结果,请问你在

哪?',

];

}else{

$this->nlu && $this->nlu->setDelegate();

}

});

}

}

挺简单吧。只要照猫画虎就可以实现自己的技能服务。

4.2 主要方法讲解

4.2.1 监听意图

$this->addHandler('#test.inquiry888', function(){

或$this->addIntentHandler('意图标识名')

还记得创建意图时自己填写的意图标识名吗?这里就有用了,这里用来监听你的意图。

4.2.2 获取槽位值

$this->getSlot('槽位标识')

这个方法获取槽位的值,还记得自己意图中的槽位吧,这个方法就会获取到我们意图中的槽位值(也就是我们自定义的词典中的值)

4.2.3 询问槽位

$this->nlu->ask('槽位标识')

这个方法用来询问槽位的值,如果通过getSlot方法没有获取到指定的槽位的值,可以使用此方法来询问用户

4.2.4 槽位信息填充完

确认意图中的槽位信息都填充完,调用

$this->request->isDialogStateCompleted()

当槽位信息都填充完后,我们就可以使用槽位的值来进行自己的业务逻辑了,比如查询信息、控制设备、播放音频等

4.2.5 返回数据

return [

'card' => $card,

'reprompt' => '这是来自于测试程序返回的结果,请问你在哪?',

'outputSpeech' => '这是来自于测试程序返回的结果,请问你在

哪?',

];

当意图处理完后,我们就可以返回信息了。返回数据格式请移步文档。到此PHP SDK就讲解到这里,我的技能就是使用demo改写的。

5、服务配置

我使用的是百度的BAE服务,如何购买BAE服务这里就不多讲了,请移步百度云,BAE我选的是PHP环境,我的配置如下:

e93d25860ae85e52343c11434a385505.png

将服务器端的代码下载下来,默认会有app.conf、index.php两个文件。

6、自己的技能

在代码目录创建src目录

midr src

将vendor/dueros/bot-sdk/samples/bae-sample/src的Bot.php文件拷贝到src目录。

cp vendor/dueros/bot-sdk/samples/bae-sample/src/Bot.php ./src

如步骤4所写的,我们只需要修改下意图标识名改为自己的意图标识名,再修改获取的槽位标识名为自己槽位标示名等即可完成自己的技能。完成后将代码提交的服务器并部署就可以测试自己的技能了。

7、代码分享

class Bot extends \Baidu\Duer\Botsdk\Bot{

/**

* @param null

* @return null

**/

public function __construct($postData = []) {

parent::__construct($postData);

$this->addHandler('LaunchRequest', function(){

$this->waitAnswer();

$card = new TextCard('欢迎使用家居控制!请告诉我您要查找什么智能设备,比如"查找我的空调"');

return [

'card' => $card,

'outputSpeech' => '欢迎使用家居控制!请告诉我您要查找什么智能设备,比如"查找我的空调"',

];

});

/**

* 查找我的设备

*/

$this->addIntentHandler('dueros.device_interface.smart_device.search', function(){

if (!$this->getSlot('deviceName')) {

# code...

$this->nlu->ask('deviceName');

$card = new TextCard('您要查找什么智能设备呢? 比如"查找我的空调"');

return [

'card' => $card,

'outputSpeech' => '您要查找什么智能设备呢? 比如"查找我的空调"',

];

}else{

$deviceName = $this->getSlot('deviceName');

$text = '已查到卧室和客厅的智能' . $deviceName .',请告诉我要控制哪里的'. $deviceName.'呢? 比如"控制卧室的'. $deviceName .'"';

$card = new TextCard($text);

return [

'card' => $card,

'outputSpeech' => ''. $text .'',

];

}

});

/**

* 控制哪里的设备

*/

$this->addIntentHandler('dueros.device_interface.smart_device.control', function(){

if (!$this->getSlot('location')) {

# code...

$this->nlu->ask('location');

$deviceName = $this->getSlot('deviceName');

$card = new TextCard('请告诉我要控制哪里的' . $deviceName . '呢?比如"控制卧室的空调"');

return [

'card' => $card,

'outputSpeech' => '请告诉我要控制哪里的' . $deviceName . '呢?比如"控制卧室的空调"',

];

}else{

$card = new TextCard('请告诉您的指令,比如"调小空调风速、设置温度为30度');

return [

'card' => $card,

'outputSpeech' => '请告诉您的指令,比如"调小空调风速、设置温度为30度',

];

}

});

/**

* 调节风速

*/

$this->addIntentHandler('dueros.device_interface.smart_device.control_wind', function(){

if($this->request->isDialogStateCompleted()) {

//action 这里实现自己的业务逻辑

//处理完返回给用户

$location = $this->getSlot('location');

$deviceName = $this->getSlot('deviceName');

$deviceAction = $this->getSlot('device_action');

$deviceFunction = $this->getSlot('device_function');

$text = '您' . $location . $deviceName . '的'. $deviceFunction .'已经'. $deviceAction . ',你可以继续发送指令给我哦';

$card = new TextCard($text);

$this->endDialog();

return [

'card' => $card,

'outputSpeech' => '' . $text .'',

];

}

if (!$this->getSlot('device_action')) {

# code...

$card = new TextCard('请问您要怎么控制设备呢,比如调小、调大');

return [

'card' => $card,

'outputSpeech' => '请问您要怎么控制设备呢,比如调小、调大',

];

}elseif (!$this->getSlot('device_function')) {

# code...

$card = new TextCard('请问您要控制设备的什么功能呢,比如风速');

return [

'card' => $card,

'outputSpeech' => '请问您要控制设备的什么功能呢,比如风速',

];

}

});

}

}

代码比较简陋,勿喷哈!到此PHP SDK的讲解就到此了。希望能对大家有所帮助,同时欢迎大家踊跃点赞。

上一篇:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值