* 靈聚SDK是一套集語義解析、智能處理以及提供業務接入于一體的通用型SDK。為智能機器人、智能硬件類產品提供良好的人機自然交互能力,具有擬人化智能與思維能力。
### 初始化
* * * * *
調用AndroidChatRobotBuilder.create( )設置各項參數,初始化靈聚智能引擎,及聊天機器人類ChatRobot的實例。
~~~
AndroidChatRobotBuilder.create(Context, "appkey")
.setMusicContext(musicContext)
.setLocationAdapter(locationAdapter)
.setNetworkAdapter(networkAdapter)
.build(new ChatRobotBuilder.RobotInitListener() {
@Override
public void initComplete(int i) {
if (i == 0) { //初始化成功
chat = AndroidChatRobotBuilder.get().robot();
if (AppConfig.NewInstallFirstOpen)
//合并(更新)服務器數據
mergeServerData();
}
}
});
~~~
初始化參數說明:
* appkey:本項目對于SDK的唯一標識,可到[靈聚開發者平臺](http://dev.lingju.ai)注冊申請。
* MusicContext:音樂播放的上下文接口,該接口允許用戶點播本地的歌曲及更智能地進行音樂播放的語音交互,如開發者無此需求則無需傳入。
* LocationAdapter:定位適配,實時讀取設備當前的位置,用于支持周邊POI查詢,出行查詢,天氣查詢等,不傳入則這一系列查詢均無法正常使用。
* NetworkAdapter:網絡監聽適配,實時讀取設備當前的網絡狀態,用于實時切換在線及離線引擎。
### 對話
* * * * *
* 問題輸入,使用IChatRobot的
~~~
void process(String var1, ResponseCallBack var2)
~~~
可向robot發送對話。
* 應答輸出,在ResponseCallBack的
~~~
public void onResult(IChatResult r)
~~~
可獲得robot的應答回復。
### 數據同步更新上傳操作(可選操作)
* * * * *
* 數據同步更新上傳是針對備忘、提醒、鬧鐘、記賬、錄音等功能的數據操作,對這些功能生成的對應的備忘數據、提醒數據、鬧鐘數據、記賬數據、錄音數據的新建、刪除、修改、查詢操作時需要將本地的數據與服務端的數據同步。備忘、提醒、鬧鐘、記賬、錄音在sdk中定義了相應的實體類,分別為MemoEntity、RemindEntity、AlarmClockEntity、BillEntity、TapeEntity。這些實體類都繼承自SyncSegment。
SyncSegment中包含的同步屬性(**本地記錄上傳時必須提供**)如下所示:
~~~
/** 服務端對應記錄的ID */
protected String sid;
/** 本地記錄的ID */
protected int lid;
/** 時間戳(服務端返回),版本號 */
protected long timestamp;
/** 回收狀態,0=可用,1=回收站 */
protected int recyle;
/** 是否已經同步 */
protected transient boolean synced;
~~~
**同步更新上傳示例:以提醒為例**
1. 定義一個類實現同步接口:`interface SyncDao<T extends SyncSegment>`
~~~
/**
* 提醒動作對象同步操作Dao實現
**/
public class RemindEntityDao implements SyncDao<RemindEntity> {
@Override
public int getTargetId() {
//targetId:動作對象id,提醒(RemindEntity)為308。
return RobotConstant.ACTION_REMIND;
}
/**
* 獲取目前對象的實體類
*/
@Override
public Class<RemindEntity> getTargetClass() {
return RemindEntity.class;
}
/**
* 獲取本地記錄中最大的同步時間戳
*/
@Override
public long getLastTimestamp() {
long t = 0;
Remind remind = 以timestamp倒序排列,查找數據庫第一條提醒記錄;
if (remind !=null)
t = remind.getTimeStamp();
return t;
}
/**
* 合并服務端的數據,合并策略(永遠以服務端數據為優先):
* 1.本地含有相同lid的記錄:覆蓋合并到本地記錄;
* 2.本地沒有相同lid的記錄,插入本地記錄;
* @return true:合并成功,false:SDK將會調用{@linkplain SyncDao#mergeServerData(List) mergeServerData(List)}處理
*/
@Override
public boolean mergeServerData(JsonArray jsonArray) {
System.out.println("Remind mergeServerData>>" + jsonArray);
return false;
}
/**
* 合并服務端的數據,合并策略(永遠以服務端數據為優先):
* 1.本地含有相同lid的記錄:覆蓋本地記錄;
* 2.本地沒有相同lid的記錄,插入本地記錄;
* @param data
* @return true:合并成功
*/
@Override
public boolean mergeServerData(List<RemindEntity> list) {
if (list != null && list.size() > 0){
//TODO 第一步:本地合并服務端返回的數據
//第二步:由于服務器端一次最多只能合并100條數據,合并數據后需要再遞歸請求數據刷新,保證所有云端數據合并完畢
AndroidChatRobotBuilder.get().robot().actionTargetAccessor().syncUpdate(this);
}
return true;
}
/**
* 查詢未同步的本地記錄
* @param size 返回的最大長度
* @return
*/
@Override
public List<RemindEntity> getUnSyncLocalData(int size) {
List<RemindEntity> list = new ArrayList<>();
//TODO 獲取數據庫所有記錄,并將synced = false(未同步)的記錄加入list中;
//注意:由于服務器端有記錄上傳限制,所以list的最大容量建議<= 500。
return list;
}
/**
* 查詢未同步的本地記錄的總數
* @return
*/
@Override
public int getUnsyncLocalDataCount() {
int c = 獲取數據庫中synced = false(即未同步)的記錄總數;
return c;
}
/**
* 查詢未同步的本地記錄
* @param size 返回的最大長度
* @return null:SDK將會調用{@linkplain SyncDao#getUnSyncLocalData() getUnSyncLocalData()}查詢
*/
@Override
public JsonArray getUnSyncLocalDataAsJsonArray(int size) {
return null;
}
}
~~~
2. 在需要同步的地方調用同步方法:ActionTargetAccessor類的 boolean sync(SyncDao var1);
例如,本地刪除提醒記錄(建立同步機制后,刪除并非直接清除該記錄,而是設置刪除標記表示已刪除)
① 設置刪除標記和待同步標記,保存記錄(delRemind:要刪除的提醒對象)
~~~
//synced:同步標記(true 已同步 false 待同步)
delRemind.setSynced(false);
//recyle:刪除標記(0 有效記錄 1 已刪除記錄)
delRemind.setRecyle(1);
//TODO 保存delRemind對象到本地數據庫中,update方法需開發者實現
update(delRemind);
~~~
② 本地保存后需更新同步到云端
~~~
//同步方法,注意mRemindEntityDao所有查詢相關的方法必須能夠查詢到最新狀態的記錄,否則該同步方法將失敗
AndroidChatRobotBuilder.get().robot().actionTargetAccessor().sync(mRemindEntityDao);
~~~