正常的思路是
服務(wù)端設(shè)置一個機器人谜喊,當(dāng)有接收到消息的時候沼填,自動回復(fù)一條消息枢赔。
比如大名鼎鼎的微軟小冰:
小冰會根據(jù)消息類型和語境回答最接近的消息澄阳,現(xiàn)在還能分析圖片,比如一個合照能識別大致年齡等踏拜。
當(dāng)然這是高級智能化的結(jié)果碎赢。
自己在寫一個聊天項目的時候,也想到寫一個自動回復(fù)的機器人速梗。
但是跟小冰比真是太low了肮塞,玩玩全全就是個機器。
其實在包含通訊類的項目中應(yīng)用的還是比較多的镀琉。
比如在很多app需要通訊或者客服的功能峦嗤。
當(dāng)我們?nèi)ゴ蜷_對話窗口的時候,首先發(fā)送出去的消息會默認(rèn)先去匹配相關(guān)的文章屋摔,解決方案烁设。只有在我們選擇人工的時候才會給我們接入客服。
其實這樣一方面也解決的客服人員的工作壓力。
下面進(jìn)入正題
由于自己技術(shù)能力有限装黑,只能實現(xiàn)客戶端的邏輯副瀑。勉強也算實現(xiàn)了。
服務(wù)端使用的是極光的JMessage恋谭。
簡單實現(xiàn):
1糠睡、接收消息
需要在OnCreate初始化的時候注冊消息事件
JMessageClient.registerEventReceiver(this);
在onDestroy()結(jié)束的時候銷毀
JMessageClient.unRegisterEventReceiver(this);
然后重寫onEvent類(該類是極光開發(fā)提供的接收消息的方法)
MessageEvent是消息接收的類,可以判斷消息類型疚颊,比如在這里就沒有做判斷狈孔。所有類型的消息都是默認(rèn)以text的方式回復(fù)。
JMessageClient.getMyInfo().getUserName()=="1006"
這里就是設(shè)置機器人的編號了材义【椋或者說算是用戶名吧,系統(tǒng)根據(jù)這個判斷是否是機器人其掂。
然后使用
JMessageClient.createSingleTextMessage(msg.getTargetID(), "", "[自動回復(fù)]你好油挥,我是機器人");
創(chuàng)建一條消息,需要三個參數(shù)(目標(biāo)ID款熬,appKey深寥,內(nèi)容)
目標(biāo)ID是根據(jù)接收到消息,獲取發(fā)送者的id贤牛,
appKey可以用于不同app之間的通訊惋鹅。
內(nèi)容是我們回復(fù)的內(nèi)容。
使用JMessageClient.sendMessage(message1);
發(fā)送就行了
如果需要監(jiān)聽消息發(fā)送結(jié)果的回調(diào)殉簸,使用setOnSendCompleteCallback
/*接收消息*/
public void onEvent(final MessageEvent event) {
final Message msg = event.getMessage();
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (JMessageClient.getMyInfo().getUserName()=="1006"|| JMessageClient.getMyInfo().getUserName().equals("1006")) {
final Message message1 = JMessageClient.createSingleTextMessage(msg.getTargetID(), "", "[自動回復(fù)]你好负饲,我是機器人");
message1.setOnSendCompleteCallback(new BasicCallback() {
@Override
public void gotResult(int i, String s) {
if (i == 0) {
Log.e("Log:自動回復(fù):", s + "");
} else {
}
}
});
JMessageClient.sendMessage(message1);
}
adapter.clear();
initDataBean();
}
});
}
如果需要設(shè)置高級的回復(fù)功能
需要在接收到消息后先判斷消息的類型,或者監(jiān)聽收到消息的文字喂链,本地做識別處理之后再自動發(fā)送回去返十。
當(dāng)然如果想把機器人的回復(fù)設(shè)置的更加生動,可以手動去設(shè)置一些隨機的回復(fù)椭微《纯樱看起來至少沒那么干。
當(dāng)然如果你想避免某人的打擾蝇率,也可以設(shè)置對此人采用自動回復(fù)迟杂,
只要在接收消息里判斷發(fā)送方的id就可以了。
目前的實現(xiàn)是為了方便觀看效果本慕,所以有一定的局限性排拷,比如當(dāng)離線的時候是無法發(fā)送消息的」荆或者退出app也不行监氢。
項目地址:https://github.com/wapchief/Android-IM
相關(guān)閱讀推薦: