JavaScript चैट विजेट

किसी भी वेबसाइट पर Deskwoot लाइव चैट को एक ही <script> टैग के साथ एम्बेड करें। कोई बिल्ड स्टेप नहीं, आगंतुकों से कोई डैशबोर्ड लॉगिन आवश्यक नहीं।

1. इंस्टॉल

इस स्निपेट को अपने पेज टेम्पलेट में पेस्ट करें, आदर्श रूप से क्लोज़िंग </body> टैग से ठीक पहले। यह विजेट को अतुल्यकालिक रूप से लोड करता है, इसलिए यह रेंडरिंग को ब्लॉक नहीं करेगा।

<script>
  window.deskwootSettings = {
    widgetToken: "YOUR_WIDGET_TOKEN"
  };
  (function (d, t) {
    var g = d.createElement(t);
    var s = d.getElementsByTagName(t)[0];
    g.src = "https://deskwoot.com/widget/deskwoot-loader.js";
    g.async = true;
    g.defer = true;
    s.parentNode.insertBefore(g, s);
  })(document, "script");
</script>

बस इतना ही - चैट बबल तुरंत निचले-दाएँ कोने में प्रकट होता है। कोई npm पैकेज नहीं, कोई बंडलर नहीं, कोई बिल्ड स्टेप नहीं। Next.js, React, Vue, Shopify थीम, WordPress, सादे HTML के अंदर काम करता है, जहाँ कहीं भी JavaScript चलता है।

2. मुझे विजेट टोकन कहाँ मिलेगा?

  1. में लॉग इन करें Deskwoot डैशबोर्ड (खाता मालिक के रूप में, अंतिम आगंतुक के रूप में नहीं - विजेट को स्वयं किसी अंतिम-उपयोगकर्ता लॉगिन की आवश्यकता नहीं है)।
  2. पर जाएँ सेटिंग्स → इनबॉक्स
  3. एक नया इनबॉक्स प्रकार Website बनाएँ, या मौजूदा को खोलें।
  4. टैब खोलें Install - आपके इनबॉक्स-विशिष्ट widgetToken के साथ पेस्ट-तैयार स्निपेट वहाँ दिखाया गया है। इसे ज्यों का त्यों कॉपी करें।

एक widgetToken = एक इनबॉक्स। उस विजेट से वार्तालाप हमेशा उसी इनबॉक्स में आते हैं, जहाँ आपके एजेंट उन्हें उठाते हैं। एक अलग टीम या एजेंटों के सेट पर रूट करने के लिए, एक दूसरा इनबॉक्स बनाएँ और उसके टोकन का उपयोग किसी अलग पेज पर करें।

3. कॉन्फ़िगरेशन

सभी रनटाइम विकल्प window.deskwootSettings पर रहते हैं। केवल widgetToken आवश्यक है; बाकी सब कुछ का एक उचित डिफ़ॉल्ट है।

विकल्पप्रकारडिफ़ॉल्टविवरण
widgetTokenstring-आवश्यक। डैशबोर्ड से इनबॉक्स पहचानकर्ता।
colorstring"#2563EB"भेजें बटन, आउटगोइंग बबल, फ़ोकस रिंग के लिए उपयोग किया जाने वाला प्राथमिक ब्रांड रंग। कोई भी मान्य CSS रंग।
darkModebooleanfalseविजेट को डार्क थीम के साथ रेंडर करें। डार्क साइट के साथ जोड़ें; आगंतुक की OS सेटिंग से बंधा नहीं है।
position"left" | "right""right"लॉन्चर बबल किस स्क्रीन कोने में दिखाई देता है।
welcomeTitlestring(डैशबोर्ड से)पैनल हेडर के अंदर दिखाए गए स्वागत शीर्षक को ओवरराइड करता है।
welcomeMessagestring(डैशबोर्ड से)जब कोई नया आगंतुक विजेट खोलता है तो दिखाए गए पहले संदेश को ओवरराइड करता है।
userobjectundefinedआगंतुक की पहचान को पूर्व-भरता है (अनुभाग 4 देखें)।
embeddedbooleanfalseएक कोने में तैरने के बजाय होस्ट कंटेनर को भरता है (अनुभाग 6 देखें)।

