Zendesk 챗과 통합

작동 방식

Zendesk 챗과 통합하면 내 프로젝트에 엑솔라 로그인 제품 사용자를 내 지원팀에 질문을 제출한 Zendesk Chat 방문자와 연결할 수 있습니다. Zendesk 쪽에서 사용된 external_id매개 변수는 내 로그인 프로젝트의 사용자 ID와 일치합니다. 방문자를 엑솔라 로그인 사용자로 식별하게 되면 이들의 계정을 게시자 계정을 통해 관리할 수 있게 됩니다.

사용자

이미 로그인을 통합하고 Zendesk 챗 계정을 보유한 파트너.

획득 방법

방문자 연결 방법:

  1. 로그인 프로젝트에서 다음 요청 중 하나를 통해 사용자를 인증합니다:
  2. Zendesk JWT를 생성.
  3. Zendesk 챗으로 사용자를 인증.

Zendesk JWT 생성

Zendesk JWT는 로그인 프로젝트에서 사용자 인증 시 엑솔라 로그인 서버로부터 수신한 토큰에 기반합니다. 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 검증

쿠키 파일에서 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 dashboard > Settings > Widget > Widget security 탭 > Visitor Authentication에서 찾을 수 있습니다.

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

Zendesk 챗으로 방문자 인증

Zendesk 챗에 다음 방문자 데이터 추가 가능:

  • 이름
  • 이메일 주소
  • 식별자
Zendesk JWT 생성 중에 방문자 데이터가 추가됩니다.

수신된 Zendesk JWT로 Zendesk 챗 방문자 인증에 사용. 웹 SDK를 다음과 같이 authentication 옵션으로 초기화:

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)
                });
            });
        }
    }
});

방문자 인증 절차는 지침웹 SDK에 기술되어 있습니다.

Note: SNS는 사용자 이메일 주소에 대한 데이터를 전달하지 않을 수 있습니다. 이메일 주소를 요청하려면 레시피를 따르세요.

방문자와 작업

성공적인 인증 이후,방문자는 Zendesk 챗 계정 > Visitors 모듈에 표시됩니다.

Visitors메소드 그룹으로 작업하려면, 토큰 (지침)을 취득해야 합니다. 내 로그인 프로젝트에 연결된 방문자 데이터와 작업하는 경우:

  1. 방문자 데이터를 취득합니다.
  2. 내 로그인 프로젝트에 방문자가 연결됩니다.

방문자 데이터 가져오기

Get a Visitor 요청을 실행하려면, Visitor ID를 가져와야 합니다. 이는 필요한 방문자를 선택하여 Zendesk 챗 계정에서 찾을 수 있습니다.

예제 Get a Visitor (요청):

Copy
Full screen
Small screen
GET /api/v2/visitors/9855790-xjj3u5xPWhW1Fv HTTP/1.1

Host:
www.zopim.com

Headers:
Authorization: Bearer <token>

응답 예제:

Copy
Full screen
Small screen
{
  "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에서 찾을 수 있습니다.