本发明涉及社交聊天或信息交互领域,尤其涉及一种实现用户集合号的信息交互的方法及装置。
背景技术:
在聊天(或信息交互)场景中,通常是一个人和另一个人的聊天,或者一个人和一个组群的其他成员一起聊天。为方便,称这两种对象为个人和组群,在聊天系统中需要一个唯一身份标识ID来代表个人和组群,称为聊天号。个人的ID为个人号,组群的ID为组群号。
在社交系统中通常需要一个以家庭或班级为单位的对象参与信息交互,这个对象不同于通常的个人对象,也不同于一个组群对象。为方便描述,可本文将家庭或班级为单位的聊天对象称为用户集合,对应的ID叫用户集合号。概括的说,用户集合号对外就像一个个人号,对内则需要同步家庭或班级的所有成员的信息,让所有家庭或班级的成员都具有消息的上下文,以便参与到聊天会话或信息交互场景交流中。
以用户集合(例如家庭或班级)为单位的聊天或信息交互行为不同于个人的地方显而易见,个人代表着一个单独的自然人对象,而用户集合则代表了一个用户集合包含集合的所有成员对象。
以用户集合为单位的聊天行为不同于组群聊天的行为在于用户集合可同时参与到不同的聊天会话中并能标识一个用户集合以及成员,比如,以家庭为例,一个家庭和另一个个人、一个家庭和另一个家庭、一个家庭和多个聊天对象(家庭或个人均可)组成新聊天群,同时家庭成员发言时能标识出该家庭以及成员信息。发往用户集合号的信息都能到达该用户集合的每个成员。
技术实现要素:
本发明的主要目的在于提出一种实现用户集合号的信息交互的方法及装置,旨在实现以用户集合为单位参与社交聊天。
为实现上述目的,本发明提供的一种实现用户集合号参与信息交互的方法,包括:
为第一用户集合形成第一用户集合号;
以所述第一用户集合号作为第一参与方进行信息交互;所述进行信息交互包括:形成所述第一参与方与第二参与方之间的信息交互,和/或,所述第一用户集合号参与多人信息交互;所述第二参与方包括以下一种或多种:
第二用户集合所形成的第二用户集合号;
第二信息交互代理下的个人号;
所述第二用户集合中的一个成员号。
可选地,其中,当第二参与方为第二用户集合号时,形成所述第一参与方与第二参与方之间的信息交互包括:
将所述第一用户集合中的任一成员号发送给所述第二用户集合中的任一成员号的消息,由第一信息交互代理转发给所述第一用户集合中的其它成员号;所述消息由所述第二信息交互代理转发给所述第二用户集合中的所有成员号;
当所述第一用户集合号收到所述第二用户集合号发送的消息时,该消息由所述第一信息交互代理转发给所述第一用户集合的所有成员号。
可选地,其中,当第二参与方为第二用户集合号时,形成所述第一参与方与第二参与方之间的信息交互,还包括:
当所述第一用户集合中的成员号向所述第二用户集合中的成员号发送消息时,所述消息的会话由消息发送方的成员号和所述成员的会话资源标识,以及消息接收方的成员号和所述成员的会话资源标识唯一标定,所述消息中包含所述会话的上下文。
可选地,当第二参与方为第二信息交互代理下的个人号时,形成所述第一参与方与第二参与方之间的信息交互,包括:
当所述第一用户集合号的任一成员号发送给所述第二信息交互代理下的个人号的消息时,由第一信息交互代理转发给所述第一用户集合中的其它成员号;将所述消息以所述第一用户集合号的名义发给所述第二信息交互代理下的个人号。
可选地,其中,所述当第二参与方为第二聊天代理下的个人号时,形成所述第一参与方与第二参与方之间的信息交互,还包括:
当所述第一用户集合中的成员号向所述第二信息交互代理下的个人号发送消息时,所述消息的会话由消息发送方的成员号和所述成员的会话资源标识,以及消息接收方的个人号和会话资源标识唯一标定。
可选地,其中,所述第一用户集合号参与多人信息交互,包括:
当所述第一用户集合号参与多人信息交互时,所述第一用户集合的成员号发送到多人信息交互的消息,以所述第一用户集合号的名义发到所述多人信息交互,所述消息由第一信息交互代理转发给所述第一用户集合的其它成员号;
所述多人信息交互发送到所述第一用户集合号的消息,由所述第一信息交互代理转发到所述第一用户集合号的所有成员号;
所述第一用户集合的成员号以所述多人信息交互的标识号、所述第一用户集合号和所述成员号的会话资源作为唯一会话标识,所述消息中包含会话的上下文。
可选地,所述方法还包括:
当第一信息交互代理下的个人号添加所述第二用户集合号为好友时,加好友邀请发送到所述第二用户集合号,好友添加结果发给所述第一信息交互代理下的个人号和所述第二用户集合中的每个成员号;其中,所述加好友邀请通过所述第二信息交互代理转发到所述第二用户集合中的每个成员号,最先应答的有效的肯定或否定消息有效,后续应答消息无效;
当所述第一用户集合号添加所述第二用户集合号为好友时,成功的添加结果发给所述第一用户集合中的每个成员号和所述第二用户集合中的每个成员号,不成功的添加结果发送给发起邀请的所述第一用户集合中的成员号;其中,所述加好友邀请由所述第二信息交互代理转发到所述第二用户集合中的每个成员号,最先应答的肯定或否定消息有效,后续应答消息无效。
所述最先应答的肯定或否定消息中包含所述加好友邀请的上下文。
当所述第一用户集合中的成员号上线时,上线消息发送给所述第一用户集合号的每个允许观察在线的好友,以所述第一用户集合号和所述成员号的信息标识所述上线消息;
当所述第一用户集合号的好友上线时,上线消息发送给所述第一用户集合中的每个成员号。
当信息交互对方离线时,所述第一用户集合号可以发送离线消息给所述信息交互对方,所述离线消息由第一用户集合中的成员号发送给所述信息交互对方;
当所述第一用户集合号离线时,发送给第一用户集合号的消息保存为离线消息,当离线的第一用户集合中的成员号上线后,将所述离线消息发送给所述第一用户集合号;
当所述第一用户集合中的部分成员号离线时,所述离线的成员号上线后获取离线时发送给所述第一用户集合号的消息。
可选地,所述方法还包括:
接收所述第一用户集合中的成员号和信息交互对方的查询请求,并反馈信息交互记录,对于所述成员号,信息交互记录标识所述成员号所属的第一用户集合号和所述成员的信息。
本发明还提供了一种实现用户集合号信息交互的装置,包括:
用户集合号生成模块,用于为第一用户集合形成第一用户集合号;
用户集合号信息交互模块,用于以所述第一用户集合号作为第一参与方进行信息交互;所述进行信息交互包括:形成所述第一参与方与第二参与方之间的信息交互,和/或,所述第一用户集合号参与多人信息交互;所述第二参与方包括以下一种或多种:
可选地,其中,
当第二参与方为第二用户集合号时,形成所述第一参与方与第二参与方之间的,包括:
所述第一用户集合号收到所述第二用户集合号发送的消息时,该消息由所述第一信息交互代理转发给所述第一用户集合的所有成员号。
可选地,其中,所述当第二参与方为第二用户集合号时,形成所述第一参与方与第二参与方之间的信息交互,还包括:
当所述第一用户集合中的成员号向所述第二用户集合中的成员号发送消息时,所述消息的会话由消息发送方的成员号和所述成员的会话资源标识,以及消息接收方的成员号和所述成员的会话资源标识唯一标定,所述消息中包含所述会话的上下文。
当第二参与方为第二信息交互代理下的个人号时,形成所述第一参与方与第二参与方之间的信息交互,包括:
当所述第一用户集合号的任一成员号发送给所述第二信息交互代理下的个人号的消息时,由所述第一信息交互代理转发给所述第一用户集合中的其它成员号;所述消息通过所述第一用户集合号发给所述第二信息交互代理下的个人号。
可选地,其中,所述当第二参与方为第二信息交互代理下的个人号时,形成所述第一参与方与第二参与方之间的信息交互,还包括:
当所述第一用户集合号参与多人信息交互时,所述第一用户集合的成员号发送到所述多人信息交互的消息,以所述第一用户集合号的名义发到所述多人信息交互,所述消息由第一信息交互代理同时转发给所述第一用户集合的其它成员号;
可选地,所述装置还包括:
个人号好友添加模块,用于所述第一信息交互代理下的个人号添加所述第二用户集合号为好友时,加好友邀请发送到所述第二用户集合号,好友添加结果发给所述第一信息交互代理下的个人号和所述第二用户集合中的每个成员号;其中,所述加好友邀请通过所述第二信息交互代理转发到所述第二用户集合中的每个成员号,最先应答的肯定或否定消息有效,后续应答消息无效;
集合号好友添加模块,用于当所述第一用户集合号添加所述第二用户集合号为好友时,成功的添加结果发给所述第一用户集合中的每个成员号和所述第二用户集合中的每个成员号,不成功的添加结果发送给发起邀请的所述第一用户集合中的成员号;其中,所述加好友邀请由所述第二信息交互代理转发到所述第二用户集合中的每个成员号,最先应答的肯定或否定消息有效,后续应答消息无效。
所述最先应答的有效的肯定或否定消息中包含所述加好友邀请的上下文。
上线消息通知模块,用于当所述第一用户集合中的成员号上线时,上线消息发送给所述第一用户集合号的每个允许观察在线的好友,以所述第一用户集合号和所述成员号的信息标识所述上线消息;
离线消息收发模块,用于当信息交互对方离线时,所述第一用户集合号发送离线消息给所述信息交互对方,所述离线消息由第一用户集合中的成员号发送给所述信息交互对方;
信息交互记录查询模块,用于接收所述第一用户集合中的成员号和信息交互对方的查询请求,并反馈信息交互记录;其中,对于所述成员号,信息交互记录标识所述成员号所属的第一用户集合号和所述成员的信息。
相应地,本发明还提供了一种包括上述装置的信息交互代理。
本发明还提供了一种家庭网关,包括所述信息交互代理,其中所述用户集合号为家庭聊天号。
本发明实施例提供的方案,仅需要在信息交互服务器(或聊天服务器)和客户端直接增加信息交互代理功能,对信息交互服务器和信息交互客户端并无修改,即可实现以用户集合为单元的信息交互功能,便于快速布设家庭、班级等行为的社交、信息交互(或聊天)系统。
附图说明
图1为实现本发明实施例的框架结构示意图;
图2为本发明第一实施例的一种实现用户集合号参与信息交互的方法流程图;
图3为本发明第二实施例的一种实现用户集合号参与信息交互的方法流程图;
图4为本发明第一实施例的一种实现用户集合号参与信息交互的装置框图;
图5为本发明第二实施例的一种实现用户集合号参与信息交互的装置框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结合,均在本发明的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
现在将参考附图描述实现本发明各个实施例的移动终端。在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身并没有特定的意义。因此,"模块"与"部件"可以混合地使用。
在家庭或班级这样的用户集合环境下,通常设置有家庭网关或类似网关的其它网络互连互通设备,如图1所示,以两个家庭为例,显然,如果是两个班级或其它用户集合,情况也类似。
针对家庭或班级这样的用户集合可以设置聊天(或信息交互)代理Proxy,该Proxy处于外部因特网聊天服务器和用户集合成员之间,对外部因特网聊天服务器而言,Proxy相当于一个普通聊天号,对于用户集合成员而言,Proxy提供代理聊天服务器的功能。
如图1所示,Proxy可以设置在家庭网关或其它类似的网络互连互通设备上,以家庭为用户集合和家庭网关为例,A家庭的聊天代理可以设置在A家庭网关,B家庭的聊天代理可以设置在B家庭网关。
通过家庭网关或其它类似的网络互连互通设备将家庭内网和外网(因特网)分开。Proxy面向因特网侧是聊天客户端,因此可以在因特网聊天服务器拥有唯一的聊天号;Proxy面向家庭成员则是一个聊天代理。为方便描述,本发明中因特网聊天服务器地址以server.net表示,聊天代理地址以proxy表示,并采用以下约定:
称家庭聊天代理为proxy,为家庭1服务的聊天代理为proxy1,同理为家庭2服务的聊天代理为proxy2。当泛指家庭聊天代理时使用proxy,特指某个家庭时使用特定的proxy1或proxy2。
每个家庭分配一个聊天ID,为区别单独的个人聊天功能号,称为家庭号,实际上在聊天server上它和通常的个人聊天号没什么区别。
Proxy为家庭1建立的本地聊天群=LG1={Lx1,Lx2,…Lxi},同理Proxy2为家庭2建立的本地聊天群=LG2={Ly1,Ly2,…Lyj},
在XMPP协议中用下列符号表示:
x(n)表示XMPP的ID,n={1…i};例如x1、x2
Lx(n)表示全地址JID,n={1…i};例如x1@Proxy1/resource1、x2@Proxy1/resource2;
Ox表示x家庭的外网的JID,即:x@server.net;
Oy表示y家庭的外网的JID,即:y@server.net;
Proxy1给每个家庭1成员映射到外网resource用x(n)表示,例如对于家庭1的成员x(n),映射到外网的标识为:x@server.net/x(n);相应地,Proxy2给每个家庭2成员映射到外网resource用y(n)表示,例如对于家庭2的成员y(n),映射到外网的标识为:y@server.net/y(n)。
A家庭的成员还可以在因特网聊天服务器server.net上注册自己的独立聊天账号(本文称之为外网个人号),例如,可以为x1@server.net,x2@server.net,x3@server.net;同时,A家庭的成员也可以在聊天代理Proxy1上注册自己的个人独立聊天号(本文简称个人号),如x1_P@proxy1/resource1,x2_P@proxy1/resource2,a3_P@proxy1/resource3.
B家庭的成员可以在因特网聊天服务器server.net上注册的自己独立聊天账号(外网个人号),例如,可以为y1@server.net,y2@server.net;同时,B家庭的成员也可以在聊天代理Proxy2注册自己的个人独立聊天号(个人号),如y1_P@proxy2/resource1,y2_P@proxy2/resource2.
聊天代理,在外网(因特网)和内网(家庭网或班级网)对聊天信息进行路由和转发,完成内网号和外网号之间的映射。
基于上述场景,本发明第一实施例提出一种利用聊天代理实现用户集合号聊天的方法,如图2所示,包括:
步骤10:为第一用户集合形成第一用户集合号;
步骤12:以所述第一用户集合号作为第一参与方进行信息交互;所述进行信息交互包括:形成所述第一参与方与第二参与方之间的信息交互,和/或,所述第一用户集合号参与多人信息交互;所述第二参与方包括以下一种或多种:
本发明实施例基于这样的信息交互或聊天场景,例如两个家庭A、B之间进行家庭号和个人号的一对一聊天或以家庭号参与多人群聊,(显然对应班级或其他用户集合,情形类似),为描述方便,以A家庭为例,在进行聊天前,A家庭的聊天代理Proxy1代理A家庭的家庭成员形成家庭号,例如,x@server.net;B家庭的聊天代理Proxy2代理B家庭的家庭成员形成家庭号,例如,y@server.net;
此时,可以进行:
1)A家庭的家庭号x@server.net与B家庭的家庭号y@server.net之间进行信息交互或一对一聊天。
在A家庭和B家庭分别以各自的家庭号x@server.net和y@server.net进行一对一聊天时,从x1@proxy1/resource1,x2@proxy1/resource1,x3@proxy1/resource3发出的消息,都经由Proxy1通过x@server.net账号发出;
而发到x@server.net账号的消息,则被Proxy1转发到x1@proxy1/resource1,x2@proxy1/resource2,x3@proxy1/resource3。
类似地,从y1@proxy2/resource1,y2@proxy2/resource2发出的消息,都由Proxy2通过y@server.net账号发出;而发到y@server.net账号的消息,则被Proxy2转发到y1@proxy2/resource1,y2@proxy2/resource2。
两个家庭号x@server.net和y@server.net通过因特网聊天服务器形成一对一聊天,与一般聊天号的一对一聊天类似,只是家庭号内部成员通过家庭聊天代理进行收发消息同步。
2)A家庭的家庭号x@server.net与B家庭的Proxy2下的个人号进行信息交互或一对一聊天;
从y1_P@proxy2/resource1发出的消息则由Proxy2通过y1@server.net转发;从y2_P@proxy2/resource2发出的消息也由Proxy2通过y2@server.net转发;A家庭的用户集合号x@server.net的收发消息的行为,参照上述1)。
3)A家庭的家庭号x@server.net参与多人信息交互或聊天群。
这里所述的多人聊天群,是指类似现有技术的组群聊天,但与现有技术的组群聊天不同的是,现有技术的组群聊天,参与者为个人用户或个人号,而本发明实施中的多人聊天群中的参与者包括用户集合号,例如,该多人聊天群可以包括A家庭的家庭号x@server.net,也可以包括B家庭的家庭号y@server.net等等。
可选地,上述方法的步骤12中,当第二参与方为第二用户集合号时,形成所述第一参与方与第二参与方之间的信息交互包括:
将所述第一用户集合中的任一成员号发送给所述第二用户集合中的任一成员号的消息,由所述第一信息交互代理转发给所述第一用户集合中的其它成员号;所述消息由所述第二信息交互代理转发给所述第二用户集合中的所有成员号;
本发明实施例中,例如,A家庭的成员x1的成员号,如x1@proxy1/resource1,向B家庭的家庭号,如y@server.net发送消息时,所述消息由Proxy2转发B家庭的家庭号的所有成员,例如,y1@proxy2/resource1,y2@proxy2/resource2,同时,该消息还由Proxy1转发到A家庭的家庭号的其它成员,例如x2@proxy1/resource2,x3@proxy1/resource3;
当A家庭的家庭号x@server.net收到B家庭的家庭号y@server.net发送的消息时,该消息由Proxy1下转发A家庭的家庭号的所有成员号。
可选地,所述当第二参与方为第二用户集合号时,形成所述第一参与方与第二参与方之间的信息交互,还包括:
例如,以XMPP协议实现为例,所述消息的会话的标识,在Proxy1端可以由x1@proxy1/resource1和y@server.net/y2唯一标定。在Proxy2端可以由x@server.net/x1和y2@proxy2/resource2唯一标定。在server端则由x@server.net/x1和y@server.net/y2唯一标定。
会话标定与会话上下文:在普通的一对一聊天中,一个会话标定能明确消息发送和接受的明确个体,但在家庭号环境下,对于家庭成员,这个标定并不直接表明这个关系。例如,x1发给y1消息,在A家庭,proxy1将这个消息转发给A家庭的其他成员,而此时使用的会话标定是:家庭号x或x1(根据实现的不同可能还有别的会话标定的形式)发给x2@Proxy1/resource2,总之,它不是x1到y1的原始会话标定,即原始的会话上下文“轨迹””。要想保持原始的会话“轨迹”(即会话的上下文)让其他的家庭成员了解会话上下文,需要在协议内容中添加信息来增加这个会话的上下文。例如在消息的reason域增加会话“轨迹””内容,或者,对于其它不兼容的客户端,可由Proxy直接在消息开头插入会话“轨迹”内容。
可选地,上述方法的步骤12中,当第二参与方为第二信息交互代理下的个人号时,形成所述第一参与方与第二参与方之间的信息交互,包括:
当所述第一用户集合号的任一成员号发送给所述第二信息交互代理下的个人号的消息时,由第一信息交互代理转发给所述第一用户集合中的其它成员号;将所述消息通过所述第一用户集合的名义发给所述第二信息交互代理下的个人号。
本发明实施例中,以A家庭和B家庭为例,例如,A家庭的家庭号x@server.net下的任一成员,例如x2@proxy1/resurce2发送给B家庭的Proxy2下的个人号,例如y1@server.net的消息,由B家庭的Proxy2转发给proxy2下的个人号y1_P@proxy2/resource1,该消息同时由Proxy1转发给A家庭的其它成员号,例如x1@proxy1/resource1,x3@proxy1/resource3。
可选地,所述当第二参与方为第二信息交互代理下的个人号时,形成所述第一参与方与第二参与方之间的信息交互,还包括:
当所述第一用户集合中的成员号向所述第二信息交互代理下的个人号发送消息时,所述消息的会话由消息发送方的成员号和所述成员号的会话资源标识,以及消息接收方的个人号和会话资源标识唯一标定。
本发明实施例中,以A家庭的家庭号x@server.net的成员号向B家庭的聊天代理下的个人号发送消息为例:
当A家庭的成员号,例如x1,向B家庭的聊天代理Proxy2下的个人号,例如y2_P发送消息时,该消息的会话可以由发送方的成员号x1@proxy1和所述成员号的会话资源标识,例如resource1以及消息接收方的个人号b2_P@server.net和所述个人号的会话资源标识b2_p唯一标定;
例如在Proxy1端,以XMPP协议实现为例,所述消息的会话的标识可以由x1@proxy1/resource1和b2_P@server.net/b2_P唯一标定。
可选地,所述方法的步骤12中,所述第一用户集合号参与多人信息交互,包括:
当所述第一用户集合号参与多人信息交互时,所述第一用户集合的成员号发送到所述多人信息交互的消息,以所述第一用户集合的名义发到所述多人信息交互,所述消息由第一信息交互代理同时转发给所述第一用户集合中的其它成员号;
所述多人信息交互发送到所述第一用户集合号的消息,由所述第一信息交互代理转发到所述第一用户集合中的所有成员号;
所述第一用户集合的成员号以所述多人信息交互的标识号、所述第一用户集合号和所述成员号的会话资源作为唯一的会话标识,所述消息中包含所述会话的上下文。
本发明实施例中,对于多人信息交互或聊天群,以第一用户集合号参与多人聊天群为例,假定第一用户集合号为A家庭的家庭号x@server.net,多人聊天群号为M@server.net,
当x@server.net参与多人聊天群M@server.net时,所述x@server.net的成员号,例如x1@proxy1/resource1发送到所述多人聊天群M@server.net的消息,通过所述家庭号x@server.net发到所述多人聊天群M@server.net,同时该消息也有Proxy1转发给所述A家庭的家庭号的其它成员号,例如x2@proxy1/resource2,x3@proxy1/resource3;
所述多人聊天群M@server.net发送到A家庭的家庭号,例如x@server.net的消息,由所述A家庭的聊天代理Proxy1转发到所述A家庭的家庭号的所有成员号。
所述A家庭的家庭号的成员号,例如x1@proxy1/resource1以所述多人聊天群的群号M@server.net、所述A家庭的用户集合号x@server.net和所述成员号的会话资源,例如,x1作为唯一会话标识。
例如,以XMPP为例,所述A家庭的用户集合号x1@proxy1/resource1,可以M@server.net和和x@server.net/x1作为唯一会话标定。
显然,第一用户集合号参与多人聊天群时,实际上是代表了成员号参与多人聊天群;同样地,第一用户集合号的成员号也可以参与多人聊天群,实际上是通过第一用户集合号参与多人聊天群的聊天。
可选地,如图3所示,所述步骤12之后,还包括:
步骤13:当第一信息交互代理下的个人号添加所述第二用户集合号为好友时,加好友邀请发送到所述第二用户集合号,好友添加结果发给所述第一信息交互代理下的个人号和所述第二用户集合中的每个成员号;其中,所述加好友邀请通过所述第二信息交互代理转发到所述第二用户集合中的每个成员号,最先应答的有效的肯定或否定消息有效,后续应答消息无效;
当所述第一用户集合号添加所述第二用户集合号为好友时,成功的添加结果发给所述第一用户集合中的每个成员号和所述第二用户集合中的每个成员号,不成功的添加结果发送给发起邀请的所述第一用户集合中的成员号;其中,所述加好友邀请由所述第二信息交互代理转发到所述第二用户集合中的每个成员号,最先应答的有效的肯定或否定消息有效,后续应答消息无效。
可选地,所述最新应答的有效的肯定或否定消息中包含所述加好友邀请的上下文。
本发明实施例中,仍以A家庭和B家庭为例,当A家庭的聊天代理Proxy1下的个人号,例如x1_P@proxy1/resource1添加B家庭的家庭号例如y@server.net为好友时,B家庭的家庭号的每个成员号都会收到所述x1_P@proxy1/resource1的加好友邀请,y1@proxy2/resource1,y2@proxy2/resource2中最先应答的有效的肯定/否定应答消息有效,后续应答的消息无效,Proxy可采用消息抑制方式抑制该消息对应的其他家庭成员后续报文的转发给外部server。例如y1@proxy2/resource1先应答同意后,则表示B家庭的家庭号同意x1_P@proxy1/resource1的加好友邀请,无论y2@proxy2/resource2是否同意;反之亦然,例如如果y1@proxy2/resouce1先应答拒绝后,则表示B家庭的家庭号拒绝x1_P@proxy1/resourc1的加好友邀请,无论y2@proxy2/resoucre2是否同意。
添加结果发给所述B家庭的家庭号的每个成员号,例如发送给y1@server.net/y1,y2@server.net/y2,由proxy2转发给y1@proxy2/resource1,y2@proxy2/resouce2和所述A家庭的Proxy1下的个人号,即x1_P@sever.net/x1_P,由proxy1转发给x1_P@proxy1/resource1。
当A家庭的家庭号,例如x@server.net添加B家庭的家庭号,例如y@server.net为好友时,B家庭的家庭号的每个成员号都会收到x@server.net的加好友邀请,最先应答的有效的肯定或否定消息有效,后续应答消息无效,成功的添加结果发给B家庭的家庭号的每个成员号和A家庭的家庭号的每个成员号,不成功的添加结果发送给发起邀请的A家庭的家庭号的成员号,例如假设A家庭的家庭号,例如x@server.net,添加B家庭的家庭号,例如y@server.net,为好友是由成员号x1@proxy1/resource1发起的,假设B家庭的家庭号的成员号y1@proxy2/resource1最先应答且拒绝邀请,则不成功的添加结果,发送给x1@server.net/x1,由proxy1转发给x1@proxy1/resouce1。
作为一种可选的实施方案,可以在家庭号添加/删除好友时,Proxy可添加协议允许字段来标识添加好友邀请的上下文(或“轨迹”)信息并记住这个消息的标识,从而使各个家庭成员了解家庭号添加/删除好友的具体原因或加好友邀请的上下文,以便确定添加/删除;相应地,要求最终的终端软件有能力解释出加好友要求消息中携带的上下文信息的特定字段。
可选地,如图3所示,所述方法步骤12之后,还包括:
步骤14:当所述第一用户集合中的成员号上线时,上线消息发送给所述第一用户集合号的每个允许观察在线的好友,以所述第一用户集合号和所述成员号的信息标识所述上线消息;
当A家庭的家庭号x@server.net的好友上线时,上线消息发送给A家庭的家庭号的每个成员号。
步骤15:当信息交互对方离线时,所述第一用户集合号可以发送离线消息给所述信息交互对方,所述离线消息由第一用户集合中的成员号发送给所述信息交互对方;
本发明实施例中,例如当A家庭的家庭号的聊天对方(个人或家庭号)离线时,x@server.net可以发送离线消息给聊天对方,该离线消息是由A家庭的家庭号的成员号,即某个成员号发送给对方的。
当A家庭的家庭号的所有成员号离线时,则A家庭的家庭号x@server.net离线,发给x@server.net的消息保存为离线消息,当离线的x@server.net的成员号上线后,将所述离线消息发送x@server.net,由x@server.net转发给x@proxy1;
当A家庭的家庭号的部分成员号离线时,例如x1@proxy1/resource1在线,而x2@proxy1/resource2和x3@proxy1/resource3离线,A家庭的家庭号x@server.net仍然在线,所述离线的成员号,例如x2@proxy1/resource2和x3@proxy1/resource3上线后获取离线时的消息。
步骤16:接收所述第一用户集合中的成员号和信息交互对方的查询请求,并反馈信息交互记录,对于所述成员号,信息交互记录标识所述成员号所属的第一用户集合号和所述成员的信息。
本发明实施例中,假设第一用户集合号为A家庭的用户集合号,A家庭的成员号x1@proxy1/resource1与聊天对方都可搜索聊天记录,对于该成员号,聊天记录可以标识A家庭号x@server.net和x1@proxy1/resource1信息,例如对于家庭A之外的聊天成员,可以搜索到标识x@server.net/x1。
上述步骤13~16没有先后关系,是并列选择关系。
本发明实施例提供的一种实现用户集合号信息交互的方法,仅需要在信息交互服务器(或聊天服务器)和客户端直接增加信息交互代理功能,对信息交互服务器和信息交互客户端并无修改,即可实现以用户集合为单元的信息交互功能,便于快速布设家庭、班级等行为的社交、信息交互(或聊天)系统。
相应地,本发明第三实施例还提供了一种用户集合号信息交互的装置,如图4所示,包括:
用户集合号生成模块20,用于为第一用户集合形成第一用户集合号;
集合号信息交互模块21,用于以所述第一用户集合号作为第一参与方进行信息交互;所述进行信息交互包括:形成所述第一参与方与第二参与方之间的信息交互,和/或,所述第一用户集合号参与多人信息交互;所述第二参与方包括以下一种或多种:
第二用户集合形成的第二用户集合号;
可选地,其中,当第二参与方为第二用户集合号时,形成所述第一参与方与第二参与方之间的信息交互,包括:
可选地,其中,当第二参与方为第二信息交互代理下的个人号时,形成所述第一参与方与第二参与方之间的信息交互,包括:
当所述第一用户集合中的任一成员号发送给所述第二信息交互代理下的个人号的消息时,由第一信息交互代理转发给所述第一用户集合中的其它成员号;将所述消息以所述第一用户集合号的名义发给所述第二信息交互代理下的个人号。
可选地,所述当第二参与方为第二信息交互代理下的个人号时,形成所述第一参与方与第二参与方之间的信息交互,,还包括:
当所述第一用户集合中的成员号向所述第二信息交互代理下的个人号发送消息时,所述消息的会话由消息发送方的成员号和所述成员的会话资源标识,以及消息接收方的个人号和会话资源标识唯一标定,所述消息中包含所述会话的上下文。
当所述第一用户集合号参与多人信息交互时,所述第一用户集合中的成员号发送到所述多人信息交互的消息,以所述第一用户集合号的名义发到所述多人信息交互,所述消息由第一信息交互代理同时转发给所述第一用户集合的其它成员号;
所述第一用户集合的成员号以所述多人信息交互的标识号、所述第一用户集合号和所述成员号的会话资源作为唯一会话标识,所述消息中包含所述会话的上下文。
可选地,如图5所示,所述装置还包括:
个人号好友添加模块22,用于所述第一信息交互代理下的个人号添加所述第二用户集合号为好友时,加好友邀请发送到所述第二用户集合号,好友添加结果发给所述第一信息交互代理下的个人号和所述第二用户集合中的每个成员号;其中,所述加好友邀请通过所述第二信息交互代理转发到所述第二用户集合中的每个成员号,最先应答的有效肯定或否定消息有效,后续应答消息无效;
集合号好友添加模块23,用于当所述第一用户集合号添加所述第二用户集合号为好友时,成功的添加结果发给所述第一用户集合中的每个成员号和所述第二用户集合中的每个成员号,不成功的添加结果发送给发起邀请的所述第一用户集合中的成员号;其中,所述加好友邀请由所述第二信息交互代理转发到所述第二用户集合中的每个成员号,最先应答的有效的肯定或否定消息有效,后续应答消息无效。
上线消息通知模块24,用于当所述第一用户集合中的成员号上线时,上线消息发送给所述第一用户集合号的每个允许观察在线的好友,以所述第一用户集合号和所述成员号的信息标识所述上线消息;
离线消息收发模块25,用于当信息交互对方离线时,所述第一用户集合号发送离线消息给信息交互对方,所述离线消息由第一用户集合中的成员号发送给所述信息交互对方;
信息交互记录查询模块26,用于接收所述第一用户集合中的成员号和信息交互对方的查询请求,并反馈信息交互记录;其中,对于所述成员号,信息交互记录标识所述成员号所属的第一用户集合号和所述成员的信息。
本发明还提供一种信息交互代理,包括上述任一项所述装置,所述装置采用XMPP协议实现;
本发明还提供一种家庭网关,包括上述信息交互代理,其中,所述用户集合号为家庭聊天号。
下面以一个示范性实施例,对本发明的实施例进一步详细描述。例如,
在A家庭的家庭网关中设置了聊天代理Proxy1,在B家庭的家庭网关中设置了聊天代理Proxy2;Proxy1,Proxy2统称为Proxy,即家庭聊天代理;假定XMPP的因特网聊天服务器为@server.net。
以A家庭为例:
例如,以XMPP协议参考实现为例:
XMPP实现参考:
3、proxy收到server返回结果:
4、proxy处理后转发返回结果给家庭成员:
XMPP实现示例:
3、proxy1转换后发给server:
5、proxy处理后发给家庭成员:
好友y的在线消息:
Presencefrom:y@server.net/resource(y)
To:x@server.net
3、Proxy1收到后修改to域为Lx(n)后发送这些消息给Lx(n)。
To:x(n)@proxy1/resource(n)
5、本地号进群后(如果有的话),Proxy则根据历史推送离线信息给这个家庭成员。
四、创建proxy本地聊天群:Proxy可选有3种触发建立本地家庭聊天群。
(一)发送消息触发创建家庭聊天群:(以家庭1成员1发起消息为例)
1、家庭1成员x1向对方Oy发送聊天信息Message1;
MessageFrom:x1@proxy1/resource1
To:y@server.net
Id:message1
Body:Thisismesssage1
2、PROXY1判断(LG1,Oy)群是否存在,如果存在,则按照群收发消息处理;如果不存在则建立(LG1,Oy)本地群信息,并分配聊天群ID给该群,假设群ID=群ID1;
例如群ID1=“homechat/y”
3、PROXY1携带(聊天群ID1、Oy的信息、Message1关键信息等上下文)的群邀请消息给发消息的家庭成员Lx(n),指示Lx(n)从一对一聊天转为群聊,Message1消息发送成功,Lx(n)如果不加入聊天群ID1,则清除聊天群,本次家庭聊天结束。如果Lx(n)加入聊天群ID1则继续以下步骤;
首先发送给发起消息的成员,本例中的x1:
From:homechat/y@proxy1
To:x1@proxy1/resource1
Mucinvite:fromy@server.net(或fromy@server.net/resource(y))
Reason:homechatx1@proxy1/resource1toy@server.net:send_message.
说明:Reason表示群聊天的起因是家庭成员1发起对y的聊天,x1@proxy1/resource1是家庭成员x1在Proxy1上的全地址JID,。
采用协议的reason域来关联这个邀请的“原因”,即聊天上下文的“轨迹”;homechat表明是一个家庭聊天,homechat/y明确了是本家庭和对方y的聊天,y@server.net是Proxy1收到x1发来消息里面的to域纯JID。x1可以发y@server.net也可能发y@server.net/resource(y)这取决于当时的聊天状态。
成员1看到上下文轨迹,决定加入,可以发送:
Presenceto:homechat/y@proxy1/nicke(1)
(Nicke(1)是x1在这个聊天群内的昵称,可以由成员x1自定)
Proxy1返回成员列表给成员x1:
Presence节中消息
from:homechat/y@proxy1/nicke(y)
Item:jid域=y@server.net/resource(y)
Nicke域=nicke(y)
(Nick(y):是proxy1添加的y在这个聊天群的nicke,其作用,可用于关联外网的y和本地proxy1上聊天室里的y。另外,nicke(y)信息,可以采用y的全地址JID组成,例如,y@server.net/resouce(y)。实际上这个信息是来自于x1发送的消息的to域,当没有resource(y)信息时,nicke(y)可取y@server.net。)
From:homechat/y@proxy1/nicke(1)
Itemid:x1@proxy1/resource(1):nicke(1)
说明:除y之外,有多少个已经加入的成员就会发多少个这种消息。
如果成员x1拒绝加入该群,则proxy1取消该群,proxy1将返回错误信息给家庭成员x1:
成员x1可发送:
Messageto:homechat/y@proxy1
Mucdeclineto:homechat/y@proxy1
Proxy1发送给成员x1:
To:x1@proxy1/nicke(1)
Error:couldnotusehomechatserviceifnotacceptstojointhisroom.
4.PROXY1分别向LG1不在群内的家庭成员发起进群邀请,携带群ID1、对方Oy的信息(比如昵称、聊天ID等),并使用(群ID1,Oy信息)标识家庭1和Oy之间的这个特定聊天会话;
例如:发送给成员x2
To:x2@proxy/resource2
Mucinvite:fromy@server.net/resource(y)
Reason:homechatx1@proxy1/resource1toy@server.net:send_message
Reason域表示发起原因是家庭成员给y发消息而建的群。
此时,进入群ID1的家庭成员,包括Lx(n)本人通过上下文将了解到向聊天群内的homechat/y@proxy1/nicke(y)发消息,就是用家庭聊天的方式向Oy发消息。
6.家庭成员如果进入该群,PROXY1修改Message1的to域为群ID1,from域改为群ID1/nick(n),发给加入这个聊天群的所有家庭成员,以使家庭聊天的信息达到共享上下文的目的。(其他在该家庭成员未进入群之前的群历史消息也是类似处理,用于保持上下文)
例如:消息发送给成员2
MessageFrom:homechat/y@proxy1/nicke(1)
Type:groupchat
To:x2@proxy1/resource2
Body:fromnicke(1)tonicke(y):Thisismesssage1(即会话轨迹)
Delay:from='homechat/y@proxy1/成员1'stamp='2000-01-02T15:44:14Z'
7.PROXY1修改Message1的from域为Ox/resource,resource为发送消息的家庭成员对应的ID,以此家庭成员x1为例,resource=x1。向Oy发送该消息。
MessageFrom:x@server.net/x1
To:y@server.net//或To:y@server.net/y的resource
8.PROXY建立群后,在后续的消息转发处理步骤见群发送和接收步骤。
9.家庭1成员退出群
例如成员2退出:
Presenceto:homechat/y@proxy1
Type:unavailable
(二)、接收消息触发建立proxy本地群:
1.对方Oy发送聊天信息Message2给家庭1;
MessageFrom:y@server.net/resource(y)
Id:message2
Body:Thisismesssage2
2.Message2消息到达PROXY1;
3.PROXY1判断(LG1,Oy)映射是否存在,如果存在,则按照群收
发消息处理;如果不存在则建立(LG1,Oy)本地聊天群。假设新建立的聊天群ID=ID2,(LG1,Oy)。
4.PROXY1分别向LG1不在群内的家庭1成员发起进群邀请,携带
聊天群ID2、对方Oy的信息(比如昵称、聊天ID等),用(聊天群ID2,Oy信息)标识一个会话;
例如发送给成员x2:
Reason:homechaty@server.net/resource(y)tox@server.net:receive_message
说明:reason表示发起群聊的原因是y向家庭号发送了消息;
采用协议的reason域来关联这个邀请的原因或轨迹,homechat表明是一个家庭聊天,y@server.net/resource(y)是Proxy1收到y发来消息里面的y的全地址JID,x@server.net是Proxy1收到y发来消息里面的to域,receive_message表示收到消息而建的群。
例如家庭成员x2发加入群消息给proxy1:
Presenceto:homecha/y@proxy1/nicke(2)
Proxy1返回成员列表给成员2:
Presencefrom:homechat/y@proxy1
Itemid:y@server.net/resource(y):nicke(y)
Itemid:x1@proxy1/resource1:nicke(1)
Itemid:x2@proxy1/resource2:nicke(2)
说明:除了y外,有几个已经加入的成员,就发几个这样的消息。
6.PROXY1修改Message2的to域改为群ID2,from域改为群ID2/resource(y),发给加入这个聊天群的所有家庭成员。
例如家庭成员x1将收到proxy1发来的消息:
MessageFrom:homechat/y@proxy1/nickey(y)
Body:fromy@server.nettox@server.net:Thisismesssage2
家庭成员x2收到消息:
MessageFrom:homechat/y@proxy1/nicke(y)
7.家庭成员后续的收发消息见群发送和接收步骤。
(三)、命令创建家庭聊天群:(以家庭1为例)
由proxy管理员操作创建的聊天群,可以提供一种灵活的按需建立家庭聊天的方式。
1.命令范式CreateHomeChat(Oy)下达到Proxy1。
3.PROXY1分别向LG1不在群内的家庭成员发起进群邀请携带(聊天群ID3、Oy的信息);
From:homechat/y@proxy1/resource(proxy1)
Mucinvite:fromhomechat/y@proxy1/(proxy1)
Reason:homechatx@server.nettoserver.net/resource(y):proxy_creat
此处,Reason域表示发起群聊的原因是x家庭号需要向y发送消息。
4.家庭成员收到邀请进群消息,终端可提示群ID3的上下文和对方Oy的信息,家庭成员有意愿该群的确认进入该群,否则拒绝,如果全部家庭成员拒绝的话,该命令失败,由Proxy1返回调用方结果否则返回聊天群ID3详细信息给调用方;
5.家庭成员将根据接收到的(聊天群ID3、Oy的信息)了解到此为家庭聊天群,向聊天群ID3发消息就是用家庭聊天的方式向Oy发消息。
6.后续的消息处理将群收发消息流程。
五、群收发消息:
a)、家庭成员发消息
1.LG1:Lx(n)要用家庭聊天的方式向Oy发送消息时,根据(聊天群ID1、Oy的信息)向聊天群ID1发消息message4;
家庭成员x1发送消息:
To:homechat/y@proxy1/nicke(y))
Id:message4
Body:messsage4
2.Proxy收到消息后,针对家庭1其他家庭成员,修改Message4的to域为群“ID1/nicke(n)”,消息体中加入Fromnicke(n),例如本例中为Fromnicke(1),发给加入这个聊天群的所有家庭成员。
例如消息转发给成员2:
Body:fromnicke(1)tonicke(y):messsage4
此处,Message4body内容中from昵称表示原始发送者,to昵称表示发送的目标,这个消息将作为聊天的轨迹信息。
3.对Oy,PROXY修改Message4的from域为Ox/x(n),在本例中为“Ox/x1”向Oy发送该消息。
To:y@server.net/resource(y)
Body:Thisismesssage4
b)家庭成员收消息
1.Oy向Ox或Ox/x(n)发送消息Message5;(以发给x1为例)
To:x@server.net/x1//或者是To:x@server.net
Id:message5
Body:Thisismesssage5
2.Proxy1收到消息后,对家庭x1的所有成员,proxy1根据(聊天群ID1、Oy的信息)修改Message5的to域为聊天群ID1,并发给加入这个聊天群的所有家庭成员。
例如家庭成员x1收到消息:
Body:fromnicke(y)tonicke(1):Thisismesssage5//或Body:fromnicke(y)totox:Thisismesssage5当Y发的消息to域是x@server.net时。
家庭成员2收到消息:
Body:fromnicke(y)tonicke(1):Thisismesssage5//或Body:fromnicke(y)tox:Thisismesssage5当y发的消息to域是x@server.net时。
六、本地群消亡:(以下是消亡的几种触发情况)
b)PROXY可以根据以下策略任意组合来删除群:
2.一个家庭和对方以及家庭内所有成员的所有离线消息都已取走;
3.使用命令强制删除。
七、家庭号添加/删除好友:
家庭成员既可以添加对方为好友也可以被添加为好友,以下是不同情景:
a)家庭成员添加对方(可以是家庭见以下家庭成员被添加为好友,可以是普通单独聊天ID,操作为正常聊天好友添加操作)为好友。(以下以x1为例)
X1发送消息的例子:
Presencefrom:x1@proxy1/resource1
To:a@server.net
Type:subscribe
2.此添加消息到达Proxy1,Proxy1使用Ox/x(n)这个resource标定的session代替Lx(n)向聊天服务器发起申请,服务器执行正常的添加好友操作,向a发起好友添加消息。
Presencefrom:x@server.net/x1
3.a同意或拒绝添加后,发送添加好友的消息给Ox;
Presencefrom:a@server.net
Type:subscribed
此外,a可能还会发一条消息添加家庭1作为好友,见b)过程。
4.Proxy1收到此消息修改to域为Lx(j),(j=(1…i)后发送给Lx(j);
To:x1@proxy/resource1
(其他成员类推)
b)、家庭成员被添加为好友
To:x1@proxy1
To:x2@proxy1
(其他家庭成员消息以此类推)
3.家庭成员收到此消息后确认添加或拒绝,添加或拒绝消息经由Proxy1修改from域为对应的Ox/x(n)向服务器发送,服务器根据相应的逻辑执行后续操作,一般来说最先返回的同意或拒绝为有效操作。
例如x1同意添加,发两条消息,
第一条表示要添加对方:
Presencefrom:x1@proxy1
Proxy1修改后发给server:
Presencefrom:x@server.net
第二条表示同意对方添加自己:
Proxy修改后发给server:
Type:subscribed.
4.a收到以上两条消息,对于subscribed消息,a了解家庭1同意添加。对于subscribe消息,a将应答予以完成好友添加过程,经由Proxy2、服务器发送家庭1的proxy1。
5.经过双方肯定添加的好友,由server触发更新roster等信息。
八、另一种可选的携带会话轨迹的家庭号添加/删除好友方法:
X1发送消息例子:
2.此添加消息到达Proxy1,Proxy1使用Ox/x(n)这个resource标定的session代替Lx(n)向聊天服务器发起申请,服务器执行正常的添加好友操作,此时,Proxy1可添加协议允许的字段来表示添加的轨迹信息并记住这个消息的标识。向a发起好友添加消息。
Reason:x@server.net/x1subscribetoa@server.net
3.此消息经由server转发给Proxy2,proxy2记录这个轨迹,修改并转发消息给a(轨迹信息可转可不转)。a同意或拒绝添加后发送添加好友的消息给Ox;该消息经由proxy2添加记录里的原轨迹信息后发给server;
注:a可能还会发一条消息添加家庭1作为好友,见b)过程。
4.Proxy1收到此消息修改to域为Lx(j),(j=(1…i)后发送给Lx(j),匹配轨迹信息确保轨迹信息准确后添加合适的字段在消息里发给家庭成员;
5.后续server推送好友列表给双方成员。
b)家庭成员被添加为好友
Reason:a@server.netsubscribetox@server.net
(假设Proxy1转发了会话标定)
3.家庭成员收到此消息后确认添加或拒绝,添加或拒绝消息经由Proxy1比对会话轨迹信息和修改from域为对应的Ox/x(n)向服务器发送,服务器根据相应的逻辑执行后续操作,一般来说最先返回的同意或拒绝为有效操作。
例如x1同意添加,发两条消息为:
4.a收到以上两条消息,对于subscribed消息,a了解家庭1同意添加。对于subscribe消息,a将应答予以应答完成好友添加过程,经由proxy2、服务器发送给家庭1的proxy1。
5.经过双方肯定添加的好友,由server触发更新roster等信息
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是计算机或者网络设备等)执行本发明各个实施例所述的方法。