ਦਸਤਾਵੇਜ਼

ਵਰਤੋਂਕਾਰ ਦੀ ਪਛਾਣ

ਪਛਾਣ ਕਰਨ ਨਾਲ ਗੁਮਨਾਮ ਚੈਟ ਸੈਸ਼ਨ ਅਸਲ ਵਰਤੋਂਕਾਰ ਪ੍ਰੋਫ਼ਾਈਲਾਂ ਨਾਲ ਜੁੜ ਜਾਂਦੇ ਹਨ।

ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ

ਜਦੋਂ ਤੁਸੀਂ Respondo.identify() ਸੱਦਦੇ ਹੋ, ਤਾਂ ਦਿੱਤੇ ਖਾਨੇ ਗੱਲਬਾਤ ਨਾਲ ਜੋੜ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ। ਸਾਰੇ ਖਾਨੇ ਚੋਣਵੇਂ ਹਨ — ਸਿਰਫ਼ ਉਹੀ ਭੇਜੋ ਜੋ ਤੁਹਾਡੇ ਕੋਲ ਹਨ। ਮਿਸਾਲ ਵਜੋਂ, ਤੁਸੀਂ ਈਮੇਲ ਜਾਂ ਨਾਂ ਤੋਂ ਬਿਨਾਂ ਸਿਰਫ਼ userId ਵੀ ਭੇਜ ਸਕਦੇ ਹੋ। ਸਹਾਇਤਾ ਸਟਾਫ਼ ਨੂੰ ਇਹ ਡਾਟਾ ਗੱਲਬਾਤ ਦੇ ਵੇਰਵਿਆਂ ਵਾਲੇ ਪੈਨਲ ਵਿੱਚ ਦਿਸਦਾ ਹੈ।

ਪੈਰਾਮੀਟਰ#

ਵਿਸ਼ੇਸ਼ਤਾਕਿਸਮਲਾਜ਼ਮੀਵੇਰਵਾ
emailstringਚੋਣਵਾਂਵਰਤੋਂਕਾਰ ਦਾ ਈਮੇਲ ਪਤਾ
namestringਚੋਣਵਾਂਵਿਖਾਉਣ ਵਾਲਾ ਨਾਂ
userIdstringਚੋਣਵਾਂਤੁਹਾਡਾ ਅੰਦਰੂਨੀ ਵਰਤੋਂਕਾਰ ਜਾਂ ਵਿਖਾਉਣ ਵਾਲਾ ID — ਡੈਸ਼ਬੋਰਡ ਵਿੱਚ ਜਿਵੇਂ ਦਾ ਤਿਵੇਂ ਦਿਸਦਾ ਹੈ
userHashstringਚੋਣਵਾਂਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਲਈ HMAC-SHA256 ਦਸਤਖ਼ਤ
metadataobjectਚੋਣਵਾਂਆਪਣੇ ਬਣਾਏ ਖਾਨਿਆਂ ਦੇ ਕੁੰਜੀ-ਮੁੱਲ ਜੋੜੇ (plan, company ਆਦਿ)
propertiesobjectਚੋਣਵਾਂਏਜੰਟ ਦੀਆਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਤੈਅ ਕੀਤੀਆਂ ਸੰਪਰਕ ਦੀਆਂ ਆਪਣੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ। ਕੁੰਜੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੀਆਂ ਪਰਿਭਾਸ਼ਾਵਾਂ ਨਾਲ ਮੇਲ ਖਾਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ। ਮੁੱਲ cp_ ਅਗੇਤਰ ਨਾਲ ਸੰਭਾਲੇ ਜਾਂਦੇ ਹਨ ਅਤੇ ਇਨਬਾਕਸ ਵਿੱਚ ਫ਼ਿਲਟਰ ਹੋ ਸਕਦੇ ਹਨ।
ਉਦਾਹਰਨ: ਸਿੰਗਲ ਪੇਜ ਐਪ (SPA)javascript
// After successful login
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 contact properties
      account_type: user.accountType,    // must match keys from Agent Settings
      industry: user.industry,
      contract_tier: user.tier
    }
  });
}
ਮਿਆਰੀ ਇੰਸਟਾਲ ਸਨਿੱਪਟ ਨਾਲ ਤੁਸੀਂ identify() ਕਿਸੇ ਵੀ ਵੇਲੇ ਸੱਦ ਸਕਦੇ ਹੋ — widget.js ਦੇ ਲੋਡ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਕੀਤੇ ਸੱਦੇ ਸਨਿੱਪਟ ਕਤਾਰ ਵਿੱਚ ਸਾਂਭ ਲੈਂਦਾ ਹੈ ਅਤੇ ਵਿਜੇਟ ਦੇ ਚਾਲੂ ਹੁੰਦੇ ਸਾਰ ਆਪੇ ਮੁੜ ਚਲਾ ਦਿੰਦਾ ਹੈ। ਪਛਾਣ ਦਾ ਡਾਟਾ ਸਿਰਫ਼ ਉਦੋਂ ਸੁੱਟਿਆ ਜਾਂਦਾ ਹੈ (ਕੰਸੋਲ ਵਿੱਚ ਚੇਤਾਵਨੀ ਸਮੇਤ) ਜਦੋਂ ਤੁਸੀਂ widget.js ਆਪ ਲੋਡ ਕਰਦੇ ਹੋ ਅਤੇ ਕਦੇ init() ਸੱਦੇ ਬਿਨਾਂ ਹੀ identify() ਸੱਦ ਲੈਂਦੇ ਹੋ — ਹੱਥੀਂ ਸੈੱਟਅੱਪ ਵਿੱਚ ਹਮੇਸ਼ਾ ਪਹਿਲਾਂ init() ਸੱਦੋ।

