問題の症状
iOSとAndroidでは、 プリチャット オブジェクトと VisitorInfo オブジェクトの動作が異なるため、アプリケーションの動作を統一するのが難しくなります。
訪問 者情報オブジェクトを使用すると、チャットを開始する前に訪問者に関する情報を設定できます。一方、PreChatForm オブジェクトは、チャットが開始されるとその情報を収集します。
当初のアイデアは、ワークフローでどちらか一方を使用することでしたが、両方を一度に使用することはできませんでしたが、現在iOSでは更新されています。
JWT認証を使用するワークフローは、Chatの動作も変更します。詳細については、ドキュメント(Android|iOS)を参照するか、次の記事を参照してください。Chat SDKで認証されたユーザーを有効にする
解決手順
iOS
iOSのロジックは次のとおりです。
- ChatAPIConfigurationの
visitorInfo
およびdepartment
プロパティ - ChatConfigurationの
preChatFormConfiguration
データ要件。 - の基礎となるプロパティ
VisitorInfo
はnilまたは空の文字列であり、対応するデータ要件はない.hidden
フィールドを表示します。 - の基礎となるプロパティ
department
はnilまたは空の文字列であり、対応するデータ要件はない.hidden
フィールドを表示します。 - SDKはユーザーにフォームを表示します。ユーザーが詳細を入力するか、必要に応じてスキップする
.optional
フィールドを自由に選択できます。 - SDKは、フォームに入力された情報を収集します。
スキップされたフィールドがある場合は、そこにあった設定の詳細に戻ります。空欄の場合、詳細情報は送信されません。 - SDKが部門を割り当て、電話をかける
chat.profileProvider.setVisitorInfo(visitorInfo)
フォームの VisitorInfo の詳細を入力します(入力されたデータを、入力されていないAPI設定と統合します)。
例:
func status(for info: String?) -> FormFieldStatus {
info?.isEmpty == true ? .optional: .hidden
}
let chatAPIConfig = ChatAPIConfiguration()
chatAPIConfig.visitorInfo = visitorInfo
chatAPIConfig.department = departmentName
chat.configuration = chatAPIConfig
chat.profileProvider.setVisitorInfo(visitorInfo)
let chatUIConfig = ChatConfiguration()
chatUIConfig.preChatFormConfiguration = .init(name: status(for: visitorInfo.name),
email: status(for: visitorInfo.email),
phoneNumber: status(for: visitorInfo.phoneNumber),
department: status(for: form.departmentId))
// pass chatUIConfig into buildUI(engines:, configs:)
Android
SDK Chat 3.2.0より前のバージョン:
Androidでは、ロジックが異なります。PreChatForm が有効になっている場合、フィールドが「必須」、「オプション」、「非表示」のいずれであるかにかかわらず、VisitorInfo は完全に消去されます。
この制限を回避する1つの方法は、チャットが開始され たら訪問者 情報を更新することです(チャットが開始されると編集できない部門を除く)。
- を作成
VisitorInfo
オブジェクトです。 - ユーザーに関する既知の情報を入力します。
- 不足している情報を尋ねるようにプリチャットフォームを設定します。
- オブザーバーを設定します。
- Chatアクティビティを開始します。
PreChatが完了し、チャットが「開始」ステータスになると、訪問者情報が更新されます。
例:
boolean visitorSet = false; // Generic condition to ensure that you only set those info once
// ...
public void setupObserver(){
final ObservationScope observationScope = new ObservationScope();
Chat.INSTANCE.providers().chatProvider().observeChatState(observationScope, new Observer<ChatState>() {
@Override
public void update(ChatState chatState) {
ChatSessionStatus chatStatus = chatState.getChatSessionStatus();
// Status achieved after the PreChatForm is completed
if (chatStatus == ChatSessionStatus.STARTED) {
// Update the information MID chat here. All info but Department can be updated
if (!visitorSet) {
// Add here the code to set the visitor info - visitorInfo would be a VisitorInfo type variable containing all the information to set
profileProvider.setVisitorInfo(visitorInfo, null);
visitorSet = true;
}
} else {
// There are few other statuses that you can observe but they are unused in this example
Log.d("DEBUG", "[observerSetup] - ChatSessionUpdate -> (unused) status : " + chatStatus.toString());
}
}
});
}
ワークフローに合わせて、提供されたコードスクリプトを更新します。
バージョン3.2.0以降:
最新のSDKでは、VisitorInfoでPreChatFormをより柔軟に使用できます。詳細については、この記事を参照してください:チャットセッションの設定情報。
これは、ドキュメントの例に従うことでネイティブに機能します。
翻訳に関する免責事項:この記事は、お客様の利便性のために自動翻訳ソフトウェアによって翻訳されたものです。Zendeskでは、翻訳の正確さを期すために相応の努力を払っておりますが、翻訳の正確性については保証いたしません。
翻訳された記事の内容の正確性に関して疑問が生じた場合は、正式版である英語の記事を参照してください。
0 コメント
サインインしてコメントを残してください。