Easy Group Chats
The 'classic' Multi-User Chat interface is strongly influenced by IRC (public chat room, semi-anonymous participants, dedicated owner/admins/moderators, explicit joining/leaving). This is not suitable for modern mobile messengers, where users rather want to have a "seamless" group for their family, one for their accordion youth club, etc.
As part of the Easy XMPP initiative, we need to specify a "group chat" approach based on MUC (and possibly also applicable to MIX) that works between different clients. Requirements are:
- Single-click room creation with sane defaults
- Automatic or one-click joining for invited contacts
- Seamless upgrade from 1:1 chat to MUC (user invites another contact to an ongoing 1:1 conversation)
- transmission of 1:1 chat history into MUC history (nice to have)
Contents |
[edit] Prior Work
- The MUC specification defines instant rooms, which are just a shortcut to accept the default MUC settings, which are not defined in the XEP :-(
- Conversations auto-joins a MUC if it receives a mediated invitation.
- ChatSecure will auto-join if the inviter is on the user's roster.
[edit] Swift Implementation Notes
In Swift, ad-hoc group chats are called 'impromptu', and they are implemented as follows:
- UI is different from MUCs
- Instead of the room name, the list of participants is shown
- Presence changes are shown differently. Approximately "$user joined the conversation/chat" vs. "$user has entered the room as a moderator."
- Inviter creates a UUID-named MUC on the local MUC component (a requirement for the feature)
- Inviter sends a direct invitation with a special "impromptu" element.
- There is no prior history exposure
- Invitee auto-joins if it receives such an element
- Impromptu MUCs are not saved in bookmarks
- A local flag is maintained indicating them as 'impromptu' to trigger the special UI
[edit] Conversations Implementation Notes
Conversations generally has two different dialogs Join conference and Create conference. The first lets the user enter a JID (full jids are also possible) and behaves like every other XMPP client. Create conference let's the user specify a name (optional) which will later be set as a subject and choose participants.
- Conversations creates random string (base36) for localpart and picks a MUC component from the users server.
- Room is created a private and non-anonymous.
- Generally for *all conferences* if there is no subject it creates a name from the participants ("Bob, Alice, Peter")
- For non-anonymous and private mucs Conversations queries the member list (admin list, owner list) and also shows members that are offline (and uses this for the name creation)
- Since ad-hoc groups are private and members only Conversations show the 'proper' title even if other participants didn't follow the invite yet.
- Conversations generally follows all invites automatically (Might be revised to only follow invites from contacts)
[edit] Desired UX
[edit] Room Naming
The group chat needs to be properly identified in the roster list / rooms list.
- Do not expose the UUID to the user
- Show the room name from
disco#info
if set ("Family Christmas Plans") - Show the list of participants as fallback ("Alice, Fred", exclude yourself)