ਗੁਮਨਾਮ ਵਿਜ਼ਿਟਰ#

ਜੇ ਤੁਸੀਂ identify() ਨਹੀਂ ਸੱਦਦੇ, ਤਾਂ ਵਿਜੇਟ ਆਪੇ ਇੱਕ ਪੱਕਾ visitor ID ਦੇ ਦਿੰਦਾ ਹੈ, ਜੋ localStorage ਵਿੱਚ (respondoai_visitor_id ਕੁੰਜੀ ਹੇਠ) ਸੰਭਾਲਿਆ ਜਾਂਦਾ ਹੈ। ਡੈਸ਼ਬੋਰਡ ਵਿੱਚ ਗੱਲਬਾਤ Guest · Web widget ਵਜੋਂ ਦਿਸਦੀ ਹੈ।

ਢੰਗਡੈਸ਼ਬੋਰਡ ਵਿੱਚ ਦਿੱਖHMAC ਲਾਜ਼ਮੀ
identify() ਤੋਂ ਬਿਨਾਂGuest · Web widgetਨਹੀਂ
identify({ email, name })ਨਾਂ + ਈਮੇਲ ਦਿਸਦੇ ਹਨਨਹੀਂ — ਜਦ ਤੱਕ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਚਾਲੂ ਨਾ ਹੋਵੇ; ਫਿਰ ਬਿਨਾਂ ਦਸਤਖ਼ਤ ਵਾਲੇ email/name ਚੁੱਪ-ਚਾਪ ਹਟਾ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ ਅਤੇ ਸੈਸ਼ਨ ਗੁਮਨਾਮ ਹੀ ਰਹਿੰਦਾ ਹੈ
identify({ userId })userId ਜਿਵੇਂ ਦਾ ਤਿਵੇਂ ਦਿਸਦਾ ਹੈਨਹੀਂ — ਜਦ ਤੱਕ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਚਾਲੂ ਨਾ ਹੋਵੇ; ਫਿਰ ਸਹੀ userHash ਲਾਜ਼ਮੀ ਹੈ, ਨਹੀਂ ਤਾਂ ਪਛਾਣ ਹਟਾ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ
identify({ userId, userHash })ਪੁਸ਼ਟੀ ਕੀਤੀ ਵਰਤੋਂਕਾਰ ਪਛਾਣਹਾਂ — ਕ੍ਰਿਪਟੋਗ੍ਰਾਫ਼ਿਕ ਤੌਰ ਉੱਤੇ ਪੁਸ਼ਟੀ ਕੀਤੀ

ਜਦੋਂ ਚੈਨਲ ਲਈ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਚਾਲੂ ਹੋਵੇ, ਤਾਂ ਸਹੀ userHash ਤੋਂ ਬਿਨਾਂ email ਜਾਂ userId ਵਾਲਾ ਹਰ identify() ਸਰਵਰ ਵਾਲੇ ਪਾਸੇ ਹੀ ਹਟਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਵਿਜ਼ਿਟਰ ਗੁਮਨਾਮ ਹੀ ਰਹਿੰਦਾ ਹੈ — ਹੇਠਾਂ “ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ (HMAC)” ਵੇਖੋ।

