1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66:
<?php
/**
* Copyright (c) 2017 Baidu, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @desc 度秘多轮优先,异常退出逻辑
* @author ******@baidu.com
**/
namespace Baidu\Duer\Botsdk\Plugins;
use \Baidu\Duer\Botsdk\Card\TextCard;
class DuerSessionIntercept extends \Baidu\Duer\Botsdk\Intercept{
/**
* @param string $tip
* @param integer $threshold
* @return null
**/
public function __construct($tip="非常抱歉,不明白你说的意思,已经取消了本次服务", $threshold=2) {
$this->tip = $tip;
$this->threshold = $threshold;
}
/**
* @desc 在处理回调之前,bot-sdk会先调用preprocess,
* 如果preprocess返回不为null,终止事件路由,将preprocess的输出作为最终输出
*
* @param Bot $bot
* @return mixed
**/
public function preprocess($bot){
if(!$this->threshold) {
return;
}
//NLU尝试slot提取,异常次数
$daException = $bot->getSlot('da_system_not_understand');
//bot 自身slot检查,不合法次数
$botException = $bot->getSlot('bot_not_understand');
$count = ($daException?$daException:0) + ($botException?$botException:0);
if($count >= $this->threshold) {
$bot->clearSessionAttribute();
$bot->endDialog();
$card = new TextCard($this->tip);
return [
'card' => $card,
];
}
}
}