ਵਰਤੋਂਕਾਰ ਦੀ ਪਛਾਣ
ਪਛਾਣ ਕਰਨ ਨਾਲ ਗੁਮਨਾਮ ਚੈਟ ਸੈਸ਼ਨ ਅਸਲ ਵਰਤੋਂਕਾਰ ਪ੍ਰੋਫ਼ਾਈਲਾਂ ਨਾਲ ਜੁੜ ਜਾਂਦੇ ਹਨ।
ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ
ਜਦੋਂ ਤੁਸੀਂ Respondo.identify() ਸੱਦਦੇ ਹੋ, ਤਾਂ ਦਿੱਤੇ ਖਾਨੇ ਗੱਲਬਾਤ ਨਾਲ ਜੋੜ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ। ਸਾਰੇ ਖਾਨੇ ਚੋਣਵੇਂ ਹਨ — ਸਿਰਫ਼ ਉਹੀ ਭੇਜੋ ਜੋ ਤੁਹਾਡੇ ਕੋਲ ਹਨ। ਮਿਸਾਲ ਵਜੋਂ, ਤੁਸੀਂ ਈਮੇਲ ਜਾਂ ਨਾਂ ਤੋਂ ਬਿਨਾਂ ਸਿਰਫ਼ userId ਵੀ ਭੇਜ ਸਕਦੇ ਹੋ। ਸਹਾਇਤਾ ਸਟਾਫ਼ ਨੂੰ ਇਹ ਡਾਟਾ ਗੱਲਬਾਤ ਦੇ ਵੇਰਵਿਆਂ ਵਾਲੇ ਪੈਨਲ ਵਿੱਚ ਦਿਸਦਾ ਹੈ।
ਪੈਰਾਮੀਟਰ#
| ਵਿਸ਼ੇਸ਼ਤਾ | ਕਿਸਮ | ਲਾਜ਼ਮੀ | ਵੇਰਵਾ |
|---|---|---|---|
| string | ਚੋਣਵਾਂ | ਵਰਤੋਂਕਾਰ ਦਾ ਈਮੇਲ ਪਤਾ | |
| name | string | ਚੋਣਵਾਂ | ਵਿਖਾਉਣ ਵਾਲਾ ਨਾਂ |
| userId | string | ਚੋਣਵਾਂ | ਤੁਹਾਡਾ ਅੰਦਰੂਨੀ ਵਰਤੋਂਕਾਰ ਜਾਂ ਵਿਖਾਉਣ ਵਾਲਾ ID — ਡੈਸ਼ਬੋਰਡ ਵਿੱਚ ਜਿਵੇਂ ਦਾ ਤਿਵੇਂ ਦਿਸਦਾ ਹੈ |
| userHash | string | ਚੋਣਵਾਂ | ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਲਈ HMAC-SHA256 ਦਸਤਖ਼ਤ |
| metadata | object | ਚੋਣਵਾਂ | ਆਪਣੇ ਬਣਾਏ ਖਾਨਿਆਂ ਦੇ ਕੁੰਜੀ-ਮੁੱਲ ਜੋੜੇ (plan, company ਆਦਿ) |
| properties | object | ਚੋਣਵਾਂ | ਏਜੰਟ ਦੀਆਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਤੈਅ ਕੀਤੀਆਂ ਸੰਪਰਕ ਦੀਆਂ ਆਪਣੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ। ਕੁੰਜੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੀਆਂ ਪਰਿਭਾਸ਼ਾਵਾਂ ਨਾਲ ਮੇਲ ਖਾਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ। ਮੁੱਲ cp_ ਅਗੇਤਰ ਨਾਲ ਸੰਭਾਲੇ ਜਾਂਦੇ ਹਨ ਅਤੇ ਇਨਬਾਕਸ ਵਿੱਚ ਫ਼ਿਲਟਰ ਹੋ ਸਕਦੇ ਹਨ। |
// 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)” ਵੇਖੋ।
ਸਿਰਫ਼ userId ਨਾਲ ਪਛਾਣ (ਈਮੇਲ ਜਾਂ ਨਾਂ ਤੋਂ ਬਿਨਾਂ)#
ਜੇ ਤੁਹਾਡੇ ਪਲੇਟਫਾਰਮ ਕੋਲ ਵਰਤੋਂਕਾਰਾਂ ਦੇ ਈਮੇਲ ਜਾਂ ਨਾਂ ਨਹੀਂ ਹਨ — ਮਿਸਾਲ ਵਜੋਂ, ਸਿਰਫ਼ ਅੰਦਰੂਨੀ ਵਿਖਾਉਣ ਵਾਲਾ ID ਹੈ — ਤਾਂ ਤੁਸੀਂ ਸਿਰਫ਼ userId ਭੇਜ ਸਕਦੇ ਹੋ। ਹੋਰ ਕਿਸੇ ਖਾਨੇ ਦੀ ਲੋੜ ਨਹੀਂ। ਡੈਸ਼ਬੋਰਡ ਗੱਲਬਾਤ ਦੇ ਵੇਰਵਿਆਂ ਵਿੱਚ userId ਜਿਵੇਂ ਦਾ ਤਿਵੇਂ ਵਿਖਾਏਗਾ।
// 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 userIduserHash ਵੀ ਭੇਜੋ (ਹੇਠਾਂ “ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ” ਵੇਖੋ)। HMAC ਤੋਂ ਬਿਨਾਂ ਕੋਈ ਵੀ ਬ੍ਰਾਊਜ਼ਰ ਕੰਸੋਲ ਵਿੱਚੋਂ ਕੋਈ ਵੀ userId ਭੇਜ ਸਕਦਾ ਹੈ।Google Tag Manager / ਦੇਰੀ ਨਾਲ identify()#
GTM ਰਾਹੀਂ ਜੋੜਨ ਵੇਲੇ ਹੋ ਸਕਦਾ ਹੈ ਪੰਨਾ ਲੋਡ ਹੋਣ ਵੇਲੇ ਵਰਤੋਂਕਾਰ ਦਾ ਡਾਟਾ ਮੌਜੂਦ ਨਾ ਹੋਵੇ। ਦੋ ਤਰੀਕੇ ਹਨ:
// 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// 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 ਵਰਤ ਕੇ ਕ੍ਰਿਪਟੋਗ੍ਰਾਫ਼ਿਕ ਤੌਰ ਉੱਤੇ ਸਾਬਤ ਕਰਦੀ ਹੈ ਕਿ ਵਰਤੋਂਕਾਰ ਦੀ ਪਛਾਣ ਤੁਹਾਡੇ ਸਰਵਰ ਨੇ ਤੈਅ ਕੀਤੀ ਹੈ, ਨਾ ਕਿ ਕਲਾਇੰਟ ਵਾਲੇ ਕੋਡ ਨੇ।
ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ#
- ਆਪਣੀਆਂ ਚੈਨਲ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਚਾਲੂ ਕਰੋ — ਤੁਹਾਨੂੰ ਗੁਪਤ ਕੁੰਜੀ ਮਿਲੇਗੀ।
- ਆਪਣੇ ਸਰਵਰ ਉੱਤੇ
HMAC-SHA256(secret, userId)ਗਿਣੋ — secret ਕੁੰਜੀ ਹੈ, userId ਸੁਨੇਹਾ — ਅਤੇ ਨਤੀਜਾ ਫ਼ਰੰਟਐਂਡ ਨੂੰ ਭੇਜੋ। ਜੇ ਤੁਸੀਂ ਵਰਤੋਂਕਾਰਾਂ ਦੀ ਪਛਾਣ ਸਿਰਫ਼ ਈਮੇਲ ਨਾਲ ਕਰਦੇ ਹੋ (userId ਨਹੀਂ), ਤਾਂ ਈਮੇਲ ਉੱਤੇ ਦਸਤਖ਼ਤ ਕਰੋ: ਦਸਤਖ਼ਤ ਹੋਣ ਵਾਲਾ ਮੁੱਲ userId ਹੈ ਜੇ ਸੈੱਟ ਹੋਵੇ, ਨਹੀਂ ਤਾਂ ਈਮੇਲ। ਜੇ ਦੋਵੇਂ ਭੇਜਦੇ ਹੋ, ਤਾਂ userId ਉੱਤੇ ਦਸਤਖ਼ਤ ਕਰੋ; ਉਸੇ ਦੀ ਪਹਿਲ ਹੈ। - ਹੈਸ਼ ਨੂੰ
userHashਵਜੋਂRespondo.identify()ਵਿੱਚ ਭੇਜੋ। - Respondo ਹੈਸ਼ ਦੀ ਜਾਂਚ ਸਰਵਰ ਵਾਲੇ ਪਾਸੇ ਕਰਦਾ ਹੈ। ਜੇ ਇਹ ਗ਼ਲਤ ਹੋਵੇ, ਤਾਂ ਪਛਾਣ ਹਟਾ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ ਅਤੇ ਵਰਤੋਂਕਾਰ ਨੂੰ ਗੁਮਨਾਮ ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ।
userId ਜਾਂ email ਵਾਲੇ ਹਰ identify() ਨਾਲ ਸਹੀ userHash ਭੇਜਣਾ ਲਾਜ਼ਮੀ ਹੈ — ਨਹੀਂ ਤਾਂ ਪਛਾਣ ਦੇ ਖ਼ਾਨੇ ਹਟਾ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ ਅਤੇ ਵਿਜ਼ਿਟਰ ਨੂੰ ਗੁਮਨਾਮ ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ।ਸਰਵਰ ਵਾਲੇ ਪਾਸੇ ਦੀਆਂ ਉਦਾਹਰਨਾਂ#
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 });
});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)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))
}ਫ਼ਰੰਟਐਂਡ ਉੱਤੇ ਵਰਤੋਂ#
// 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
});