Telegram बिल्ट-इन एनालिटिक्स
Telegram यूनिक लिंक की मदद से विज्ञापन प्लेसमेंट के परिणामों का विश्लेषण करने के टूल देता है। आप हर विज्ञापन प्लेसमेंट के लिए अलग लिंक बना सकते हैं। चैनलों और ग्रुप के लिए जॉइन के आंकड़े सीधे Telegram में उपलब्ध होते हैं, जबकि बॉट और Mini App के लिए आपको अपने प्रोजेक्ट की ओर से लिंक पैरामीटर सहेजने और डेटा इकट्ठा करने की अतिरिक्त व्यवस्था करनी होगी।
ध्यान दें
एक विज्ञापन प्लेसमेंट = एक यूनिक लिंक। अगर एक ही लिंक कई विज्ञापनों में इस्तेमाल किया जाए, तो ट्रैफ़िक स्रोत मिल जाएंगे और बाद में उन्हें अलग नहीं किया जा सकेगा।
यह एनालिटिक्स AdsGram के कैंपेन आंकड़ों और कन्वर्ज़न ट्रैकिंग से अलग काम करता है।
भाग 1. विज्ञापनदाता की ओर से कैंपेन मैनेजरों के लिए
1. कौन-सा लिंक इस्तेमाल करें?
अलग-अलग विज्ञापन प्लेसमेंट के परिणामों की तुलना करने के लिए हर एक के लिए यूनिक लिंक इस्तेमाल करें।
उदाहरण के लिए, अगर आप किसी प्रोजेक्ट को तीन Telegram चैनलों में प्रमोट कर रहे हैं, तो तीन अलग लिंक बनाएं। इससे आप पता लगा पाएंगे कि कौन-से प्लेसमेंट सबसे ज़्यादा उपयोगकर्ता लाते हैं।
लिंक का प्रकार इस पर निर्भर करता है कि विज्ञापन कहाँ ले जाता है:
| विज्ञापन का गंतव्य | लिंक फ़ॉर्मेट | परिणाम कहाँ ट्रैक करें |
|---|---|---|
| Telegram चैनल या ग्रुप | एक अलग इनवाइट लिंक | Telegram: चैनल या ग्रुप सेटिंग्स → Invite links |
| बॉट | t.me/YourBot?start=ad_sep_anna | आपका बॉट, अगर वह पैरामीटर सहेजता है |
| Mini App | t.me/YourBot?startapp=ad_sep_anna | आपके ऐप का सर्वर, अगर वह पैरामीटर सहेजता है |
YourBot की जगह अपने बॉट का यूज़रनेम और ad_sep_anna की जगह विज्ञापन प्लेसमेंट का यूनिक पैरामीटर लिखें।
2. चैनल और ग्रुप: इनवाइट लिंक
हर विज्ञापन प्लेसमेंट के लिए अलग इनवाइट लिंक बनाएं।
- चैनल या ग्रुप खोलें और उसके नाम पर टैप करें।
- एडिटिंग या मैनेजमेंट सेटिंग्स खोलें। डेस्कटॉप वर्शन में आप ⋮ →
Manage channel/Manage groupइस्तेमाल कर सकते हैं। Invite linksखोलें और नया लिंक बनाने का विकल्प चुनें।- लिंक का नाम प्लेसमेंट के अनुसार रखें, जैसे
ad_sep_anna। यह नाम केवल एडमिन को दिखता है, लिंक खोलने वाले उपयोगकर्ताओं को नहीं। - ज़रूरत हो तो समाप्ति तिथि, उपयोगकर्ताओं की सीमा या एडमिन की मंज़ूरी की शर्त सेट करें।
- लिंक को केवल एक विज्ञापन प्लेसमेंट में इस्तेमाल करें।
आंकड़े कहाँ देखें: Telegram की Invite links स्क्रीन दिखाती है कि हर लिंक से कितने उपयोगकर्ता जुड़े। उपयोगकर्ताओं की सूची देखने के लिए किसी एक लिंक को खोलें।
t.me/yourchannel जैसा सामान्य पब्लिक लिंक जॉइन को विज्ञापन प्लेसमेंट के अनुसार अलग करने नहीं देता। पब्लिक चैनल भी इनवाइट लिंक बना सकते हैं, इसलिए अपने विज्ञापनों में अलग इनवाइट लिंक इस्तेमाल करें।
3. बॉट: start पैरामीटर वाले लिंक
यह लिंक फ़ॉर्मेट इस्तेमाल करें:
https://t.me/<bot>?start=<parameter>उदाहरण के लिए:
https://t.me/YourBot?start=ad_sep_annaजब उपयोगकर्ता लिंक खोलकर Start दबाता है, तो बॉट को पैरामीटर के साथ कमांड मिलती है:
/start ad_sep_annaTelegram इन बॉट लॉन्च के लिए विज्ञापन एट्रिब्यूशन अपने आप रिपोर्ट नहीं करता। बॉट को उपयोगकर्ता का रिकॉर्ड पहली बार बनाते समय पैरामीटर सहेजना होगा।
अगर आपका मेट्रिक नए उपयोगकर्ताओं का अधिग्रहण है, तो केवल नए उपयोगकर्ताओं को गिनें। किसी मौजूदा उपयोगकर्ता के विज्ञापन लिंक खोलने से वह नया उपयोगकर्ता नहीं बन जाता।
4. Mini App: startapp पैरामीटर वाले लिंक
बॉट के मुख्य Mini App के लिए इस्तेमाल करें:
https://t.me/<bot>?startapp=<parameter>@BotFather में /newapp से बनाए गए Mini App के लिए आप इस्तेमाल कर सकते हैं:
https://t.me/<bot>/<app>?startapp=<parameter>उदाहरण के लिए:
https://t.me/YourBot?startapp=ad_sep_annaज़रूरत हो तो डिस्प्ले मोड पैरामीटर जोड़ें:
&mode=compact— कॉम्पैक्ट मोड।&mode=fullscreen— फ़ुलस्क्रीन मोड।
Mini App को पैरामीटर start_param फ़ील्ड में मिलता है। आपके ऐप के सर्वर को इसे तब सहेजना होगा जब उपयोगकर्ता पहली बार ऐप लॉन्च करे।
अगर उपयोगकर्ता बिना विज्ञापन लिंक के Mini App खोलता है — जैसे मेन्यू बटन या बॉट प्रोफ़ाइल से — तो विज्ञापन पैरामीटर नहीं हो सकता। जब तक कोई दूसरा भरोसेमंद एट्रिब्यूशन स्रोत न हो, ऐसे लॉन्च को ऑर्गेनिक मानें।
5. पैरामीटर के नियम
अधिकतम लंबाई:
startपैरामीटर — 64 अक्षरstartappपैरामीटर — 512 अक्षर
अनुमत अक्षर:
A-Z,a-z,0-9,_,-- स्पेस, सिरिलिक अक्षर या पूर्ण विराम (डॉट) इस्तेमाल न करें। संगतता की समस्याओं से बचने के लिए अनुमत अक्षरों तक ही सीमित रहें।
पैरामीटर में उपयोगकर्ताओं का व्यक्तिगत डेटा न डालें।
सुझाया गया नामकरण पैटर्न। एक जैसा फ़ॉर्मेट इस्तेमाल करें ताकि रिपोर्ट में प्लेसमेंट आसानी से पहचाने जा सकें:
ad_<month>_<source>_<creative>उदाहरण:
ad_sep_tgads_video1ad_sep_blogger_anna
6. कैंपेन लिंक रेफ़रल लिंक नहीं हैं
रेफ़रल लिंक उपयोगकर्ता को दूसरे लोगों को आमंत्रित करने और इनाम पाने देता है।
विज्ञापन लिंक किसी विज्ञापन प्लेसमेंट से आने वाले ट्रैफ़िक को मापता है। अपने आप में इससे रेफ़रल इनाम नहीं मिलना चाहिए।
दोनों प्रकारों को प्रीफ़िक्स से अलग रखें:
ref_…— उपयोगकर्ताओं के रेफ़रल लिंक।ad_…— विज्ञापन प्लेसमेंट के लिंक।
हर विज्ञापन कैंपेन के लिए अलग रेफ़रल लिंक बनाना केवल अस्थायी उपाय है। इससे विज्ञापन ट्रैफ़िक के लिए रेफ़रल इनाम दिए जा सकते हैं और आंकड़े मिल सकते हैं।
7. क्लिक कैसे गिनें
Telegram t.me लिंक के लिए क्लिक के आंकड़े नहीं देता।
अगर आपको क्लिक गिनने हैं, तो उपयोगकर्ताओं को पहले अपने रीडायरेक्ट से गुज़ारें और फिर Telegram पर भेजें।
उदाहरण:
https://yourdomain.com/go/ad_sep_anna → https://t.me/YourBot?start=ad_sep_annaआपका सर्वर क्लिक दर्ज करता है और उपयोगकर्ता को अंतिम लिंक पर रीडायरेक्ट करता है। इसके लिए आपको खुद इम्प्लीमेंटेशन करना होगा, और यह लॉन्च, नए उपयोगकर्ताओं या चैनल जॉइन की ट्रैकिंग की जगह नहीं लेता।
8. परिणामों की तालिका रखना
हर यूनिक लिंक के लिए एक पंक्ति वाली तालिका बनाएं।
सुझाए गए कॉलम:
| फ़ील्ड | क्या दर्ज करें |
|---|---|
| लिंक पैरामीटर | उदाहरण के लिए, ad_sep_anna |
| प्लेसमेंट | चैनल, पोस्ट, इन्फ़्लुएंसर या विज्ञापन का नाम |
| तारीखें | प्लेसमेंट की अवधि |
| खर्च | विज्ञापन की लागत |
| नए उपयोगकर्ता | लिंक से जुड़े नए उपयोगकर्ताओं की संख्या |
| प्रति उपयोगकर्ता लागत | खर्च ÷ नए उपयोगकर्ताओं की संख्या |
9. लॉन्च से पहले की चेकलिस्ट
विज्ञापन प्रकाशित करने से पहले सुनिश्चित करें कि:
- हर प्लेसमेंट का अपना लिंक है; लिंक दूसरे प्लेसमेंट में दोबारा इस्तेमाल नहीं हुए हैं।
- पैरामीटर अधिकतम लंबाई से ज़्यादा नहीं है और उसमें केवल अनुमत अक्षर हैं।
- लिंक को दूसरे अकाउंट से टेस्ट किया गया है: जॉइन गिना जाता है, या पैरामीटर बॉट या Mini App में सहेजा जाता है।
- लिंक, प्लेसमेंट का नाम और खर्च तालिका में जोड़ दिए गए हैं।
भाग 2. डेवलपर्स के लिए इम्प्लीमेंटेशन
नीचे दिए गए उदाहरण Python, SQL और बॉट के लिए aiogram 3 का इस्तेमाल करते हैं। यही सिद्धांत दूसरी तकनीकों में भी लागू किए जा सकते हैं।
यह कोड इम्प्लीमेंटेशन का आधार है, कोई तैयार और पूरा इंटीग्रेशन नहीं। डेटाबेस एक्सेस फ़ंक्शन और इंटीग्रेशन के कुछ विवरण आपके ऐप के अनुसार बदलने होंगे।
10. कौन-सा डेटा सहेजें
एट्रिब्यूशन के लिए तीन इकाइयाँ चाहिए:
- विज्ञापन लिंक और कैंपेन की सूची।
- उपयोगकर्ता का अधिग्रहण स्रोत, जो उपयोगकर्ता रिकॉर्ड बनाते समय सहेजा जाता है।
- कैंपेन लिंक विज़िट का इतिहास, जिसमें मौजूदा उपयोगकर्ताओं की विज़िट भी शामिल हैं।
SQL स्कीमा का उदाहरण:
-- हर विज्ञापन लिंक के लिए एक पंक्ति।
-- उदाहरण के लिए, पैरामीटर "ad_sep_anna" कोड "sep_anna" से मेल खाता है।
CREATE TABLE campaigns (
code text PRIMARY KEY,
name text NOT NULL,
created_at timestamptz NOT NULL DEFAULT now()
);
-- उपयोगकर्ता का अधिग्रहण स्रोत बनाते समय सेट किया जाता है।
-- NULL का मतलब ऑर्गेनिक है।
ALTER TABLE users
ADD COLUMN campaign text REFERENCES campaigns (code);
-- वे सभी उपयोगकर्ता जिन्होंने कैंपेन लिंक खोले,
-- नए और मौजूदा दोनों उपयोगकर्ताओं सहित।
CREATE TABLE campaign_visits (
code text REFERENCES campaigns (code),
user_id bigint,
first_at timestamptz NOT NULL DEFAULT now(),
PRIMARY KEY (code, user_id)
);code फ़ील्ड में sep_anna जैसा छोटा कैंपेन कोड होना चाहिए। name फ़ील्ड प्लेसमेंट का विवरण देता है, जैसे अन्ना का चैनल, सितंबर पोस्ट।
campaign_visits तालिका विज़िट को उपयोगकर्ता के मूल अधिग्रहण स्रोत से अलग दर्ज करती है। जब भी उपयोगकर्ता कोई दूसरा लिंक खोले, मूल स्रोत को ओवरराइट नहीं किया जाना चाहिए।
11. पैरामीटर पार्स करना: बॉट और Mini App के लिए एक ही पार्सर
विज्ञापन और रेफ़रल पैरामीटर के लिए एक ही पार्सर इस्तेमाल करें।
import re
AD = re.compile(r"ad_([A-Za-z0-9_-]{1,61})")
REF = re.compile(r"ref_([A-Za-z0-9]{4,32})")
def parse_start(param: str | None) -> tuple[str, str] | None:
"""("ad", code), ("ref", code) या अन्य किसी भी स्थिति में None लौटाता है।"""
if not param:
return None
if m := AD.fullmatch(param):
return "ad", m[1]
if m := REF.fullmatch(param):
return "ref", m[1]
return Noneपार्स करने के बाद जाँचें कि मिला हुआ कोड campaigns तालिका में मौजूद है या नहीं।
- किसी अज्ञात कोड को मौजूदा कैंपेन से न जोड़ें। ऐसी विज़िट को ऑर्गेनिक या बिना एट्रिब्यूशन वाली मानें।
- बिना जाँचे कच्चे पैरामीटर मान न सहेजें।
- बॉट और Mini App को मिलने वाले पैरामीटर पर एक ही पार्सिंग नियम लागू करें।
12. बॉट: /start को हैंडल करना
जब उपयोगकर्ता बॉट शुरू करता है, तो Telegram पैरामीटर को /start कमांड के आर्गुमेंट में भेजता है।
aiogram 3 के साथ उदाहरण:
@router.message(CommandStart())
async def start(message: Message, command: CommandObject):
source = parse_start(command.args)
# "/start ad_sep_anna" -> ("ad", "sep_anna")
async with db.transaction():
await create_user_if_new(message.from_user, source)
if source and source[0] == "ad":
await record_visit(source[1], message.from_user.id)create_user_if_new फ़ंक्शन को उपयोगकर्ता रिकॉर्ड केवल तभी बनाना चाहिए जब उपयोगकर्ता पहले से मौजूद न हो।
डुप्लिकेट रिकॉर्ड से बचने के लिए एटॉमिक ऑपरेशन इस्तेमाल करें, जैसे:
-- create_user_if_new: एटॉमिक, बॉट और Mini App के एक साथ अनुरोध करने पर भी सुरक्षित
INSERT INTO users (id, campaign, referrer_id)
VALUES ($1, $2, $3)
ON CONFLICT (id) DO NOTHING
RETURNING id; -- एक पंक्ति लौटी = नया उपयोगकर्ता; कुछ नहीं = मौजूदा उपयोगकर्ता, जैसा है वैसा ही छोड़ा गयाअगर क्वेरी कोई पंक्ति लौटाती है, तो उपयोगकर्ता बन गया है। अगर कोई पंक्ति नहीं लौटती, तो उपयोगकर्ता पहले से मौजूद है और उसका मूल अधिग्रहण स्रोत बिना बदले रहना चाहिए।
कैंपेन लिंक विज़िट दर्ज करने के लिए इस्तेमाल करें:
-- record_visit
INSERT INTO campaign_visits (code, user_id)
VALUES ($1, $2)
ON CONFLICT DO NOTHING;अगर कोई मौजूदा उपयोगकर्ता दूसरा लिंक खोलता है और उसे /start ad_… मिलता है, तो विज़िट दर्ज करें, लेकिन उसके campaign फ़ील्ड को ओवरराइट न करें।
रेफ़रल एट्रिब्यूशन के लिए referrer_id केवल नए उपयोगकर्ताओं के लिए सेट करें। उपयोगकर्ताओं को खुद को रेफ़र करने की अनुमति न दें।
13. Mini App: पहले लॉन्च को हैंडल करना
Mini App को Telegram Web App लॉन्च डेटा के हिस्से के रूप में start_param पैरामीटर मिल सकता है।
फ़्रंटएंड पर Telegram का हस्ताक्षरित डेटा अपने सर्वर को भेजें:
// फ्रंटएंड: हर अनुरोध में Telegram का हस्ताक्षरित init data होता है
fetch("/api/me", { headers: { Authorization: `tma ${Telegram.WebApp.initData}` } })सर्वर पर, उपयोगकर्ता ID या start_param इस्तेमाल करने से पहले initData की प्रामाणिकता और उसकी उम्र की जाँच करें।
Python में वैलिडेशन फ़ंक्शन का उदाहरण:
import hashlib, hmac, json, time
from urllib.parse import parse_qsl
def check_init_data(
raw: str,
bot_token: str,
max_age: int = 86400
) -> dict:
fields = dict(
parse_qsl(
raw,
keep_blank_values=True,
strict_parsing=True
)
)
received = fields.pop("hash", "")
# hash को छोड़कर सभी फ़ील्ड, "signature" सहित, क्रमबद्ध, हर पंक्ति में एक key=value
data = "\n".join(
f"{k}={v}" for k, v in sorted(fields.items())
)
secret = hmac.new(
b"WebAppData",
bot_token.encode(),
hashlib.sha256
).digest()
expected = hmac.new(
secret,
data.encode(),
hashlib.sha256
).hexdigest()
if not hmac.compare_digest(expected, received):
raise PermissionError("bad signature")
if time.time() - int(fields["auth_date"]) > max_age:
raise PermissionError("expired")
return {
"user": json.loads(fields["user"]),
"start_param": fields.get("start_param")
}सफल वैलिडेशन के बाद वही प्रक्रिया अपनाएं जो बॉट में है (create_user_if_new और record_visit):
- वैलिडेट किए गए डेटा से
userऔरstart_paramनिकालें। parse_startसे पैरामीटर पार्स करें।- उपयोगकर्ता को केवल तभी बनाएं जब वह पहले से मौजूद न हो।
- अगर पैरामीटर किसी ज्ञात विज्ञापन कैंपेन से मेल खाता है, तो कैंपेन लिंक विज़िट दर्ज करें।
सुरक्षा: केवल वैलिडेट किया गया initData इस्तेमाल करें। उपयोगकर्ता की पहचान या एट्रिब्यूशन के स्रोत के रूप में initDataUnsafe या URL पैरामीटर पर भरोसा न करें, क्योंकि उन्हें नकली बनाया जा सकता है।
start_param पैरामीटर तब भेजा जाता है जब ऐप संबंधित लिंक से लॉन्च होता है। मेन्यू से बाद के लॉन्च में यह मौजूद नहीं हो सकता। इसलिए मूल अधिग्रहण स्रोत उपयोगकर्ता बनाते समय सेट करें, हर ऐप लॉन्च पर नहीं।
14. एक उपयोगकर्ता, दो एंट्री पॉइंट
बॉट और Mini App एक ही users तालिका साझा कर सकते हैं, जिसमें हर उपयोगकर्ता की पहचान उसके Telegram user ID से होती है।
उदाहरण के लिए, कोई उपयोगकर्ता पहले बॉट शुरू कर सकता है और फिर Mini App खोल सकता है, या इसका उल्टा।
एट्रिब्यूशन के नियम:
- उपयोगकर्ता रिकॉर्ड बनाने वाला पहला हैंडलर मूल अधिग्रहण स्रोत सेट करता है।
- दूसरा हैंडलर उस स्रोत को ओवरराइट नहीं करना चाहिए।
- बाद की विज़िट को
campaign_visitsमें अलग से दर्ज किया जा सकता है।
INSERT … ON CONFLICT DO NOTHING जैसा एटॉमिक इंसर्ट इस्तेमाल करें। इससे उन गड़बड़ियों से बचने में मदद मिलती है जब बॉट और Mini App के अनुरोध लगभग एक साथ आते हैं।
15. चैनल: इनवाइट लिंक से जॉइन ट्रैक करना
अगर आपको केवल Telegram इंटरफ़ेस पर निर्भर रहने के बजाय जॉइन की अपनी ट्रैकिंग चाहिए, तो हर कैंपेन के लिए अलग इनवाइट लिंक बनाएं और उसे कैंपेन कोड के साथ सहेजें।
Python में लिंक बनाने का उदाहरण:
# हर कैंपेन के लिए एक लिंक बनाएं और उसे कोड के साथ सहेजें
link = await bot.create_chat_invite_link(
CHANNEL_ID,
name="ad_sep_anna"
) # नाम: 1–32 अक्षर
save_channel_link("ad_sep_anna", link.invite_link)इस उदाहरण में इनवाइट लिंक का नाम 1–32 अक्षरों तक सीमित है।
जॉइन इवेंट पाने के लिए बॉट को चैनल का एडमिन होना चाहिए और संबंधित chat_member अपडेट प्राप्त करने चाहिए। अगर जॉइन अनुरोधों के लिए मंज़ूरी ज़रूरी है, तो उसे chat_join_request अपडेट भी प्राप्त करने होंगे।
polling कॉन्फ़िगरेशन का उदाहरण:
# जॉइन chat_member अपडेट के रूप में आते हैं: बॉट को एडमिन होना चाहिए और इन्हें माँगना चाहिए
await dp.start_polling(
bot,
allowed_updates=[
"message",
"chat_member",
"chat_join_request"
]
)जॉइन हैंडलर का उदाहरण:
@router.chat_member()
async def member(update: ChatMemberUpdated):
joined = (
update.old_chat_member.status in ("left", "kicked")
and update.new_chat_member.status == "member"
)
if joined and update.invite_link:
save_channel_join(
update.invite_link.name,
update.new_chat_member.user.id
)अगर किसी लिंक के लिए एडमिन की मंज़ूरी ज़रूरी है, तो chat_join_request को हैंडल करें। इनवाइट लिंक update.invite_link में उपलब्ध होता है; अनुरोध जाँचने के बाद आप approve_chat_join_request कॉल कर सकते हैं।
आप चैनल छोड़ने वाले उपयोगकर्ताओं को भी दर्ज कर सकते हैं, ताकि पता चले कि कौन बना रहा।
Telegram पहले से ही एडमिन को हर इनवाइट लिंक से हुए जॉइन की संख्या दिखाता है। अपना डेटाबेस तब उपयोगी है जब आप चैनल जॉइन के डेटा को बॉट उपयोगकर्ताओं की जानकारी या दूसरे एनालिटिक्स के साथ जोड़ना चाहते हैं।
16. वैकल्पिक: रीडायरेक्ट से क्लिक ट्रैक करना
उपयोगकर्ताओं के Telegram तक पहुँचने से पहले क्लिक गिनने के लिए अपना रीडायरेक्ट endpoint बनाएं।
Mini App के लिए Python में उदाहरण:
@app.get("/go/{code}")
async def go(code: str, request: Request):
agent = request.headers.get("user-agent", "")
if code_exists(code) and "TelegramBot" not in agent: # Telegram के लिंक प्रीव्यू क्रॉलर को अनदेखा करें
record_click(code)
return RedirectResponse(
f"https://t.me/{BOT}?startapp=ad_{code}",
status_code=302
)यह उदाहरण कोड की जाँच करता है और उन अनुरोधों को बाहर रखता है जिनके User-Agent में TelegramBot है, ताकि Telegram के लिंक प्रीव्यू अनुरोध सामान्य उपयोगकर्ता क्लिक के रूप में न गिने जाएं।
इम्प्लीमेंटेशन को अपने इन्फ़्रास्ट्रक्चर के अनुसार ढालें और असली लिंक से टेस्ट करें। रीडायरेक्ट को सही पैरामीटर के साथ सही बॉट या Mini App लिंक पर ले जाना चाहिए।
17. रिपोर्ट का उदाहरण
नीचे दी गई क्वेरी हर कैंपेन के लिए कैंपेन लिंक के यूनिक विज़िटर, नए उपयोगकर्ताओं और सक्रिय उपयोगकर्ताओं की संख्या दिखाती है।
SELECT
c.code,
c.name,
(
SELECT count(*)
FROM campaign_visits v
WHERE v.code = c.code
) AS visitors,
(
SELECT count(*)
FROM users u
WHERE u.campaign = c.code
) AS new_users,
(
SELECT count(*)
FROM users u
WHERE u.campaign = c.code
AND u.first_action_at IS NOT NULL
) AS active
FROM campaigns c
ORDER BY new_users DESC;
-- first_action_at: जब उपयोगकर्ता ने पहली बार वह कार्य किया जिसके लिए कैंपेन भुगतान करता है (टास्क, खरीदारी)इस उदाहरण में first_action_at वह समय है जब उपयोगकर्ता ने पहली बार वह लक्षित कार्य पूरा किया जिसके लिए विज्ञापनदाता भुगतान करता है, जैसे कोई टास्क पूरा करना या खरीदारी करना।
visitors मेट्रिक उन उपयोगकर्ताओं को दर्शाता है जिनकी संबंधित कैंपेन की विज़िट campaign_visits में दर्ज है। यह लिंक क्लिक की संख्या के बराबर नहीं है, जब तक कि क्लिक रीडायरेक्ट से अलग से दर्ज न किए जाएं।
18. आम गलतियाँ और सीमाएँ
- बॉट को पैरामीटर तभी मिलता है जब उपयोगकर्ता
Startदबाता है। लिंक पर क्लिक करने वाला हर व्यक्ति बॉट शुरू नहीं करता, इसलिए लॉन्च की संख्या क्लिक की संख्या से कम हो सकती है। - दोबारा शुरू करने का मतलब नया उपयोगकर्ता नहीं है। अगर उपयोगकर्ता चैट डिलीट करके बॉट फिर से शुरू करता है, तो पैरामीटर फिर से भेजा जा सकता है, लेकिन उपयोगकर्ता नया नहीं है।
- मूल अधिग्रहण स्रोत को ओवरराइट न करें। बाद की विज़िट का विश्लेषण करने के लिए टाइमस्टैम्प वाली अलग विज़िट तालिका इस्तेमाल करें।
- नए और मौजूदा अकाउंट अलग रखें। अगर लक्ष्य अधिग्रहण है, तो दोबारा की गई विज़िट से नए उपयोगकर्ताओं की संख्या नहीं बढ़नी चाहिए।
- बॉट और सेल्फ़-रेफ़रल को बाहर रखें।
is_botजाँचें और उपयोगकर्ताओं को खुद को रेफ़र करने की अनुमति न दें। - पैरामीटर की सीमाओं का पालन करें।
startपैरामीटर की कुल लंबाई 64 अक्षरों से ज़्यादा नहीं होनी चाहिए।ad_याref_प्रीफ़िक्स के लिए जगह छोड़ने के लिएsep_annaजैसे छोटे कोड इस्तेमाल करें। - रेफ़रल और विज्ञापन एट्रिब्यूशन को अलग रखें। अलग प्रीफ़िक्स और प्रोसेसिंग नियम गलत इनाम और रिपोर्ट से बचने में मदद करते हैं।