Workgroup 协议
生活随笔
收集整理的這篇文章主要介紹了
Workgroup 协议
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
XEP-0142:Workgroup Queues協(xié)議
此協(xié)議是Openfire的fastpath插件主要實(shí)現(xiàn)的功能(smack庫中也有workgroup部分),以前是Openfire的商業(yè)插件,后來開源了,目前處于不活躍狀態(tài)。
作者:Matt Tucker,Openfire主程序員之一,此協(xié)議目前處于擱置狀態(tài)(Deferred),所以XMPP不建議實(shí)現(xiàn)此協(xié)議,因?yàn)槟阒皇悄肵MPP當(dāng)IM使用的話,不需要此功能。
介紹:此協(xié)議目的是使一個(gè)用戶可以和一個(gè)組織或工作組的代表對(duì)話,而不需要知道該組織中的特定成員的地址。以及提供排隊(duì)等待與服務(wù)容量控制功能。這些特性特別適合在線客服的場(chǎng)景。 動(dòng)機(jī):只使用標(biāo)準(zhǔn)XMPP協(xié)議(就像一般IM一樣),一個(gè)用戶想與一個(gè)工作組的成員對(duì)話,那么他將向該成員直接發(fā)起一個(gè)的對(duì)話或多人對(duì)話。 而使用Workgroup協(xié)議的話,用戶只需向工作組(如support@workgroup.example.com)發(fā)起對(duì)話,對(duì)話請(qǐng)求被放到一個(gè)隊(duì)列中,server將對(duì)話請(qǐng)求路由給該工作組中的某個(gè)成員。該成員可以接受或拒絕該對(duì)話請(qǐng)求,一旦接受了該請(qǐng)求,對(duì)話將改為使用標(biāo)準(zhǔn)XMPP協(xié)議通信。 概念:此擴(kuò)展協(xié)議在"http://jabber.org/protocol/workgroup" namespace下使用,使用iq元素來執(zhí)行,使用presence元素聲明狀態(tài)更新。 workgroup活動(dòng)的最終結(jié)果是協(xié)商和路由一個(gè)用戶和工作組成員(也叫做agent)到一個(gè)使用MUC(multi-user chat)協(xié)議的多人聊天室中來對(duì)話。當(dāng)workgroup協(xié)議成功完成時(shí),本質(zhì)上是MUC接管了,所以workgroup協(xié)議與Muc協(xié)議并沒有重疊。
角色: User:用戶向workgroup的一個(gè)成員發(fā)起一個(gè)私有對(duì)話 Service:workgroup service使用workgroup地址發(fā)送和接收消息。一個(gè)workgroup地址表示一個(gè)一般的聯(lián)系人地址,該地址允許用戶找到workgroup的成員對(duì)話,而不需要知道任何特定工作組成員的私有地址。workgroup service管理用戶和成員(agent)的交互。 Agent:agent是workgroup中的一個(gè)成員。 比如說:User地址是user@example.net/home,service地址是support@workgroup.example.com,agent地址是alice@example.com/work和bob@example.com/work。 一個(gè)workgroup可以包含若干個(gè)隊(duì)列,使用不同的resource表示,如support@workgroup.example.com/platinum-plan or support@workgroup.example.com/xmpp-products。
責(zé)任: User:1)在發(fā)起請(qǐng)求前能知道當(dāng)前workgroup隊(duì)列的狀態(tài)。這個(gè)信息使用戶知道當(dāng)前workgroup是否可用,并知道大概需要等待多長(zhǎng)時(shí)間開始對(duì)話。2)當(dāng)處在請(qǐng)求隊(duì)列中時(shí)能夠知道請(qǐng)求的狀態(tài)。3)隨時(shí)可以取消對(duì)話請(qǐng)求。 Workgroup agent:1)能夠知道workgroup隊(duì)列的狀態(tài)。2)能夠接受或拒絕對(duì)話請(qǐng)求。3)能夠表明處理對(duì)話的可用性。 Workgroup service:1)控制工作組請(qǐng)求隊(duì)列。2)管理隊(duì)列狀態(tài)信息的更新。3)決定用戶如何被隊(duì)列化,和隊(duì)列請(qǐng)求如何被路由給工作組成員。隊(duì)列路由算法取決于實(shí)現(xiàn)者(如簡(jiǎn)單輪轉(zhuǎn)、基于優(yōu)先級(jí)、基于規(guī)則等)。
User協(xié)議部分: workgroup協(xié)議包括一些xmpp數(shù)據(jù)包的交換,這些交換改變user、agent和service之間關(guān)系的狀態(tài)。 User狀態(tài):User加入到工作組隊(duì)列中等待與一個(gè)agent的對(duì)話。一旦用戶加入了隊(duì)列,用戶可能收到0或多個(gè)來自workgroup service的狀態(tài)更新通知他們?cè)陉?duì)列中的狀態(tài)。用戶有權(quán)隨時(shí)取消他們的對(duì)話請(qǐng)求。 當(dāng)agent準(zhǔn)備好與用戶的對(duì)話時(shí),用戶收到一個(gè)groupchat的邀請(qǐng)到聊天室中,收到該邀請(qǐng)表明用戶將不在隊(duì)列中并且將使用標(biāo)準(zhǔn)xmpp groupchat協(xié)議進(jìn)入聊天室,與agent對(duì)話。 使用多人對(duì)話是因?yàn)樗峁┝艘恍┖锰?#xff1a;1)允許超過一個(gè)agent加入對(duì)話。2)允許manager監(jiān)視對(duì)話來保證服務(wù)質(zhì)量。3)提供一種簡(jiǎn)單的方法來決定對(duì)話中的什么內(nèi)容被記錄和收集其它統(tǒng)計(jì)信息。4)允許一種方便的機(jī)制引入對(duì)話機(jī)器人(如回答FAQ)。 下圖表示數(shù)據(jù)包交換與狀態(tài)改變的關(guān)系: ? ? ? ? ? ? ? +-------+
? ? ? ? ? ? ? | Start |<------+
? ? ? ? ? ? ? +-------+ ? ? ? |
? ? ? ? ? ? ? ? ? | ? ? ? ? ? |
? ? ? ? ? ? ? ? ? | Join ? ? ?|
? ? ? ? ? ? ? ? ? v ? ? ? ? ? |
? ? ? ? ? ? ?+---------+ ? ? ?|
? ? ? +----->| Queued ?| ? ? ?|
? ? ? | ? ? ?+---------+ ? ? ?|
? ? ? | Status | ?| ?| Depart |
? ? ? +--------+ ?| ?+--------+
? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? | Invite
? ? ? ? ? ? ? ? ? v
? ? ? ? ? ? +-----------+
? ? ? ? ? ? | Chat room |
? ? ? ? ? ? +-----------+
? ? ? ? ? ? 1)User Join :user發(fā)起一個(gè)join請(qǐng)求給workgroup service。service可以同意或拒絕,一個(gè)用戶會(huì)話可能只允許同時(shí)發(fā)出一個(gè)加入請(qǐng)求。workgroup可能要求用戶填寫一些特定的信息才能加入,這種情況workgroup應(yīng)該以not-acceptable的error返回,拒絕用戶加入。用戶應(yīng)該獲取該表單內(nèi)容,填寫后提交它來加入隊(duì)列。提交的內(nèi)容可能包含應(yīng)用特定的meta-data,可以用來決定用戶的隊(duì)列選擇或其它一些事情,這取決于實(shí)現(xiàn)。
User ? ? ? ? ? ? ? ? ? ? ? ? ?Service
? | ? ? ? ?Join Request ? ? ? ? ?|
? |----------------------------->|
? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
? | ? ? ? ?Join Response ? ? ? ? |
? |<-----------------------------|
? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
? ? ? ? ? ? ? ? 2)Depart:一般是用戶希望離開隊(duì)列,也可能是service主動(dòng)通知用戶從隊(duì)列中被刪除。 Requester ? ? ? ? ? ? ? ? ? ? Service| ? ? ? ?Depart Request ? ? ? ?||----------------------------->|| ? ? ? ?Depart Response ? ? ? ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 或 User ? ? ? ? ? ? ? ? ? ? ? ? ?Service| ? ? ? ?Depart Message ? ? ? ?||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 3)狀態(tài)更新:用戶在隊(duì)列中的狀態(tài)更新(可選) User ? ? ? ? ? ? ? ? ? ? ? ? ?Service| ? ? ?User Status Push ? ? ? ?||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|| ? ? User Status Request ? ? ?||----------------------------->|| ? ? User Status Response ? ? ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 4)User Invite:邀請(qǐng)隊(duì)列中的用戶到聊天室和agent對(duì)話。 User ? ? ? ? ? ? ? ? ? ? ? ? ?Service| ? ? ? ? ?User Invite ? ? ? ? ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
Agent協(xié)議部分: agent的狀態(tài): agent加入到workgroup中表示他能夠處理與user的對(duì)話。在workgroup中的agent會(huì)員資格期望是長(zhǎng)期的、持久的關(guān)系,類似于花名冊(cè)會(huì)員資格。比如,一個(gè)客戶支持(agent),當(dāng)他開始為example.com公司工作時(shí),他加入到support@workgroup.example.com workgroup中,僅在他離開他的工作職務(wù)時(shí)才離開這個(gè)workgroup。 一旦一個(gè)agent加入到workgroup中,他們將收到workgroup的狀態(tài)更新來通知他們workgroup中其他成員的狀態(tài)。agent通過使用presence信息負(fù)責(zé)更新workgroup service,這樣service能夠智能地路由對(duì)話請(qǐng)求給最合適的agent。agent的presence使用標(biāo)準(zhǔn)的xmpp的presence包,可選地?cái)y帶meta-data數(shù)據(jù)來幫助將對(duì)話請(qǐng)求路由給agent。這些特定應(yīng)用的meta-data可以用來決定如何做出路由。 一般的agent workgroup狀態(tài)圖如下: ? ? ? ? ? ? +-----------++---->| Workgroup |<-----+| ? ? +-----------+ ? ? ?|| ? ? ? ?| ? ? |Agent ? ?|| Status | ? ? |Presence |+--------+ ? ? +---------+ 一旦agent加入了workgroup并且當(dāng)前可用,那么agent將會(huì)收到由workgroup service提供的chat offers。chat offers將提供給agent,并且agent有機(jī)會(huì)接受或拒絕每一個(gè)offer。workgroup service也可能撤銷一個(gè)offer。例如,在指定時(shí)間內(nèi),offer仍然沒有得到響應(yīng),那么service可能撤銷該offer以快速響應(yīng)用戶請(qǐng)求。 一旦offer被接受,agent必須等待一個(gè)來自service的標(biāo)準(zhǔn)的groupchat邀請(qǐng)。service在這個(gè)階段也可能撤銷這個(gè)offer。這使得service可以同時(shí)發(fā)送offer給多個(gè)agent,選擇一個(gè)最佳的接受offer的agent。這個(gè)過程的狀態(tài)圖如下: ? ? ? ? ? ? ? +-------+| Start |<---------++-------+ ? ? ? ? ?|| ? ? ? ? ? ? ?|| Offer ? ? ? ?|v ? ? ? ? ? ? ?|+---------------+ ? ?|| Offer Pending | ? ?|+---------------+ ? ?|| ?| ?| Revoke ?|| ?| ?+-------->|| ?| Reject ? ? |Accept | ?+----------->|v ? ? ? ? ? ? ? |+--------------+ ? ? || Chat Pending | ? ? |+--------------+ ? ? || ? | Revoke ? ?|Invite | ? +-----------+V+-----------+| Chat room |+-----------+ 1)Agent Presence Protocol agent提供他當(dāng)前的狀態(tài)給workgroup,也就是通知更新workgroup。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ? ? ? Presence Update ? ? ? ?||----------------------------->|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| agent必須通知workgroup他當(dāng)前的狀態(tài)(presence)。這個(gè)presence使用標(biāo)準(zhǔn)的xmpp presence,可以附加可選的meta-data。除了標(biāo)準(zhǔn)的xmpp支持的狀態(tài)信息外,其中必須有一個(gè)agent-status子元素表示和workgroup相關(guān)的狀態(tài)更新信息。比如agent不可用了,那么workgroup將不再路由給他。在workgroup上下文中,標(biāo)準(zhǔn)的xmpp狀態(tài)所表示的意義如下: chat:表示agent可以對(duì)話(空閑或可以支持更多對(duì)話) away:agent忙碌(可能正在和別人對(duì)話)。agent可能仍然可以處理其他對(duì)話,但offer可能被拒絕。 xa:agent在物理上離開了他的機(jī)器,并且不應(yīng)該把對(duì)話路由給他。 dnd:agent忙碌,不應(yīng)該給打擾。然而,特殊或緊急情況下,對(duì)話讓可能被offer給他,盡管offer很可能被拒絕或超時(shí)。 agent可以嵌入meta-data信息幫助路由對(duì)話請(qǐng)求,使用max-chats元素指明agent可以處理的最大對(duì)話數(shù)量,如果沒有這個(gè)信息的話,service使用默認(rèn)設(shè)置的值。 2)Workgroup Status Update Protocol 此部分可選實(shí)現(xiàn)。在agent向workgroup聲明了他的狀態(tài)后,他可能會(huì)收到來自workgroup的狀態(tài)更新信息。如workgroup中agent的數(shù)量、所有對(duì)話數(shù)量、最大對(duì)話數(shù)量。 3)Queue Status Update Protocol 此部分可選實(shí)現(xiàn)。在agent向workgroup聲明了他的狀態(tài)后,他可能收到來自workgroup的隊(duì)列狀態(tài)信息。 count:隊(duì)列中的user總數(shù) oldest:隊(duì)列中最老的成員加入隊(duì)列的時(shí)間 time:隊(duì)列中user等待的平均時(shí)間 status:隊(duì)列的狀態(tài)。隊(duì)列可能處于active狀態(tài),但不接受新的對(duì)話請(qǐng)求。這個(gè)狀態(tài)的典型的原因是隊(duì)列將要關(guān)閉,但要先處理完已經(jīng)加入到隊(duì)列中的用戶請(qǐng)求,或者因?yàn)殛?duì)列中已經(jīng)有太多的請(qǐng)求不能再接受更多的請(qǐng)求了。 open:active,并且可以接受新的對(duì)話請(qǐng)求 active:active,但是不接受新的對(duì)話請(qǐng)求 closed:Not active,不接受新的對(duì)話請(qǐng)求 4)Agent Status Update Protocol 此部分可選實(shí)現(xiàn)。用來更新workgroup中其它agent的狀態(tài)信息。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ? ?Request Agent Status ? ? ?||----------------------------->|| ? ? ? ? Agent List ? ? ? ? ? ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|| ? ? Agent Presence Pushes ? ?||<-----------------------------| 5)Agent Offer Protocol 這部分定義agent接收service的chat offer。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ? ? ? ? Offer Request ? ? ? ?||<-----------------------------|| ? ? ? ? Offer Response ? ? ? ||----------------------------->|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 6)Agent Offer Accept/Reject Protocol 這部分定義agent接受或拒絕offer。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ?Offer Accept/Reject Request ||----------------------------->|| Offer Accept/Reject Response ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 7)Agent Offer Revoke Protocol 這部分定義service撤銷一個(gè)offer。典型情況下當(dāng)offer請(qǐng)求超時(shí)時(shí)或有更合適的agent處理對(duì)話時(shí),service會(huì)撤銷offer。注意,在agent收到對(duì)話邀請(qǐng)前的任何時(shí)候都可能撤銷offer,即使agent已經(jīng)同意接受offer時(shí)。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ? ? Offer Revoke Request ? ? ||<-----------------------------|| ? ?Offer Revoke Response ? ? ||----------------------------->|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 8)Agent Invite Protocol 這部分定義agent收到邀請(qǐng)加入到與用戶的對(duì)話。這個(gè)邀請(qǐng)的格式同MUC一致。invite元素的from屬性必須設(shè)置為workgroup的JID。為了能夠匹配invitation和offer,邀請(qǐng)信息中應(yīng)該包含一個(gè)帶jid屬性的offer元素的元數(shù)據(jù)。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ? ? ? ? Agent Invite ? ? ? ? ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
介紹:此協(xié)議目的是使一個(gè)用戶可以和一個(gè)組織或工作組的代表對(duì)話,而不需要知道該組織中的特定成員的地址。以及提供排隊(duì)等待與服務(wù)容量控制功能。這些特性特別適合在線客服的場(chǎng)景。 動(dòng)機(jī):只使用標(biāo)準(zhǔn)XMPP協(xié)議(就像一般IM一樣),一個(gè)用戶想與一個(gè)工作組的成員對(duì)話,那么他將向該成員直接發(fā)起一個(gè)的對(duì)話或多人對(duì)話。 而使用Workgroup協(xié)議的話,用戶只需向工作組(如support@workgroup.example.com)發(fā)起對(duì)話,對(duì)話請(qǐng)求被放到一個(gè)隊(duì)列中,server將對(duì)話請(qǐng)求路由給該工作組中的某個(gè)成員。該成員可以接受或拒絕該對(duì)話請(qǐng)求,一旦接受了該請(qǐng)求,對(duì)話將改為使用標(biāo)準(zhǔn)XMPP協(xié)議通信。 概念:此擴(kuò)展協(xié)議在"http://jabber.org/protocol/workgroup" namespace下使用,使用iq元素來執(zhí)行,使用presence元素聲明狀態(tài)更新。 workgroup活動(dòng)的最終結(jié)果是協(xié)商和路由一個(gè)用戶和工作組成員(也叫做agent)到一個(gè)使用MUC(multi-user chat)協(xié)議的多人聊天室中來對(duì)話。當(dāng)workgroup協(xié)議成功完成時(shí),本質(zhì)上是MUC接管了,所以workgroup協(xié)議與Muc協(xié)議并沒有重疊。
角色: User:用戶向workgroup的一個(gè)成員發(fā)起一個(gè)私有對(duì)話 Service:workgroup service使用workgroup地址發(fā)送和接收消息。一個(gè)workgroup地址表示一個(gè)一般的聯(lián)系人地址,該地址允許用戶找到workgroup的成員對(duì)話,而不需要知道任何特定工作組成員的私有地址。workgroup service管理用戶和成員(agent)的交互。 Agent:agent是workgroup中的一個(gè)成員。 比如說:User地址是user@example.net/home,service地址是support@workgroup.example.com,agent地址是alice@example.com/work和bob@example.com/work。 一個(gè)workgroup可以包含若干個(gè)隊(duì)列,使用不同的resource表示,如support@workgroup.example.com/platinum-plan or support@workgroup.example.com/xmpp-products。
責(zé)任: User:1)在發(fā)起請(qǐng)求前能知道當(dāng)前workgroup隊(duì)列的狀態(tài)。這個(gè)信息使用戶知道當(dāng)前workgroup是否可用,并知道大概需要等待多長(zhǎng)時(shí)間開始對(duì)話。2)當(dāng)處在請(qǐng)求隊(duì)列中時(shí)能夠知道請(qǐng)求的狀態(tài)。3)隨時(shí)可以取消對(duì)話請(qǐng)求。 Workgroup agent:1)能夠知道workgroup隊(duì)列的狀態(tài)。2)能夠接受或拒絕對(duì)話請(qǐng)求。3)能夠表明處理對(duì)話的可用性。 Workgroup service:1)控制工作組請(qǐng)求隊(duì)列。2)管理隊(duì)列狀態(tài)信息的更新。3)決定用戶如何被隊(duì)列化,和隊(duì)列請(qǐng)求如何被路由給工作組成員。隊(duì)列路由算法取決于實(shí)現(xiàn)者(如簡(jiǎn)單輪轉(zhuǎn)、基于優(yōu)先級(jí)、基于規(guī)則等)。
User協(xié)議部分: workgroup協(xié)議包括一些xmpp數(shù)據(jù)包的交換,這些交換改變user、agent和service之間關(guān)系的狀態(tài)。 User狀態(tài):User加入到工作組隊(duì)列中等待與一個(gè)agent的對(duì)話。一旦用戶加入了隊(duì)列,用戶可能收到0或多個(gè)來自workgroup service的狀態(tài)更新通知他們?cè)陉?duì)列中的狀態(tài)。用戶有權(quán)隨時(shí)取消他們的對(duì)話請(qǐng)求。 當(dāng)agent準(zhǔn)備好與用戶的對(duì)話時(shí),用戶收到一個(gè)groupchat的邀請(qǐng)到聊天室中,收到該邀請(qǐng)表明用戶將不在隊(duì)列中并且將使用標(biāo)準(zhǔn)xmpp groupchat協(xié)議進(jìn)入聊天室,與agent對(duì)話。 使用多人對(duì)話是因?yàn)樗峁┝艘恍┖锰?#xff1a;1)允許超過一個(gè)agent加入對(duì)話。2)允許manager監(jiān)視對(duì)話來保證服務(wù)質(zhì)量。3)提供一種簡(jiǎn)單的方法來決定對(duì)話中的什么內(nèi)容被記錄和收集其它統(tǒng)計(jì)信息。4)允許一種方便的機(jī)制引入對(duì)話機(jī)器人(如回答FAQ)。 下圖表示數(shù)據(jù)包交換與狀態(tài)改變的關(guān)系: ? ? ? ? ? ? ? +-------+
? ? ? ? ? ? ? | Start |<------+
? ? ? ? ? ? ? +-------+ ? ? ? |
? ? ? ? ? ? ? ? ? | ? ? ? ? ? |
? ? ? ? ? ? ? ? ? | Join ? ? ?|
? ? ? ? ? ? ? ? ? v ? ? ? ? ? |
? ? ? ? ? ? ?+---------+ ? ? ?|
? ? ? +----->| Queued ?| ? ? ?|
? ? ? | ? ? ?+---------+ ? ? ?|
? ? ? | Status | ?| ?| Depart |
? ? ? +--------+ ?| ?+--------+
? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? | Invite
? ? ? ? ? ? ? ? ? v
? ? ? ? ? ? +-----------+
? ? ? ? ? ? | Chat room |
? ? ? ? ? ? +-----------+
? ? ? ? ? ? 1)User Join :user發(fā)起一個(gè)join請(qǐng)求給workgroup service。service可以同意或拒絕,一個(gè)用戶會(huì)話可能只允許同時(shí)發(fā)出一個(gè)加入請(qǐng)求。workgroup可能要求用戶填寫一些特定的信息才能加入,這種情況workgroup應(yīng)該以not-acceptable的error返回,拒絕用戶加入。用戶應(yīng)該獲取該表單內(nèi)容,填寫后提交它來加入隊(duì)列。提交的內(nèi)容可能包含應(yīng)用特定的meta-data,可以用來決定用戶的隊(duì)列選擇或其它一些事情,這取決于實(shí)現(xiàn)。
User ? ? ? ? ? ? ? ? ? ? ? ? ?Service
? | ? ? ? ?Join Request ? ? ? ? ?|
? |----------------------------->|
? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
? | ? ? ? ?Join Response ? ? ? ? |
? |<-----------------------------|
? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
? ? ? ? ? ? ? ? 2)Depart:一般是用戶希望離開隊(duì)列,也可能是service主動(dòng)通知用戶從隊(duì)列中被刪除。 Requester ? ? ? ? ? ? ? ? ? ? Service| ? ? ? ?Depart Request ? ? ? ?||----------------------------->|| ? ? ? ?Depart Response ? ? ? ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 或 User ? ? ? ? ? ? ? ? ? ? ? ? ?Service| ? ? ? ?Depart Message ? ? ? ?||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 3)狀態(tài)更新:用戶在隊(duì)列中的狀態(tài)更新(可選) User ? ? ? ? ? ? ? ? ? ? ? ? ?Service| ? ? ?User Status Push ? ? ? ?||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|| ? ? User Status Request ? ? ?||----------------------------->|| ? ? User Status Response ? ? ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 4)User Invite:邀請(qǐng)隊(duì)列中的用戶到聊天室和agent對(duì)話。 User ? ? ? ? ? ? ? ? ? ? ? ? ?Service| ? ? ? ? ?User Invite ? ? ? ? ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
Agent協(xié)議部分: agent的狀態(tài): agent加入到workgroup中表示他能夠處理與user的對(duì)話。在workgroup中的agent會(huì)員資格期望是長(zhǎng)期的、持久的關(guān)系,類似于花名冊(cè)會(huì)員資格。比如,一個(gè)客戶支持(agent),當(dāng)他開始為example.com公司工作時(shí),他加入到support@workgroup.example.com workgroup中,僅在他離開他的工作職務(wù)時(shí)才離開這個(gè)workgroup。 一旦一個(gè)agent加入到workgroup中,他們將收到workgroup的狀態(tài)更新來通知他們workgroup中其他成員的狀態(tài)。agent通過使用presence信息負(fù)責(zé)更新workgroup service,這樣service能夠智能地路由對(duì)話請(qǐng)求給最合適的agent。agent的presence使用標(biāo)準(zhǔn)的xmpp的presence包,可選地?cái)y帶meta-data數(shù)據(jù)來幫助將對(duì)話請(qǐng)求路由給agent。這些特定應(yīng)用的meta-data可以用來決定如何做出路由。 一般的agent workgroup狀態(tài)圖如下: ? ? ? ? ? ? +-----------++---->| Workgroup |<-----+| ? ? +-----------+ ? ? ?|| ? ? ? ?| ? ? |Agent ? ?|| Status | ? ? |Presence |+--------+ ? ? +---------+ 一旦agent加入了workgroup并且當(dāng)前可用,那么agent將會(huì)收到由workgroup service提供的chat offers。chat offers將提供給agent,并且agent有機(jī)會(huì)接受或拒絕每一個(gè)offer。workgroup service也可能撤銷一個(gè)offer。例如,在指定時(shí)間內(nèi),offer仍然沒有得到響應(yīng),那么service可能撤銷該offer以快速響應(yīng)用戶請(qǐng)求。 一旦offer被接受,agent必須等待一個(gè)來自service的標(biāo)準(zhǔn)的groupchat邀請(qǐng)。service在這個(gè)階段也可能撤銷這個(gè)offer。這使得service可以同時(shí)發(fā)送offer給多個(gè)agent,選擇一個(gè)最佳的接受offer的agent。這個(gè)過程的狀態(tài)圖如下: ? ? ? ? ? ? ? +-------+| Start |<---------++-------+ ? ? ? ? ?|| ? ? ? ? ? ? ?|| Offer ? ? ? ?|v ? ? ? ? ? ? ?|+---------------+ ? ?|| Offer Pending | ? ?|+---------------+ ? ?|| ?| ?| Revoke ?|| ?| ?+-------->|| ?| Reject ? ? |Accept | ?+----------->|v ? ? ? ? ? ? ? |+--------------+ ? ? || Chat Pending | ? ? |+--------------+ ? ? || ? | Revoke ? ?|Invite | ? +-----------+V+-----------+| Chat room |+-----------+ 1)Agent Presence Protocol agent提供他當(dāng)前的狀態(tài)給workgroup,也就是通知更新workgroup。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ? ? ? Presence Update ? ? ? ?||----------------------------->|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| agent必須通知workgroup他當(dāng)前的狀態(tài)(presence)。這個(gè)presence使用標(biāo)準(zhǔn)的xmpp presence,可以附加可選的meta-data。除了標(biāo)準(zhǔn)的xmpp支持的狀態(tài)信息外,其中必須有一個(gè)agent-status子元素表示和workgroup相關(guān)的狀態(tài)更新信息。比如agent不可用了,那么workgroup將不再路由給他。在workgroup上下文中,標(biāo)準(zhǔn)的xmpp狀態(tài)所表示的意義如下: chat:表示agent可以對(duì)話(空閑或可以支持更多對(duì)話) away:agent忙碌(可能正在和別人對(duì)話)。agent可能仍然可以處理其他對(duì)話,但offer可能被拒絕。 xa:agent在物理上離開了他的機(jī)器,并且不應(yīng)該把對(duì)話路由給他。 dnd:agent忙碌,不應(yīng)該給打擾。然而,特殊或緊急情況下,對(duì)話讓可能被offer給他,盡管offer很可能被拒絕或超時(shí)。 agent可以嵌入meta-data信息幫助路由對(duì)話請(qǐng)求,使用max-chats元素指明agent可以處理的最大對(duì)話數(shù)量,如果沒有這個(gè)信息的話,service使用默認(rèn)設(shè)置的值。 2)Workgroup Status Update Protocol 此部分可選實(shí)現(xiàn)。在agent向workgroup聲明了他的狀態(tài)后,他可能會(huì)收到來自workgroup的狀態(tài)更新信息。如workgroup中agent的數(shù)量、所有對(duì)話數(shù)量、最大對(duì)話數(shù)量。 3)Queue Status Update Protocol 此部分可選實(shí)現(xiàn)。在agent向workgroup聲明了他的狀態(tài)后,他可能收到來自workgroup的隊(duì)列狀態(tài)信息。 count:隊(duì)列中的user總數(shù) oldest:隊(duì)列中最老的成員加入隊(duì)列的時(shí)間 time:隊(duì)列中user等待的平均時(shí)間 status:隊(duì)列的狀態(tài)。隊(duì)列可能處于active狀態(tài),但不接受新的對(duì)話請(qǐng)求。這個(gè)狀態(tài)的典型的原因是隊(duì)列將要關(guān)閉,但要先處理完已經(jīng)加入到隊(duì)列中的用戶請(qǐng)求,或者因?yàn)殛?duì)列中已經(jīng)有太多的請(qǐng)求不能再接受更多的請(qǐng)求了。 open:active,并且可以接受新的對(duì)話請(qǐng)求 active:active,但是不接受新的對(duì)話請(qǐng)求 closed:Not active,不接受新的對(duì)話請(qǐng)求 4)Agent Status Update Protocol 此部分可選實(shí)現(xiàn)。用來更新workgroup中其它agent的狀態(tài)信息。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ? ?Request Agent Status ? ? ?||----------------------------->|| ? ? ? ? Agent List ? ? ? ? ? ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|| ? ? Agent Presence Pushes ? ?||<-----------------------------| 5)Agent Offer Protocol 這部分定義agent接收service的chat offer。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ? ? ? ? Offer Request ? ? ? ?||<-----------------------------|| ? ? ? ? Offer Response ? ? ? ||----------------------------->|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 6)Agent Offer Accept/Reject Protocol 這部分定義agent接受或拒絕offer。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ?Offer Accept/Reject Request ||----------------------------->|| Offer Accept/Reject Response ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 7)Agent Offer Revoke Protocol 這部分定義service撤銷一個(gè)offer。典型情況下當(dāng)offer請(qǐng)求超時(shí)時(shí)或有更合適的agent處理對(duì)話時(shí),service會(huì)撤銷offer。注意,在agent收到對(duì)話邀請(qǐng)前的任何時(shí)候都可能撤銷offer,即使agent已經(jīng)同意接受offer時(shí)。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ? ? Offer Revoke Request ? ? ||<-----------------------------|| ? ?Offer Revoke Response ? ? ||----------------------------->|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 8)Agent Invite Protocol 這部分定義agent收到邀請(qǐng)加入到與用戶的對(duì)話。這個(gè)邀請(qǐng)的格式同MUC一致。invite元素的from屬性必須設(shè)置為workgroup的JID。為了能夠匹配invitation和offer,邀請(qǐng)信息中應(yīng)該包含一個(gè)帶jid屬性的offer元素的元數(shù)據(jù)。 Agent ? ? ? ? ? ? ? ? ? ? ? ? Service| ? ? ? ? Agent Invite ? ? ? ? ||<-----------------------------|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
總結(jié)
以上是生活随笔為你收集整理的Workgroup 协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么使用PDF转换器
- 下一篇: 房贷算法