現在のプランを確認
Suite Team、Growth、Professional、EnterpriseまたはEnterprise Plus
Support Team、ProfessionalまたはEnterprise

制限付きのヘルプセンター(ユーザーがアクセスするにはログインが必要)のコンテンツ、またはナレッジベースの制限されたコンテンツ(特定のユーザー以外は閲覧できない記事が含まれる一般公開のヘルプセンター)を、Web Widget(従来版)に表示するように設定できます。

制限されたコンテンツをWeb Widget(従来版)に表示するように設定した場合:

  • Webサイトにログインしている訪問者は、Web Widget(従来版)を介して制限付きヘルプセンターの記事を読むことができます。なお、Web Widgetを埋め込んだカスタマーのサイトは、ユーザーのメール認証に責任を負います。
  • ただし、ログインしていない訪問者には、一般公開の記事のみが表示されます。一般公開用の記事がない場合は、Web Widget(従来版)にヘルプセンター機能が表示されません。

この記事では、次のトピックについて説明します。

  • ヘルプセンターのセキュリティ設定を確認する
  • 制限されたコンテンツがWeb Widget(従来版)に表示されるように設定する
  • コードサンプル
メモ:この機能を利用するために、Webサイトとヘルプセンターとの間でシングルサインオン(SSO)接続を行なう必要はありません。ただし、SSO接続すれば、Web Widget(従来版)からシームレスに「元の記事を表示」することができます。すでにSSO接続している場合でも、この機能を利用できるようにWeb Widget(従来版)を設定する必要があります。

Web Widget(従来版)について詳しくは、「Web Widget(従来版)を使用したWebサイトへのカスタマーサービスの埋め込み」を参照してください。

制限付きヘルプセンターおよびナレッジベースのコンテンツの詳細については、「コンテンツの利用をログインユーザーのみに制限する」および「ナレッジベースコンテンツへのアクセスを制限する方法」を参照してください。

ヘルプセンターのセキュリティ設定を確認する

Web Widget(従来版)では、ヘルプセンターのコンテンツを次のいずれかのセキュリティ設定で表示できます。ヘルプセンターのタイプに応じて、ヘルプセンターのセキュリティ設定で、「サインインが必要」オプションを有効または無効にする必要があります。

ヘルプセンターのタイプ 「サインインが必要」を有効にするかどうか
一般公開ヘルプセンター:すべてのコンテンツが公開されている。 「サインインが必要」を有効にしない。
制限付きのヘルプセンター:コンテンツを表示するにはユーザー登録して、ログインする必要がある。 「サインインが必要」を有効にする。
制限されたコンテンツのある一般公開ヘルプセンター:一部の記事やセクションは特定のユーザーのみが利用でき、それ以外はヘルプセンターのすべての訪問者が利用できる。 「サインインが必要」を有効にしない。ヘルプセンター内の制限のない記事は、ログインせずに誰でも閲覧できます。一方で、制限のある記事は、適切な権限を持つサインインユーザーしか閲覧できません。

ヘルプセンターのセキュリティ設定を確認するには

  1. 「ナレッジベース管理者」で、サイドバーにある設定()をクリックします。
  2. 必要に応じて「セキュリティ」セクションで、ヘルプセンターのタイプごとに「サインインが必要」オプションを有効または無効にします。

  3. 制限付きのヘルプセンターを使用している場合や、一般に公開されたヘルプセンターに制限付きのコンテンツを含んでいる場合には、「制限されたコンテンツがWeb Widget(従来版)に表示されるように設定する」の手順に進みます。

制限されたコンテンツがWeb Widget(従来版)に表示されるように設定する

制限付きのヘルプセンターを使用している場合や、一般に公開されたヘルプセンターに制限付きのコンテンツを置いている場合は、コンテンツが制限されています(「ヘルプセンターのセキュリティ設定を確認する」を参照してください)。制限付きコンテンツをWeb Widget(従来版)に表示させるには、Web Widget(従来版)の設定で、Webページのコードにスニペットを挿入する必要があります。

一般に公開されているヘルプセンターの場合は、この作業は関係ありません。

まず、Web Widget(従来版)の設定を確認し、共有シークレットを生成する必要があります。

Web Widgetの設定を確認し共有シークレットを生成するには

  1. 管理センターで、サイドバーの「 チャネル」をクリックし、「従来版」>「Web Widget」を選択します。
  2. 「基本情報」タブをクリックします。
  3. 「ヘルプセンター」のチェックボックが選択されていることを確認します。

    選択されてない場合は、ヘルプセンターのタイプに応じて「サインインが必要」のオプションを有効または無効にします(「ヘルプセンターのセキュリティ設定を確認する」を参照)。

  4. 「セキュリティ」タブをクリックします。
  5. 「許可リスト」ボックスに、Web Widget(従来版)が含まれるサブドメインを入力します。これにより、Web Widgetで認証されたユーザーに、制限されているヘルプセンターコンテンツの表示が許可されます。

    セキュリティを守るために、サブドメインを許可リストに追加することをお勧めします。特別な理由があって、特定のサブドメインへのアクセスを制限しない場合は、このボックスは空のままでかまいません。サブドメインを複数指定する場合は、スペースで区切ります。

  6. 「エージェントが制限されたヘルプセンターコンテンツにアクセスできるようにします」を選択すると、エージェントと管理者がWeb Widget(従来版)にアクセスしたときに、制限されたヘルプセンターコンテンツが表示されるようになります。

    制限付きのヘルプセンターを運用している場合にエージェントのアクセスが有効になっていないと、エージェントや管理者のWeb Widget(従来版)にヘルプセンター機能が表示されません。制限された記事がある場合にエージェントのアクセスが有効になっていないと、エージェントに表示されるコンテンツは一般公開のものだけになります。

  7. 共有シークレットの設定:
    • 「生成」ボタンをクリックして共有シークレットを生成します。

      共有シークレットはセキュリティ設定なので、生成したら間をおかずに、エンジニアリングチームとのコミュニケーションまたはコードベースに直接貼り付けてください。ブラウザに入力するものではありません。

      メモ:共有シークレットはセキュリティを保つためのものです。そのため、生成されるのは一度きりです。共有シークレットへのアクセス権がなく、トークンを作成するために完全なシークレットが必要な場合は、「リセット」をクリックしてシークレットをリセットすることができます。
    • 共有シークレットが侵害されたと思われる場合は、共有シークレットをリセットした後、既存のトークンをすべて取り消すことができます。これにより、以前に認証されたユーザーのアクセスが無効になり、新しい有効なトークンが発行されるまで制限されたコンテンツは表示されなくなります。