पूरा उदाहरण

window.deskwootSettings = {
  widgetToken: "YOUR_WIDGET_TOKEN",
  color: "#2563EB",
  darkMode: false,
  position: "right",
  welcomeTitle: "Hi there!",
  welcomeMessage: "How can we help?",
  user: {
    email: "jane@example.com",
    name: "Jane Doe"
  }
};

4. उपयोगकर्ता पहचान पूर्व-भरण

यदि आगंतुक पहले से ही आपकी साइट पर लॉग इन है, तो उनके संपर्क विवरण पास करें ताकि बातचीत अनाम आगंतुक के बजाय पूर्ण संदर्भ के साथ आए।

प्रमाणित आगंतुक

window.deskwootSettings = {
  widgetToken: "...",
  user: {
    email: "jane@example.com",
    name: "Jane Doe"
  }
};

Deskwoot आगंतुकों को ईमेल द्वारा मिलाता है। यदि उस ईमेल वाला संपर्क खाते में पहले से मौजूद है, तो विजेट उसी संपर्क रिकॉर्ड से जुड़ता है - सभी पिछली बातचीत, नोट्स और कस्टम विशेषताएँ उत्तर देने वाले एजेंट को दिखाई देती हैं।

लॉग इन उपयोगकर्ताओं को सत्यापित करें

केवल ईमेल भेजने से कोई भी किसी की भी पहचान का दावा कर सकता है। किसी चैट को असली ग्राहक से जोड़ने के लिए, अपने प्रति-इनबॉक्स सीक्रेट से उपयोगकर्ता की id पर हस्ताक्षर करें। सत्यापित विज़िटर अपने असली नाम और ईमेल के साथ चैट करते हैं और प्री-चैट व ईमेल फ़ॉर्म छोड़ देते हैं। आपका सीक्रेट आपके सर्वर पर ही रहता है, इसलिए Deskwoot आपके सिस्टम तक किसी पहुँच के बिना हस्ताक्षर से विज़िटर की पुष्टि करता है।

अपना साइनिंग सीक्रेट अपनी वेबसाइट इनबॉक्स सेटिंग्स में, प्री-चैट फ़ॉर्म टैब में, पहचान सत्यापन कार्ड में पाएं।

अपने सर्वर पर हैश कंप्यूट करें (Node.js)

import crypto from "crypto";

const identifierHash = crypto
  .createHmac("sha256", process.env.DESKWOOT_IDENTITY_SECRET)
  .update(userId)          // your stable user id, as a string
  .digest("hex");

सत्यापित विज़िटर

window.deskwootSettings = {
  widgetToken: "YOUR_WIDGET_TOKEN",
  user: {
    identifier: "user_4711",            // your stable user id
    email: "jane@example.com",          // optional
    name: "Jane Doe",                   // optional
    identifierHash: "<HMAC-SHA256 of identifier, computed on your server>"
  }
};

उन सिंगल-पेज ऐप्स के लिए जो पेज लोड होने के बाद उपयोगकर्ता को लॉग इन करते हैं, साइन किया गया उपयोगकर्ता मिलते ही window.deskwoot.identify(user) कॉल करें। यह मौजूदा विज़िटर को बिना रीलोड अपडेट करता है।

हैश आपके सर्वर से आना चाहिए। इसे कभी ब्राउज़र में कंप्यूट न करें, और सीक्रेट को कभी क्लाइंट को न भेजें। जिसके पास सीक्रेट है वह आपके उपयोगकर्ताओं का रूप धर सकता है।

5. JavaScript API

स्क्रिप्ट लोड होने के बाद, window.deskwootWidget आपके स्वयं के UI से विजेट चलाने के लिए कुछ विधियों को उजागर करता है - उदाहरण के लिए नेविगेशन में "हमसे संपर्क करें" लिंक जो किसी सहायता पृष्ठ पर नेविगेट करने के बजाय पैनल खोलना चाहिए।

