यूज़र पहचान
यूज़र्स की पहचान करने से एनॉनिमस चैट सेशन असली यूज़र प्रोफ़ाइल से जुड़ जाते हैं।
यह कैसे काम करता है
जब आप Respondo.identify() कॉल करते हैं, तो दिए गए फ़ील्ड बातचीत से जुड़ जाते हैं। सभी फ़ील्ड वैकल्पिक हैं — केवल वही पास करें जो आपके पास हैं। उदाहरण के लिए, आप ईमेल या नाम के बिना केवल userId भेज सकते हैं। सपोर्ट एजेंट यह डेटा बातचीत विवरण पैनल में देखते हैं।
पैरामीटर#
| प्रॉपर्टी | टाइप | आवश्यक | विवरण |
|---|---|---|---|
| string | वैकल्पिक | यूज़र का ईमेल पता | |
| name | string | वैकल्पिक | प्रदर्शित नाम |
| userId | string | वैकल्पिक | आपका आंतरिक यूज़र या डिस्प्ले ID — डैशबोर्ड में जैसा है वैसा दिखाया जाता है |
| userHash | string | वैकल्पिक | पहचान सत्यापन के लिए HMAC-SHA256 सिग्नेचर |
| metadata | object | वैकल्पिक | कस्टम फ़ील्ड के की-वैल्यू जोड़े (plan, company, आदि) |
| properties | object | वैकल्पिक | Agent Settings में परिभाषित कस्टम कॉन्टैक्ट प्रॉपर्टीज़। कीज़ को प्रॉपर्टी परिभाषाओं से मेल खाना चाहिए। वैल्यूज़ cp_ प्रीफ़िक्स के साथ स्टोर की जाती हैं और इनबॉक्स में फ़िल्टर की जा सकती हैं। |
// सफल लॉगिन के बाद
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: { // कस्टम कॉन्टैक्ट प्रॉपर्टीज़
account_type: user.accountType, // Agent Settings की कीज़ से मेल खाना चाहिए
industry: user.industry,
contract_tier: user.tier
}
});
}identify() को किसी भी समय कॉल कर सकते हैं — widget.js के लोड होने से पहले किए गए कॉल स्निपेट द्वारा कतार में रखे जाते हैं और विजेट के इनिशियलाइज़ होते ही अपने आप दोबारा चला दिए जाते हैं। पहचान डेटा केवल तभी छोड़ा जाता है (कंसोल चेतावनी के साथ) जब आप widget.js को ख़ुद लोड करते हैं और कभी init() कॉल किए बिना identify() कॉल करते हैं — मैनुअल सेटअप में हमेशा पहले init() कॉल करें।एनॉनिमस विज़िटर#
अगर आप identify() कॉल नहीं करते, तो विजेट अपने आप एक स्थायी विज़िटर ID असाइन कर देता है जो localStorage में (की respondoai_visitor_id) स्टोर होती है। डैशबोर्ड में बातचीत Guest · Web widget के रूप में दिखती है।
| मोड | डैशबोर्ड प्रदर्शन | HMAC आवश्यक |
|---|---|---|
बिना identify() | Guest · Web widget | नहीं |
identify({ email, name }) | नाम + ईमेल दिखता है | नहीं — जब तक Identity Verification सक्षम न हो; तब बिना हस्ताक्षर वाले ईमेल/नाम चुपचाप हटा दिए जाते हैं और सेशन एनॉनिमस रहता है |
identify({ userId }) | userId जैसा है वैसा दिखता है | नहीं — जब तक Identity Verification सक्षम न हो; तब एक मान्य userHash आवश्यक है, वरना पहचान हटा दी जाती है |
identify({ userId, userHash }) | सत्यापित यूज़र पहचान | हाँ — क्रिप्टोग्राफ़िक रूप से सत्यापित |
जब चैनल के लिए Identity Verification सक्षम होता है, तो ईमेल या userId ले जाने वाला हर identify() बिना मान्य userHash के सर्वर-साइड हटा दिया जाता है और विज़िटर एनॉनिमस बना रहता है — नीचे पहचान सत्यापन (HMAC) देखें।
केवल-userId पहचान (बिना ईमेल या नाम)#
अगर आपके प्लेटफ़ॉर्म पर यूज़र के ईमेल या नाम नहीं हैं — उदाहरण के लिए, आपके पास केवल एक आंतरिक डिस्प्ले ID है — तो आप केवल userId पास कर सकते हैं। किसी अन्य फ़ील्ड की ज़रूरत नहीं है। डैशबोर्ड बातचीत विवरण में userId को जैसा है वैसा दिखाएगा।
// आपके प्लेटफ़ॉर्म पर केवल एक डिस्प्ले ID है — वह पर्याप्त है
Respondo.identify({
userId: user.displayId, // उदा. "USR-4821" — डैशबोर्ड में दिखता है
metadata: { // वैकल्पिक अतिरिक्त संदर्भ
plan: 'premium',
region: 'eu-west'
}
});
// ईमेल या नाम की ज़रूरत नहीं — विजेट केवल userId के साथ काम करता हैuserHash के साथ जोड़ें (नीचे पहचान सत्यापन देखें)। HMAC के बिना, कोई भी ब्राउज़र कंसोल से कोई भी userId पास कर सकता है।Google Tag Manager / विलंबित identify()#
GTM के ज़रिए एम्बेड करते समय, पेज लोड के समय यूज़र डेटा उपलब्ध नहीं हो सकता। दो तरीके:
// अगर आपका प्लेटफ़ॉर्म पहले से यूज़र ID को localStorage में लिखता है:
Respondo.init({
agentId: 'YOUR_AGENT_ID',
localStorageKey: 'myapp_user_id' // localStorage.getItem('myapp_user_id') अपने आप पढ़ता है
});
// identify() कॉल की ज़रूरत नहीं — विजेट ख़ुद userId उठा लेता है// 1. विजेट को तुरंत इनिशियलाइज़ करें (GTM टैग)
Respondo.init({ agentId: 'YOUR_AGENT_ID' });
// 2. बाद में, जब यूज़र डेटा दिखे (उदा. dataLayer या आपके ऐप से):
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 ही key है, userId ही message — और परिणाम फ्रंटएंड को भेजें। अगर आप यूज़र्स को केवल ईमेल से पहचानते हैं (कोई userId नहीं), तो ईमेल पर हस्ताक्षर करें: हस्ताक्षरित payload 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');
}
// आपके API एंडपॉइंट में:
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()
# आपके व्यू / एंडपॉइंट में:
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))
}फ्रंटएंड उपयोग#
// हैश को अपने सर्वर से लाएँ
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 सिग्नेचर
});