Dokümanlar

Kullanıcı Tanımlama

Kullanıcıları tanımlamak, anonim sohbet oturumlarını gerçek kullanıcı profilleriyle ilişkilendirir.

Nasıl çalışır

Respondo.identify() çağırdığınızda, verdiğiniz alanlar konuşmaya eklenir. Tüm alanlar isteğe bağlıdır — yalnızca elinizdekileri geçirin. Örneğin, e-posta veya ad olmadan yalnızca userId gönderebilirsiniz. Destek temsilcileri bu verileri konuşma ayrıntıları panelinde görür.

Parametreler#

ÖzellikTürZorunluAçıklama
emailstringisteğe bağlıKullanıcının e-posta adresi
namestringisteğe bağlıGörünen ad
userIdstringisteğe bağlıDahili kullanıcı veya görünen kimliğiniz — panoda olduğu gibi gösterilir
userHashstringisteğe bağlıKimlik doğrulama için HMAC-SHA256 imzası
metadataobjectisteğe bağlıÖzel alanların anahtar-değer çiftleri (plan, şirket vb.)
propertiesobjectisteğe bağlıAjan Ayarları’nda tanımlanan özel kişi özellikleri. Anahtarlar özellik tanımlarıyla eşleşmelidir. Değerler cp_ önekiyle saklanır ve Gelen Kutusu’nda filtrelenebilir.
Örnek: Tek Sayfa Uygulamasıjavascript
// Başarılı girişten sonra
async function onLogin(user) {
  await authenticateUser(user);

  Respondo.identify({
    email: user.email,
    name: user.fullName,
    userId: user.id,
    metadata: {
      plan: user.subscription.plan,
      company: user.company.name,
      role: user.role,
      signedUp: user.createdAt
    },
    properties: {                        // özel kişi özellikleri
      account_type: user.accountType,    // Ajan Ayarları’ndaki anahtarlarla eşleşmelidir
      industry: user.industry,
      contract_tier: user.tier
    }
  });
}
Standart kurulum kod parçasıyla identify() çağrısını istediğiniz an yapabilirsiniz — widget.js yüklenmeyi bitirmeden önce yapılan çağrılar kod parçası tarafından kuyruğa alınır ve widget başlatıldığında otomatik olarak yeniden oynatılır. Kimlik verileri yalnızca widget.js'i kendiniz yükleyip hiç init() çağırmadan identify() çağırırsanız (bir konsol uyarısıyla) düşürülür — manuel kurulumlarda her zaman önce init() çağırın.

Anonim Ziyaretçiler#

identify() çağırmazsanız, widget localStorage’da (respondoai_visitor_id anahtarıyla) saklanan kalıcı bir ziyaretçi kimliği otomatik olarak atar. Panoda konuşma Guest · Web widget olarak görünür.

ModPano gösterimiHMAC gerekli
identify() yokGuest · Web widgetHayır
identify({ email, name })Ad + e-posta gösterilirHayır — Kimlik Doğrulama etkin değilse; etkinse imzasız e-posta/ad sessizce ayıklanır ve oturum anonim kalır
identify({ userId })userId olduğu gibi gösterilirHayır — Kimlik Doğrulama etkin değilse; etkinse geçerli bir userHash gerekir, yoksa kimlik ayıklanır
identify({ userId, userHash })Doğrulanmış kullanıcı kimliğiEvet — kriptografik olarak doğrulanmış

Kanal için Kimlik Doğrulama etkinleştirildiğinde, geçerli bir userHash olmadan e-posta veya userId taşıyan her identify() sunucu tarafında ayıklanır ve ziyaretçi anonim kalır — aşağıdaki Kimlik Doğrulama (HMAC) bölümüne bakın.

Ziyaretçi kimliği aynı tarayıcıda oturumlar arasında kalıcıdır. Respondo’ya asla doğrulanmış bir kimlik olarak gönderilmez — yalnızca anonim konuşma sürekliliği için kullanılır.

Yalnızca userId ile Tanımlama (e-posta veya ad olmadan)#

Platformunuzda kullanıcı e-postaları veya adları yoksa — örneğin yalnızca dahili bir görünen kimliğiniz varsa — yalnızca userId geçirebilirsiniz. Başka alana gerek yoktur. Pano, konuşma ayrıntılarında userId’yi olduğu gibi gösterir.

userId + metadata (e-posta veya ad olmadan)javascript
// Platformunuzda yalnızca görünen bir kimlik var — bu yeterli
Respondo.identify({
  userId: user.displayId,      // örn. "USR-4821" — panoda gösterilir
  metadata: {                  // isteğe bağlı ek bağlam
    plan: 'premium',
    region: 'eu-west'
  }
});
// E-posta veya ad gerekmez — widget yalnızca userId ile çalışır
userId’nin taklit edilmesini önlemek için, onu userHash ile eşleştirin (aşağıdaki Kimlik Doğrulama’ya bakın). HMAC olmadan, herkes tarayıcı konsolundan herhangi bir userId geçirebilir.

