Авторизация / Интеграция с Zendesk Chat

Интеграция с Zendesk Chat

Как это работает

Интеграция с Zendesk Chat позволяет связать пользователей продукта Авторизация в вашем проекте с посетителями Zendesk Chat, которые оставляют вопросы вашей службе поддержки. На стороне Zendesk Chat используется параметр external_id, которому соответствует ID пользователя в вашем варианте авторизации. При идентификации посетителя как пользователя продукта Авторизации вы можете управлять его аккаунтом через Личный кабинет.

Для кого подходит

Для партнеров, у которых уже подключен продукт Авторизация и есть учетная запись Zendesk Chat.

Как настроить

Для привязки посетителя:

  1. Выполните аутентификацию посетителя в вашем варианте авторизации. Вы можете использовать следующие запросы:
    • Аутентификация по имени пользователя и паролю (JWT и OAuth 2.0).
    • Аутентификация через социальные сети (JWT и OAuth 2.0).
  2. Сгенерируйте Zendesk JWT.
  3. Выполните аутентификацию посетителя в Zendesk Chat.

Генерация Zendesk JWT

Zendesk JWT основан на токене, полученном от сервера Авторизации Иксолла при аутентификации посетителя в вашем варианте авторизации. Вы можете хранить токен в cookie на нужном домене и добавлять его к HTTP-запросу при генерации Zendesk JWT.

При реализации метода вы также можете задать собственный формат ответа.

Ниже приведена упрощенная реализация получения Zendesk JWT на языке программирования Go. Полный код генерации 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 из cookie и провалидируйте его с помощью секретного ключа, который находится в Личном кабинете, в разделе ваш вариант авторизации > Общие настройки > Секретный ключ.

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:

  • имя
  • email-адрес
  • идентификатор
Информация о посетителе добавляется при генерации Zendesk JWT.

Выполните аутентификацию посетителя в Zendesk Chat с помощью полученного Zendesk JWT. Для этого инициализируйте Web 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)
        });
      });
    }
  }
});

Шаги по аутентификации посетителя подробно описаны в инструкции и Web SDK.

Note:
Социальные сети могут не передавать информацию о email-адресах пользователей. Для запроса email-адреса воспользуйтесь инструкцией.

Работа с посетителем

После успешной аутентификации посетитель отобразится в вашей учетной записи Zendesk Chat в разделе Visitors.

Для работы с группой методов Visitors необходимо получить токен по инструкции. При работе с данными посетителя, привязанного к вашему варианту авторизации:

  1. Получите данные посетителя.
  2. Проверьте, что посетитель привязан к вашему варианту авторизации.

Получение данных посетителя

Для выполнения запроса Get a Visitor необходимо получить Visitor ID. Вы можете найти его в вашей учетной записи Zendesk Chat, выбрав нужного посетителя.

Пример запроса Get a Visitor:

Copy
Full screen
Small screen
GET /api/v2/visitors/9855790-xjj3u5xPWhW1Fv HTTP/1.1
Host: www.zopim.com
Authorization: Bearer <token>

Пример ответа:

Copy
Full screen
Small screen
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"
}

Если посетитель привязан к вашему варианту авторизации, в полученной информации о посетителе параметр external_id будет соответствовать ID пользователя. Вы можете найти ID пользователя в Личном кабинете, в разделе ваш вариант авторизации > Пользователи > Имя/ID пользователя.