Pagkilala sa User
Iniuugnay ng pagkilala sa user ang mga anonymous na chat session sa totoong profile ng user.
Paano ito gumagana
Kapag tinawag ninyo ang Respondo.identify(), ikinakabit sa usapan ang mga field na ipinasa ninyo. Opsyonal ang lahat ng field — ipasa lang ang mga mayroon kayo. Halimbawa, puwedeng userId lang ang ipadala nang walang email o pangalan. Nakikita ng mga tagasuporta ang datos na ito sa panel ng detalye ng usapan.
Mga Parameter#
| Katangian | Uri | Kailangan | Paglalarawan |
|---|---|---|---|
| string | opsyonal | Email address ng user | |
| name | string | opsyonal | Pangalang ipinapakita |
| userId | string | opsyonal | Ang panloob na user ID o display ID ninyo — ipinapakita nang walang pagbabago sa dashboard |
| userHash | string | opsyonal | Lagdang HMAC-SHA256 para sa pagpapatunay ng identity |
| metadata | object | opsyonal | Mga pares na key-value ng custom na field (plan, company, atbp.) |
| properties | object | opsyonal | Custom na katangian ng contact na itinakda sa Mga Setting ng Ahente. Dapat tumugma ang mga key sa depinisyon ng katangian. Nakaimbak ang mga halaga na may prefix na cp_ at puwedeng i-filter sa Inbox. |
// Pagkatapos ng matagumpay na pag-log in
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: { // custom na katangian ng contact
account_type: user.accountType, // dapat tumugma sa mga key mula sa Mga Setting ng Ahente
industry: user.industry,
contract_tier: user.tier
}
});
}identify() anumang oras — ang mga tawag bago matapos kumarga ang widget.js ay pinipila ng snippet at awtomatikong inuulit kapag na-initialize na ang widget. Nawawala lang ang datos ng identity (na may babala sa console) kung kayo mismo ang nagkarga ng widget.js at tinawag ang identify() nang hindi pa kailanman tinatawag ang init() — sa manu-manong setup, laging unahin ang init().Mga Anonymous na Bisita#
Kung hindi ninyo tatawagin ang identify(), awtomatikong nagtatalaga ang widget ng permanenteng visitor ID na nakaimbak sa localStorage (key respondoai_visitor_id). Sa dashboard, lumalabas ang usapan bilang Guest · Web widget.
| Mode | Ipinapakita sa dashboard | Kailangan ng HMAC |
|---|---|---|
Walang identify() | Guest · Web widget | Hindi |
identify({ email, name }) | Ipinapakita ang pangalan + email | Hindi — maliban kung naka-enable ang Identity Verification; kung gayon, tahimik na inaalis ang email/pangalan na walang lagda at nananatiling anonymous ang session |
identify({ userId }) | Ipinapakita ang userId nang walang pagbabago | Hindi — maliban kung naka-enable ang Identity Verification; kung gayon, kailangan ng valid na userHash, kung hindi ay inaalis ang identity |
identify({ userId, userHash }) | Napatunayang identity ng user | Oo — kriptograpikong napatunayan |
Kapag naka-enable ang Identity Verification para sa channel, anumang identify() na may dalang email o userId nang walang valid na userHash ay inaalis sa panig ng server at nananatiling anonymous ang bisita — tingnan ang Pagpapatunay ng Identity (HMAC) sa ibaba.
Pagkilala gamit ang userId lang (walang email o pangalan)#
Kung walang email o pangalan ng user ang platform ninyo — halimbawa, panloob na display ID lang ang mayroon kayo — puwede ninyong ipasa ang userId lang. Wala nang ibang field na kailangan. Ipapakita ng dashboard ang userId nang walang pagbabago sa detalye ng usapan.
// Display ID lang ang mayroon ang platform ninyo — sapat na iyon
Respondo.identify({
userId: user.displayId, // hal. "USR-4821" — ipinapakita sa dashboard
metadata: { // opsyonal na karagdagang konteksto
plan: 'premium',
region: 'eu-west'
}
});
// Hindi kailangan ng email o pangalan — gumagana ang widget sa userId languserHash ( tingnan ang Pagpapatunay ng Identity sa ibaba). Kung walang HMAC, kahit sino ay makakapagpasa ng anumang userId mula sa console ng browser.Google Tag Manager / naantalang identify()#
Kapag naka-embed sa pamamagitan ng GTM, maaaring wala pa ang datos ng user sa pagkarga ng pahina. May dalawang paraan:
// Kung isinusulat na ng platform ninyo ang user ID sa localStorage:
Respondo.init({
agentId: 'YOUR_AGENT_ID',
localStorageKey: 'myapp_user_id' // awtomatikong binabasa ang localStorage.getItem('myapp_user_id')
});
// Hindi na kailangang tumawag ng identify() — kusang kinukuha ng widget ang userId// 1. Agad na i-init ang widget (GTM tag)
Respondo.init({ agentId: 'YOUR_AGENT_ID' });
// 2. Mamaya, kapag lumitaw na ang datos ng user (hal. mula sa dataLayer o sa app ninyo):
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 kung wala pang userId na naitakda sa pamamagitan ng identify(). Laging nauuna ang tahasang pagtawag sa identify().Pagpapatunay ng Identity (HMAC)#
Kung walang pagpapatunay, puwedeng magpanggap ninuman bilang ibang user sa pamamagitan ng pekeng userId o email. Gumagamit ang Pagpapatunay ng Identity ng HMAC-SHA256 para kriptograpikong patunayan na ang server ninyo ang nagtakda ng identity ng user, hindi ang code sa panig ng kliyente.
Paano ito gumagana#
- I-enable ang Identity Verification sa setting ng channel ninyo — makakakuha kayo ng secret key.
- Sa server ninyo, kalkulahin ang
HMAC-SHA256(secret, userId)— ang secret ang key, ang userId ang mensahe — at ipadala ang resulta sa frontend. Kung email lang ang pangkilala ninyo sa mga user (walang userId), ang email ang lagdaan: ang nilalagdaang payload ay userId kapag nakatakda ito, kung hindi ay email. Kung parehong ipinasa, ang userId ang lagdaan; ito ang inuuna. - Ipasa ang hash bilang
userHashsaRespondo.identify(). - Pinapatunayan ng Respondo ang hash sa panig ng server. Kung hindi valid, inaalis ang identity at itinuturing na anonymous ang user.
identify() na may dalang userId o email ay dapat may kasamang valid na userHash — kung hindi, inaalis ang mga field ng identity at itinuturing na anonymous ang bisita.Mga halimbawa sa panig ng server#
const crypto = require('crypto');
const SECRET = process.env.RESPONDO_IDENTITY_SECRET;
function generateUserHash(userId) {
return crypto
.createHmac('sha256', SECRET)
.update(userId)
.digest('hex');
}
// Sa API endpoint ninyo:
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()
# Sa view / endpoint ninyo:
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))
}Paggamit sa frontend#
// Kunin ang hash mula sa SERVER NINYO
const { userHash } = await fetch('/api/respondo-hash').then(r => r.json());
Respondo.identify({
email: user.email,
name: user.name,
userId: user.id,
userHash: userHash // lagdang HMAC-SHA256
});