How to use xmpp client in lieu of webchat client for fastpath?

On the homepage of it says " Users can use their own XMPP client or the provided web client to initiate a chat request.". I would very much like to use a XMPP client instead of the webchat client.

How is this done ? For example, If I take an off-the-shelf xmpp client, the first thing it wants to do is authenticate to the server. Well, we know that fastpath is anonymous login, so how do you work around that? and then when you go to communicate with the fastpath, exactly how is that done? I dont mind taking an open source xmpp client and stripping it down to work for my needs, but it would be nice if i could make it work easily with an off-the-shelf xmpp to prove the concept and then from there i can strip out all of the extra functionality.

Hey ffi,

Let me describe the basic architecture of Fastpath to clarify some things. Fastpath has a server side component that is provided by the fastpath.jar plugin. The server side component is where the logic for queues and routing lives. Then we have agents that connect to the server using their XMPP account and register with their corresponding workgroup. Agents must use a client, like Spark, that follows the rules defined in XEP-0142: Workgroup Queues for registering with workgroups and responding to chat requests. The last part of the puzzle are the end users. End users may use the webchat client provided by the webchat.war application or they can use their XMPP client of choice (i.e. no need to support XEP-0142: Workgroup Queues). When using the web chat client, the server needs to have anonymous users enabled and end users do not need to provide any user credentials to make a chat/support request. On the other hand, users using an XMPP client may make a chat/support request from their client. They may be connected to the same Openfire server that provides the Fastpath service or they may even be connected to another remote server and still use the Fastpath service in your server. When using an XMPP client users will authenticate with their XMPP server the same way they always do it. In order to make a chat/support request they just need to send any message to the workgroup address (e.g. The workgroup’s bot will answer the message and guide the user. Users may even add a workgroup to their roster and see the workgroup’s presence. The workgroup will be available when agents are connected and away if all agents are away or offline if all agents are not connected.

Hope that helps.

– Gato

Thank you very much for the detailed reply… very helpful.

I think I have a good grasp of how it works now. What I want to do, though, is mimic the anonymous login that you get from the webchat client. So the webchat client must be logging into our server with a username and password, right? I guess what I want to do is grab an XMPP client, log into our server, and then try to communicate with I guess I am confused how I will log in with XMPP when I want it to be an anonymous user. Can you shed some light on how I can accomplish that? then I think I am ready to do my development on this project.

Hey ffi,

Anonymous logins do not provide a user/password but instead follow the rules defined in XEP-0175: Best Practices for Use of SASL ANONYMOUS. XMPP clients that implement XEP-175 will let you login as an anonymous user but afaik all XMPP clients do not support that functionality. However, if you are using the Smack library then you can use anonymous logins.


– Gato

Thanks again for info. I am using Smack API now. I initiate conversation with fastpath and the spark client pops up with the accept/deny prompt. I accept the conversation and it says “ffi has joined the room”. But the end user has not.

The end user on processMessage() comes back with language like:

“An invitation to start a chat with an agent has been sent” (ok, good! i then accept the invitation)

after a while, i get a “Do you want to receive another room invitation, yes or no?” if i type yes, it says “The room invitation was sent again”.

What do you think I am missing to make this work?