Dokumentasyon

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#

KatangianUriKailanganPaglalarawan
emailstringopsyonalEmail address ng user
namestringopsyonalPangalang ipinapakita
userIdstringopsyonalAng panloob na user ID o display ID ninyo — ipinapakita nang walang pagbabago sa dashboard
userHashstringopsyonalLagdang HMAC-SHA256 para sa pagpapatunay ng identity
metadataobjectopsyonalMga pares na key-value ng custom na field (plan, company, atbp.)
propertiesobjectopsyonalCustom 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.
Halimbawa: Single Page Appjavascript
// 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
    }
  });
}
Sa karaniwang install snippet, puwede ninyong tawagin ang 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.

ModeIpinapakita sa dashboardKailangan ng HMAC
Walang identify()Guest · Web widgetHindi
identify({ email, name })Ipinapakita ang pangalan + emailHindi — 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 pagbabagoHindi — 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 userOo — 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.

Nananatili ang visitor ID sa iba't ibang session sa parehong browser. Hindi ito kailanman ipinapadala sa Respondo bilang napatunayang identity — ginagamit lang ito para sa pagpapatuloy ng anonymous na usapan.

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.

userId + metadata (walang email o pangalan)javascript
// 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 lang
Para hindi mapeke ang userId, ipares ito sa userHash ( 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:

Opsyon A: localStorageKey (walang kailangang JS)javascript
// 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
Opsyon B: naantalang identify() sa pamamagitan ng dataLayerjavascript
// 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);
Ginagamit lang ang 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#

  1. I-enable ang Identity Verification sa setting ng channel ninyo — makakakuha kayo ng secret key.
  2. 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.
  3. Ipasa ang hash bilang userHash sa Respondo.identify().
  4. Pinapatunayan ng Respondo ang hash sa panig ng server. Kung hindi valid, inaalis ang identity at itinuturing na anonymous ang user.
Huwag kailanman ilantad ang secret key ninyo sa code ng frontend. Sa backend ninyo dapat kalkulahin ang HMAC.
Kapag naka-enable na ang pagpapatunay, bawat 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#

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

// Sa API endpoint ninyo:
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()

# Sa view / endpoint ninyo:
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))
}

Paggamit sa frontend#

Kasama ang Identity Verificationjavascript
// 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
});