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#
| Özellik | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| string | isteğe bağlı | Kullanıcının e-posta adresi | |
| name | string | isteğe bağlı | Görünen ad |
| userId | string | isteğe bağlı | Dahili kullanıcı veya görünen kimliğiniz — panoda olduğu gibi gösterilir |
| userHash | string | isteğe bağlı | Kimlik doğrulama için HMAC-SHA256 imzası |
| metadata | object | isteğe bağlı | Özel alanların anahtar-değer çiftleri (plan, şirket vb.) |
| properties | object | isteğ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. |
// 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
}
});
}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.
| Mod | Pano gösterimi | HMAC gerekli |
|---|---|---|
identify() yok | Guest · Web widget | Hayır |
identify({ email, name }) | Ad + e-posta gösterilir | Hayı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österilir | Hayı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ği | Evet — 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.
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.
// 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ışıruserHash 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:
// 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// 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#
- Kanal ayarlarınızda Kimlik Doğrulama’yı etkinleştirin — bir gizli anahtar (secret key) alırsınız.
- 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. - Hash’i
Respondo.identify()içindeuserHasholarak geçirin. - Respondo, hash’i sunucu tarafında doğrular. Geçersizse, kimlik kaldırılır ve kullanıcı anonim olarak değerlendirilir.
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#
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 });
});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)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ı#
// 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ı
});