Sendbird Desk は、ライブのアプリ内サポートを通じて強力な顧客エンゲージメントを可能にします。 Desk SDK を使用すると、カスタマー サポート関連の機能を Android アプリケーションに簡単に初期化、構成、構築できます。
Sendbird Desk は、チケットを管理するための Sendbird Chat Platform のプラグインであり、すべての Desk イベントは Chat SDK を通じて処理されます。
すべてのチケットには適切なエージェントが割り当てられ、チャットのグループ チャネルに転送されます。これにより、Sendbird Chat SDK を使用してチケットにリアルタイム メッセージングが実装されます。
これらは、Desk SDK の主要コンポーネントの一部です。
送信者 | サブタイプ | |
---|---|---|
ユーザーメッセージ | 代理店または顧客 | リッチメッセージ |
管理者メッセージ | 特定の送信者なしでデスクサーバーから送信される | 通知メッセージとシステムメッセージ |
注: リッチ メッセージは、URL プレビュー、チケット クローズの確認リクエスト、フィードバック リクエスト メッセージにさらに分類されます。
Sendbird Desk SDK for Android の詳細については、Desk SDK for Android のドキュメントをご覧ください。バグや機能リクエストに関するコメントや質問がある場合は、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
このセクションでは、Sendbird Desk SDK for Android の使用を開始するために必要な情報を説明します。
私たちのサンプル アプリは、Sendbird Desk SDK のコア機能を示します。 GitHub リポジトリからアプリをダウンロードして、実際の SDK で何ができるかを把握し、独自のプロジェクトの構築を開始してください。
Sendbird アプリケーションは、ユーザー、メッセージ、チャネルなど、チャット サービスに必要なすべてで構成されています。アプリケーションを作成するには:
プラットフォームに関係なく、アプリごとに統合できる Sendbird アプリケーションは 1 つだけです。ただし、このアプリケーションは、追加のセットアップを行わなくても、Sendbird が提供するすべてのプラットフォームにわたる通信をサポートします。
注: すべてのデータは 1 つのアプリケーションの範囲に限定されるため、異なる 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.0.12
日まで JCenter からダウンロードできます。1.0.12 より高い SDK バージョンは、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 SDK と Desk SDK の両方を一緒に使用することもできます。
SDK | 用途 |
---|---|
チャットSDK | 顧客同士がチャットできるアプリ内メッセンジャー。 |
チャットおよびデスク 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()
内のチケットとそのチャネルにアクセスできるようになります。
顧客が最初のメッセージを送信する前は、エージェントはダッシュボードでチケットを確認できず、チケットの割り当ては行われません。会話が開始されると、チャット SDK を通じてメッセージが送受信される間、チケットはデスク ダッシュボードによって対応可能なエージェントに割り当てられます。
チケットの作成時に次のパラメータを使用できます。
注: 定義する必要があるのはグループキーとカスタムフィールドだけであり、ダッシュボードからのみアクセスできます。
口論 | タイプ | 説明 |
---|---|---|
チケット_タイトル | 弦 | チケットのタイトルを指定します。 |
USER_NAME | 弦 | チケットを送信または受信するユーザーの名前を指定します。 |
グループキー | 弦 | 特定のチームの識別子を指定します。 |
カスタムフィールド | ネストされたオブジェクト | キーと値のカスタム項目で構成されるチケットの追加情報を指定します。キーとして使用できるのは、ダッシュボードの[設定] > [チケットフィールド] ですでに登録されているカスタム フィールドのみです。 |
優先度 | 弦 | チケットの優先度の値を指定します。値が大きいほど優先度が高くなります。有効な値は、 LOW 、 MEDIUM 、 HIGH 、およびURGENTです。 |
RELATED_CHANNEL_URLS | 配列 | このチケットに関連し、チャネル URL とチャネル名で構成される Sendbird Chat プラットフォームのグループ チャネルを指定します。関連チャンネルは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 "
}
}
管理メッセージはシステムによって送信されるカスタマイズ可能なメッセージで、2 種類の管理メッセージがあります。通知は、ウェルカム メッセージや遅延メッセージなど、顧客とエージェントの両方に送信および表示されるメッセージです。システム メッセージは、チケットのステータスや担当者の変更など、チケットに何らかの変更があったときに、チケットの詳細ビューでエージェントに送信および表示されるメッセージです。
注: 通知はダッシュボードの[デスク] > [設定] > [トリガー]でカスタマイズでき、システム メッセージは[デスク] > [設定] > [システム メッセージ]でカスタマイズできます。
クライアント アプリがチャネル イベント ハンドラーの '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 ;
}
}
}
}
});
}
注: 次の文字列化された
JSON
オブジェクトは、チャネル イベント ハンドラーのonMessageUpdate()
メソッド内のmessage.data
プロパティにあります。
{
"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()
を使用して、現在の顧客のオープンおよびクローズされたチケットのリストを取得できます。
顧客のオープンチケットとクローズ済みチケット履歴の受信箱アクティビティを設計できます。ゼロが適切な開始値です。その場合、呼び出しごとに最大 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) |
メッセージ | 特定のエラー コードが存在する場合、詳細なエラー メッセージ。 |