// window.deskwootWidget is set when the async script finishes loading.
// Until then the methods aren't available — guard every call so a
// button click before the script lands doesn't throw "open of
// undefined". Queue the call and retry, or use a load-event hook.
function openDeskwootWidget() {
  if (window.deskwootWidget) {
    window.deskwootWidget.open();
    return;
  }
  // Retry briefly until the widget script is ready. The script
  // typically loads within ~200 ms; cap retries so a blocked CDN
  // doesn't spin forever.
  let tries = 0;
  const t = setInterval(function () {
    tries++;
    if (window.deskwootWidget) {
      clearInterval(t);
      window.deskwootWidget.open();
    } else if (tries > 50) {
      clearInterval(t); // give up after ~5 s
    }
  }, 100);
}

openDeskwootWidget();           // expand the chat panel
// window.deskwootWidget.close();   // also available after load
// window.deskwootWidget.toggle();  // also available after load

// Current unread agent-message count for this visitor:
console.log(window.__deskwootUnread);

6. एम्बेडेड मोड

embedded: true सेट करें जब आप विजेट को एक ऐसे कंटेनर के अंदर होस्ट कर रहे हों जो पूरे व्यूपोर्ट का स्वामी हो - आमतौर पर एक मोबाइल ऐप WebView, एक पूर्ण-पृष्ठ संपर्क स्क्रीन, या एक मोडल जो पहले से ही अपना क्रोम प्रदान करता है।

एम्बेडेड मोड में लॉन्चर बबल, ट्रिगर पॉपअप और क्लोज़ बटन छिपे होते हैं, और पैनल बिना छाया, बिना बॉर्डर-त्रिज्या, बिना 20px ऑफ़सेट के position:fixed; inset:0 तक फैल जाता है। Deskwoot iOS ऐप अपनी अंतर्निहित संपर्क सहायता स्क्रीन के अंदर ठीक इसी मोड का उपयोग करता है।

स्वचालित रूप से खुलता है और अपने कंटेनर को भरता है।

एम्बेडेड मोड में पैनल लोड होते ही खुल जाता है और अपने कंटेनर को भर देता है। लॉन्चर बबल और क्लोज़ बटन छिपे रहते हैं, इसलिए नेविगेशन आपकी ऐप या पेज संभालती है। इसे खोलने, बंद करने या टॉगल करने के लिए JavaScript API अब भी उपलब्ध है:

न्यूनतम ट्रिगर

<button onclick="window.deskwootWidget.open()">Contact Support</button>

अनुशंसित स्थान

तीन पैटर्न जो हमने इन-ऐप सहायता के लिए अच्छी तरह काम करते देखे हैं:

A - साइडबार / बॉटम-नेव प्रविष्टि (Deskwoot का अपना दृष्टिकोण)

एक संपर्क सहायता आइटम अपनी मौजूदा नेविगेशन में, सेटिंग्स या सहायता के बगल में रखें। एक सामान्य रूट के समान affordance, बस नेविगेट करने के बजाय पैनल खोलता है।

<a href="#" onclick="window.deskwootWidget.open(); return false;" class="nav-item">
  <svg class="icon"><!-- chat-bubble icon --></svg>
  Contact Support
</a>

B - सहायता मेनू / ड्रॉपडाउन प्रविष्टि

यदि आपके पास पहले से ही एक सहायता या खाता मेनू है, तो शीर्ष पर एक सहायता के साथ चैट करें पंक्ति जोड़ें। डॉक्स, कीबोर्ड शॉर्टकट, फ़ीडबैक जैसे आइटम के साथ अच्छी तरह जुड़ता है।

<div role="menuitem" onclick="window.deskwootWidget.open()">
  Chat with support
  <span class="kbd">?</span>
</div>

C - फ्लोटिंग एक्शन बटन (निचला-दायाँ)

एक छोटा फ्लोटिंग पिल जो हटाए गए बबल का अनुकरण करता है। तब उपयोगी जब आपके ऐप में स्थायी नेव बार न हो।

