SDKの構成
Helpshiftには、SDKの動作をカスタマイズするために使用可能ないくつかの構成オプションが用意されています。
SDKに含まれているすべてのパブリックAPIは、HelpshiftSdk.install() APIを介してSDKを初期化した後に呼び出す必要があります
インストール時間の構成
アプリ内通知を有効にする
Helpshift SDKが提供するアプリ内通知サポートが不要な場合には、フラグをfalseに設定します。
このフラグをfalseに設定するとSDKはデバイスの通知トレイに通知を表示しなくなりますが、バックグラウンドでメッセージを取得します。この動作は、iOSでは異なっています。詳細については、こちらをご参照ください
このフラグの規定値はtrueです。そのため、アプリ内通知は有効化されます。
| フラグ | HelpshiftSdk.ENABLE_INAPP_NOTIFICATION |
| 値 | true/false |
| デフォルト | true |
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake(){
this.help = HelpshiftSdk.GetInstance();
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add(HelpshiftSdk.ENABLE_INAPP_NOTIFICATION, false);
help.Install(appId, domainName, configMap);
}
}
通知アイコン
デフォルトでは、アプリケーションアイコンが通知アイコンとして使用されます。通知アイコンは、install呼び出しのconfigを使用してカスタマイズすることができます。
アイコン画像については、ファイル拡張子を指定する必要はありません。アイコン画像のファイル名が"icon.png"であれば、Helpshiftの構成に"icon"を渡し、<project-dir>/Assets/Plugins/Android/res/drawableに"icon.png"ファイルを追加するだけでOKです。
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake(){
this.help = HelpshiftSdk.GetInstance();
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add(HelpshiftSdk.NOTIFICATION_ICON, "<icon-image-file-name>");
help.Install(apId, domainName, configMap);
}
}
大きな通知アイコン
デフォルトでは、アプリケーションアイコンが通知アイコンとして使用されます。
大きな通知アイコンが通知トレイにも表示されるように指定する場合には、install呼び出しのconfigを使用して指定することができます。
アイコン画像については、ファイル拡張子を指定する必要はありません。アイコン画像のファイル名が"large_icon.png"であれば、Helpshiftの構成に"large_icon"を渡し、<project-dir>/Assets/Plugins/Android/res/drawableに"large_icon.png"ファイルを追加するだけでOKです。
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake(){
this.help = HelpshiftSdk.GetInstance();
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add(HelpshiftSdk.NOTIFICATION_LARGE_ICON, "<large-icon-image-file-name>");
help.Install(appId, domainName, configMap);
}
}
通知音
ここで提供される音声は、Android OS 8.0以上でSDKが独自に作成するデフォルトの通知チャネルにのみ設定されます。この音声は、デフォルトのチャネルに一度だけ設定することができ、別の音声リソースが渡された場合には変更されません。
後でサウンドを変更する必要がある場合には、独自の通知チャネルの作成をお勧めします。こちらをご参照ください。
デフォルトでは、デフォルトのデバイス通知音がHelpshiftの通知に使用されます。通知音は、インストール呼び出しの構成を使用してカスタマイズすることができます。
音声ファイルについては、ファイル拡張子を指定する必要はありません。音声ファイルの名前が"notificaton_sound.mp3"であれば、Helpshiftの構成に"notification_sound"を渡し、<project-dir>/Assets/Plugins/Android/res/rawに"notificaton_sound.mp3"ファイルを追加するだけでOKです。
例:
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake(){
this.help = HelpshiftSdk.GetInstance();
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add(HelpshiftSdk.NOTIFICATION_SOUND_ID, <sound-file-name>);
help.Install(appId, domainName, configMap);
}
}
通知チャネル
Android Oreo以降、Helpshiftの通知はIn-app Supportという名前のデフォルトのチャネルを作成します。デフォルトのチャネル名をカスタマイズする場合は、インストール呼び出しの構成を使用します。
例:
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake(){
this.help = HelpshiftSdk.GetInstance();
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add(HelpshiftSdk.NOTIFICATION_CHANNEL_ID, <your-channel-id>);
help.Install(appId, domainName, configMap);
}
}
ロギングを有効にする
enableLoggingをtrueに設定すると、Helpshift SDKのログがAndroidのLogcatに生成されます。ロギングの有効化は、開発者が統合に関する一般的な問題を解決する際に役立ちます。
| フラグ | HelpshiftSdk.ENABLE_LOGGING |
| 値 | "true"/"false" |
| デフォルト | "false" |
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake(){
this.help = HelpshiftSdk.GetInstance();
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add(HelpshiftSdk.ENABLE_LOGGING, true);
help.Install(appId, domainName, configMap);
}
}
タグによるFAQのフィルタリング
タグによるFAQのフィルタリングが可能です。 エンドユーザーが、たとえばユーザー属性やデバイスプロファイルに基づいて絞り込みをするなど、関連コンテンツを表示できるようにすることを目的として、開発者がこのFAQのフィルタリング機能を選択して適切な利用者に対して絞り込みが行われたFAQのリストを表示できるようになりました。
FAQのフィルタリングを使用する典型的なケースについては、以下の通りです。
- 特定の対象に向けて特定のFAQを表示する場合。例: ビジネスロジックに基づいてユーザーを「初心者」、「中級者」、「上級者」に分類する。
- デバイスの種類に基づいて特定のFAQを表示する場合。例: iPad向けとiPhone向けにFAQのセットを切り替える。
FAQのフィルタリングの手順には、2段階のアプローチが用意されています。
- FAQは、ダッシュボードの
<issue tags>フィールド(例: タグiphoneやタグipadなど)を使用して分類する必要があります。
- FAQへのタグ付けが完了すると、本項で説明されているフィルタリングオプションを使用して、SDKでフィルタリングができるようになります。
Helpshiftでは、主に「問題タグ」と「検索タグ」の2種類のタグが用意されています。
- 問題タグは、SDKのFAQのリストをフィルタリングルールでフィルタリングするために使用されます。
- 検索タグ(検索キーワードとも呼ばれています) アプリ内検索を実行する場合、Helpshift SDKはこれらのキーワードを優先します。また、FAQのタイトルや内容には含まれていないものの、ユーザーが検索する可能性のある代替のキーワードを追加するためにこれを使用することもできます。
FAQのフィルタリングの使用方法
このオプションはshowFAQs APIおよびshowFAQSection APIで対応している設定オプションです。
filterオプションは、以下の2つのキーを含むマップです。
- 演算子:
AND、OR、NOTのいずれか1つであり、設定されているタグの条件演算子として機能します。 - タグ: クエリ内の実際のタグです。
filterオプションは、showFAQs API、showFAQSection API、showSingleFAQ APIで使用されるconfigマップの"filter"キーに対するオブジェクトとして追加されます。
| オプション: | filter |
| サブオプション: | tags/operator |
| デフォルト | null |
| 最低限必要なSDKバージョン | v10.0.0 |
| 対応 | showFAQs、showFAQSection、showSingleFAQ |
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake() {
this.help = HelpshiftSdk.GetInstance();
help.Install(appId, domainName);
}
void OpenHelpshift() {
Dictionary<string, object> config = new Dictionary<string, object>();
Dictionary<string, object> filter = new Dictionary<string, object>
{
{ "tags", new string[] { "tag1", "tag2" } },
{ "operator", "AND" }
};
config["filter"] = filter;
help.ShowFAQs(config);
}
}
会話のプリフィルテキスト
構成でconversationPrefillTextを設定すると、ユーザーの入力ボックスにテキストを設定することができます。このテキストは、以下の条件下で挿入されます:
- ユーザーに現在進行中の(アクティブな)問題がない場合。
- テキスト入力が新しい会話で有効化されている場合(例: ユーザーの返信入力の種類が「インテントメニューのみ」以外の場合)。
エンドユーザーは、送信前にこのテキストを編集することができます。この構成の値には1,000文字の文字数制限があるため、ユーザーの入力には最初の1,000文字のみが保持されます。
ユーザーは送信前にテキストを読んで編集する必要があるため、より良いユーザー体験のために実際のテキストはより短く設定することをお勧めします。
例:
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake() {
this.help = HelpshiftSdk.GetInstance();
help.Install(appId, domainName);
}
void OpenHelpshift() {
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add("conversationPrefillText", "INSERT YOUR PREFILL TEXT");
help.ShowConversation(configMap);
}
}
会話の最初のユーザーメッセージ
初期ユーザーメッセージの構成initialUserMessageはユーザーに代わって会話の最初のメッセージを送信し、このメッセージに基づいて特定のワークフローが自動的にトリガーされるようにします。
この構成は、会話が開始される前に設定する必要があります。 言い換えれば、この構成はユーザーにアクティブな会話が存在しないとき、つまり新規のユーザーが初めてチャット画面を開いたとき、 または既存のユーザーが進行中の会話をすでに閉じているときにのみ機能します。
既存の会話の途中でこの構成を設定した場合、何の影響もありません。
例:
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake() {
this.help = HelpshiftSdk.GetInstance();
help.Install(appId, domainName);
}
void OpenHelpshift() {
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add("initialUserMessage", "INSERT YOUR INITIAL USER MESSAGE");
help.ShowConversation(configMap);
}
}
最初のユーザーメッセージのクリア
エンドユーザーが同一のセッションですぐに新しい会話を開始した場合、
デフォルトでは最初のユーザーメッセージは同一のセッションのそれ以降のすべての問題に適用されます。
この動作は、subsequentIssuesInSameSessionConfig内のinitialUserMessageキーを適切な値に設定することで
変更が可能です。
初期ユーザーメッセージは空の文字列に設定することができます。この場合、メッセージはクリアされ、 エンドユーザーがそれ以降の問題のメッセージを入力できるようになります。また、同一のセッションのそれ以降のすべての問題に対して使用される 空ではない文字列を指定することもできます。
同一のセッションのそれ以降の問題に対して特定の自動 フローを実行する場合を除いて、この値には空の文字列を設定することをお勧めします。
現在のところ、リセットできるのは最初のユーザーメッセージのみです。タグ、カスタム問題フィールド、会話のプリフィル テキストの値は、同一のセッションのそれ以降の問題でも同じままです。
例:
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake() {
this.help = HelpshiftSdk.GetInstance();
help.Install(appId, domainName);
}
void OpenHelpshift() {
Dictionary<string, object> subsequentIssuesInSameSessionConfigMap = new Dictionary<string, object>();
subsequentIssuesInSameSessionConfig.Add("initialUserMessage", "")
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add("initialUserMessage", "INSERT YOUR INITIAL USER MESSAGE");
configMap.Add("subsequentIssuesInSameSessionConfig", subsequentIssuesInSameSessionConfig)
help.ShowConversation(configMap);
}
}
アウトバウンドサポートのシナリオでは、HelpshiftSdk.SetHelpshiftProactiveConfigCollector(new ProactiveConfigCollector())の登録時に取得するユーザー固有の構成コールバック
getLocalAPIConfigにこの構成を必ず追加してください。
// initialise proactiveConfig collector
public class ProactiveConfigCollector : IHelpshiftProactiveAPIConfigCollector
{
public Dictionary<string, object> getLocalApiConfig()
{
Dictionary<string, object> proactiveConfig = new Dictionary<string, object>();
Dictionary<string, object> subsequentIssuesInSameSessionConfig = new Dictionary<string, object>();
// user specific config
proactiveConfig.Add("initialUserMessage", "INSERT YOUR INITIAL USER MESSAGE");
subsequentIssuesInSameSessionConfig.Add("initialUserMessage", "");
proactiveConfig.Add("subsequentIssuesInSameSessionConfig", subsequentIssuesInSameSessionConfig)
..
..
return proactiveConfig;
}
}
画面の向き
Helpshift SDKの画面の向きは、ActivityInfoクラスで利用可能な定数にscreenOrientationを設定することで固定することができます。
たとえば、画面の向きをモバイルのユーザーに対してはActivityInfo.SCREEN_ORIENTATION_PORTRAITに、タブレットのユーザーに対してはActivityInfo.SCREEN_ORIENTATION_LANDSCAPEに固定したい場合があるかもしれません。
| フラグ | HelpshiftSdk.SCREEN_ORIENTATION |
| 値 | ActivityInfoクラスからの方向を示す整数値 |
| デフォルト | 1 (ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIEDを意味する) |
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake(){
this.help = HelpshiftSdk.GetInstance();
Dictionary<string, object> configMap = new Dictionary<string, object>();
// To make it landscape
configMap.Add(HelpshiftSdk.SCREEN_ORIENTATION, 0);
help.Install(appId, domainName, configMap);
}
}
お問い合わせを有効にする
ユーザーがFAQを表示しているときに、Helpshiftの「お問い合わせ」ボタンを表示するかどうかを制御します。このオプションをカスタマイズすることにより、サポートへのお問い合わせをより簡単にしたり、難しくしたりすることができます。指定した場合、この設定は管理者ダッシュボードで設定したお問い合わせを有効にするの値よりも優先されます。
設定可能な値には、"ALWAYS"/"AFTER_VIEWING_FAQS"/"AFTER_MARKING_ANSWER_UNHELPFUL"/"NEVER"があります。
例
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake() {
this.help = HelpshiftSdk.GetInstance();
help.Install(appId, domainName);
}
void OpenHelpshift() {
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add("enableContactUs", "AFTER_VIEWING_FAQS");
help.ShowFAQs(configMap);
}
}
ベストプラクティス
- 有料ユーザーに対してはenableContactUsを
ALWAYSに設定し、無料ユーザーに対してはAFTER_VIEWING_FAQSに設定することにより、階層ベースのサポートを提供することができます。 - 自国内のユーザーに対してはenableContactUsを
ALWAYSに設定し、海外のユーザーに対してはAFTER_VIEWING_FAQSに設定することにより、国ベースのサポートを提供することができます。
フルプライバシー
このAPIの呼び出し時にhelp.ShowConversation(config); APIのconfig辞書のfullPrivacyオプションをtrueに設定しておくことにより、以下の方法を用いたCOPPAへの準拠が保証されます。
- ユーザーによるスクリーンショット撮影の無効化(SDKを使用した画像を含むファイルの添付ができなくなります)。
- SDKによる名前や電子メールなどを含む個人を特定できる情報(PII)の収集の停止(アイデンティティボットおよび/またはhelpshiftConfigオブジェクトを使用)。つまり、
userNameとuserEmailを設定し、fullPrivacyをtrueに設定している場合、HelpshiftはuserNameとuserEmailの値を使用しません。
また、ユーザーが不快なコンテンツを添付するシナリオにおいては、これはCOPPAに準拠する上で大きな問題となります。このオプションは、この問題を解決しなければならない場合に役立ちます。
例
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake() {
this.help = HelpshiftSdk.GetInstance();
help.Install(appId, domainName);
}
void OpenHelpshift() {
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add("fullPrivacy", true);
help.ShowConversation(configMap);
}
}
チャット画面の読み込み中に新しい会話を開始する
showConversation:の構成辞書でinitiateChatOnLoadオプションをtrueに設定すると、エンドユーザーが「新しい会話」ボタンをクリックしたり、前の問題のフィードバックボットのような解決後のフローを経由することなく、前の問題が解決した直後に新しい会話を開始できるようになります。
| オプション: | initiateChatOnLoad |
| 値: | true/false |
| デフォルト: | false |
| 最低限必要なSDKバージョン | v10.0.0 |
| 対応: | showConversation |
using Helpshift;
// other imports
public class MyGameControl : MonoBehaviour
{
private HelpshiftSdk help;
void Awake() {
this.help = HelpshiftSdk.GetInstance();
help.Install(appId, domainName);
}
void OpenHelpshift() {
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add("initiateChatOnLoad", true);
help.ShowConversation(configMap);
}
}
UIの構成
この構成は、Helpshift SDKのテーマ設定を示しています。詳細については、デザインをご参照ください。
トラッキング
この構成は、ユーザーの操作のトラッキングを示しています。詳細については、トラッキングをご参照ください。