powered by Jive Software

Candy plugin for Openfire

The ignite realtime community is happy to announce a plugin for the popular Candy (Chats Are Not Dead Yet) group-chat web client. Candy was developed by Michael Weibel (@weibelm) and Patrick Stadler (@pstadler) on behalf of their employer Amiado Group. It provides group and private chat for collaborative working between teams.

The Candy plugin for Openfire adds audio-conferencing and a telephone voicebridge service to Candy. In practice, it means a user can join a group-chat with voice using their PC mic/speaker or their SIP Phone. If the optional PSTN/PBX gateway is configured, then an external mobile phone or home telephone can be used. The voice bridge can call the destination or accept an incoming call. The audio bridge is based on the jVoiceBridge project and can handle hundreds of concurrent users across multiple conferences,

The Candy web client has been extended by a voicebridge plugin which activates/deactivates either RTMP Flash or SIP audio-conferencing when user clicks on the group-chat room/conference tab. Both group-chat and private chats are supported. It uses the XMPP Openlink XEP to handle the telephone messages

For more details read the rest of the overview document at http://community.igniterealtime.org/docs/DOC-2287 and visit the project web site at http://code.google.com/p/openfire-candy/


Great stuff


cool! :slight_smile:

Added the plugin to our wiki: https://github.com/candy-chat/candy/wiki/Candy-In-The-Wild

Indeed, very cool

Looking forward to take a look at the code

Thanks Michael. It was inspired by your work on WebRTC

I am currently adding **Jingle **support to the audio conference engine and should be able to support your Candy WebRTC plugin for group audio conferencing.

I am using an XEP called Openlink to drive the conference signalling.

Yes I’ve seen that, I’ll need to take a deeper look. Any chance that you submit the candy plugin to the candy-plugins repository or is it very specific to openfire atm?

About my WebRTC Plugin: Cool I’ll work in my spare time on it but currently it should work again with the latest chrome implementation and I’m trying to get it running on openshift

I would love to submit it, but I have to clean the code up first. It is also not performing a service discovery and assuming that the Openlink voicebridge component exists because it is embedded in the Openfire plugin.

As part of the Jingle support work, I would have to revisit the code and should remove the Openfire dependency then

very nice

very nice…

Very new to all this so apologies if this is a dumb question…and if the answer is RTFM - I’ve been reading a lot !!!

I’m trying to get my head around what protocols are being used by this plugin and how audio is being handled.

With the Openfire/Candy plugin, what protocol is being used to deliver audio from different clients?

If I connect using a browser with flash/PC mic, am I restricted to using RTMP for audio?

What does it mean to configure the browser component like this with SIP?


If another user connects with a SIP phone, are they using RTP for audio?

What is the purpose of the RTMP server, the red5 Voicebridge server and the jVoiceBridge server.

Is the org.red5.server.webapp.voicebridge.Application server component (or something else) converting the RTMP audio stream into RTP for use by the voicebridge and then back to RTMP for delivery to flash based clients?

Sorry, pretty confused by all this as you can tell …


Thanks for all the hard work & commitment. I wish I could work closely with you. Keep it up.

I am currently using Jappix Mini with Openfire bosh on my website. It is working fine. I want similar facebook style javascript based chat rather than the Pop-up chat like ( Spark or Yahoo Messenger or Gtalk ). Currently My jappix mini chat connect & reconnects on every page navigation. Varorayan has recommended to use node-xmpp-bosh as bosh server instead of openfire bosh to avoid reconnection on every page navigation of website. However I could not get success on this.

Can I use Candy Chat instead of Jappix mini… From screenshots, it appears NO as Candy is big full page chat.

Please advice. My jappix mini works fine on my website however it re-connects on every page navigation.


Candy developer here.

Currently Candy doesn’t support a jappix-mini style chat as you said.

We may add (at least) some basic support for doing stuff like that as well but that may take some time.

This my version of minichat which uses an iframe and does need to reconnect when user moves to a new page. It is included in the Jappix plugin as minichat.html

It is really good script. I have just today only tested it. I have below two issues that need to resolved. Login on the website ( www.example.com ) & then connecting to jappix min with that userid works fine.

We are here calling the main website within the Iframe. However when the user log out of Website, he need to be logged out of Jappix mini chat as well. I am not sure how this can be done. How should we onunload event to trigger when the user logs out of website.

URL of website - Iframe URL

URL of Jappix mini - Main URL after user logs in

Issues :

How to synchronize the user to log out of website and jappix mini as well.

Website within iframe has a unique URL but user will see always Jappix mini URL inrespective of which page he is on website.

Please advice.


  1. log out of jappix mini. Use


See my project http://code.google.com/p/inspired-social/ to see how I did this with WordPress

  1. In the inspired-social project, I set default start web page to wp-index.php which contains the minichat and then set the iframe to index.php. This means www.mydomain.com loads wp-index.php which then loads index.php.


Thanks a lot fo your inputs. Really appreciated. I really need your help or advice. I have websites which is my main site for users. Jappix mini chat is secondary value added service on different server.

My website www.mydomain.com on one IP address having Cpanel CentOS

My jappix mini is on other server www.chatserver.com having openfire & jappix mini.

I am not able to synchronize the website logout with Jappix mini logout - disconnecMini() as they are different server.

I am not able to understand how the child iframe will disconnect the parent iframe.

Secondly, the URL of Child iframe should come on browser for user experience not the parent ifrmae URL

Please Please provide some pointer or hint.