集成Zendesk Chat

运行机制

集成Zendesk Chat后可将您项目的艾克索拉登录管理器用户与向您的支持团队提交了问题的Zendesk Chat访客关联。Zendesk侧使用的external_id参数对应您的登录管理器项目中的用户ID。如果访客识别为是艾克索拉登录管理器用户,则您即可在发布商帐户中管理其帐户。

适用对象

集成了登录管理器并拥有Zendesk Chat帐户的合作伙伴。

如何获取

要关联访客:

  1. 通过以下请求之一在您的登录管理器项目中认证用户:
  2. 生成Zendesk JWT。
  3. 认证访客进入Zendesk Chat。

生成Zendesk JWT

Zendesk JWT基于在您的艾克索拉登录管理器项目中认证用户时从商店登录管理器服务器收到的令牌。您可以将令牌存储在相关域名的Cookie文件中,然后在生成Zendesk JWT时添加到HTTP请求中。

您也可以自己设置实现该调用时的响应格式。

以下是基于Go的Zendesk JWT获取流程的简化版本。完整的Zendesk JWT生成代码见GitHub

生成JWT之前安装以下包:

Copy
Full screen
Small screen
go get github.com/dgrijalva/jwt-go
go get github.com/rs/cors

要获取Zendesk JWT:

  1. 验证JWT
  2. 解码JWT
  3. 形成JWT声明列表
  4. 签名JWT

验证JWT

从Cookie文件中提取JWT,并使用在发布商帐户 > 登录管理器项目 > 常规设置 > 密钥中找到密钥验证该令牌。

Copy
Full screen
Small screen
cookie, err := r.Cookie("token")

token, err := jwt.Parse(cookie.Value, func(token *jwt.Token) (interface{}, error) {
  if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
    return nil, errors.New("unexpected signing method")
  }
  return []byte(loginSecret), nil
})

var loginClaims jwt.MapClaims
var ok bool
if loginClaims, ok = token.Claims.(jwt.MapClaims); !ok || !token.Valid {
  writeErrorResponse(w, "00-01", "Token is invalid", http.StatusUnauthorized)
  return
}

解码JWT

解码JWT并从中提取以下声明的值:

  • email — 邮箱地址
  • sub — 用户ID

Copy
Full screen
Small screen
var sub, email string
sub, _ = loginClaims["sub"].(string)
email, _ = loginClaims["email"].(string)

形成JWT声明列表

形成一列JWT的声明。各声明的描述见Creating a JWT token部分。

Copy
Full screen
Small screen
zendeskClaims := jwt.MapClaims{}
zendeskClaims["name"] = email
zendeskClaims["email"] = email
zendeskClaims["external_id"] = sub
zendeskClaims["iat"] = time.Now().UTC().Unix()

签名JWT

使用您Zendesk Chat帐户的密钥给令牌签名。该密钥可在Chat dashboard > Settings > Widget > Widget security选项卡 > Visitor Authentication中找到。

Copy
Full screen
Small screen
zendeskToken := jwt.NewWithClaims(jwt.SigningMethodHS256, zendeskClaims)
zendeskTokenString, _ := zendeskToken.SignedString([]byte(zendeskSecret))

认证访客进入Zendesk Chat

这样可将以下访客数据添加到Zendesk Chat:

  • 名称
  • 邮箱地址
  • 标识符
生成Zendesk JWT时添加的访客数据。

使用收到的Zendesk JWT将访客认证进入Zendesk Chat。通过以下方式使用authentication选项初始化Web SDK:

Copy
Full screen
Small screen
zChat.init({
  account_key: ACCOUNT_KEY,
  authentication: {
    jwt_fn: function(callback) {
      fetch('https://example.com:8001/generate/token', {
        credentials: "include"
      }).then(function(res) {
        res.text().then(function(body) {
          const jwt = JSON.parse(body).token;
          callback(jwt)
        });
      });
    }
  }
});

访客认证流程见此说明Web SDK

Note
社交网络可能不会传入用户的邮箱地址数据。请参阅此说明请求邮箱地址。

对访客进行操作

访客认证成功后,将在您的Zendesk Chat帐户 > Visitors模块中显示。

如果要使用Visitors端点,需先获取令牌(说明)。要操作与您的登录管理器项目关联的访客:

  1. 获取访客数据
  2. 访客关联至您的登录管理器项目。

获取访客数据

要执行Show Visitor请求,需获取Visitor ID。可通过选中所需访客在您的Zendesk Chat帐户中找到该值。

Show Visitor请求示例:

Copy
Full screen
Small screen
http
  • http
  • curl
GET https://www.zopim.com/api/v2/visitors/9855790-xjj3u5xPWhW1Fv HTTP/1.1
Authorization: Bearer <token>
curl --request GET \
  --url https://www.zopim.com/api/v2/visitors/9855790-xjj3u5xPWhW1Fv \
  --header 'authorization: bearer_token'

响应示例:

Copy
Full screen
Small screen
http
  • http
  • curl
HTTP/1.1 200 OK
Content-Type: application/json

{
  "banned": false,
  "notes": "",
  "id": "9855790.xjj3ukxyIhn6j3",
  "email": "email@email.com",
  "phone": "",
  "created": 1586950554,
  "name": "email@email.com",
  "external_id": "82cd5e0c-c3ff-11e9-b199-c1e5fc81c37f"
}
{
  "banned": false,
  "notes": "",
  "id": "9855790.xjj3ukxyIhn6j3",
  "email": "email@email.com",
  "phone": "",
  "created": 1586950554,
  "name": "email@email.com",
  "external_id": "82cd5e0c-c3ff-11e9-b199-c1e5fc81c37f"
}

如果访客与您的登录管理器项目关联,则收到的数据中的external_id参数与用户ID一致。您可在发布商帐户 > 登录管理器项目 > 用户 > 用户名/ID中找到用户ID。

本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
为此页面评分
为此页面评分
我们还有其他可改进之处吗?

不想回答

感谢您的反馈!
上次更新时间: 2020年12月24日

发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。

报告问题
我们非常重视内容质量。您的反馈将帮助我们做得更好。
请留下邮箱以便我们后续跟进
感谢您的反馈!