What's my plan?
Suite Any plan
Support Any plan

您可以将 Web Widget(经典)配置为嵌入受限帮助中心(需要用户登录才能访问)或受限知识库(包含仅限特定用户访问的文章的公开帮助中心)的内容。

当您配置 Web Widget(经典)以包含受限内容时:

  • 登录您网站的访问者可以通过 Web Widget(经典)阅读受限帮助中心文章。请注意,嵌入该小组件的客户网站需要负责对用户的电邮进行身份验证。
  • 而未登录的访问者只能看到公开文章。如果没有公开文章,Web Widget(经典)中不会显示帮助中心功能。

本文章包含以下主题:

  • 确定帮助中心安全设置
  • 设置 Web Widget(经典)以显示受限内容
  • 代码示例
注意:您无需在网站和帮助中心之间建立单点登录 (SSO) 连接即可使用此功能。但是,对于要从 Web Widget(经典)“查看原始文章”的用户,拥有 SSO 可提供更加无缝的体验。请注意,即使您已经有 SSO,也需要配置 Web Widget(经典),以便从该功能中受益。

有关 Web Widget(经典)的更多信息,请参阅使用 Web Widget(经典)在您的网站中嵌入客户服务。

有关受限帮助中心和知识库内容的信息,请参阅将您的内容限制为仅限已登录用户访问和限制对知识库内容的访问。

确定帮助中心安全设置

Web Widget(经典)可以使用以下任何安全配置显示帮助中心的内容。根据帮助中心类型,您可能需要在 Guide 的帮助中心安全设置中启用或禁用“需要登录”选项。

帮助中心类型 是否启用“需要登录”?
公开帮助中心:其中所有内容公开可见。 请勿启用需要登录。
受限帮助中心:用户必须在注册并登录才能查看其中内容。 启用需要登录。
内容受限的公开帮助中心:其中一些文章仅对特定用户可见,而另一些则对所有帮助中心访问者可见。 请勿启用需要登录。任何人无需登录即可在帮助中心查看不受限文章。但是,只有具有正确权限的登录用户才能查看受限文章。

检查帮助中心安全设置

  1. 在知识管理中,单击侧栏中的设置 ()。
  2. 在安全组别,根据帮助中心类型,启用或禁用需要登录选项。

  3. 如果帮助中心受限或公开帮助中心内容受限,请前往设置 Web Widget(经典)以显示受限内容。

设置 Web Widget(经典)以显示受限内容

帮助中心受限或公开帮助中心内容受限表示文章受限(请参阅确定帮助中心安全设置)。要让受限文章显示在 Web Widget(经典)中,您需要配置 Web Widget(经典)设置,并将其它代码段添加到您的网站代码中。

此任务不适用于公开帮助中心。

在开始之前,您需要检查 Web Widget(经典)设置并生成一个共享密钥。

检查设置并生成共享密钥

  1. 在管理中心,单击侧栏中的渠道 (),然后选择经典 > Web Widget。
  2. 单击基本设置标签
  3. 确保已选中帮助中心复选框。

    如果您尚未选中该复选框,请根据帮助中心类型启用或禁用需要登录选项(请参阅确定帮助中心安全设置)。

  4. 单击安全标签。
  5. 在允许列表框中,输入包含 Web Widget(经典)的子域名。这样可以在小组件中向已通过身份验证的用户显示帮助中心受限内容。

    为安全起见,建议将子域名添加到允许列表。如果您有特定的原因要使对特定子域名的访问限制无效,则可以将该框留空。用空格将子域名隔开。

  6. 选择允许专员访问受限帮助中心内容,以在专员和管理员访问 Web Widget(经典)时显示受限帮助中心内容。

    如果帮助中心受限,并且没有启用专员访问,则 Web Widget(经典)中不会向专员和管理员显示帮助中心功能。如果文章受限,并且没有启用专员访问,则专员只能看到公开内容。

  7. 配置共享密钥:
    • 单击生成按钮以创建共享密钥:

      这是一种安全设置,旨在一次性生成、复制共享密钥,并将其粘贴到与工程团队的通讯中或直接粘贴到代码库中。请勿在浏览器中输入该密钥。

      注意:共享密钥旨在保持安全。因此,它只会完整显示一次。如果您无权访问共享密钥,但需要完整的密钥来创建密钥,您可以单击重置以重置密钥。
    • 如果您认为共享密钥已泄露,可以在重置共享密钥后撤销所有现有密钥。这会使之前任何已通过身份验证者的访问权限失效,并在颁发新的有效密钥之前不允许查看受限内容。

生成共享密钥后,使用其创建一个 JWT 密钥(了解更多关于 JWT 的信息),然后将该 JWT 密钥添加到 Web Widget(经典)代码段中。

创建 JWT 密钥并将代码添加到 Web Widget(经典)代码段

  1. 构造 JWT 密钥的服务器端数据负载。这需要有以下信息:
    • 名称:客户的名称
    • 电邮:客户的电邮
    • iat:当前时间戳的整数值,以秒为单位。特定语言中的一些函数,即 JavaScript 的 Date.now() 返回毫秒,因此请确保您转换为秒。

      用于 Web Widget 身份验证的 iat 允许最多两分钟的时钟偏差。

    • jti:该密钥的唯一标识符。不得与已发送的任何其它 JWT 密钥相同。例如一个随机的 64 位数字。
  2. 在 JWT 有效载荷的标题中指定 HS256 为 JWT 算法:
    {
      "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>

    密钥的有效期为两小时。您可以在用户退出时添加以下 API 调用,以便提前将其从本地存储中移除:

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

代码示例

您的密钥需要在页面加载时从服务器端动态生成。在下面找到适合您语言需求的模板。根据需要自定义示例,确保将 #{details} 替换为您自己的信息。

如果这些示例中没有一个符合您的需求,JWT 有一个更广泛的 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
由 Zendesk 提供技术支持
OSZAR »