Sendbird Desk는 실시간 인앱 지원을 통해 강력한 고객 참여를 가능하게 합니다. Desk SDK를 사용하면 Android 애플리케이션에 고객 지원 관련 기능을 쉽게 초기화, 구성 및 구축할 수 있습니다.
Sendbird Desk는 Sendbird Chat Platform의 티켓 관리용 플러그인으로, 모든 Desk 이벤트는 Chat SDK를 통해 처리됩니다.
모든 티켓에는 적절한 상담원이 배정되며 Sendbird Chat SDK를 사용하여 티켓에 실시간 메시징을 구현하는 채팅 그룹 채널로 연결됩니다.
Desk SDK의 주요 구성 요소 중 일부는 다음과 같습니다.
보내는 사람 | 하위 유형 | |
---|---|---|
사용자 메시지 | 대리인 또는 고객 | 리치 메시지 |
관리자 메시지 | 특정 발신자 없이 데스크 서버에서 전송됨 | 알림 메시지 및 시스템 메시지 |
참고 : 리치 메시지는 URL 미리보기, 티켓 종료 확인 요청, 피드백 요청 메시지로 더 분류됩니다.
Android용 Desk SDK 문서에서 Android용 Sendbird Desk SDK에 대해 자세히 알아보세요. 버그 및 기능 요청에 대한 의견이나 질문이 있으시면 Sendbird 커뮤니티를 방문해 주세요.
Sendbird Desk SDK for 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
이 섹션에서는 Android용 Sendbird Desk SDK를 시작하는 데 필요한 정보를 제공합니다.
샘플 앱은 Sendbird Desk SDK의 핵심 기능을 보여줍니다. GitHub 리포지토리에서 앱을 다운로드하여 실제 SDK로 무엇을 할 수 있는지 알아보고 자신만의 프로젝트 구축을 시작해 보세요.
Sendbird 애플리케이션은 사용자, 메시지, 채널 등 채팅 서비스에 필요한 모든 요소로 구성됩니다. 애플리케이션을 생성하려면:
플랫폼에 관계없이 앱당 하나의 Sendbird 애플리케이션만 통합할 수 있습니다. 하지만 이 애플리케이션은 추가 설정 없이 Sendbird가 제공하는 모든 플랫폼 간의 통신을 지원합니다.
참고 : 모든 데이터는 단일 애플리케이션 범위로 제한되므로 서로 다른 Sendbird 애플리케이션을 사용하는 사용자는 서로 채팅할 수 없습니다.
외부 라이브러리나 SDK 사용에 익숙하다면 Chat SDK를 설치하는 것은 간단합니다. 먼저 루트 build.gradle
파일에 다음 코드를 추가합니다.
allprojects {
repositories {
.. .
maven { url " https://repo.sendbird.com/public/maven " }
}
}
참고 : 위의 코드 블록이 모듈
bundle.gradle
파일에 추가되지 않았는지 확인하세요.
그런 다음 프로젝트의 최상위 build.gradle
파일에 종속성을 추가합니다.
dependencies {
implementation ' com.sendbird.sdk:sendbird-desk-android-sdk:1.1.4 '
}
참고 : Desk SDK 버전
1.0.12
이하는 2022년 2월 1일까지 JCenter에서 다운로드할 수 있습니다. SDK1.0.12
이상 버전은 Sendbird의 원격 저장소에서 사용할 수 있습니다.
또는 이 리포지토리에서 Desk SDK를 다운로드할 수 있습니다. Desk SDK를 libs/
폴더에 복사하고 build.gradle
파일에도 라이브러리가 포함되어 있는지 확인하세요.
설치가 완료되면 상담원과 고객 간의 커뮤니케이션을 위한 티켓이 생성될 수 있습니다. 첫 번째 티켓을 만들려면 아래의 단계별 지침을 따르세요.
먼저, 클라이언트 앱 실행 시 'SendBirdDesk' 인스턴스를 초기화해야 합니다. 'Application.onCreate()'에서 SendbirdChat.init()' 및 'SendBirdDesk.init()'를 호출합니다. SendbirdChat.init()는 대시보드에서 Sendbird 애플리케이션의 APP_ID로 먼저 초기화되어야 합니다.
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 ();
}
});
}
}
참고 : Desk SDK와 Chat SDK 모두에 동일한
APP_ID
사용해야 합니다. 다른App_ID
의 Sendbird 인스턴스로 Sendbird Desk를 시작하면 클라이언트 앱의 기존 데이터가 모두 삭제됩니다.
제공하려는 채팅 서비스에 따라 클라이언트 앱에서 Chat SDK만 사용하거나 Chat과 Desk SDK를 함께 사용할 수 있습니다.
SDK | 용도 |
---|---|
채팅 SDK | 고객이 서로 채팅할 수 있는 인앱 메신저입니다. |
Chat 및 Desk SDK | 고객이 상담원과 채팅할 수 있는 티켓입니다. |
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 ();
}
});
}
}
고객은 인앱 채팅이나 Facebook, Instagram, Twitter 등의 소셜 미디어 등 다양한 유형의 채널을 통해 지원을 요청할 수 있습니다. Desk SDK의 이러한 지원 기능을 사용하려면 요청이 들어오는 채널에 따라 SendBirdDesk
인스턴스가 Sendbird 서버와 연결되어야 합니다.
authenticate()
메소드를 사용하여 인증합니다.인증이 완료되면 고객은 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.
}
});
}
});
참고 : Sendbird Chat 플랫폼 고객은 이미 Chat SDK로 인증된 사용자를 의미합니다. Chat SDK와 Desk SDK를 동시에 구현하는 경우 사용자 ID와 액세스 토큰을 먼저 사용하여 사용자를 Sendbird 서버에 연결하세요.
고객의 초기 메시지 전이나 후에 새 티켓을 생성하려면 Ticket.create()
메서드를 구현하세요.
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().
}
});
Sendbird 서버에서 티켓이 성공적으로 생성되면 서버의 콜백을 통해 ticket.getChannel()
에서 티켓과 해당 채널에 액세스할 수 있습니다.
고객이 첫 번째 메시지를 보내기 전에 상담원은 대시보드에서 티켓을 볼 수 없으며 티켓 할당이 발생하지 않습니다. 대화가 시작되면 Desk Dashboard를 통해 사용 가능한 상담원에게 티켓이 할당되고 Chat SDK를 통해 메시지가 송수신됩니다.
티켓을 만들 때 다음 매개변수를 사용할 수 있습니다.
참고 : Groupkey 및 customFields만 정의해야 하며 대시보드에서만 액세스할 수 있습니다.
논쟁 | 유형 | 설명 |
---|---|---|
TICKET_TITLE | 끈 | 티켓의 제목을 지정합니다. |
USER_NAME | 끈 | 티켓을 제출하거나 받는 사용자의 이름을 지정합니다. |
GROUP_KEY | 끈 | 특정 팀의 식별자를 지정합니다. |
사용자 정의 필드 | 중첩된 객체 | 키-값 맞춤 항목으로 구성된 티켓의 추가 정보를 지정합니다. 대시보드의 설정 > 티켓 필드에 이미 등록된 사용자 정의 필드만 키로 사용할 수 있습니다. |
우선 사항 | 끈 | 티켓의 우선순위 값을 지정합니다. 값이 높을수록 우선순위가 높습니다. 유효한 값은 LOW , MEDIUM , HIGH 및 URGENT 입니다. |
RELATED_CHANNEL_URLS | 정렬 | 해당 티켓과 관련된 Sendbird Chat 플랫폼의 그룹 채널을 지정하며 채널 URL과 채널 이름으로 구성됩니다. 관련 채널은 최대 3개까지 추가할 수 있습니다. |
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.
}
}
);
이 섹션에서는 클라이언트 앱에서 티켓을 처리하고 종료하는 절차를 자세히 설명합니다.
특정 티켓에 대한 추가 정보를 추가하려면 ticket.setCustomFields()
메서드를 사용하세요.
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.
}
});
참고 : 대시보드의 데스크 > 설정 > 티켓 필드 에 등록된 사용자 정의 필드만 키로 사용할 수 있습니다.
고객이 자신에 대한 추가 정보를 추가하도록 하려면 'SendBirdDesk'의 setCustomerCustomFields()
메서드를 사용하세요.
참고 : 대시보드의 데스크 > 설정 > 고객 필드 에 등록된 커스텀 필드만 키로 사용할 수 있습니다.
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.
}
});
고객이 자신에 대한 추가 정보를 추가하도록 하려면 SendBirdDesk
의 setCustomerCustomFields()
메서드를 사용하세요.
참고 : 대시보드의 설정 > 고객 필드 에 등록된 사용자 정의 필드만 키로 사용할 수 있습니다.
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.
}
});
관련 채널은 티켓과 관련된 Sendbird Chat 플랫폼의 그룹 채널을 의미합니다. 티켓을 생성할 때 관련 그룹 채널의 channel_url
을 Ticket.create()
메서드의 relatedChannelUrls
매개 변수에 대한 인수로 전달하세요. 관련 채널을 업데이트하려면 대신 ticket.setRelatedChannelUrls()
사용하세요. 콜백의 ticket.relatedChannels
속성은 관련 채널의 그룹 채널 개체를 나타내며 여기에는 채널 이름과 해당 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.
}
});
참고 : 티켓당 최대 3개의 관련 채널을 추가할 수 있습니다.
URL 미리보기를 통해 애플리케이션 사용자는 대화 중에 링크를 열기 전에 무엇을 얻을지에 대한 기대를 충족할 수 있습니다.
URL을 미리 보려면 모든 문자 메시지에 URL이 포함되어 있는지 확인해야 합니다. URL이 포함된 문자 메시지가 성공적으로 전송되면 getUrlPreview()
메서드를 사용하여 URL을 추출하여 Sendbird 서버로 전달해야 합니다. 서버로부터 받은 파싱된 데이터를 JSON
객체로 설정하고 객체를 문자열화하여 updateUserMessage()
메서드의 매개변수에 인수로 전달합니다. 그런 다음 URL 미리보기가 포함된 업데이트된 메시지가 채널 이벤트 핸들러의 onMessageUpdated()
메서드를 통해 클라이언트 앱에 전달됩니다.
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 ;
}
}
});
}
}
});
참고 : Github 페이지로 이동하여 샘플 코드의
updateUserMessageWithUrl()
및UrlPreviewAsyncTask
클래스를 참조하세요. 위의 샘플 코드에서extractUrlsFromMessage()
,getOGTagsWithUrl()
및toJsonString()
과 같은 메소드를 구현하는 방법에 대한 아이디어를 얻을 수 있습니다. 이는 실제 코드는 아니지만 사용할 전체 흐름을 이해하는 데 도움이 됩니다. URL 미리보기.
채널 이벤트 핸들러의 onMessageUpdated()
메소드에서 아래와 같이 message.data
속성에서 URL 미리보기에 대한 데이터를 확인할 수 있습니다.
{
"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 "
}
}
관리자 메시지는 시스템에서 전송하는 사용자 정의 가능한 메시지이며 두 가지 유형의 관리자 메시지가 있습니다. 알림은 환영 메시지, 지연 메시지 등 고객과 상담원 모두에게 전송되고 표시되는 메시지입니다. 시스템 메시지는 티켓 상태 및 담당자 변경 등 티켓에 일부 변경 사항이 있을 때 티켓 세부 정보 보기 에서 상담원에게 전송되고 표시되는 메시지입니다.
참고 : Desk > 설정 > 트리거 에서 알림을 사용자 정의할 수 있으며 대시보드의 Desk > 설정 > 시스템 메시지 에서 시스템 메시지를 사용자 정의할 수 있습니다.
클라이언트 앱이 채널 이벤트 핸들러의 'onMessageReceived()' 메소드를 통해 메시지를 수신하면 시스템 메시지는 message.custom_type
값으로 알림 메시지와 구별되며 해당 하위 유형은 아래와 같이 message.data
에 지정됩니다.
{
"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. "
}
참고 :
transfer
data
에SYSTEM_MESSAGE_TICKET_TRANSFERRED_BY_AGENT
있는 경우에만 나타납니다.
시스템 메시지는 상담원에게만 표시됩니다. 고객에게 표시되지 않도록 하려면 다음 샘플 코드를 참조하세요.
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 ;
}
관리자에게는 티켓을 직접 종료할 수 있는 권한이 있지만, 상담원은 관리자처럼 티켓을 종료하거나 상담원 권한 설정에 따라 고객에게 티켓을 종료할지 여부를 물어볼 수 있습니다. 확인 요청 메시지는 아래와 같이 3가지 상태를 가질 수 있습니다.
상태 | 설명 |
---|---|
대기 중 | 에이전트가 확인 요청 메시지를 보낼 때 설정됩니다. |
확인됨 | 고객이 티켓 종료에 동의하는 시점을 설정합니다. (기본값: true ) |
거절됨 | 고객이 티켓 종료를 거부하는 경우를 설정합니다. (기본값: false ) |
고객이 메시지에 응답하면 Ticket.confirmEndOfChat()
메서드를 호출하여 true(동의) 또는 false(거절) 응답이 CONFIRMED
또는 DECLINED
로 Sendbird 서버에 전송됩니다.
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 "
}
}
티켓을 종료한 직후 고객에게 메시지를 보내 티켓을 통해 제공되는 지원에 만족하는지 물어볼 수 있습니다. 대시보드에서 고객 만족도 평가 기능을 켜면 고객은 점수를 매기고 피드백으로 댓글을 남겨달라는 메시지를 받게 됩니다. 메시지는 아래와 같이 2가지 상태를 가질 수 있습니다.
상태 | 설명 |
---|---|
대기 중 | 상담원이 고객 피드백 요청 메시지를 보내는 시점을 설정합니다. |
확인됨 | 고객이 응답을 보내는 시점을 설정합니다. |
고객이 메시지에 응답하면 ticket.submitFeedback()
메서드를 호출하여 티켓에 대한 점수와 댓글이 데스크 서버로 전송됩니다. 그러면 확인 요청 메시지의 상태가 CONFIRMED
로 변경된다.
ticket . submitFeedback ( USER_MESSAGE , SCORE , COMMENT , net Ticket . SubmitFeedbackHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
}
});
Sendbird Desk 서버는 채널 이벤트 핸들러의 onMessageUpdate()
메소드를 통해 고객의 클라이언트 앱에 업데이트를 알립니다.
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 ;
}
}
}
}
});
}
참고 : 채널 이벤트 핸들러의
onMessageUpdate()
메서드 내message.data
속성에서 다음의 문자열화된JSON
개체를 찾을 수 있습니다.
{
"type" : " SENDBIRD_DESK_CUSTOMER_SATISFACTION " ,
"body" : {
"state" : " CONFIRMED " ,
"customerSatisfactionScore" : 3 ,
"customerSatisfactionComment" : " It was really helpful :) "
}
}
종료된 티켓은 Ticket
의 reopen()
메서드를 사용하여 다시 열 수 있습니다.
ticket . reopen ( new Ticket . ReopenHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
}
});
Ticket.getOpenedList()
및 Ticket.getClosedList()
사용하여 현재 고객의 공개 및 마감 티켓 목록을 검색할 수 있습니다.
고객의 오픈 티켓 및 마감 티켓 내역에 대한 받은 편지함 활동을 디자인할 수 있습니다. 0은 좋은 시작 값이며, 마지막 메시지 생성 시간 내림차순으로 각 호출에 대해 최대 10개의 티켓이 반환됩니다.
참고 : 메시지 생성 시간을 기준으로 요청당 10개의 티켓만 내림차순으로 검색할 수 있습니다.
// 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.
}
});
사용자 정의 필드가 포함된 티켓 세트의 경우 getOpenList()
및 getClosedList()
에 필터를 추가하여 사용자 정의 필드의 키와 값을 기준으로 티켓을 정렬할 수 있습니다.
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.
}
});
채널 URL을 사용하여 특정 티켓을 검색할 수 있습니다.
Ticket . getByChannelUrl ( channel . getUrl (), new Ticket . GetByChannelUrlHandler () {
@ Override
public void onResult ( Ticket ticket , SendbirdException e ) {
if ( e != null ) { // Error.
return ;
}
}
});
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.
}
});
ticket.close()
메서드를 사용하면 상담원이 지체나 고객 확인 없이 다른 고객 문의로 빠르게 전환할 수 있도록 고객이 클라이언트 앱에서 티켓을 직접 종료할 수 있습니다.
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.
}
});
API 요청이 실패한 경우 핸들러의 SendbirdException
매개변수에 오류에 대한 정보가 포함됩니다.
재산 | 설명 |
---|---|
암호 | SendBirdError.ERR_REQUEST_FAILED(800220) |
메시지 | 특정 오류 코드가 포함된 자세한 오류 메시지(있는 경우) |