tigase开发指南文档格式.docx
《tigase开发指南文档格式.docx》由会员分享,可在线阅读,更多相关《tigase开发指南文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
![tigase开发指南文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/12/ffa6fb32-8e7e-449f-b5b4-1a60966ea703/ffa6fb32-8e7e-449f-b5b4-1a60966ea7031.gif)
xmpp顶级兀素,上线广播
privacy
隐身协议
version
客户端版本
http:
//jabber.org/protocol/stats
是否发送统计信息,指向jabber.org发送
startls
tls加密
msgoffline
离线消息
vcard-temp
临时的vCard
//jabber.org/protocol/commands
管理virtualdomains的特别命令
private
私有数据存储
xmpp:
ping
心跳检测
presence-subscription
发布订阅插件
domain-filter(basic-filter)
domain拦截器
amp(basic-filter)
zlib(basic-filter)
zlib压缩
message-carbons(basic-filter)
将stanzas投递到用户指定的资源
disco(basic-filter)
服务发现
sess-man/plugins[s]=
session-close,
session-open,
default-handler.
xmpp-sasl,bind,urn:
xmpp-session,jabber:
privacy,jabber:
version,
//jabber.org/protocol/stats,
xmpp-jabber:
roster,
starttls,
vcard-temp,
PJScmavCHlKKH-Airaflw.
・占If“MH
►’刊jifr>
LHtviapa
»
-aJlloilV-ElUBfi■:
|L“心sdrrpGnsntrmdLJ曰
Pnmponir*m«
Mvh>
mppw^iq
k^3liQHia^ampcna-LraH^aTaBA
►Jlllgiiv.cflhr
►
■亦曰冶砂廿翰
・韵]也箱dD.|dbc
►常I中H.总也母
|
|/广巾皑旷忸少踊讪乂.
I/>
恢.;
frirt¥
a叭]
UslWCLMLFJKST.■懈円的能心盛飢LbflCM{0J"
|*■**•**"
);
}
}catdiCLxcentiorie){
pc.sttWrriftMX「al昶〉;
thrornewi®
*ceptionC6^ssmxrdw'
ifiwf.aniproblm.rte)^
nw.piJtitlldJt^fpasitory„FTOTtK'
a_Kt!
fpAusJiftepositary„FJfflHMOtWl_MJ¥
i45L>
;
itq仇putit甩ibeposilory.ghR-WKZrpjitil);
iiw.put<
i^t^«
pQ5itoryu呼油圈孑
.puHAut^flepasitofyaWliMLK'
fT*jid.^etftnQirif^)j
tw.iput<
ikjthR4vn»
ig.SfflW札w匚肛片J诃・jetDmflirtO);
axxi尸畑■,-^nint±
idiD^iia.逛■■會(■护
/-:
I7.■>
Ij
"
it號可bd*日为i«
用^K^fflrvEtlfnI
pc,wtyferiftrtCtrw);
I
Tigase数据库表
Tigase用户信息、权限信息、离线消息信息、在线离线状态信息都存储在数据库中,但有
些数据我们不需要让tigagse存储、更新,比如在线离线状态信息,如果每个用户登录、登
出都让tigase更新表的字段,并发高了,显然数据库承受不了。
为了避免资源浪费也需要避
登录状态上线更新
上线状态更新是在验证用户名和密码时更新,验证功能是需要我们自定义的,仅需修改
登录状态下线更新
//jabber.org/protocol/commands,jabber:
private,
ping,amp,disco,domain-filter,zlib,message-carbons,
vcard-xep-0292,urn:
xmpp:
time
■MT屮.*1NWHlVt
*dl^BWMnWilll■
►>
.E^jkM.1WWf>
fW«
*廊・191.・《轡2*暫
b>
JJii|Wi
►-lZM*.9CTrt<
I^Kt-«
iW
►h紀■«
**#*■*■*«
<
m*wt|wmm
*J|EiQAMMT#IriAWT
►十r«
HW5rr*trft«
■0呻十“十押
*,t|]aMiMnwJificpelm
■4tm>
*■■'
Jmpncorspwil
*-j|MW
►还百iMsr昨■耳URfPWW
翳宙Jtjfj*MAIW<
M_M4*fckkVl
・■」]气£
iaKOHMM“4r
■Jr*KT尹si
►辱剖ZlsUomTiW
•电畫”皿七新口1%■口mnw-RM翊
►0Dti'
MikHirdcr^rM.
frQ|SUldCMhMfrMSdl*1
匕AWr«
K>
jmj■-crHtandvP*D»
t>
}<
1*I
ifCI^.iil^gubleCUvtl.fimpt)}{
Iflg.logfLevel.fWF^fc"
MirtM!
0ofuse^seL^iorjs:
{B}*ssesstcrrsfi^odeldl
・Siz*O>
3
pw4
L!
Clofl-iSLogflfibKLwiI-;
JWtVJ)4
如■nSErinSfciildtrCiafl);
tigase权限验证
for(JWPftt!
«
rcrCamtrt:
iErescor:
虫tsior,getActivcRrsMircesO)Irb”eppend「冷re*-"
J.opperdfrEi_-on-ge-tlte&
aijrcciQ).;
)
I吗MO0(LevlHJTNEH"
NuMb即1OfCWftfidtlOfflEIt[刖靶Ftheuur*柑]位}Jr«
ObjMtQ{珂理l聞.gffUCtVMlKfSCWCEilZilO-uscrJidl^s&
.tDStrinQO}J;
}//Bridlcfe-l^a
]"
endofif(Miiion.<
0itA£
iivtfis4Mr<
a9.Sir*(}—B*)
}urtchCMHJkrttiCHr^zedEi£
£
9t1.anej{
IM.IrafIrm>
InMFfK'
rlrwMlmartajthnrupd;
聲代耳La:
JH1'
.4、:
云果登陆流程时需要验证权限,权限验证需要分匿名用户和企业客服两种,匿名用户默认验
证都可以通过,企业客服需要验证是否在用户中心登陆成功。
企业客服登陆
1.登陆用户中心,登陆成功后,用户中心会保存cookieid至缓存中
2.带着用户名、cookieid同tigase服务端建立连接
3.从缓存中获取验证信息
4.如果认证通过和tigase连接上
tigase的验证是需要我们自定义开发的,只需要在
tigase权限验证模块修改即可
llMHl
HlIniBTftMTr**"
JWCMWflWry!
MUPU^^rwmM卜*^・心口「■1W'
种加**■
會11F<
fA|#I'
M-nNPI"
t
*I■'
・£
.E对FMk即ihgHiv-iinrKlUdarni
►团bbKka
protzectwivflii”hnndlcWrifyP^spHonCollbodcCWtriFyPtiwwriKolltarlfcpc>
tbrwslOCaccptianf£
tHngpcA聲詔I-pr-^e!
-P<
K.KHDrdO;
电叩{
ObjKt>
pap■计Hg'
ihHcixStrinfl,0b>
Kt*O:
?
』Pli・i5Fmj•戎KJLJ*暉
■}rwhCMb*?
***^IFmi
PJ1£
ci«
niS*±
HlfaKHniiraliwhbm
►圍Uw
►曲1Kv料商■存
k£
ldtol.lfr4l>
4¥
►JiTgetilflBUSffMWa#
►||Ti$m*4EW<
0卄C
*xliA-vufiMnt.gi|;
l*imd
►7」詁qpie.二arrpGnerxnKkdLi曰
P4|thaiU!
c-ampcinirtfrmdJnmipk夕1iQiiia.=ani3cnHr<
.rn=craHH
►J(ila»
.EDnr
J|1iipii»
4gnrdd
►出llg■阳4b
•*心・・-=血命审|i
・事晦9治堪卩廿巾)
►曲TlW0'
b.|dtiC
►常lA・bt>
l4・
1)
mt®
.ipuK*utrfifs»
sitory.rWTtKDL.KEr,AufchRcpasitor^.rm™DtWl.ACWSAiL);
mogpu慎加bepMiAwy.L&
EfiLJILJtEmjti);
iiw.pu慎勵IFAefK血iAory,內
iKfci.puMloryajid.$etDcnai.n(^);
.
心t^y.SFffKfli;
4txtt尸tio・加包户
//ttt可Utm%•耳片OiffiAflf.-est^nin.対姑卄诃dttzO;
Ug.lwCLew&
LFJWSJ.沖纤i曲驱SrtHWlL尿dd{0J-."
)
}StchCtX£
UtlCN1i)(
pc.setwriftrttral冗〉;
theorne«
ilOExce(rt:
io^(pRasMxdvwifiwt'
.onh1ctol*ii.Je)
tigase在线坐席获取
匿名用户登陆需要根据客户名分配一个在线坐席会话。
tigaseroster插件是用于返回好友列表,可以
修改用来分配坐席列表。
JZjiiliiwumtii二BTLsrapwlivi,1hlHiHqovIbartBriHaH徂StaMsnfeiavar—iaLjJLMMFPPkvcBHHariftEjHraIj.Jabbart^nDrtrjmaH
■"
'
■pBW-rt-jT'
»
i号j■匸nr"
*rn・$~lfc话Ji£
■*?
WP■juvrc^afvmtwi.■Oruwv**■cl^f,■ria^^ihfxfifiMcT?
1.:
//QicckrD4tfrws-itrihsaha
騎尸ins讣町阳一辟晌■啊匸辄皿耳拓业瑁加.dQW闭3¥
砂如七?
《七.呼屯JjTT>
jStrLnfli%fbedHa艸■s"
x
//ifclientprwi^ndnashandth?
wfvwcolculotedhash-a^th?
wio
f/returntheS4直ctisresult<
ndabortfurtherrenterprixsi^ing-
//Nato■伸dIfi*aM..^aAit*r14tN*c.1iwi11.
if(incnringHasiil!
・milX
■rustEr_irtil.getBvddicsHpaJX.M^sicnJ;
tf[(st^ridHaih一null\Ilft>
ar«
MKH.icEnptyf)M
upgkntiHdrsh(ite^slDrbw<
ting^);
匕处玮畫我门B疋坐常列购回
if<
(f讥叶孑|・n^\)tt(丙匕・》r*曲a-g)){ElfBHPt口册丫■rwELenfeHtC_query"
);
J
If£
it^valtC阪嵋r衫■洋)>
(
results.offcrCpgc-et.okResultC(5-fcn.rxi)「i/LL.0)};
5-tDnKmjsh—rmteT-uurtii_f)eHkKHie-s>
teh(swiionJ;
插件的调用是在SessionManager中调用:
ItgjEi-jEDni
prh«
MtmjijmlhfHnURadutt门Kki*狎咲1W**eiOur,C(<
CfiftftCtl0ftOwHrJ«
//fina-lELfflfcrt書1由.FimlpLjeuc-d1Defeatsrtsults)(for(n^PPiTKeiiorlfcproc_ii評iym酣心■-仇(
WPPPfKWWflfCFWWWf“peC/j.Ajfeiwr:
2-atinn-rfli-l■fiO^irkindlinfpor<
rfeBraprjh「Imj;
lif(r?
*nli:
Wrhor^articH..{
汀{Jcigi,i4ati|^(iLrvc<
sFf«
tsn>
f
2o^.Ic^(Leve1ufTMWrw.eiwrlfc:
您\({l}"
寸^J1■-Ki>
eqM«
t:
"
*■(ZhCd*;
{3}"
FW03}Kt0{M)rcfleta«
UH5IflfHeiiWC).pnjcesscir.iXJi.P»
rte!
Broinrttion});
i
*rw酣slqnwods即fWHSOElDFliffTIVW*Et*2応・?
血他幡如心
fl]入飪:
辆中.事怪堆塾矽显
■fCpt一mull)I眄■^>
1wjmiihirwtfi^wl>
iffp"
□dd[tm(F_:
:
cA.i£
y,porkrtp『nrrHirtiwij){pHtat.^TDCEisrxKjesMsTBLdf))p
m
//pniK:
Ht-detMjg()ueue-();
ifCJctf.t&
Lim^leCLevel.rjWD)(
客户端获取好友列表:
variq=$iq({
type:
'
get'
id:
getmyroster'
}).c('
query'
{xmlns:
Strophe.NS.ROSTER})•tree();
connection.send(iq);
tigase消息转发流程
用户在发消息给客服时,如果客服不在线,需要分配给机器人客服,机器人客服是以tigase客户端
方式使用的,并且为了负载均衡会有多个机器人客服,所以还需要分配。
分配这块功能需要修改
tigasesessionmanage组件处理消息模块的一段代码。
Tigase所有的消息都会经sessionmanager
进行处理。
ISM
packet-t<
jStringSecune(}a
3*計;
►it徒理则OftEoc
►g^BMHanOvan^oc
^jeye^acket?
-results込ne*Arr^Oecvue^PacketXZ);
boQlean玳®
■ffll&
e;
4EStJlfCXinficcDDnClaibM-
HV'
祈tBlvrifhPvdtrl>
彳XDU«
uiQiDMU<
NDMODE
*toq
!
■SE5-9I.1V
fiCrwUHtfiurabl*
©
4dlPh<
|hA
◎iuh_repckEJt€iry
uMh-TImrM
uUnTlBMMi
口口04鈕石
dcirjrKti£
iiiCT«
ckCDfnrnandHandli
IIJtlH*nS"
riP«
ectolPickrtHardHr
1801
血牡丘观堆加的牡庄,用户分配容呪
Pnckpt.Trcn$fornttarttll(r.pn?
t■防*:
〉,
[dr上科.procfsseday<
filterfQHdr^d"
jQp.loflCLtwl.FIWJT,-Racketpr«
proc«
UM)7*卜*»
padwt.ta&
trin^acmO^:
if>
0){
fui-(Pockrt:
」:
代剳八輻){
[t^,loQCL*wl.FINEST.'
Prwrecessr«
uLt;
匕p,to6tEr4Srcur«
0〉;
addOutPockAtsCpdCicft,corm,r«
fuLtf3^
publi匚claisPncketTrarsfonridandler{转證
publicstctitvoid
procesAjPocketpocks
tig白昶的消息内部会转换为packet对象分配容服机器人就是改变消息的接受者这块是我自定义实现的例子
ifCpccket.getTypeO—StcnzoType.chat){
//.tigssiffi务HB擅收消崽
StringfrcmCtxnpMdme-packet.getPacketFrorr<
).^etBdr&
JIDO.g览tLocalpcrt();
StringtcConipNamr=pcicket.getRocketToQ.getBareJIDQ.getLocalpartQ;
if(fromComphkrne.equalsftxjsh'
^X
这里可皿官罡交分配相羌功能
JIDdisIDsJlD.jitfZnatanceC'
zhangsan^LiniJx-irrtiSk"
packet.setStaaT0<
disIJ
System.out-printlnCpccketdispacterk/'
+pocket.toStringO);
}catch(TigaseStringprepEx匚pptiori电){
//TODOAuto-generatedcatchblock
e.prlntStacklracef);
/Ztigowf麗剪划发送消崽
ifffromCotnpNcme.equolsf,1sessLcnh,5型toCorrpNanie.equaIsC"
session"
1)){
Packet类中没有setStanzaTo方法需要修改加入
030■/
publicJIDgetStanzaToO{
858returnstanzaTo;
859}
稅1Ppublicvoidset5tanzaTo(JIDjid){
862Ithis-stanzaTc^jid;
863
864-
tigase离线消息存储
tigase在用户不在线时,会把消息存储在数据库中,默认是关系型数据库,这块我们是需要存储到
hbase等nosql数据库中的,这块功能需要修改下源码tigase已经写好的离线消息插件
Urr41ishrij^v^yVitiP-r'
IA1rS>
^r,、叩]#hI>
rufyrflIii,ttA;
i,»
t*<
'
f
rt#^rhodt&
StiiPtpiSCk-frt"
fedfl.\1^4Ltcryj
raiiE
raw
irTiorn-a<
Vrarr;
Jt
血Vb*-M£
C4mp9WrtJLgnV^lp^MVFiL****■»
*»
¥
甜^W«
M4*VJ|N«
ififcom!
—nvTlUppckrt,^ctStcnfaToC)11-r>
ul"
LK!
canri,i»
UsrrrTd(pQcric*tBgetSTanjaTof}.^etBarEjTDO^J
此4E为保存參Jfitl犀j可口崔义
LtoryIfcrr^d怦pu**^TN!
i^ft«
pciIrtpl(rt^a.fturn>
AuthorifgitianwveAe&
^ltJ5»
eFcsketF^rtrfFlirwlJserCpocket,“网、卜他维1result■null;
switchCwwAes^lt)(
comSfWKL-MAWLUt^-,
rtlult*»
cflEiult.ifGTflesi<
KriW*ls5^4t(jXkk^t,"
tsfriinirhe&
s^ciqueueiiFuHLjtwj]b^Mir;
drfault;
brarir;
H
ifCntwllt怙null)(
queue
]©
KMCUs电冲k>
L卜owndRj临eplLS€)£
if(』《«
HUggspbltfIt