Visitor ID ਇੱਕੋ ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਸੈਸ਼ਨਾਂ ਦੇ ਵਿਚਕਾਰ ਬਣਿਆ ਰਹਿੰਦਾ ਹੈ। ਇਹ ਕਦੇ ਵੀ Respondo ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਪਛਾਣ ਵਜੋਂ ਨਹੀਂ ਭੇਜਿਆ ਜਾਂਦਾ — ਇਹ ਸਿਰਫ਼ ਗੁਮਨਾਮ ਗੱਲਬਾਤ ਦੀ ਲਗਾਤਾਰਤਾ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।

ਸਿਰਫ਼ userId ਨਾਲ ਪਛਾਣ (ਈਮੇਲ ਜਾਂ ਨਾਂ ਤੋਂ ਬਿਨਾਂ)#

ਜੇ ਤੁਹਾਡੇ ਪਲੇਟਫਾਰਮ ਕੋਲ ਵਰਤੋਂਕਾਰਾਂ ਦੇ ਈਮੇਲ ਜਾਂ ਨਾਂ ਨਹੀਂ ਹਨ — ਮਿਸਾਲ ਵਜੋਂ, ਸਿਰਫ਼ ਅੰਦਰੂਨੀ ਵਿਖਾਉਣ ਵਾਲਾ ID ਹੈ — ਤਾਂ ਤੁਸੀਂ ਸਿਰਫ਼ userId ਭੇਜ ਸਕਦੇ ਹੋ। ਹੋਰ ਕਿਸੇ ਖਾਨੇ ਦੀ ਲੋੜ ਨਹੀਂ। ਡੈਸ਼ਬੋਰਡ ਗੱਲਬਾਤ ਦੇ ਵੇਰਵਿਆਂ ਵਿੱਚ userId ਜਿਵੇਂ ਦਾ ਤਿਵੇਂ ਵਿਖਾਏਗਾ।

userId + metadata (ਈਮੇਲ ਜਾਂ ਨਾਂ ਤੋਂ ਬਿਨਾਂ)javascript
// Your platform only has a display ID — that's enough
Respondo.identify({
  userId: user.displayId,      // e.g. "USR-4821" — shown in dashboard
  metadata: {                  // optional extra context
    plan: 'premium',
    region: 'eu-west'
  }
});
// No email or name needed — the widget works with just userId
userId ਦੀ ਨਕਲ ਰੋਕਣ ਲਈ ਇਸ ਦੇ ਨਾਲ userHash ਵੀ ਭੇਜੋ (ਹੇਠਾਂ “ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ” ਵੇਖੋ)। HMAC ਤੋਂ ਬਿਨਾਂ ਕੋਈ ਵੀ ਬ੍ਰਾਊਜ਼ਰ ਕੰਸੋਲ ਵਿੱਚੋਂ ਕੋਈ ਵੀ userId ਭੇਜ ਸਕਦਾ ਹੈ।

Google Tag Manager / ਦੇਰੀ ਨਾਲ identify()#

GTM ਰਾਹੀਂ ਜੋੜਨ ਵੇਲੇ ਹੋ ਸਕਦਾ ਹੈ ਪੰਨਾ ਲੋਡ ਹੋਣ ਵੇਲੇ ਵਰਤੋਂਕਾਰ ਦਾ ਡਾਟਾ ਮੌਜੂਦ ਨਾ ਹੋਵੇ। ਦੋ ਤਰੀਕੇ ਹਨ:

ਵਿਕਲਪ A: localStorageKey (JS ਦੀ ਲੋੜ ਨਹੀਂ)javascript
// If your platform already writes the user ID to localStorage:
Respondo.init({
  agentId: 'YOUR_AGENT_ID',
  localStorageKey: 'myapp_user_id'  // reads localStorage.getItem('myapp_user_id') automatically
});
// No identify() call needed — the widget picks up the userId on its own
ਵਿਕਲਪ B: dataLayer ਰਾਹੀਂ ਦੇਰੀ ਨਾਲ identify()javascript
// 1. Init widget immediately (GTM tag)
Respondo.init({ agentId: 'YOUR_AGENT_ID' });

// 2. Later, when user data appears (e.g. from dataLayer or your app):
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 ਸਿਰਫ਼ ਉਦੋਂ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਜਦੋਂ userId ਪਹਿਲਾਂ ਹੀ identify() ਰਾਹੀਂ ਸੈੱਟ ਨਾ ਹੋਵੇ। identify() ਦੇ ਸਿੱਧੇ ਸੱਦੇ ਹਮੇਸ਼ਾ ਪਹਿਲ ਰੱਖਦੇ ਹਨ।

ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ (HMAC)#

