Sendbird Desk permite um forte envolvimento do cliente por meio de suporte ao vivo no aplicativo. O Desk SDK permite inicializar, configurar e criar facilmente funcionalidades relacionadas ao suporte ao cliente em seus aplicativos Android.
Sendbird Desk é um plugin da plataforma Sendbird Chat para gerenciamento de tickets, e todos os eventos do Desk são tratados por meio do Chat SDK.
Cada ticket recebe agentes apropriados e será direcionado para um canal de grupo de chat, que implementa mensagens em tempo real em tickets com Sendbird Chat SDK.
Estes são alguns dos principais componentes do Desk SDK.
Remetente | Subtipos | |
---|---|---|
Mensagem do usuário | Agente ou cliente | Mensagens ricas |
Mensagem do administrador | Enviado do servidor Desk sem um remetente específico | Mensagens de notificação e mensagens do sistema |
Observação : mensagens ricas são classificadas em visualização de URL, solicitação de confirmação para fechamento de ticket e mensagens de solicitação de feedback.
Saiba mais sobre Sendbird Desk SDK para Android no documento Desk SDK para Android. Se você tiver quaisquer comentários ou perguntas sobre bugs e solicitações de recursos, visite a comunidade Sendbird.
Esta seção mostra os pré-requisitos que você precisa 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 seção fornece as informações necessárias para começar a usar o Sendbird Desk SDK para Android.
Nosso aplicativo de exemplo demonstra os principais recursos do Sendbird Desk SDK. Baixe o aplicativo em nosso repositório GitHub para ter uma ideia do que você pode fazer com o SDK real e começar a construir seu próprio projeto.
Um aplicativo Sendbird compreende tudo o que é necessário em um serviço de chat, incluindo usuários, mensagens e canais. Para criar um aplicativo:
Independentemente da plataforma, apenas um aplicativo Sendbird pode ser integrado por aplicativo; no entanto, o aplicativo oferece suporte à comunicação em todas as plataformas fornecidas pelo Sendbird sem qualquer configuração adicional.
Nota : Todos os dados são limitados ao escopo de um único aplicativo, portanto, usuários em diferentes aplicativos Sendbird não conseguem conversar entre si.
Instalar o Chat SDK é simples se você estiver familiarizado com o uso de bibliotecas externas ou SDKs. Primeiro, adicione o seguinte código ao arquivo root build.gradle
:
allprojects {
repositories {
.. .
maven { url " https://repo.sendbird.com/public/maven " }
}
}
Nota : certifique-se de que o bloco de código acima não seja adicionado ao arquivo
bundle.gradle
do módulo.
Em seguida, adicione a dependência ao arquivo build.gradle
de nível superior do projeto.
dependencies {
implementation ' com.sendbird.sdk:sendbird-desk-android-sdk:1.1.4 '
}
Nota : As versões
1.0.12
ou inferiores do Desk SDK podem ser baixadas do JCenter até 1º de fevereiro de 2022. As versões do SDK superiores a1.0.12
estarão disponíveis no repositório remoto do Sendbird.
Alternativamente, você pode baixar o Desk SDK deste repositório. Copie o Desk SDK em sua pasta libs/
e certifique-se de incluir a biblioteca em seu arquivo build.gradle
também.
Após a conclusão da instalação, um ticket pode ser criado para comunicação entre um agente e um cliente. Siga as instruções passo a passo abaixo para criar seu primeiro ticket.
Primeiro, uma instância 'SendBirdDesk' deve ser inicializada ao iniciar um aplicativo cliente. Chame SendbirdChat.init()' e 'SendBirdDesk.init()' em 'Application.onCreate()'. O SendbirdChat.init() deve ser inicializado primeiro pelo APP_ID do seu aplicativo Sendbird no painel.
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 ();
}
});
}
}
Observação : o mesmo
APP_ID
deve ser usado para SDKs de Desk e Chat. Se você iniciar o Sendbird Desk com uma instância Sendbird de outroApp_ID
, todos os dados existentes no aplicativo cliente serão apagados.
É possível usar apenas o Chat SDK ou os SDKs Chat e Desk juntos em seu aplicativo cliente, dependendo do serviço de chat que você deseja fornecer.
SDK | Usado para |
---|---|
SDK de bate-papo | Mensageiro no aplicativo onde os clientes podem conversar entre si. |
SDKs de bate-papo e mesa | Tickets onde os clientes podem conversar com os 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 ();
}
});
}
}
Os clientes podem solicitar suporte em diversos tipos de canais: chats no aplicativo ou mídias sociais como Facebook, Instagram e Twitter. Para usar esses recursos de suporte do Desk SDK, a instância SendBirdDesk
deve estar conectada ao servidor Sendbird dependendo de qual canal a solicitação vem:
authenticate()
com seus IDs de usuário.Uma vez autenticados, os clientes podem conversar ao vivo com agentes baseados na 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 : Clientes da plataforma Sendbird Chat significam usuários que já estão autenticados com o Chat SDK. Se você estiver implementando o Chat SDK e o Desk SDK ao mesmo tempo, primeiro conecte um usuário ao servidor Sendbird com seu ID de usuário e token de acesso.
Implemente o método Ticket.create()
para criar um novo ticket antes ou depois da mensagem inicial do 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().
}
});
Depois que um ticket for criado com sucesso no servidor Sendbird, você poderá acessar o ticket e seu canal em ticket.getChannel()
por meio do retorno de chamada do servidor.
Antes de um cliente enviar a primeira mensagem, os agentes não conseguem ver o ticket no painel e a atribuição do ticket não ocorre. Quando a conversa começa, o ticket é atribuído a um agente disponível pelo Desk Dashboard enquanto as mensagens são enviadas e recebidas por meio do Chat SDK.
Você pode usar os seguintes parâmetros ao criar um ticket.
Nota : Apenas Groupkey e customFields precisam ser definidos e só podem ser acessados no Dashboard.
Argumento | Tipo | Descrição |
---|---|---|
TICKET_TITLE | corda | Especifica o título do ticket. |
NOME DE USUÁRIO | corda | Especifica o nome do usuário que envia ou recebe o ticket. |
GRUPO_KEY | corda | Especifica o identificador de uma equipe específica. |
campos personalizados | objeto aninhado | Especifica informações adicionais do ticket que consistem em itens personalizados de valor-chave . Somente campos personalizados já cadastrados em Configurações > Campos de ticket em seu painel podem ser usados como chave. |
PRIORIDADE | corda | Especifica o valor de prioridade do ticket. Valores mais altos significam prioridade mais alta. Os valores válidos são LOW , MEDIUM , HIGH e URGENT . |
RELATED_CHANNEL_URLS | variedade | Especifica canais de grupo na plataforma Sendbird Chat que estão relacionados a este ticket e consiste em URLs e nomes de canais. Até 3 canais relacionados podem ser adicionados. |
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 seção detalha o procedimento para processar e fechar um ticket no seu aplicativo cliente.
Use o método ticket.setCustomFields()
para adicionar informações adicionais sobre um 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 : Somente os campos personalizados cadastrados em Desk > Configurações > Campos de ticket do seu painel podem ser usados como chave.
Use o método setCustomerCustomFields()
do 'SendBirdDesk' para fazer seus clientes adicionarem informações adicionais sobre si mesmos.
Nota : Somente os campos personalizados cadastrados em Desk > Configurações > Campos do cliente do seu painel podem ser usados como chave.
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.
}
});
Use o método setCustomerCustomFields()
do SendBirdDesk
para fazer com que seus clientes adicionem informações adicionais sobre si mesmos.
Nota : Somente os campos personalizados cadastrados em Configurações > Campos do cliente do seu painel podem ser usados como chave.
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.
}
});
Canais relacionados indicam canais de grupo na plataforma Sendbird Chat que estão relacionados a um ticket. Ao criar um ticket, passe os channel_url
s dos canais do grupo relacionado como um argumento para o parâmetro relatedChannelUrls
no método Ticket.create()
. Para atualizar canais relacionados, use ticket.setRelatedChannelUrls()
. A propriedade ticket.relatedChannels
no retorno de chamada indica o objeto de canal de grupo de canais relacionados e contém nomes de canais e seus URLs.
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 : Podem ser adicionados até 3 canais relacionados por ticket.
Com as visualizações de URL, os usuários do seu aplicativo podem atender às expectativas sobre o que obterão antes de abrir o link durante as conversas.
Para visualizar URLs, cada mensagem de texto deve ser verificada se inclui algum URL. Quando uma mensagem de texto incluindo um URL é enviada com sucesso, o URL deve ser extraído e passado para o servidor Sendbird usando o método getUrlPreview()
. Defina os dados analisados recebidos do servidor como um objeto JSON
e restrinja o objeto para passá-lo como um argumento para um parâmetro no método updateUserMessage()
. Em seguida, a mensagem atualizada com visualização de URL é entregue aos aplicativos cliente por meio do método onMessageUpdated()
do manipulador de eventos do 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 : Vá para a página do Github e consulte as classes
updateUserMessageWithUrl()
eUrlPreviewAsyncTask
no código de exemplo. Você terá uma ideia de como implementar métodos no código de exemplo acima, comoextractUrlsFromMessage()
,getOGTagsWithUrl()
etoJsonString()
, que não são códigos reais, mas têm como objetivo ajudá-lo a entender o fluxo geral a ser usado Visualizações de URL.
No método onMessageUpdated()
do manipulador de eventos do canal, você pode encontrar os dados para visualização do URL na propriedade message.data
conforme abaixo.
{
"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 "
}
}
Mensagens de administrador são mensagens personalizáveis enviadas pelo sistema e existem 2 tipos de mensagens de administrador. Notificações são mensagens enviadas e exibidas para clientes e agentes, como mensagens de boas-vindas ou mensagens de atraso. Mensagens do sistema são mensagens enviadas e exibidas aos agentes na visualização de detalhes do ticket quando um ticket sofre algumas alterações, como alterações no status do ticket e no responsável.
Observação : você pode personalizar notificações em Desk > Configurações > Gatilhos e mensagens do sistema em Desk > Configurações > Mensagens do sistema em seu painel.
Quando o aplicativo cliente recebe a mensagem por meio do método 'onMessageReceived()' do manipulador de eventos do canal, as mensagens do sistema são diferenciadas das mensagens de notificação pelo valor de message.custom_type
e seu subtipo é especificado em message.data
conforme abaixo.
{
"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. "
}
Obs : A
transfer
aparece somente quando osdata
possuemSYSTEM_MESSAGE_TICKET_TRANSFERRED_BY_AGENT
.
As mensagens do sistema devem ser exibidas apenas para agentes. Consulte o código de exemplo a seguir para evitar exibi-los aos seus 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 ;
}
Embora os administradores tenham permissão para fechar um ticket diretamente, os agentes podem fechá-lo como os administradores fazem ou perguntar aos clientes se devem fechar um ticket, dependendo da configuração de permissão do agente. A mensagem de solicitação de confirmação pode ter 3 tipos de estado conforme abaixo.
Estado | Descrição |
---|---|
ESPERANDO | Definido quando um agente envia uma mensagem de solicitação de confirmação. |
CONFIRMADO | Defina quando um cliente concorda em fechar o ticket. (Padrão: verdadeiro ) |
RECUSADO | Defina quando um cliente se recusa a fechar o ticket. (Padrão: falso ) |
Quando um cliente responde à mensagem, a resposta verdadeiro (concordo) ou falso (recuso) é enviada ao servidor Sendbird como CONFIRMED
ou DECLINED
chamando o 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 "
}
}
Você pode enviar uma mensagem aos clientes logo após fechar um ticket para perguntar se eles estão satisfeitos com o suporte fornecido por meio do ticket. Quando o recurso de classificação de satisfação do cliente estiver ativado em seu painel, os clientes receberão uma mensagem solicitando uma pontuação e deixando um comentário como feedback. A mensagem pode ter 2 estados conforme abaixo.
Estado | Descrição |
---|---|
ESPERANDO | Definido quando um agente envia uma mensagem de solicitação de feedback do cliente. |
CONFIRMADO | Defina quando um cliente envia uma resposta. |
Quando um cliente responde à mensagem, sua pontuação e comentário sobre o ticket são enviados ao servidor Desk chamando o método ticket.submitFeedback()
. Em seguida, o estado da mensagem de solicitação de confirmação é alterado para CONFIRMED
.
ticket . submitFeedback ( USER_MESSAGE , SCORE , COMMENT , net Ticket . SubmitFeedbackHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
}
});
O servidor Sendbird Desk notifica o aplicativo cliente do cliente sobre atualizações por meio do método onMessageUpdate()
do manipulador de eventos do 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 : Você pode encontrar o objeto
JSON
stringificado a seguir na propriedademessage.data
dentro do métodoonMessageUpdate()
do manipulador de eventos do canal.
{
"type" : " SENDBIRD_DESK_CUSTOMER_SATISFACTION " ,
"body" : {
"state" : " CONFIRMED " ,
"customerSatisfactionScore" : 3 ,
"customerSatisfactionComment" : " It was really helpful :) "
}
}
Um ticket fechado pode ser reaberto usando o método reopen()
no Ticket
.
ticket . reopen ( new Ticket . ReopenHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
}
});
Você pode recuperar uma lista dos tickets abertos e fechados do cliente atual usando Ticket.getOpenedList()
e Ticket.getClosedList()
.
Você pode criar uma atividade de caixa de entrada para tickets abertos e histórico de tickets fechados para seu cliente. Zero é um bom valor inicial, então o máximo de 10 tickets serão retornados para cada chamada em ordem decrescente do horário de criação da última mensagem.
Nota : Apenas 10 tickets podem ser recuperados por solicitação por horário de criação da mensagem em ordem decrescente.
// 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 definidos com campos personalizados, você pode adicionar um filtro a getOpenList()
e getClosedList()
para classificar tickets por chaves e 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.
}
});
Você pode recuperar um ticket específico com o URL do canal.
Ticket . getByChannelUrl ( channel . getUrl (), new Ticket . GetByChannelUrlHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
}
});
Você pode exibir o número de tickets abertos em seu aplicativo 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.
}
});
Use o método ticket.close()
para permitir que os clientes fechem diretamente um ticket em seu aplicativo de cliente para que os agentes possam mudar rapidamente para outras consultas de clientes sem demora ou confirmação do 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.
}
});
No caso de falha na solicitação da API, o parâmetro SendbirdException
em um manipulador conterá as informações sobre o erro.
Propriedade | Descrição |
---|---|
código | SendBirdError.ERR_REQUEST_FAILED (800220) |
mensagem | Mensagem de erro detalhada com código de erro específico, se existir. |