Google Tag Manager / ertelenmiş identify()#

GTM aracılığıyla yerleştirirken, kullanıcı verileri sayfa yüklenirken kullanılabilir olmayabilir. İki yaklaşım:

Seçenek A: localStorageKey (JS gerekmez)javascript
// Platformunuz kullanıcı kimliğini zaten localStorage’a yazıyorsa:
Respondo.init({
  agentId: 'YOUR_AGENT_ID',
  localStorageKey: 'myapp_user_id'  // localStorage.getItem('myapp_user_id') değerini otomatik okur
});
// identify() çağrısı gerekmez — widget userId’yi kendisi alır
Seçenek B: dataLayer aracılığıyla ertelenmiş identify()javascript
// 1. Widget’ı hemen başlat (GTM etiketi)
Respondo.init({ agentId: 'YOUR_AGENT_ID' });

// 2. Daha sonra, kullanıcı verileri geldiğinde (örn. dataLayer’dan veya uygulamanızdan):
var waitForUser = setInterval(function() {
  var uid = localStorage.getItem('myapp_user_id');
  if (uid && window.Respondo && typeof window.Respondo.identify === 'function') {
    clearInterval(waitForUser);
    Respondo.identify({ userId: uid });
  }
}, 500);
localStorageKey yalnızca identify() ile önceden ayarlanmış bir userId yoksa kullanılır. Açık identify() çağrıları her zaman önceliklidir.

Kimlik Doğrulama (HMAC)#

Doğrulama olmadan, herkes sahte bir userId veya email geçirerek bir kullanıcının kimliğine bürünebilir. Kimlik Doğrulama, kullanıcının kimliğinin istemci tarafı kod tarafından değil, sunucunuz tarafından ayarlandığını kriptografik olarak kanıtlamak için HMAC-SHA256 kullanır.

Nasıl çalışır#

  1. Kanal ayarlarınızda Kimlik Doğrulama’yı etkinleştirin — bir gizli anahtar (secret key) alırsınız.
  2. Sunucunuzda, HMAC-SHA256(secret, userId) hesaplayın — secret anahtar, userId mesajdır — ve sonucu ön uca gönderin. Kullanıcıları yalnızca e-postayla tanımlıyorsanız (userId yoksa) bunun yerine e-postayı imzalayın: imzalanan veri, ayarlıysa userId, değilse e-postadır. İkisini de geçirirseniz userId imzalanır; öncelik ondadır.
  3. Hash’i Respondo.identify() içinde userHash olarak geçirin.
  4. Respondo, hash’i sunucu tarafında doğrular. Geçersizse, kimlik kaldırılır ve kullanıcı anonim olarak değerlendirilir.
Gizli anahtarınızı asla ön uç kodunda ifşa etmeyin. HMAC, arka ucunuzda hesaplanmalıdır.
Doğrulama etkinleştirildikten sonra, userId veya email taşıyan her identify() geçerli bir userHash içermelidir — aksi halde kimlik alanları ayıklanır ve ziyaretçi anonim olarak ele alınır.

Sunucu tarafı örnekleri#

Node.jsjavascript
const crypto = require('crypto');

const SECRET = process.env.RESPONDO_IDENTITY_SECRET;

function generateUserHash(userId) {
  return crypto
    .createHmac('sha256', SECRET)
    .update(userId)
    .digest('hex');
}

// API uç noktanızda:
app.get('/api/respondo-hash', (req, res) => {
  const hash = generateUserHash(req.user.id);
  res.json({ userHash: hash });
});
Pythonpython
import hmac, hashlib, os

SECRET = os.environ['RESPONDO_IDENTITY_SECRET']

def generate_user_hash(user_id: str) -> str:
    return hmac.new(
        SECRET.encode(),
        user_id.encode(),
        hashlib.sha256
    ).hexdigest()

# Görünümünüzde / uç noktanızda:
user_hash = generate_user_hash(request.user.id)
Gogo
import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
)

func GenerateUserHash(userID, secret string) string {
    mac := hmac.New(sha256.New, []byte(secret))
    mac.Write([]byte(userID))
    return hex.EncodeToString(mac.Sum(nil))
}

Ön uç kullanımı#

Kimlik Doğrulama ilejavascript
// Hash’i KENDİ sunucunuzdan alın
const { userHash } = await fetch('/api/respondo-hash').then(r => r.json());

Respondo.identify({
  email: user.email,
  name: user.name,
  userId: user.id,
  userHash: userHash  // HMAC-SHA256 imzası
});