/* * Copyright (C) 2004-2006 Jive Software. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jivesoftware.xmpp.workgroup; import org.jivesoftware.xmpp.workgroup.request.Request; import org.jivesoftware.xmpp.workgroup.request.UserRequest; import org.xmpp.packet.JID; /** * Users may try to join a workgroup using clients with different capabilities. Therefore, the * way for sending notifications to the user may differ depending on the client capabilities.<p> * * For instance, for sending notifications to a client that supports the * <a href="http://www.jabber.org/jeps/jep-0142.html">Workgroup protocol</a> packets that * follow the specification will be used. On the other hand, if a user contacted the workgroup * using a standard XMPP client that does not have support for the Workgroup protocol, using * possibly a chatbot, then standard XMPP packets with no special extensions will be used. * * @author Gaston Dombiak */ public interface UserCommunicationMethod { /** * Notifies the user his status in the waiting queue. Users will normaly receive a packet * that contains the position in the queue as well as the estimated remaining time. * * @param sender the JID of the queue whose status is being notifed. * @param receiver the JID of the user that will receive the notification. * @param request the UserRequest that the user made to join a workgroup. * @param isPolling true if the user requested the information. */ void notifyQueueStatus(JID sender, JID receiver, UserRequest request, boolean isPolling); /** * Notifies the user that he has left the waiting queue. Users may leave the waiting * queue because they cancelled their initial request or because no agent was found or * nobody accepted the request and the request timed out. This kind of notifications * usually include the reason for the departure. * * @param sender the JID of the queue that the user left. * @param receiver the JID of the user that will receive the notification. * @param request the UserRequest that the user made to join a workgroup. * @param type the type of Cancel. The type will be used to explain the reason of the * departure. */ void notifyQueueDepartued(JID sender, JID receiver, UserRequest request, Request.CancelType type); /** * Notification message saying that the request has been accepted by an agent and that * invitations have been sent to the agent and the user that made the request. * * @param request the Request that the user made to join a workgroup. */ void invitationsSent(UserRequest request); /** * Notification message saying that the user that made the request has joined the room to have * a chat with an agent. * * @param request the Request that the user made to join a workgroup. */ void supportStarted(UserRequest request); /** * Notification message saying that the support session with an agent has ended. Implementors * may decide to gather information about quality of service at this point. * * @param request the Request that the user made to join a workgroup. */ void supportEnded(UserRequest request); /** * A previous invitation to the specified room was not answered so offer again the user * the option to receive a new invitation. Different implementations may decide to unilaterally * send a new invitation while others may ask the user for his opinion. * * @param request the Request that the user made to join a workgroup. */ void checkInvitation(UserRequest request); }