<button
  id="support-fab"
  onclick="window.deskwootWidget.open({ anchor: this })"
  style="position:fixed;bottom:20px;right:20px;background:#2563eb;color:#fff;border:0;border-radius:9999px;padding:12px 18px;box-shadow:0 6px 20px rgba(0,0,0,.15);cursor:pointer;font-weight:600"
>
  💬 Help
</button>

<!--
  open()/toggle() accept an optional anchor so the panel grows OUT of
  your own element instead of the default corner:

    open({ anchor: this })                       // grow from this button
    open({ anchor: "#support-fab" })             // ...or a CSS selector
    open({ anchor: { x: 120, y: 640 } })         // ...or a viewport point

  anchor      CSS selector | DOM element | { x, y }  (null = default corner)
  align       "auto" (default) | "bottom-left" | "bottom-right"
              | "top-left" | "top-right"  — which corner it grows from
  offset      { x, y } px nudge for fine alignment

  Set window.deskwootSettings.openAnchor / .openAlign to make it the
  default for every open(); pass open({ anchor: null }) for a one-off
  default-corner open. Desktop only; mobile stays full-screen.
-->

सुझाव

  • {openCode} के बजाय deskwootWidget.toggle() को कॉल करें यदि आप चाहते हैं कि वही ट्रिगर पैनल को बंद कर दे जब वह पहले से खुला हो।open()
  • window.__deskwootUnread का उपयोग करके अपने ट्रिगर पर अपठित-संदेश बैज दिखाएँ - एक संख्या जो पैनल बंद होने पर अपडेट होती है।
  • ट्रिगर को प्रमाणित पृष्ठों पर लगातार रखें ताकि उपयोगकर्ता हमेशा जानें कि सहायता कहाँ ढूँढनी है। वैश्विक स्थान „छिपे हुए चैट" से रुक जाता है और „दृश्यमान सहायता बटन" बन जाता है।

मानक (गैर-एम्बेडेड) वेबसाइट इंस्टॉल के लिए आपको नहीं किसी कस्टम ट्रिगर की आवश्यकता है - deskwoot.js स्वयं बबल को रेंडर करता है और क्लिक को संभालता है।

7. Content Security Policy

यदि आपकी साइट CSP हेडर के साथ चलती है, तो Deskwoot की मूल को व्हाइटलिस्ट करें। विशिष्ट न्यूनतम कॉन्फ़िगरेशन:

script-src  'unsafe-inline' https://deskwoot.com;
connect-src https://deskwoot.com wss://deskwoot.com;
img-src     https://deskwoot.com data:;
style-src   'unsafe-inline';

style-src 'unsafe-inline' आवश्यक है क्योंकि विजेट अपना स्वयं का स्टाइलशीट इंजेक्ट करता है। यदि आपका CSP इनलाइन शैलियों को मना करता है, तो हम एक nonce पर जा सकते हैं - हमें hello@deskwoot.com पर एक संदेश भेजें।

8. FAQ

क्या मेरे आगंतुकों को चैट करने के लिए Deskwoot खाते की आवश्यकता है?

नहीं। केवल आप - साइट के स्वामी - उत्तर देने के लिए डैशबोर्ड में लॉग इन करते हैं। आगंतुक बस विजेट में टाइप करते हैं।

क्या विजेट उन SPAs में काम करता है जो रूट को क्लाइंट-साइड पर बदलते हैं?

हाँ। ऐप बूट पर स्क्रिप्ट को एक बार लोड करें (_app.tsx, root.tsx, आदि) और यह नेविगेशन को सहन करता है। रूट परिवर्तन पर कोई पुनः-इनिट आवश्यक नहीं।

बातचीत डेटा कहाँ संग्रहीत है?

EU में Deskwoot के सर्वर पर। प्रतिधारण आपके खाता प्लान का अनुसरण करता है। विवरण के लिए गोपनीयता नीति देखें।

क्या मैं डिप्लॉय किए बिना परीक्षण कर सकता हूँ?

हाँ। स्निपेट localhost और file:// पृष्ठों पर ठीक चलता है। आप अपने डैशबोर्ड इनबॉक्स में बातचीत को लाइव दिखाई देते हुए देखेंगे।