指令回调处理
更新时间:2020-03-17
用户输入语音或者文字信息后,SDK会根据上下文识别出用户的意图,并返回对应的指令(directive),开发者通过传入指令监听器(IDirectiveListener)的实现来接收意图指令,并进行对应逻辑处理。
目前SDK内置的IDirectiveListener接口如下图:
如图,目前共有八种IDirectiveListener
的实现。
开发者需要在SDK中注册自己相应的IDirectiveListener
来获取SDK的指令回调,步骤如下:
- 开发者编写
IDirectiveListener
的接口实现类 - 通过
RobotSDKEngine
的addDirectiveListeners/addDirectiveListener
方法传入IDirectiveListener
实现类到SDK中 - 当接口对应事件触发时,在
IDirectiveListener
的回调方法中获得对应数据并实现相应业务逻辑
可以通过以下代码片段来理解这段过程:
// 1. 实现 IDirective 的接口实现类,此处以 IDialogListener 为例
IDialogListener mDialogListener = new IDialogListener() {
@Override
public void onVoiceOutput(String content) {
// 3. 处理NLU解析返回的指令...
// 处理语音回复播放相关逻辑
}
@Override
public void onTextOutput(String content) {
// 3. 处理NLU解析返回的指令...
// 处理文字对话显示相关逻辑
}
@Override
public void onHints(List <string> hints) {
// 3. 处理NLU解析返回的指令...
// 处理提示文案显示相关逻辑
}
@Override
public void onEnd() {
// 3. 处理NLU解析返回的指令...
// 对话结束相关逻辑
}
};
......
// 2. 将接口实现类传入 SDK
RobotSDKEngine.getInstance().addDirectiveListener(mDialogListener);
RobotSDKEngine.getInstance().addDirectiveListener(NamespaceGroup.DIALOG, mDialogListener);</string>
各个Listener说明如下:
IDialogListener
IDialogListener :对话相关指令监听器
public interface IDialogListener extends IDirectiveListener {
/**
* 语音播报指令
*
* @param content 需要播报的语音内容
*/
void onVoiceOutput(String content);
/**
* 文字回复展示指令
*
* @param content 回复用户的对话内容
*/
void onTextOutput(String content);
/**
* 提示文本展示指令
*
* @param hints 需要展示的提示文本 List
*/
void onHints(List <string> hints);
/**
* 对话结束指令
*
* 当用户说出对话结束关键字(例如"再见"、"拜拜")时触发回调
*
*/
void onEnd();
}</string>
IScreenListener
IScreenListener - 屏幕内容展示相关指令
public interface IScreenListener extends IDirectiveListener {
/**
* 文本卡片展示指令
* @param card 文本类型卡片 model
*/
void onRenderTextCard(TextCard card);
/**
* 图片卡片展示指令
* @param card 图片卡片 model
*/
void onRenderImageCard(ImageCard card);
/**
* 普通列表卡片展示指令
* @param listCard 普通列表卡片 model
*/
void onRenderNormalList(ListCard <normalcarditem> listCard);
/**
* 图片列表卡片展示指令
* @param listCard 图片列表卡片 model
*/
void onRenderSimpleImgList(ListCard<simpleimagecarditem> listCard);
/**
* 视频列表卡片展示指令
* @param listCard 视频列表卡片 model
*/
void onRenderVideoList(ListCard<videocarditem> listCard);
/**
* 用户卡片展示指令
* @param card 用户卡片 model
* @param data 用户照片的二进制数据
*/
void onRenderPerson(UserCard card, byte[] data);
/**
* 天气卡片展示指令
* @param card 天气卡片 model
*/
void onRenderWeather(WeatherInfoCard card);
/**
* 表情展示指令
* @param expression 表情关键字,例如 Sad、Happy
*/
void onRenderExpression(String expression);
}</videocarditem></simpleimagecarditem></normalcarditem>
IActionListener
IActionListener - 动作控制相关指令
public interface IActionListener extends IDirectiveListener {
/**
* 行走指令
* @param direction 行走方向
* @param distance 行走距离
* @param distanceUnit 距离单位
*/
void onWalk(String direction, String distance, String distanceUnit);
/**
* 转向指令
* @param direction 转向方向
* @param angle 转向角度
* @param angleUnit 角度单位
*/
void onTurn(String direction, String angle, String angleUnit);
/**
* 举手指令
* @param hands hand字段可为以下内容:hand, right_hand, left_hand, double_hand
*/
void onRaiseHands(String hands);
/**
* 巡航指令
* @param switchStatus 状态开关
*/
void onCruise(String switchStatus);
/**
* 充电指令
* @param switchStatus 状态开关
*/
void onCharge(String switchStatus);
/**
* 握手指令
*/
void onShakeHands();
/**
* 拥抱指令
*/
void onHug();
/**
* 摇头指令
*/
void onTwistHead();
/**
* 向左看指令
*/
void onTurnHeadLeft();
/**
* 向右看指令
*/
void onTurnHeadRight();
/**
* 停止运动指令
*/
void onStop();
/**
* 打招呼指令
*/
void onWave();
/**
* 动一下指令
*/
void onDoAnAction();
}
ISpeakerControllerListener
ISpeakerControllerListener - 扬声器控制指令
public interface ISpeakerControllerListener extends IDirectiveListener {
/**
* 静音指令
*/
void onSetMute();
/**
* 音量调节指令
* @param volumeControl
* @param volumeValue
*/
void onAdjustVolume(String volumeControl, String volumeValue);
}
IInstructionListener
IInstructionListener - 特殊指令
public interface IInstructionListener extends IDirectiveListener {
/**
* 点亮查询指令
*/
void onInquireEnergy();
/**
* 展示功能指令
*/
void onShowFeatures();
}
IErrorListener
IErrorListener - 错误监听
public interface IErrorListener extends IDirectiveListener {
/**
* 错误监听
* @param code 错误码
* @param errorDescription 错误描述
*/
void onError(int code, String errorDescription);
}
IStateListener
IStateListener - 指令处理状态监听
public interface IStateListener extends IDirectiveListener {
/**
* 当NLU能力识别完成本次对话请求中的用户意图,
* SDK 开始向开发者回传本次对话请求返回的意图指令(Directives)时回调
*/
void onDirectiveStart();
/**
* 当 SDK 完成了本次对话请求返回的全部意图指令的回传时回调
*/
void onDirectiveStop();
}
ICustomListener
ICustomListener - 用户自定义能力监听
public interface ICustomListener extends IDirectiveListener {
/**
* 用户自定义意图回调监听
*
* @param namespace 指令 namespace
* @param name 指令 name
* @param payloads 指令参数 map
* @return
*/
boolean onDirectiveReceived(String namespace, String name, HashMap payloads);
}