ਪੁਸ਼ਟੀ ਤੋਂ ਬਿਨਾਂ ਕੋਈ ਵੀ ਨਕਲੀ userId ਜਾਂ email ਭੇਜ ਕੇ ਕਿਸੇ ਵਰਤੋਂਕਾਰ ਦਾ ਰੂਪ ਧਾਰ ਸਕਦਾ ਹੈ। ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ HMAC-SHA256 ਵਰਤ ਕੇ ਕ੍ਰਿਪਟੋਗ੍ਰਾਫ਼ਿਕ ਤੌਰ ਉੱਤੇ ਸਾਬਤ ਕਰਦੀ ਹੈ ਕਿ ਵਰਤੋਂਕਾਰ ਦੀ ਪਛਾਣ ਤੁਹਾਡੇ ਸਰਵਰ ਨੇ ਤੈਅ ਕੀਤੀ ਹੈ, ਨਾ ਕਿ ਕਲਾਇੰਟ ਵਾਲੇ ਕੋਡ ਨੇ।

ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ#

  1. ਆਪਣੀਆਂ ਚੈਨਲ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਚਾਲੂ ਕਰੋ — ਤੁਹਾਨੂੰ ਗੁਪਤ ਕੁੰਜੀ ਮਿਲੇਗੀ।
  2. ਆਪਣੇ ਸਰਵਰ ਉੱਤੇ HMAC-SHA256(secret, userId) ਗਿਣੋ — secret ਕੁੰਜੀ ਹੈ, userId ਸੁਨੇਹਾ — ਅਤੇ ਨਤੀਜਾ ਫ਼ਰੰਟਐਂਡ ਨੂੰ ਭੇਜੋ। ਜੇ ਤੁਸੀਂ ਵਰਤੋਂਕਾਰਾਂ ਦੀ ਪਛਾਣ ਸਿਰਫ਼ ਈਮੇਲ ਨਾਲ ਕਰਦੇ ਹੋ (userId ਨਹੀਂ), ਤਾਂ ਈਮੇਲ ਉੱਤੇ ਦਸਤਖ਼ਤ ਕਰੋ: ਦਸਤਖ਼ਤ ਹੋਣ ਵਾਲਾ ਮੁੱਲ userId ਹੈ ਜੇ ਸੈੱਟ ਹੋਵੇ, ਨਹੀਂ ਤਾਂ ਈਮੇਲ। ਜੇ ਦੋਵੇਂ ਭੇਜਦੇ ਹੋ, ਤਾਂ userId ਉੱਤੇ ਦਸਤਖ਼ਤ ਕਰੋ; ਉਸੇ ਦੀ ਪਹਿਲ ਹੈ।
  3. ਹੈਸ਼ ਨੂੰ userHash ਵਜੋਂ Respondo.identify() ਵਿੱਚ ਭੇਜੋ।
  4. Respondo ਹੈਸ਼ ਦੀ ਜਾਂਚ ਸਰਵਰ ਵਾਲੇ ਪਾਸੇ ਕਰਦਾ ਹੈ। ਜੇ ਇਹ ਗ਼ਲਤ ਹੋਵੇ, ਤਾਂ ਪਛਾਣ ਹਟਾ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ ਅਤੇ ਵਰਤੋਂਕਾਰ ਨੂੰ ਗੁਮਨਾਮ ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ।
ਆਪਣੀ ਗੁਪਤ ਕੁੰਜੀ ਕਦੇ ਵੀ ਫ਼ਰੰਟਐਂਡ ਕੋਡ ਵਿੱਚ ਨਾ ਪਾਓ। HMAC ਤੁਹਾਡੇ ਬੈਕਐਂਡ ਉੱਤੇ ਹੀ ਗਿਣਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ।
ਪੁਸ਼ਟੀ ਚਾਲੂ ਹੋਣ ਮਗਰੋਂ userId ਜਾਂ email ਵਾਲੇ ਹਰ identify() ਨਾਲ ਸਹੀ userHash ਭੇਜਣਾ ਲਾਜ਼ਮੀ ਹੈ — ਨਹੀਂ ਤਾਂ ਪਛਾਣ ਦੇ ਖ਼ਾਨੇ ਹਟਾ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ ਅਤੇ ਵਿਜ਼ਿਟਰ ਨੂੰ ਗੁਮਨਾਮ ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ।

ਸਰਵਰ ਵਾਲੇ ਪਾਸੇ ਦੀਆਂ ਉਦਾਹਰਨਾਂ#

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

// In your API endpoint:
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()

# In your view / endpoint:
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))
}

ਫ਼ਰੰਟਐਂਡ ਉੱਤੇ ਵਰਤੋਂ#

ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਨਾਲjavascript
// Fetch the hash from YOUR server
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 signature
});