共有シークレットを生成したら、それを使用してWeb Widget(従来版)スニペットに追加するJWTトークン(JWTの詳細はこちらを参照)を作成します。

JWTトークンを作成してWeb Widget(従来版)スニペットにコードを追加するには

  1. JWTトークン用にサーバー側のデータペイロードを構築します。これには以下の情報が必要です。
    • name:カスタマーの名前
    • email:カスタマーのメールアドレス
    • iat:現在のタイムスタンプの整数値(秒単位)。言語によっては、たとえばJavaScript's Date.now()のようにミリ秒を返す関数があるので、秒単位に換算する必要があります。

      Web Widget認証用のiatで許可されるクロックスキューは最大2分です。

    • jti:このトークンの一意の識別子。既に送信されている他のjwtトークンと同じ識別子にすることはできません。たとえば64ビットのランダムな数値。
  2. JWTペイロードのヘッダーにJWTアルゴリズムとして、次のようにHS256を指定します。
    {
      "typ":"JWT",
      "alg":"HS256"
    }

    HS256は、HMAC SHA 256を表します。これは、アメリカ国家安全保障局によって開発された256ビットの暗号化アルゴリズムです。

    メモ:Zendeskは、RS256とES256のJWTアルゴリズムをサポートしていません。
  3. 下のコードサンプルの中から言語の要件に合ったテンプレートを見つけてください。
  4. サーバーからJWTを取得し、JWTの値を使用してコールバックを作成する関数を追加します。「YOUR_JWT_TOKEN」を作成したトークンに置き換えます。このコードを、次のようにWeb Widget(従来版)スニペットの前に挿入します。
    
    <script type="text/javascript">
    window.zESettings = {
        webWidget: {
          authenticate: {
            jwtFn: function(callback) {
              callback('YOUR_JWT_TOKEN');
                }
            }
        }
    };
    </script>

    トークンは2時間後に失効します。ユーザーがログアウトしたときに次のAPIコールを追加して、ローカルストレージからすぐにトークンを削除できます。

    <script type="text/javascript">
    zE(function() {
     zE.logout();
    });
    </script>

コードサンプル

トークンは、ページの読み込み時にサーバー側から動的に生成される必要があります。言語の要件に合ったテンプレートを以下のサンプルから見つけます。必要に応じてサンプルをカスタマイズし、#{details}をご自分の情報で置き換えてください。

これらのサンプルのどれも要件に合致しない場合は、JWTライブラリの広範なリストで探してみてください。

  • Ruby
  • NodeJS
  • Python
  • PHP
  • Elixir

Ruby

まず、ruby-jwtをインストールします。

Rubygemsを使用している場合:

gem install jwt

Bundlerを使用している場合は、gemファイルに次の行を追加します。

gem 'jwt'

次に、共有シークレットを使用してトークンを生成します。

require 'jwt'
payload = {
  :name => "#{customerName}",
  :email => "#{customerEmail}",
  :iat => timestamp,
  :jti => "#{uniqueId}"
}
token = JWT.encode payload, "#{yourSecret}"

NodeJS

jsonwebtokenをインストールします。

npm install jsonwebtoken --save-dev

次に、共有シークレットを使用してトークンを生成します。

var jwt = require('jsonwebtoken'); 
var payload = {
  name: '#{customerName}',
  email: '#{customerEmail}',
  iat: #{timestamp}, 
  jti: '#{uniqueId}'
};
var token = jwt.sign(payload, '#{yourSecret}');

Python

python-joseをインストールします。

pip install python-jose

共有シークレットを使用してトークンを生成します。

from jose import jwt
var payload = {
  'name': '#{customerName}',
  'email': '#{customerEmail}',
  'iat': #{timestamp}, 
  'jti': '#{uniqueId}'
}
token = jwt.encode(payload, '#{yourSecret}'

PHP

PHP-JWTをダウンロードします。

composer require firebase/php-jwt

共有シークレットを使用してトークンを生成します。

use \Firebase\JWT\JWT;
$payload = {
  'name' => '#{customerName}' ,
  'email' => '#{customerEmail}',
  'iat' => #{timestamp},
  'jti' => '#{uniqueId}'
};
$token = JWT::encode($payload, '#{yourSecret}');

Elixir

`json_web_token_ex`を`mix.exs`ファイルに追加します。

defp deps do
  [{:json_web_token, "~> 0.2"}]
end

共有シークレットを使用してトークンを生成します。

data = %{
  name: "#{customerName}",
  email: "#{customerEmail}",
  iat: "#{timestamp}",
  jti: "#{uniqueId}"
}
options = %{ key: "#{yourSecret}" }
jwt = JsonWebToken.sign data, options
Powered by Zendesk