The livechat is a live help/support and site monitoring application developed by ServerGrove. The application provides the following functionality:
- communication with clients through a chat web-based system
- ability to invite site visitors to a chat conversation
- monitor all user activity on the site, track multiple visits
- integration with client area to display FAQs based on question submitted while requesting a chat
- internal communication system
- seamless integration with the GoogleTalk/Jabber servers to allow admins to chat through and also interact with the system through IM (instant messaging)
- supports IM based commands to SG Livechat gtalk bot which will return a series of information based on the command sent like list of online chat operators, online sessions, etc.
- sends chat session transcriptions to customer's email upon completion
- customers can rate the operator and provide feedback notes
Initially ServerGrove used proprietary 3rd-party chat support systems based on old PHP implementations. The software was full of bugs, security holes and customizing and extending these applications was not easily done preventing the company to offer the high level of standards set for client support.
Like with many off-the-shelf commercial products it had a bunch of features that were not wanted and lacked many that were needed. The open source options were few and of poor quality. This project allowed ServerGrove to better communicate with customers and provide increased levels of support. It also provided an easy way to answer pre-sales questions which are crucial to the survival of the company in a very competitive market. All of us at ServerGrove believe that it is important to develop software that is unobtrusive and works within our workflow. IM integration was crucial from a usability perspective as support personnel is always on IM and users did not need to keep another application or browser window open just to answer support questions.
Because ServerGrove's core business is not developing or selling support software, it is a requirement to develop support and backend applications as fast as possible. ServerGrove was able to replace the existing buggy and insecure system within one week of making the decision of developing the system internally. This was possible thanks to the use of Symfony Framework which allowed the developers to focus on the core logic of the application without having to spend valuable time re-inventing the wheel or doing common and repetitive tasks.
The system also integrates with Jabber servers, allowing operators to monitor and interact with the system from GoogleTalk IM clients. This was accomplished by creating a symfony plugin that used the existing PHP library JAXL by Abhinav Singh. This plugin was eventually published on the symfony website and is available for anyone that needs to integrate their symfony applications with IM systems. By using an existing library, ServerGrove did not have to also invest time in developing an interface with Jabber servers which showcases the power of Open Source.
Development was done by one developer and one designer. The full stack framework was used, including the Propel ORM. The admin generator was used to generate a simple but useful backend to manage operators and monitor the status of chat sessions and online visitors.
The integration with Jabber servers is done by running a server-side daemon that connects as a IM user to the Jabber network. This daemon sends and receives Jabber messages. IM clients add a new contact to their list which is the actual server user. It is also possible to update the status of the server user so online sessions and visits count are displayed in the contact status.
Additionally, ServerGrove developed a desktop based application using Adobe AIR, which encapsulates the web-based backend interface, allowing quick and direct access to monitor the website.
The value of symfony
Without symfony, this project would have not been possible to be done in just one week, period. By using key features like admin generator, routing, templates, ORM integration and the plugin system it was possible to just focus on business logic.
Above is the client chat. The window is activated when a client clicks on the "Live chat" button on our site. If an operator is not online, the button will inform the visitor that the operator is offline but still allows him or her to open a ticket to our ticket system.
The operator does not have to be logged into the Livechat system, all he needs is to be logged into his IM to activate the system. When a user submits a request, the Livechat system then sends an IM to the operator informing him of the chat request. We just click on the link and login to accept the chat.
The icon on our site automatically detects if a user is either logged into his IM or logged into the Livechat system and displays the correct icon.
These are the active sessions on our site. It shows what OS/Browser they are using, their IP address, Their current page, the referring page, time on site, local time, number of times her or she visited the site and the view can be expanded to show all the pages this particular visitor viewed. The red bar on the top shows a pending chat request.
The system stores a full list of "canned messages". These are pre-configured messages easily accessible from a pulldown menu on the operator side of the Livechat window.
Livechat supports department lists and appropriate requests can be sent to the right department.
We have a lot of new features planned for new releases. We are working to release SG Livechat as open source. We still have some work to do before we can make it public. We would also like to port it to Symfony 2.0 so we can learn the new framework and make a case study out of it.
This case study was provided by a user of the symfony framework and published with the permission of all parties involved. Are you interested in having your case study published on the symfony blog? Feel free to contact our Community Manager Stefan Koopmanschap (stefan.koopmanschap - at - symfony-project - dot - com).