Android IM SDK
クイックスタート
SDKダウンロードURL
https://github.com/udesk/UdeskSDK-Android
一、管理者バックエンドでアプリケーション作成時に生成された対応するApp KeyとApp IDを初期化する
UdeskSDKManager.getInstance().initApiKey(context, "your domain","App Key","App Id");
// 注意:ドメインに「http://」を含めないでください。登録時に生成されたドメインが「http://udesksdk.udesk.cn/」の場合、「udesksdk.udesk.cn」のみを渡してください。
二、UdeskConfig設定情報を設定する
説明:設定する機能は実際のニーズに応じて選択してください。すべてデフォルトの動作があります。最も基本的な設定はユーザーの基本情報 setDefualtUserInfo です。
// デフォルトのシステムフィールドはUdeskが定義済みのフィールドです。開発者はこれらのユーザー情報を直接渡して、カスタマーサポートが確認できるようにすることができます。
String sdktoken = "ユーザーの一意の識別子";
Map<String, String> info = new HashMap<String, String>();
//sdktoken 必須
info.put(UdeskConst.UdeskUserInfo.USER_SDK_TOKEN, sdktoken);
// 以下の情報はオプションです
info.put(UdeskConst.UdeskUserInfo.NICK_NAME,"ニックネーム");
info.put(UdeskConst.UdeskUserInfo.EMAIL,"0631@163.com");
info.put(UdeskConst.UdeskUserInfo.CELLPHONE,"15651818750");
info.put(UdeskConst.UdeskUserInfo.DESCRIPTION,"説明情報");
// ユーザー基本情報のみを設定する構成
UdeskConfig.Builder builder = new UdeskConfig.Builder();
builder.setDefualtUserInfo(info)
UdeskSDKManager.getInstance().entryChat(getApplicationContext(), builder.build(), sdkToken);
デフォルト顧客フィールド説明
| key | 必須かどうか | 説明 |
|---|---|---|
| sdk_token | 必須 | ユーザー一意識別子 |
| cellphone | オプション | ユーザー携帯電話番号 |
| オプション | メールアカウント | |
| description | オプション | ユーザー説明 |
UdeskConfig内部クラスBuilderの説明
| プロパティ | 設定メソッド | 機能説明 |
|---|---|---|
| udeskTitlebarBgResId | setUdeskTitlebarBgResId | タイトルバーTitleBarの背景色、色で設定 |
| udeskTitlebarTextLeftRightResId | setUdeskTitlebarTextLeftRightResId | タイトルバーTitleBar、左右両側のテキストの色 |
| udeskIMLeftTextColorResId | setUdeskIMLeftTextColorResId | IM画面、左側テキストのフォント色 |
| udeskIMRightTextColorResId | setUdeskIMRightTextColorResId | IM画面、右側テキストのフォント色 |
| udeskIMAgentNickNameColorResId | setUdeskIMAgentNickNameColorResId | IM画面、左側カスタマーサポートニックネームテキストのフォント色 |
| udeskIMTimeTextColorResId | setUdeskIMTimeTextColorResId | IM画面、時間テキストのフォント色 |
| udeskIMTipTextColorResId | setUdeskIMTipTextColorResId | IM画面、ヒントメッセージテキストのフォント色、例:カスタマーサポート転送 |
| udeskbackArrowIconResId | setUdeskbackArrowIconResId | 戻る矢印アイコンリソースID |
| udeskCommityBgResId | setUdeskCommityBgResId | 商品相談アイテムの背景色 |
| udeskCommityTitleColorResId | setUdeskCommityTitleColorResId | 商品紹介Titleの文字色 |
| udeskCommitysubtitleColorResId | setUdeskCommitysubtitleColorResId | 商品相談ページ内、商品紹介サブTitleの文字色 |
| udeskCommityLinkColorResId | setUdeskCommityLinkColorResId | 商品相談ページ内、リンク送信の文字色 |
| isUserSDkPush | setUserSDkPush | プッシュサービスを使用するかどうかを設定 true は使用する falseは使用しない |
| UdeskQuenuMode | setUdeskQuenuMode | 待機列放棄の戦略を設定 |
| isUseVoice | setUseVoice | 録音機能を使用するかどうか trueは使用する falseは使用しない |
| isUsephoto | setUsephoto | 画像送信機能を使用するかどうか trueは使用する falseは使用しない |
| isUsecamera | setUsecamera | 写真撮影機能を使用するかどうか trueは使用する falseは使用しない |
| isUsefile | setUsefile | ファイルアップロード機能を使用するかどうか trueは使用する falseは使用しない |
| isUsefile | setUseMap | 位置情報送信機能を使用するかどうか trueは使用する falseは使用しない |
| isUseEmotion | setUseEmotion | 絵文字を使用するかどうか trueは使用する falseは使用しない |
| isUseMore | setUseMore | その他の機能オプションを表示するかどうか trueは使用する falseは使用しない |
| isUseSmallVideo | setUseSmallVideo | ショートビデオ機能が必要かどうかを設定 trueは使用する falseは使用しない |
| ScaleMax | setScaleImg | 画像アップロード時にオリジナル画像を使用するか、サムネイルを使用するか |
| isScaleImg | setScaleMax | 幅と高さの最大値を設定、超える場合は圧縮、それ以外は圧縮しない |
| Orientation | setOrientation | デフォルトの画面表示設定を設定 |
| isUserForm | setUserForm | ローカル設定でフォームメッセージが必要かどうか、trueは必要、 false は不要 |
| defualtUserInfo | setDefualtUserInfo | ユーザーの基本情報を作成 |
| definedUserTextField | setDefinedUserTextField | カスタムテキスト情報を作成 |
| definedUserRoplist | setDefinedUserRoplist | カスタムリスト情報を作成 |
| updateDefualtUserInfo | setUpdateDefualtUserInfo | ユーザーが更新する必要のある基本情報 |
| updatedefinedUserTextField | setUpdatedefinedUserTextField | ユーザーが更新する必要のあるカスタムフィールドテキスト情報 |
| updatedefinedUserRoplist | setUpdatedefinedUserRoplist | ユーザーが更新する必要のあるカスタムリストフィールド情報 |
| firstMessage | setFirstMessage | メッセージを1つ設定する セッション割り当て時にカスタマーサポートに送信 |
| robot_modelKey | setRobot_modelKey | udesk ロボット設定ウェルカムメッセージ 対応するID値 |
| concatRobotUrlWithCustomerInfo | setConcatRobotUrlWithCustomerInfo | ロボットページで顧客情報を収集するために使用 |
| customerUrl | setCustomerUrl | 顧客のアバターアドレスを設定 |
| commodity | setCommodity | 商品リンク送信のモードを設定 |
| txtMessageClick | setTxtMessageClick | テキストメッセージ内のリンクメッセージのクリックイベントのインターセプトコールバック。 絵文字を含むものはインターセプトコールバックされません |
| formCallBack | setFormCallBack | オフラインメッセージフォームのコールバックインターフェース 、コールバックは独自の処理フローを使用 |
| structMessageCallBack | setStructMessageCallBack | 構造化メッセージのクリックイベントコールバックインターフェースを設定 |
| extreFunctions | setExtreFunctions | 追加の機能ボタンを設定 |
| functionItemClickCallBack | setExtreFunctions | クリックイベントコールバック テキスト、画像、ビデオ、ファイル、地理位置情報、商品情報を直接送信 |
| isUseNavigationRootView | setNavigations | ナビゲーションUIを使用するかどうかを設定 trueは使用する falseは使用しない |
| navigationModes | setNavigations | 約束されたカスタムボタンコレクションを渡す |
| navigationItemClickCallBack | setNavigations | ナビゲーションにカスタムボタンのクリックコールバックイベントを追加することをサポート |
| isUseNavigationSurvy | setUseNavigationSurvy | ナビゲーションUI内の満足度評価UIを使用するかどうかを設定 trueは使用する falseは使用しない |
| useMapType | setUseMapSetting | どの地図を使用するかを設定 |
| locationMessageClickCallBack | setUseMapSetting | 地理位置情報メッセージのクリックコールバックインターフェース |
| cls | setUseMapSetting | 地図メッセージ表示の詳細アクティビティを開くために渡す |
| groupId | setGroupId | 指定されたグループを設定、毎回入室時に再指定する必要があります |
| isOnlyByGroupId | setGroupId | グループ指定のみで入室するかどうか |
| agentId | setAgentId | 指定されたカスタマーサポートIDを設定、毎回入室時に再指定する必要があります |
| isOnlyByAgentId | setAgentId | カスタマーサポート指定のみで入室するかどうか |
| isOnlyUseRobot | setOnlyUseRobot | ロボットのみを使用するかどうかを設定、その他の機能は使用しない、必須ではありません |
| locale | setLocale | ローカライズ言語を設定 |
| mProduct | setProduct | 商品メッセージを設定 |
完全な参考例
private UdeskConfig.Builder makeBuilder() {
UdeskConfig.Builder builder = new UdeskConfig.Builder();
builder.setUdeskTitlebarBgResId(R.color.udesk_titlebar_bg1) //タイトルバーTitleBarの背景色を設定
.setUdeskTitlebarTextLeftRightResId(R.color.udesk_color_navi_text1) //タイトルバーTitleBar、左右両側のテキストの色を設定
.setUdeskIMLeftTextColorResId(R.color.udesk_color_im_text_left1) //IM画面、左側テキストのフォント色を設定
.setUdeskIMRightTextColorResId(R.color.udesk_color_im_text_right1) // IM画面、右側テキストのフォント色を設定
.setUdeskIMAgentNickNameColorResId(R.color.udesk_color_im_left_nickname1) //IM画面、左側カスタマーサポートニックネームテキストのフォント色を設定
.setUdeskIMTimeTextColorResId(R.color.udesk_color_im_time_text1) // IM画面、時間テキストのフォント色を設定
.setUdeskIMTipTextColorResId(R.color.udesk_color_im_tip_text1) //IM画面、ヒントメッセージテキストのフォント色を設定、例:カスタマーサポート転送
.setUdeskbackArrowIconResId(R.drawable.udesk_titlebar_back) // 戻る矢印アイコンリソースIDを設定
.setUdeskCommityBgResId(R.color.udesk_color_im_commondity_bg1) //商品相談アイテムの背景色を設定
.setUdeskCommityTitleColorResId(R.color.udesk_color_im_commondity_title1) // 商品紹介Titleの文字色を設定
.setUdeskCommitysubtitleColorResId(R.color.udesk_color_im_commondity_subtitle1)// 商品相談ページ内、商品紹介サブTitleの文字色を設定
.setUdeskCommityLinkColorResId(R.color.udesk_color_im_commondity_link1) //商品相談ページ内、リンク送信の文字色を設定
.setUserSDkPush(set_sdkpush.isChecked()) // プッシュサービスを使用するかどうかを設定 true は使用する falseは使用しない
.setOnlyUseRobot(set_use_onlyrobot.isChecked())//ロボット機能のみを使用するかどうかを設定 ロボット機能のみを使用する、ロボット機能のみを使用する; その他の機能は使用しない。
.setUdeskQuenuMode(force_quit.isChecked() ? UdeskConfig.UdeskQuenuFlag.FORCE_QUIT : UdeskConfig.UdeskQuenuFlag.Mark) // 待機列放棄の戦略を設定
.setUseVoice(set_usevoice.isChecked()) // 録音機能を使用するかどうか trueは使用する falseは使用しない
.setUsephoto(set_usephoto.isChecked()) //画像送信機能を使用するかどうか trueは使用する falseは使用しない
.setUsecamera(set_usecamera.isChecked()) //写真撮影機能を使用するかどうか trueは使用する falseは使用しない
.setUsefile(set_usefile.isChecked()) //ファイルアップロード機能を使用するかどうか trueは使用する falseは使用しない
.setUseMap(set_usemap.isChecked()) //位置情報送信機能を使用するかどうか trueは使用する falseは使用しない
.setUseMapSetting(UdeskConfig.UdeskMapType.GaoDe, LocationActivity.class, new ILocationMessageClickCallBack() {
@Override
public void luanchMap(Context context, double latitude, double longitude, String selctLoactionValue) {
Intent intent = new Intent();
intent.putExtra(UdeskConfig.UdeskMapIntentName.Position, selctLoactionValue);
intent.putExtra(UdeskConfig.UdeskMapIntentName.Latitude, latitude);
intent.putExtra(UdeskConfig.UdeskMapIntentName.Longitude, longitude);
intent.setClass(context, ShowSelectLocationActivity.class);
context.startActivity(intent);
}
})
.setUseEmotion(set_useemotion.isChecked()) //絵文字を使用するかどうか trueは使用する falseは使用しない
.setUseMore(set_usemore.isChecked()) // その他のコントロールを使用するかどうか その他の機能オプションを表示する trueは使用する falseは使用しない
.setUseNavigationSurvy(set_use_navigation_survy.isChecked()) //ナビゲーションUI内の満足度評価UIを使用するかどうかを設定 trueは使用する falseは使用しない
.setUseSmallVideo(set_use_smallvideo.isChecked()) //ショートビデオ機能が必要かどうかを設定 trueは使用する falseは使用しない
.setScaleImg(set_use_isscaleimg.isChecked()) //画像アップロード時にオリジナル画像を使用するか、サムネイルを使用するか
.setScaleMax(1024) // サムネイル画像 最大値を設定、超える場合は圧縮、それ以外は圧縮しない
.setOrientation(landscape.isChecked() ? UdeskConfig.OrientationValue.landscape :
(user.isChecked() ? UdeskConfig.OrientationValue.user : UdeskConfig.OrientationValue.portrait)) //デフォルトの画面表示設定を設定
.setUserForm(true) //管理者がバックエンドでSDK使用設定をリクエストしていない場合、デフォルトでフォームメッセージが必要かどうか、trueは必要、 false は不要
.setDefualtUserInfo(getDefualtUserInfo()) // ユーザー基本情報を作成
.setDefinedUserTextField(getDefinedUserTextField()) //ユーザーカスタムテキスト情報を作成
.setDefinedUserRoplist(getDefinedUserRoplist()) //ユーザーカスタムリスト情報を作成
.setUpdateDefualtUserInfo(getUpdateDefualtUserInfo()) // ユーザーの基本情報を更新する設定
.setUpdatedefinedUserTextField(getUpdateDefinedTextField()) //ユーザーが更新する必要のあるカスタムフィールドテキスト情報を設定
.setUpdatedefinedUserRoplist(getUpdateDefinedRoplist()) //ユーザーが更新する
### 三. ページへの入室とセッションの割り当て
```java
UdeskSDKManager.getInstance().entryChat(getApplicationContext(), makeBuilder().build(), sdkToken);
// 注意:この方法でセッションに入室した場合のみ、管理者がバックエンドで設定したオプションが有効になります。他の方法で入室した場合、設定は適用されません。
四. Proguard設定
//udesk
-keep class udesk.** {*;}
-keep class cn.udesk.**{*; }
//七牛
-keep class okhttp3.** {*;}
-keep class okio.** {*;}
-keep class com.qiniu.**{*;}
-keep class com.qiniu.**{public <init>();}
-ignorewarnings
//smack
-keep class org.jxmpp.** {*;}
-keep class de.measite.** {*;}
-keep class org.jivesoftware.** {*;}
-keep class org.xmlpull.** {*;}
-dontwarn org.xbill.**
-keep class org.xbill.** {*;}
//eventbus
-keepattributes *Annotation*
-keepclassmembers class ** {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# AsyncExecutorを使用する場合のみ必要
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}
//freso
-keep class com.facebook.** {*; }
-keep class com.facebook.imagepipeline.** {*; }
-keep class com.facebook.animated.gif.** {*; }
-keep class com.facebook.drawee.** {*; }
-keep class com.facebook.drawee.backends.pipeline.** {*; }
-keep class com.facebook.imagepipeline.** {*; }
-keep class bolts.** {*; }
-keep class me.relex.photodraweeview.** {*; }
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {
@com.facebook.common.internal.DoNotStrip *;
}
# ネイティブメソッドを保持
-keepclassmembers class * {
native <methods>;
}
-dontwarn okio.**
-dontwarn com.squareup.okhttp.**
-dontwarn okhttp3.**
-dontwarn javax.annotation.**
-dontwarn com.android.volley.toolbox.**
-dontwarn com.facebook.infer.**
//bugly
-keep class com.tencent.bugly.** {*; }
//agora
-keep class io.agora.**{*;}
五. 相談対象を設定する必要がある場合、以下の設定を参照してください
java
UdeskCommodityItem item = new UdeskCommodityItem();
item.setTitle("木林森男鞋新款2016夏季透气网鞋男士休闲鞋网面韩版懒人蹬潮鞋子");// 商品のメインタイトル
item.setSubTitle("¥ 99.00");//商品のサブタイトル
item.setThumbHttpUrl("https://img.alicdn.com/imgextra/i1/1728293990/TB2ngm0qFXXXXcOXXXXXXXXXXXX_!!1728293990.jpg_430x430q90.jpg");// 左側の画像
item.setCommodityUrl("https://detail.tmall.com/item.htm?spm=a1z10.3746-b.w4946-14396547293.1.4PUcgZ&id=529634221064&sku_properties=-1:-1");// 商品のウェブリンク
UdeskSDKManager.getInstance().setCommodity(item);
セッション画面に入る前に呼び出します。
その他の機能についてはデモを参照してください。
SDKの機能項目説明
一. カスタム絵文字の設定説明
- カスタム絵文字は、assetsディレクトリの下に
udeskemotionディレクトリを作成する必要があります。プログラム起動時に、assetsのudeskemotionディレクトリ下のすべてのスタンプが自動的にスタンプの保存場所にコピーされます。 udeskemotionディレクトリの下には、1つのタブアイコンと1つのスタンプフォルダが必要で、両者は同じ名前である必要があります。 具体的な内容はデモを参照してください。
二. IMチャット機能で、シーンによってセッション画面に入る前に、まず1件のメッセージを設定してカスタマーサポートに送信する必要がある場合は、以下のようにできます。
セッション画面に入る前に、毎回以下のメソッドを呼び出して値を渡します:
UdeskSDKManager.getInstance().setFirstMessage(String message);
三. IMチャット機能における位置情報送信機能の統合説明
Androidではサードパーティの選択肢が多いなどの理由から、SDKに直接地図SDKを組み込まず、お客様の実際のニーズに応じて位置情報送信機能を統合するかどうかを選択していただきます。 地図統合のデモ例として提供しているもの:百度地図(baidumapdemo このmoduleを参照)、高德地図(gaodemapdemo)、騰訊地図(tenxunmapdemo)
- 地図タイプの説明 百度地図の設定 UdeskConfig.useMapType = UdeskConfig.UdeskMapType.BaiDu; 高德地図の設定 UdeskConfig.useMapType = UdeskConfig.UdeskMapType.GaoDe; 騰訊地図の設定 UdeskConfig.useMapType = UdeskConfig.UdeskMapType.Tencent; その他の地図の設定 UdeskConfig.useMapType = UdeskConfig.UdeskMapType.Other;
UdeskChatActivityはstartActivityForResult方式でLocationActivityに入り、その後、対応する情報を選択してUdeskChatActivityに戻す際は、Intent方式を使用します。
この時、intent.putExtraのnameには取り決めがあり、これを遵守することで初めて位置情報が有効に表示されます。
具体的な取り決め:
public static class UdeskMapIntentName {
//選択された位置
public static final String Position = "udesk_position";
//選択された位置周辺の位置のスクリーンショットを保存するローカルパス
public static final String BitmapDIR = "udesk_bitmap_dir";
//選択された位置の緯度
public static final String Latitude = "udesk_latitude";
//選択された位置の経度
public static final String Longitude = "udesk_longitude";
}
具体的な例は、デモで提供されているコードスニペットを参照してください。
.setUseMap(set_usemap.isChecked()) //位置情報送信機能を使用するかどうか trueは使用、falseは不使用
.setUseMapSetting(UdeskConfig.UdeskMapType.GaoDe, LocationActivity.class, new ILocationMessageClickCallBack() {
@Override
public void luanchMap(Context context, double latitude, double longitude, String selctLoactionValue) {
Intent intent = new Intent();
intent.putExtra(UdeskConfig.UdeskMapIntentName.Position, selctLoactionValue);
intent.putExtra(UdeskConfig.UdeskMapIntentName.Latitude, latitude);
intent.putExtra(UdeskConfig.UdeskMapIntentName.Longitude, longitude);
intent.setClass(context, ShowSelectLocationActivity.class);
context.startActivity(intent);
}
})
### 四. IMでのビデオ機能の使用
注意:ビデオ機能を使用するには、必ずUdeskSDKUI IMの機能を使用する必要がありますが、UdeskSDKUIの機能を単独で使用することも可能です。
あなたのアプリで、udeskvideo モジュールに依存関係を追加してください。
### 五. 機能ボタンのカスタマイズ設定をサポート 詳細はdemoを参照してください
demoのコードスニペット
``` java
.setExtreFunctions(getExtraFunctions(), new IFunctionItemClickCallBack() {
@Override
public void callBack(Context context, ChatActivityPresenter mPresenter, int id, String name) {
if (id == 21) {
mPresenter.sendTxtMessage("メッセージを送信");
} else if (id == 22) {
mPresenter.sendTxtMessage("フォームメッセージを開く");
UdeskSDKManager.getInstance().goToForm(getApplicationContext(), UdeskSDKManager.getInstance().getUdeskConfig());
}
}
})//more展開パネルに追加の機能ボタンを設定
説明:1つの機能ボタンは1つのFunctionModeとして設定され、以下の属性を含みます。
//表示内容
private String name;
//選択後の対応する操作をマッピングするために使用されるid値。最初の20はudeskが予約済みです。カスタムで追加したものは、返された後にid値に基づいてマッピング関係を確立するために使用されます。
private int id;
//例: R.drawable.udesk_001
//表示されるアイコン
private int mIconSrc ;
提供されるカスタム後続機能操作:テキスト、画像、ビデオ、ファイル、地理位置情報、商品情報の直接送信。
インターフェースコールバックから返されるパラメータに基づいて、メソッド操作を呼び出します ChatActivityPresenter mPresenter
1.テキストメッセージを送信
public void sendTxtMessage(String msgString)
mPresenter.sendTxtMessage( msgString)
2.画像メッセージを送信
public void sendBitmapMessage(Bitmap bitmap)
mPresenter.sendBitmapMessage(bitmap)
3.ファイルタイプのメッセージを送信 (ビデオ、ファイル、画像を含む)
/**
* @param filepath
* @param msgType 画像:UdeskConst.ChatMsgTypeString.TYPE_IMAGE
* ファイル:UdeskConst.ChatMsgTypeString.TYPE_File
* MP4ビデオ: UdeskConst.ChatMsgTypeString.TYPE_VIDEO
*/
public void sendFileMessage(String filepath, String msgType)
mPresenter.sendFileMessage(filepath,UdeskConst.ChatMsgTypeString.TYPE_IMAGE)
mPresenter.sendFileMessage(filepath,UdeskConst.ChatMsgTypeString.TYPE_File)
mPresenter.sendFileMessage(filepath,UdeskConst.ChatMsgTypeString.TYPE_VIDEO)
4.地理位置情報を送信
public void sendLocationMessage(double lat, double longitude, String localvalue, String bitmapDir)
mPresenter.sendLocationMessage(lat, longitude, localvalue, bitmapDir)
5.録音メッセージを送信
public void sendRecordAudioMsg(String audiopath, long duration)
mPresenter.sendRecordAudioMsg(audiopath,duration)
六. カスタムナビゲーションバー設定のサポート 詳細はdemoを参照してください
コードスニペット
.setNavigations(set_use_navigation_view.isChecked(), getNavigations(), new INavigationItemClickCallBack() {
@Override
public void callBack(Context context, ChatActivityPresenter mPresenter, NavigationMode navigationMode) {
if (navigationMode.getId() == 1) {
UdeskSDKManager.getInstance().toLanuchHelperAcitivty(getApplicationContext(), UdeskSDKManager.getInstance().getUdeskConfig());
} else if (navigationMode.getId() == 2) {
mPresenter.sendTxtMessage(UUID.randomUUID().toString());
mPresenter.sendTxtMessage("www.baidu.com");
}
}
})
説明:ナビゲーションバーの各機能ボタンは1つのNavigationModeとして設定され、以下の属性を含みます。 // テキスト表示内容 private String name; // 選択後の対応する操作をマッピングするために使用 private int id;
サポートされるカスタム機能は、機能ボタンと同じです。
商品メッセージの送信 詳細はdemoを参照してください
**Productフィールド属性説明**
| key | 必須かどうか | 説明 |
|---|---|---|
| name | 必須 | 商品名 |
| url | 任意 | 商品ジャンプリンク(新規ページ表示)。値が空の場合はクリック不可 |
| imgUrl | 任意 | 商品表示画像のURL |
| params | 任意 | パラメータリスト |
| ParamsBean.text | 任意 | パラメータテキスト |
| ParamsBean.color | 任意 | パラメータ色値。16進数値の色を指定 |
| ParamsBean.fold | 任意 | 太字にするかどうか |
| ParamsBean.breakX | 任意 | 改行するかどうか |
| ParamsBean.size | 任意 | フォントサイズ |
使用シナリオ: 1. 毎回セッションに入る際に、UdeskConfig設定を通じて1件の商品メッセージを設定できます。 2. ナビゲーションバーのカスタム機能ボタンを通じて商品メッセージを送信できます。
よくある質問
1. 指定したカスタマーサポートグループまたは担当者が、指定したグループの担当者と一致しない場合?
まず、担当者がセッションを閉じていないことを確認してください。
当社製品のロジック: 顧客AがカスタマーサポートグループBの担当者B1を選択してセッションを開始したとします。その後、顧客Aがセッション画面を終了し、別の画面に移動し、その後カスタマーサポートグループCの担当者C1を通じてセッションが割り当てられた場合: この時、バックエンドは判断します。もしB1とのセッションがまだ存在する場合、担当者C1ではなくB1に直接割り当てられます。B1のセッションが閉じられた場合のみ、担当者C1に割り当てられます。
2. 異なる顧客に割り当てられたセッションが1つのセッション内に表示される?
この状況は、カスタマーサポートが渡したsdktokenの値が同じ場合に発生します。 sdktokenは身分証明書のように、ユーザーの一意の識別子です。顧客が接続時に渡すsdktokenの値を確認してください。
emailまたはcellphoneが設定されている場合、同じ値であれば1人の担当者のセッション内に表示されます。
3. 特定の携帯電話でロボットページが開かない?
この問題の可能性の1つ: 携帯電話の時間設定が現在時刻と一致していないことが原因です。時間の誤差が1時間を超えると、必然的にロボットインターフェースに接続できなくなります。
4. SDK統合後にクラスが見つからないエラーが発生する?
マルチデックス(分包)戦略を追加しているか確認してください:
AndroidのGradleプラグインは、Android Build Tool 21.1からmultidexの使用をサポートしているため、Android Build Tools 21.1以降のバージョンを使用する必要があります。appディレクトリ下のbuild.gradleファイルを修正し、2点修正が必要です。
(1)defaultConfigにmultiDexEnabled trueという設定を追加します。
(2)dependenciesにmultidexの依存関係を追加します: compile ‘com.android.support:multidex:1.0.0’
(3)Applicationを継承し、attachBaseContextメソッドをオーバーライドし、AndroidManifest.xmlのapplicationタグで登録します。
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
5.h5接続参考例
https://github.com/udesk/udesk_android_sdk_h5
インテグレーションのインポート
あなたが行うべきことは、UdeskSDKUIを独立したモジュールとしてインポートし、あなたのアプリのbuild.gradleファイルに以下を追加することです:
dependencies {
compile project(':UdeskSDKUI')
}
顧客ロジックの初期化
1. 主キー sdk_token email cellphone を使用して順番にユーザーを検索し、見つかったら1.1に進む
1.1 見つかったユーザーをcustomerとする
1.2 sdk_token パラメータがあり、かつcustomerの元のsdk_tokenと異なる場合、1.2.1に進む
1.2.1 ユーザーの主キーと追加情報を更新する
1.3 deviceを更新する
2. ユーザーを作成する (emailがない場合はデフォルトで生成される)
3. ユーザーのdeviceを作成する
ユーザー作成失敗時に返される一般的なエラー
wrong_subdomain: {code: "2001" , message: "サブドメインエラー"},
no_sdktoken: {code: "2003" , message: "ユーザートークンエラー"},
wrong_sign: {code: "3001" , message: "署名エラー"},
agent: {code: "5050" , message: "サポート担当者が存在しません"},
user_group: {code: "5060" , message: "サポートグループが存在しません"}
validate_error: {:code=>"2004", :message=>"検証エラー", :exception=>"Validation failed: Email is invalid"}
exception には具体的な検証エラー情報が含まれます
sdktokenについて注意 これは顧客の一意の識別子であり、身元を識別するために使用されます。sdk_token: 渡される文字は 英字 / 数字 の文字セットを使用してください。 身分証明書のように、1つの身分証明書番号が複数の人に対応したり、1人が複数の身分証明書番号を持つことは許可されません。次に、顧客にメールアドレスと携帯電話番号を設定する場合、異なる顧客が同じ携帯電話番号やメールアドレスを持たないようにする必要があります。同じものが出現した場合、新しい顧客は作成されません。 以上の操作が完了したら、次にUdeskSDKの他の機能を使用できます。幸運を祈ります!
ヘルプセンターインターフェースの起動
Udeskシステムのヘルプセンター管理画面でヘルプドキュメントを作成でき、顧客はヘルプセンターを通じて関連ドキュメントを閲覧できます。以下のインターフェースを呼び出してヘルプセンターインターフェースを起動します。
UdeskSDKManager.getInstance().toLanuchHelperAcitivty(getApplicationContext(), UdeskSDKManager.getInstance().getUdeskConfig());
Udesk SDK API説明
### 1 顧客情報の更新
UdeskConfig.Builder builder = new UdeskConfig.Builder();
システムデフォルトの顧客フィールド、ニックネーム、メールアドレス、電話番号、説明を更新します。
Map<String, String> info = new HashMap<String, String>();
info.put(UdeskConst.UdeskUserInfo.NICK_NAME,"更新後のニックネーム");
//更新後のメールアドレス
info.put(UdeskConst.UdeskUserInfo.EMAIL,"0631@163.com");
//更新後の携帯電話番号
info.put(UdeskConst.UdeskUserInfo.CELLPHONE,"15651818750");
info.put(UdeskConst.UdeskUserInfo.DESCRIPTION,"更新後の説明情報")
//更新が必要なUdeskシステムデフォルトフィールドを渡します
メールアドレスまたは携帯電話番号を更新する場合、バックエンドに同じ番号またはメールアドレスがあると更新に失敗します
builder.setUpdateDefualtUserInfo(info)
2 カスタムフィールドの更新
テキスト型フィールドの例:
{
"field_name": "TextField_684",
"field_label": "住所",
"content_type": "text",
"comment": "フィールドの説明",
"options": null,
"permission": 0,
"requirment": false
}
このJSON内の"field_name"フィールドに対応するvalue値を、カスタムフィールドのkey値として使用して値を割り当てます。 例は以下の通りです:
updateTextFieldMap.put("TextField_684","北京西城区");
//更新するカスタムテキストフィールドを渡す
builder.setUpdatedefinedUserTextField(updateTextFieldMap);
選択型フィールドの例
{
"field_name": "SelectField_457",
"permission": 0,
"comment": "これは説明です",
"requirment": true,
"content_type": "droplist",
"field_label": "性別",
"options": [
{
"0": "男性"
},
{
"1": "女性"
}
]
}
このJSON内の"field_name"フィールドに対応するvalue値をカスタムフィールドのkey値として使用し、"options"内のいずれかの項目のkey値をvalueとして割り当てます。例は以下の通りです:
updateRoplistMap.put("SelectField_457","1");
//更新するカスタムドロップダウンリストフィールドを渡す
builder.setUpdatedefinedUserRoplist(updateRoplistMap);
3. 問い合わせオブジェクトの送信
顧客がサポート担当者と会話する際、サポート担当者が確認できるよう、問い合わせ商品や注文などを送信する必要がよくあります。
問い合わせオブジェクトは現在、最大4つの属性(detail,image,title,url)の送信をサポートしています。以下に商品を例として説明します。
//問い合わせオブジェクトのインスタンスを作成
UdeskCommodityItem item = new UdeskCommodityItem();
// 問い合わせオブジェクトのメインタイトル
item.setTitle("木林森男鞋新款2016夏季透气网鞋男士休闲鞋网面韩版懒人蹬潮鞋子");
//問い合わせオブジェクトの説明
item.setSubTitle("¥ 99.00");
//左側の画像
item.setThumbHttpUrl("https://img.alicdn.com/imgextra/i1/1728293990/TB2ngm0qFXXXXcOXXXXXXXXXXXX_!!1728293990.jpg_430x430q90.jpg");
// 問い合わせオブジェクトのウェブリンク
item.setCommodityUrl("https://detail.tmall.com/item.htm?spm=a1z10.3746-b.w4946-14396547293.1.4PUcgZ&id=529634221064&sku_properties=-1:-1");
builder.setCommodity(item);
//問い合わせオブジェクト情報を送信する ChatActivityPresenterクラスのsendCommodityMessageメソッドを参照
public void sendCommodityMessage(UdeskCommodityItem commodityItem) {
UdeskMessageManager.getInstance().sendComodityMessage(buildCommodityMessage(commodityItem),
mChatView.getAgentInfo().getAgentJid());
}
4. 未読メッセージの取得
会話インターフェースを終了した後、Udeskサーバーとの接続を切断せず、未読メッセージ取得イベントメソッドを登録すると、そのメソッド内で未読メッセージを受信できます。
"OnNewMsgNotice"メソッドを登録します。
UdeskMessageManager.getInstance().event_OnNewMsgNotice.bind(this, "OnNewMsgNotice");
OnNewMsgNoticeメソッドの実装
public void OnNewMsgNotice(MsgNotice msgNotice) {
if (msgNotice != null) {
NotificationUtils.getInstance().notifyMsg(UdeskCaseActivity.this, msgNotice.getContent());
}
}
注意:1 メッセージ通知のオブジェクトは:MsgNotice です;2 登録するメソッド名と実装するメソッド名の文字列は、大文字小文字を含めて完全に一致させる必要があります;
3 実装するメソッドは、public修飾子でなければなりません。
5. 未読メッセージ数の取得
SDK バージョン 3.2.0 から、会話インターフェースを終了した後、Udeskサーバーとの接続を切断せずに、このセッションの未読メッセージ数を取得できます。会話インターフェースを開くと未読メッセージ数はクリアされます。
UdeskSDKManager.getInstance().getCurrentConnectUnReadMsgCount();
6. 顧客チャットデータの削除
SDKの初期化が成功し、顧客が作成された後、このインターフェースを呼び出すことで、現在の顧客のチャット記録情報を削除できます。
UdeskSDKManager.getInstance().deleteMsg();
7. コンソールログの切り替え
開発中に、現在の顧客とUdeskサーバー間の接続(xmpp)のやり取りパケットをコンソールで確認したい場合は、以下のインターフェースを呼び出して実現できます。
//true はコンソールログを有効にすることを意味し、false はコンソールログを無効にすることを意味します。
UdeskSDKManager.getInstance().isShowLog(true);
8. Udeskサーバーとの接続の切断
アプリ実行中に、カスタマーサポートをオフラインにしたり、カスタマーサポートからのメッセージを受信しないようにする必要がある場合は、このインターフェースを呼び出して、Udeskサーバーとの接続を能動的に切断できます。
UdeskSDKManager.getInstance().disConnectXmpp();
9. キュー離脱モードの設定
quitmode: mark (デフォルト, マーキング放棄)/ cannel_mark(マーキング取消) / force_quit(強制即時放棄)
build.setUdeskQuenuMode(quitmode);
10. 以下のファイル名でSDKリソースを素早く特定し、対応するリソースを変更することでUIのカスタマイズが可能です。
チャットインターフェースUdeskChatActivity内のMessageAdatperは、音声、テキスト、画像などのメッセージを表示します。
udesk_chat_msg_item_txt_l,//テキストメッセージ左側のUIレイアウトファイル
udesk_chat_msg_item_txt_r,//テキストメッセージ右側のUIレイアウトファイル
udesk_chat_msg_item_audiot_l,//音声メッセージ左側のUIレイアウトファイル
udesk_chat_msg_item_audiot_r,//音声メッセージ右側のUIレイアウトファイル
udesk_chat_msg_item_imgt_l,//画像メッセージ左側のUIレイアウトファイル
udesk_chat_msg_item_imgt_r,//画像メッセージ右側のUIレイアウトファイル
udesk_chat_msg_item_redirect,//転送メッセージ通知情報UIレイアウトファイル
udesk_chat_rich_item_txt,//リッチテキストメッセージUIレイアウトファイル
udesk_im_commodity_item //広告商品情報を表示するUIレイアウトファイル
対応するViewHolderはそれぞれ:
TxtViewHolder テキストメッセージを表示;
AudioViewHolder 音声メッセージを表示;
ImgViewHolder 画像メッセージを表示;
RichTextViewHolder リッチテキストメッセージを表示;
CommodityViewHolder 広告商品情報を表示;
RedirectViewHolder 転送通知メッセージ情報を表示;
その他の対応するUI
UdeskHelperActivity ヘルプセンターインターフェース;
UdeskHelperArticleActivity 記事の詳細内容を表示
UdeskRobotActivity ロボット会話インターフェース
SurvyDialogActivity 満足度ダイアログ
UdeskConfirmPopWindow オフラインフォームをポップアップ表示するPopWindow
UdeskPopVoiceWindow 録音用のPopWindow
UdeskExpandableLayout カスタマーサポートのオンライン/オフラインを通知するアニメーション
UdeskTitleBar タイトルバー
Udesk SDK統合で使用するインターフェース説明
インターフェースは既に開発・実装済みであり、追加開発は不要です。
"/udesk_im/sdk/v3/im/customers.json" //顧客情報を作成し、デバイス情報を送信
"/api/v2/im.json"; // 顧客情報作成成功後に呼び出し、現在の顧客のXMPPログイン情報を取得
"/udesk_im/sdk/v3/im/agent.json"; // カスタマーサポートをリクエストしてセッションを開始
"/api/v1/articles.json?sign="; //ヘルプセンターから記事リストを取得するインターフェース
"/api/v1/articles/search.json"; //ヘルプセンターで検索し、一致する記事を取得するインターフェース
"/api/v2/user_fields.json"; // 顧客カスタムフィールド設定を取得するインターフェース
"/udesk_im/sdk/v3/im/im_survey.json"; // 満足度評価の内容を取得するインターフェース
"/udesk_im/sdk/v3/im/surveys.json"; //満足度評価を送信するインターフェース
"/udesk_im/sdk/v3/im/im_group.json"; // カスタマーサポートグループリストを取得するインターフェース
"/udesk_im/sdk/v3/im/status.json"; //カスタマーサポートのステータスを取得するインターフェース
"/udesk_im/sdk/v3/im/sdk_push.json"; //プッシュ通知ステータスのオン/オフを制御するインターフェース
オフラインメッセージプッシュ通知
現在、1つのプッシュ方式のみをサポートしています。すなわち、Udeskサーバーが開発者のサーバーにメッセージを送信し、開発者がそのメッセージをAppにプッシュします。
1 プッシュ通知を受信するサーバーアドレスの設定
プッシュメッセージは開発者のサーバーに送信されます。
サーバーアドレスを設定するには、Udesk管理者アカウントでUdeskにログインし、設定 -> モバイルSDK で設定してください。

2 Udesk プッシュ機能を使用するための設定
//設定: プッシュサービスを使用するかどうか true は使用する、 falseは使用しない
public static boolean isUserSDkPush = false;
3 ユーザーのデバイス一意識別子の設定
UdeskSDKManager.getInstance().setRegisterId(context,"xxxxregisterId")
//プッシュ通知に登録するデバイスIDを保存
public void setRegisterId(Context context, String registerId) {
UdeskConfig.registerId = registerId;
PreferenceHelper.write(context, UdeskConst.SharePreParams.RegisterIdName,
UdeskConst.SharePreParams.Udesk_Push_RegisterId, registerId);
}
Udeskプッシュサービスの停止と開始について、Udeskが開発者サーバーに送信するメッセージデータ形式には、device_token フィールドが含まれます。
4 Udeskプッシュサービスの停止と開始
/**
* @param domain 会社登録で生成されたドメイン
* @param key App作成時に生成されたApp Key
* @param sdkToken ユーザー一意識別子
* @param status SDKプッシュステータス ["on" | "off"] onはUdeskプッシュサービスを開始、 offはUdeskプッシュサービスを停止
* @param registrationID プッシュデバイスに登録されたID
* @param appid App作成時に生成されたApp ID
*/
public void setSdkPushStatus(String domain, String key, String sdkToken, String status, String registrationID, String appid)
5 Udeskから開発者サーバーへのプッシュインターフェース説明
基本要件
- プッシュインターフェースは http のみをサポートし、https はサポートしません
- リクエストは POST メソッドで送信されます
- リクエスト時に使用する content-type は application/x-www-form-urlencoded です
パラメータ
メッセージまたはイベントが発生した場合、以下のデータがプッシュインターフェースに送信されます
| パラメータ名 | タイプ | 説明 |
|---|---|---|
| message_id | string | メッセージID |
| platform | string | プラットフォーム、'ios' または 'android' |
| device_token | string | デバイス識別子 |
| app_id | string | SDK アプリ ID |
| content | string | メッセージ内容、type が 'message' の場合のみ有効 |
| sent_at | datetime | メッセージプッシュ時間、ISO8601形式 |
| from_id | integer | 送信者ID(サポート担当者) |
| from_name | string | 送信者名 |
| to_id | integer | 受信者ID(顧客) |
| to_token | string | 受信者 sdk_token(一意の識別子) |
| type | string | メッセージタイプ、'event' はイベント、'message'はメッセージ |
| event | string | イベントタイプ、'redirect' はサポート担当者転送、'close'は会話終了、'survey'は満足度調査送信 |
返却パラメータ
プッシュインターフェース送信後、返却パラメータは不要です