Openfire is a Jabber server written in Java, with both a commercial version (Enterprise) and the open source version. The open source version appears to be more than sufficient for our needs, with our ability to customize it as needed with JBuilder.
We have created a custom CodeGear plug-in for Openfire to support features Openfire does not have.
CodeGear account support
Openfire has a very nice plug-in architecture that allowed us to create "shadow copies" of CodeGear account information. All account logins use CodeGear membership services. The first time a user logs in to the chat server, an account record is created for them, so their CodeGear chat server preferences can be preserved.
Chat room participation information
In addition to support for CodeGear accounts, we extended Openfire to provide summary information of chat room participation that could be easily accessed by JavaScript. The custom JavaScript routines discussed below use this feature of the CodeGear plug-in.
Moderated room enhancements
Our Openfire plug-in also gracefully handles "unauthorized" entry into rooms that require moderation (such as the sales chat room) when no moderator is present. If a user enters a moderated room when no moderator is present, an automatic reply asks them to come back when a moderator is present and the room will close in 10 seconds. A "/kick" of the user is submitted 10 seconds after this message is displayed, which removes them from the room but allows them to return again later. We implemented this for the plug-in rather than JWChat so all clients connected would comply with the moderation rules.
The "moderation required" setting is a new Openfire server property called mustHaveModeratorRooms, which accepts a comma-delimited list of roomIDs to flag as requiring a moderator. For example:
mustHaveModeratorRooms=sales,coderage1,coderage2
is a valid configuration.
Q&A Interface
We have also introduced a "Question and Answer" (Q&A) interface for web broadcasts like our online conferences and public chats. This Q&A interface uses three (3) chat rooms that pop up on request, and can be placed anywhere on your monitor(s): the public chat room, the VIP room, and the Q&A room.
Public chat room
The public chat room can be used by all people attending the chat, including moderators. Chat participants can /ask questions in moderated chat rooms, and receive notification that their question has been submitted to Q&A room. The Q&A room is only visible to chat moderators. Answers to /asked questions appear in the VIP room.
The main difference between the public chat room for Q&A chats and other public group chats are the [Ask] button, and links to the other rooms used during the event. Clicking on the link for another room will automatically join you to that room, or re-display it if you're "in" the room but it is not visible on your display.
For all participants, the public chat room has a link to open the VIP room. Moderators will also have a link to the Q&A room. Chat administrators can toggle any user as a moderator. If a user is a moderator, a link to open the Q&A room appears in the public chat room.

1 Sample public chat room
VIP Room
Only moderators can post content to the VIP room. Questions answered in the Q&A room appear in the VIP room with some special formatting to group the question and answer together. Moderators can also post messages directly to the VIP room from the Q&A room.

2 Sample VIP room with questions and answers
Q&A room
Only moderators can see the Q&A room. The Q&A room color codes the status of the questions.
As the following screen shot shows, multiple actions are available for processing questions. All buttons except for [Send] and [Ask] require a specific question to be selected in the queue.

3 Q&A room view, only for moderators
Button |
Description |
Assign |
Sets the text field for the "Assigned" column if a specific user should answer the question. |
Delete |
Remove the question from the Q&A room |
Mark as Read |
Changes the status of a message from unread to read (only for your own browser view). Question ID 9 has been marked as "read" in the screenshot above. |
Set Reply |
Assign the text of the reply to the question. The question itself can also be edited in this dialog. Question 6 above has its reply set, so it is ready to be answered. |
Answer |
Send the question and reply to the VIP room. The question must have a reply to be sent. Question ID 7 above has been answered. |
Ask |
Submits a question to the Q&A queue. /ask <question> can also be used, just as it works in the public chat room. |
Send |
Send a message to the VIP room. This message has all the special handling described above in the public chat room section. |
|
|
History preferences override for Group chat rooms
We have introduced new server behavior to override the default "history" that gets displayed for a chat room when the user enters it, to help set the context of the current conversation. For all standard chat rooms, we have configured the server to show the last 25 messages in the chat. We needed to turn off history for the sales room, and that required a customization.
For the sales chat room, the following server properties are used:
room.<roomname>.type = number
room.<roomname>.maxNumber = <# of past chats to show>
In the case of the sales chat room, the specific values for turning off chat history when you join the room are:
room.sales.type=number
room.sales.maxNumber=0
This way, users joining the chat room do not see what conversations have taken place before they arrive.
Sidebar: Using the Sales chat room
This is a "best practice" recommendation for the sales support chat room, should CodeGear start using it.
All communications on the server will be secured via SSL. However, any conversations with specific existing or prospective customers should be private. Once a user joins the sales chat room, and private conversation can be started with that user by clicking on their user name in the roster list. That way, any private information exchanged with that user is only visible to the CodeGear representative and that user.
Other users can be explicitly invited into the private chat by either party.
Registered user rooms
Another customization is rooms that are only available to registered users and moderators. Access for a registered user room is based on comma-delimited list of CodeGear package IDs. If the user account requesting access has registered one of the packages in the ID list, they are granted access to the room. Any unauthorized access from any IM client will be denied.
Registered user rooms appear in the standard room list page. (See Room list JavaScript page below).
Field test rooms
(TODO. This feature is not yet implemented.)
Another customization is rooms that are only available to registered field testers and moderators. Access for a field test room is based on the name of the field test in our Digital Signature system. If the user account requesting access has signed our Field Test NDA and been authorized as a field tester, they are granted access to the room. Any unauthorized access from any IM client will be denied.
Until we roll out version 2.0 of our membership services, access rights will be determined by calling the white listed Digital Signature web services method HasUserSignedTemplateCode(templatecode, [email], [userid]).
Field test rooms do not appear in the standard room list page. (See Room list JavaScript page below).