Sendbird Desk permite una sólida participación del cliente a través de soporte en vivo dentro de la aplicación. El SDK de Desk le permite inicializar, configurar y crear fácilmente funciones relacionadas con la atención al cliente en sus aplicaciones de Android.
Sendbird Desk es un complemento de la plataforma de chat Sendbird para administrar tickets, y todos los eventos de Desk se manejan a través del Chat SDK.
A cada ticket se le asignan los agentes adecuados y se dirigirá a un canal grupal de chat, que implementa mensajería en tiempo real en los tickets con Sendbird Chat SDK.
Estos son algunos de los componentes principales de Desk SDK.
Remitente | Subtipos | |
---|---|---|
Mensaje de usuario | Agente o cliente | Mensajes ricos |
Mensaje de administrador | Enviado desde el servidor de escritorio sin un remitente específico | Mensajes de notificación y mensajes del sistema. |
Nota : Los mensajes enriquecidos se clasifican además en vista previa de URL, solicitud de confirmación para el cierre del ticket y mensajes de solicitud de comentarios.
Obtenga más información sobre Sendbird Desk SDK para Android en el documento Desk SDK para Android. Si tiene algún comentario o pregunta sobre errores y solicitudes de funciones, visite la comunidad Sendbird.
Esta sección muestra los requisitos previos que debe verificar para usar Sendbird Desk SDK para Android.
Android 5.0 (API level 21) or higher
Java 8 or higher
Support androidx only
Android Gradle plugin 4.0.1 or higher
Sendbird Chat SDK for Android 4.0.3 and later
Esta sección le brinda la información que necesita para comenzar con Sendbird Desk SDK para Android.
Nuestra aplicación de muestra demuestra las características principales de Sendbird Desk SDK. Descargue la aplicación desde nuestro repositorio de GitHub para tener una idea de lo que puede hacer con el SDK real y comenzar a crear su propio proyecto.
Una aplicación Sendbird comprende todo lo necesario en un servicio de chat, incluidos usuarios, mensajes y canales. Para crear una aplicación:
Independientemente de la plataforma, sólo se puede integrar una aplicación Sendbird por aplicación; sin embargo, la aplicación admite la comunicación entre todas las plataformas proporcionadas por Sendbird sin ninguna configuración adicional.
Nota : Todos los datos están limitados al alcance de una sola aplicación, por lo que los usuarios de diferentes aplicaciones de Sendbird no pueden chatear entre sí.
Instalar Chat SDK es sencillo si está familiarizado con el uso de bibliotecas o SDK externos. Primero, agregue el siguiente código a su archivo raíz build.gradle
:
allprojects {
repositories {
.. .
maven { url " https://repo.sendbird.com/public/maven " }
}
}
Nota : asegúrese de que el bloque de código anterior no esté agregado a su archivo de módulo
bundle.gradle
.
Luego, agregue la dependencia al archivo build.gradle
de nivel superior del proyecto.
dependencies {
implementation ' com.sendbird.sdk:sendbird-desk-android-sdk:1.1.4 '
}
Nota : Las versiones
1.0.12
o inferiores del SDK de Desk se pueden descargar desde JCenter hasta el 1 de febrero de 2022. Las versiones del SDK superiores a1.0.12
estarán disponibles en el repositorio remoto de Sendbird.
Alternativamente, puede descargar el SDK de Desk desde este repositorio. Copie el SDK de Desk en su carpeta libs/
y asegúrese de incluir también la biblioteca en su archivo build.gradle
.
Una vez completada la instalación, se puede crear un ticket para la comunicación entre un agente y un cliente. Siga las instrucciones paso a paso a continuación para crear su primer boleto.
Primero, se debe inicializar una instancia de 'SendBirdDesk' al iniciar una aplicación cliente. Llame a SendbirdChat.init()' y a 'SendBirdDesk.init()' en 'Application.onCreate()'. SendbirdChat.init() debe inicializarse primero con el APP_ID de su aplicación Sendbird en el panel.
public class MyApplication extends Application {
@ Override
public void onCreate () {
super . onCreate ();
final InitParams initParams = new InitParams ( APP_ID , this , false );
SendbirdChat . init ( initParams , new InitResultHandler () {
@ Override
public void onMigrationStarted () {
}
@ Override
public void onInitFailed ( SendbirdException e ) {
// If initializing fails, this method is called.
}
@ Override
public void onInitSucceed () {
// If initializing is successful, this method is called and you can proceed to the next step.
// You can use all Sendbird APIs, including Connect, after init is completed in your app.
SendBirdDesk . init ();
}
});
}
}
Nota : Se debe utilizar el mismo
APP_ID
para los SDK de escritorio y de chat. Si inicia Sendbird Desk con una instancia de Sendbird de otroApp_ID
, se borrarán todos los datos existentes en la aplicación cliente.
Es posible utilizar solo el SDK de Chat o ambos SDK de Chat y Desk juntos en su aplicación cliente, según el servicio de chat que desee proporcionar.
SDK | Utilizado para |
---|---|
SDK de chat | Mensajería dentro de la aplicación donde los clientes pueden chatear entre ellos. |
SDK de chat y escritorio | Tickets donde los clientes pueden chatear con los agentes. |
public class MyApplication extends Application {
@ Override
public void onCreate () {
super . onCreate ();
final InitParams initParams = new InitParams ( APP_ID , this , false );
SendbirdChat . init ( initParams , new InitResultHandler () {
@ Override
public void onMigrationStarted () {
}
@ Override
public void onInitFailed ( SendbirdException e ) {
// If initializing fails, this method is called.
}
@ Override
public void onInitSucceed () {
// If initializing is successful, this method is called and you can proceed to the next step.
// You can use all Sendbird APIs, including Connect, after init is completed in your app.
SendBirdDesk . init ();
}
});
}
}
Los clientes pueden solicitar soporte desde varios tipos de canales: chats dentro de la aplicación o redes sociales como Facebook, Instagram y Twitter. Para utilizar estas funciones de soporte de Desk SDK, la instancia SendBirdDesk
debe estar conectada con el servidor Sendbird según el canal de donde proviene la solicitud:
authenticate()
con sus ID de usuario.Una vez autenticados, los clientes pueden chatear en vivo con agentes basados en la plataforma Sendbird Chat.
SendbirdChat . connect ( userId , accessToken , new ConnectHandler () {
@ Override
public void onConnected ( User user , SendbirdException e ) {
if ( e != null ) { // error.
return ;
}
// Use the same user Id and access token used in the SendbirdChat.connect().
SendBirdDesk . authenticate ( userId , accessToken , new SendBirdDesk . AuthenticateHandler () {
@ Override
public void onResult ( SendbirdException e ) {
if ( e != null ) { //error.
return ;
}
// SendBirdDesk is now initialized, and the customer is authenticated.
}
});
}
});
Nota : Los clientes de la plataforma Sendbird Chat significan usuarios que ya están autenticados con Chat SDK. Si está implementando Chat SDK y Desk SDK al mismo tiempo, primero conecte un usuario al servidor Sendbird con su ID de usuario y token de acceso.
Implemente el método Ticket.create()
para crear un nuevo ticket antes o después del mensaje inicial del cliente.
Ticket . create ( ticketTitle , userName , new Ticket . CreateHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // error
return ;
}
// The ticket is created. Agents and customers can chat with each other by sending a message through the ticket.getChannel().sendUserMessage() or sendFileMessage().
}
});
Una vez que un ticket se crea exitosamente en el servidor Sendbird, puede acceder al ticket y su canal en ticket.getChannel()
a través de la devolución de llamada del servidor.
Antes de que un cliente envíe el primer mensaje, los agentes no pueden ver el ticket en el panel y no se asigna el ticket. Cuando comienza la conversación, el Ticket se asigna a un agente disponible mediante el Desk Dashboard mientras se envían y reciben mensajes a través del Chat SDK.
Puede utilizar los siguientes parámetros al crear un ticket.
Nota : Solo es necesario definir Groupkey y customFields y solo se puede acceder a ellos desde el Panel de control.
Argumento | Tipo | Descripción |
---|---|---|
BOLETO_TITLE | cadena | Especifica el título del billete. |
NOMBRE DE USUARIO | cadena | Especifica el nombre del usuario que envía o recibe el ticket. |
GRUPO_KEY | cadena | Especifica el identificador de un equipo específico. |
campos personalizados | objeto anidado | Especifica información adicional del ticket que consta de elementos personalizados de valor-clave . Solo los campos personalizados ya registrados en Configuración > Campos de ticket en su panel se pueden usar como clave. |
PRIORIDAD | cadena | Especifica el valor de prioridad del ticket. Los valores más altos representan una mayor prioridad. Los valores válidos son BAJO , MEDIO , ALTO y URGENTE . |
RELATED_CHANNEL_URLS | formación | Especifica canales de grupo en la plataforma Sendbird Chat que están relacionados con este ticket y constan de URL de canal y nombres de canal. Se pueden agregar hasta 3 canales relacionados. |
Map < String , String > customFields = new HashMap <>();
customFields . put ( "product" , "desk" );
customFields . put ( "line" , "14" );
customFields . put ( "select" , "option2" );
Ticket . create ( TICKET_TITLE , USER_NAME ,
"cs-team-1" , // GROUP_KEY
customFields , // CUSTOM_FIELDS
PRIORITY ,
RELATED_CHANNEL_URLS ,
new Ticket . CreateHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
// The ticket is created with parameters.
}
}
);
Esta sección detalla el procedimiento para manejar y cerrar un ticket desde su aplicación cliente.
Utilice el método ticket.setCustomFields()
para agregar información adicional sobre un ticket específico.
Map < String , String > customFields = new HashMap <>();
customFields . put ( "product" , "Desk" );
customFields . put ( "line" , String . valueOf ( 30 ));
ticket . setCustomFields ( customFields , new Ticket . SetCustomFieldHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
// Custom fields for the ticket are set.
// Some fields can be ignored if their keys aren't registered in the dashboard.
}
});
Nota : Solo los campos personalizados registrados en Escritorio > Configuración > Campos de ticket de su panel se pueden usar como clave.
Utilice el método setCustomerCustomFields()
de 'SendBirdDesk' para que sus clientes agreguen información adicional sobre ellos mismos.
Nota : Solo los campos personalizados registrados en Escritorio > Configuración > Campos de cliente de su panel se pueden usar como clave.
Map < String , String > customFields = new HashMap <>();
customFields . put ( "gender" , "female" );
customFields . put ( "age" , String . valueOf ( 30 ));
SendBirdDesk . setCustomerCustomFields ( customFields , new SendBirdDesk . SetCustomerCustomFieldsHandler () {
@ Override
public void onResult ( SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
// Custom fields for the customer are set.
// Some fields can be ignored if their keys aren't registered in the dashboard.
}
});
Utilice el método setCustomerCustomFields()
de SendBirdDesk
para que sus clientes agreguen información adicional sobre ellos mismos.
Nota : Solo los campos personalizados registrados en Configuración > Campos de cliente de su panel se pueden usar como clave.
Map < String , String > customFields = new HashMap <>();
customFields . put ( "gender" , "female" );
customFields . put ( "age" , String . valueOf ( 30 ));
SendBirdDesk . setCustomerCustomFields ( customFields , new SendBirdDesk . SetCustomerCustomFieldsHandler () {
@ Override
public void onResult ( SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
// Custom fields for the customer are set.
// Some fields can be ignored if their keys aren't registered in the dashboard.
}
});
Los canales relacionados indican canales grupales en la plataforma Sendbird Chat que están relacionados con un ticket. Al crear un ticket, pase los channel_url
de los canales del grupo relacionados como argumento al parámetro relatedChannelUrls
en el método Ticket.create()
. Para actualizar canales relacionados, utilice ticket.setRelatedChannelUrls()
en su lugar. La propiedad ticket.relatedChannels
en la devolución de llamada indica el objeto de canal de grupo de canales relacionados y contiene nombres de canales y sus URL.
ticket . setRelatedChannelUrls ( RELATED_CHANNEL_URLS , new Ticket . SetRelatedChannelUrlsHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
// The ticket.relatedChannels property has been updated.
}
});
Nota : Se pueden agregar hasta 3 canales relacionados por ticket.
Con las vistas previas de URL, los usuarios de su aplicación pueden cumplir con sus expectativas sobre lo que obtendrán antes de abrir el enlace durante las conversaciones.
Para obtener una vista previa de las URL, se debe verificar cada mensaje de texto si incluye alguna URL. Cuando un mensaje de texto que incluye una URL se envía correctamente, la URL debe extraerse y pasarse al servidor Sendbird utilizando el método getUrlPreview()
. Configure los datos analizados recibidos del servidor como un objeto JSON
y cadena el objeto para pasarlo como argumento a un parámetro en el método updateUserMessage()
. Luego, el mensaje actualizado con vista previa de URL se entrega a las aplicaciones cliente a través del método onMessageUpdated()
del controlador de eventos del canal.
ticket . getChannel (). sendUserMessage ( TEXT , new UserMessageHandler () {
@ Override
public void onResult ( UserMessage userMessage , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
List < String > urls = extractUrlsFromMessage ( userMessage . getMessage ());
if ( urls . size () > 0 ) {
String strUrlPreview = toJsonString ( getOGTagsWithUrl ( urls . get ( 0 )));
UserMessageUpdateParams updateParams = new UserMessageUpdateParams ( TEXT );
updateParams . setData ( strUrlPreview );
updateParams . setCustomType ( "SENDBIRD_DESK_RICH_MESSAGE" );
ticket . getChannel (). updateUserMessage ( userMessage . getMessageId (), updateParams , new UserMessageHandler () {
@ Override
public void onResult ( UserMessage userMessage , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
}
});
}
}
});
Nota : vaya a la página de Github y consulte las clases
updateUserMessageWithUrl()
yUrlPreviewAsyncTask
en el código de muestra. Obtendrá una idea de cómo implementar métodos en el código de muestra anterior, comoextractUrlsFromMessage()
,getOGTagsWithUrl()
ytoJsonString()
, que no son código real pero están destinados a ayudarlo a comprender el flujo general a utilizar. Vistas previas de URL.
En el método onMessageUpdated()
del controlador de eventos del canal, puede encontrar los datos para la vista previa de la URL en la propiedad message.data
como se muestra a continuación.
{
"type" : " SENDBIRD_DESK_URL_PREVIEW " ,
"body" : {
"url" : " https://sendbird.com/ " ,
"site_name" : " Sendbird " ,
"title" : " Sendbird - A Complete Chat Platform, Messaging and Chat SDK and API " ,
"description" : " Sendbird's chat, voice and video APIs and SDKs connect users through immersive, modern communication solutions that drive better user experiences and engagement. " ,
"image" : " https://6cro14eml0v2yuvyx3v5j11j-wpengine.netdna-ssl.com/wp-content/uploads/sendbird_thumbnail.png "
}
}
Los mensajes de administrador son mensajes personalizables que envía el sistema y existen 2 tipos de mensajes de administrador. Las notificaciones son mensajes que se envían y muestran tanto a los clientes como a los agentes, como mensajes de bienvenida o mensajes de retraso. Los mensajes del sistema son mensajes que se envían y se muestran a los agentes en la vista de detalles del ticket cuando un ticket tiene algunos cambios, como cambios en el estado del ticket y en el asignado.
Nota : Puede personalizar las notificaciones en Escritorio > Configuración > Activadores y los mensajes del sistema en Escritorio > Configuración > Mensajes del sistema en su panel.
Cuando la aplicación cliente recibe el mensaje a través del método 'onMessageReceived()' del controlador de eventos del canal, los mensajes del sistema se distinguen de los mensajes de notificación por el valor de message.custom_type
y su subtipo se especifica en message.data
como se muestra a continuación.
{
"message_id" : 40620745 ,
"type" : " ADMM " ,
"custom_type" : " SENDBIRD_DESK_ADMIN_MESSAGE_CUSTOM_TYPE " ,
"data" : " { " type " : " SYSTEM_MESSAGE_TICKET_ASSIGNED_BY_SYSTEM " , " ticket " : <Ticket Object>} " ,
"message" : " The ticket is automatically assigned to Cindy. "
}
Nota : La
transfer
aparece solo cuando losdata
tienenSYSTEM_MESSAGE_TICKET_TRANSFERRED_BY_AGENT
.
Los mensajes del sistema están destinados a mostrarse únicamente a los agentes. Consulte el siguiente código de muestra para evitar mostrárselo a sus clientes.
public static boolean isVisible ( BaseMessage message ) {
if ( message instanceof AdminMessage ) {
String data = message . getData ();
if (! TextUtils . isEmpty ( data )) {
String customType = message . getCustomType ();
boolean isSystemMessage = ADMIN_MESSAGE_CUSTOM_TYPE . equals ( customType );
JsonObject dataObj = new JsonParser (). parse ( data ). getAsJsonObject ();
String type = dataObj . get ( "type" ). getAsString ();
return ! isSystemMessage
&& ! EVENT_TYPE_ASSIGN . equals ( type )
&& ! EVENT_TYPE_TRANSFER . equals ( type )
&& ! EVENT_TYPE_CLOSE . equals ( type );
}
}
return true ;
}
Si bien los administradores tienen permiso para cerrar un ticket directamente, los agentes pueden cerrar un ticket como lo hacen los administradores o preguntar a los clientes si desean cerrar un ticket, según la configuración de permisos del agente. El mensaje de solicitud de confirmación puede tener 3 tipos de estado como se muestra a continuación.
Estado | Descripción |
---|---|
ESPERA | Establecer cuando un agente envía un mensaje de solicitud de confirmación. |
CONFIRMADO | Establece cuándo un cliente acepta cerrar el ticket. (Predeterminado: verdadero ) |
RECHAZADO | Establecer cuando un cliente se niega a cerrar el ticket. (Predeterminado: falso ) |
Cuando un cliente responde al mensaje, la respuesta verdadera (de acuerdo) o falsa (rechazada) se envía al servidor de Sendbird como CONFIRMED
o DECLINED
llamando al método Ticket.confirmEndOfChat()
.
ticket . confirmEndOfChat ( USER_MESSAGE , true | false , new Ticket . ConfirmEndOfChatHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
// You can update the UI of the message. For example, you can hide YES and No buttons.
}
});
{
"type" : " SENDBIRD_DESK_INQUIRE_TICKET_CLOSURE " ,
"body" : {
"state" : " CONFIRMED "
}
}
Puede enviar un mensaje a los clientes inmediatamente después de cerrar un ticket para preguntarles si están satisfechos con el soporte brindado a través del ticket. Cuando la función de calificación de satisfacción del cliente está activada en su panel, los clientes recibirán un mensaje pidiéndoles que den una puntuación y dejen un comentario como respuesta. El mensaje puede tener 2 estados como se muestra a continuación.
Estado | Descripción |
---|---|
ESPERA | Establecer cuándo un agente envía un mensaje de solicitud de comentarios del cliente. |
CONFIRMADO | Establecer cuándo un cliente envía una respuesta. |
Cuando un cliente responde al mensaje, su puntuación y comentario sobre el ticket se envían al servidor de Desk llamando al método ticket.submitFeedback()
. Luego, el estado del mensaje de solicitud de confirmación cambia a CONFIRMED
.
ticket . submitFeedback ( USER_MESSAGE , SCORE , COMMENT , net Ticket . SubmitFeedbackHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
}
});
El servidor Sendbird Desk notifica las actualizaciones a la aplicación cliente del cliente a través del método onMessageUpdate()
del controlador de eventos del canal.
public void onMessageUpdated ( final BaseChannel channel , final BaseMessage message ) {
Ticket . getByChannelUrl ( channel . getUrl (), new Ticket . GetByChannelUrlHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) return ;
String data = message . getData ();
if (! TextUtils . isEmpty ( data )) {
JsonObject dataObj = new JsonParser (). parse ( data ). getAsJsonObject ();
String type = dataObj . get ( "type" ). getAsString ();
boolean isFeedbackMessage = "SENDBIRD_DESK_CUSTOMER_SATISFACTION" . equals ( type );
if ( isFeedbackMessage ) {
JsonObject feedback = dataObj . get ( "body" ). getAsJsonObject ();
String state = feedback . get ( "state" ). getAsString ();
switch ( state ) {
case "CONFIRMED" :
// TODO: Implement your code for the UI when there is a response from the customer.
break ;
case "WAITING" :
// TODO: Implement your code for the UI when there is no response from the customer.
break ;
}
}
}
}
});
}
Nota : Puede encontrar el objeto
JSON
en cadena de lo siguiente en la propiedadmessage.data
dentro del métodoonMessageUpdate()
del controlador de eventos del canal.
{
"type" : " SENDBIRD_DESK_CUSTOMER_SATISFACTION " ,
"body" : {
"state" : " CONFIRMED " ,
"customerSatisfactionScore" : 3 ,
"customerSatisfactionComment" : " It was really helpful :) "
}
}
Un ticket cerrado se puede reabrir utilizando el método reopen()
en el Ticket
.
ticket . reopen ( new Ticket . ReopenHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
}
});
Puede recuperar una lista de los tickets abiertos y cerrados del cliente actual utilizando Ticket.getOpenedList()
y Ticket.getClosedList()
.
Puede diseñar una actividad en la bandeja de entrada para el historial de tickets abiertos y de tickets cerrados para su cliente. Cero es un buen valor inicial, luego se devolverán un máximo de 10 tickets para cada llamada en orden descendente de la hora de creación del último mensaje.
Nota : Solo se pueden recuperar 10 tickets por solicitud por hora de creación del mensaje en orden descendente.
// getOpenedList()
Ticket . getOpenedList ( OFFSET , new Ticket . GetOpenedListHandler () {
@ Override
public void onResult ( List < Ticket > tickets , boolean hasNext , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
// offset += tickets.size(); for the next tickets.
// TODO: Implement your code to display the ticket list.
}
});
// getClosedList()
Ticket . getClosedList ( OFFSET , new Ticket . GetClosedListHandler () {
@ Override
public void onResult ( List < Ticket > tickets , boolean hasNext , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
// offset += tickets.size(); for the next tickets.
// TODO: Implement your code to display the ticket list.
}
});
Para tickets configurados con campos personalizados, puede agregar un filtro a getOpenList()
y getClosedList()
para ordenar tickets por claves y valores de campos personalizados.
Map < String , String > customFieldFilter = new HashMap <>();
customFieldFilter . put ( "subject" , "doggy_doggy" );
Ticket . getOpenedList ( OFFSET , customFieldFilter , new Ticket . GetOpenedListHandler () {
@ Override
public void onResult ( List < Ticket > tickets , boolean hasNext , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
List < Ticket > openedTicket = tickets ;
// offset += tickets.length; for the next tickets.
// TODO: Implement your code to display the ticket list.
}
});
Puede recuperar un ticket específico con la URL de su canal.
Ticket . getByChannelUrl ( channel . getUrl (), new Ticket . GetByChannelUrlHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
}
});
Puede mostrar la cantidad de tickets abiertos en su aplicación cliente usando Ticket.getOpenCount()
.
Ticket . getOpenCount ( new Ticket . GetOpenCountHandler () {
@ Override
public void onResult ( int count , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
// TODO: Implement your code with the result value.
}
});
Utilice el método ticket.close()
para permitir que los clientes cierren directamente un ticket en su aplicación de cliente para que los agentes puedan cambiar rápidamente a las consultas de otros clientes sin demora ni la confirmación del cliente.
ticket . close ( CLOSE_COMMENT , new Ticket . CloseHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
// TODO: Implement your code to close a ticket.
}
});
En caso de que falle una solicitud de API, el parámetro SendbirdException
en un controlador contendrá la información sobre el error.
Propiedad | Descripción |
---|---|
código | EnviarBirdError.ERR_REQUEST_FAILED (800220) |
mensaje | Mensaje de error detallado con código de error específico, si existe. |