दस्तावेज़ पर जाएँ
Python

ब्रॉडकास्ट

`broadcasts.preview`, `send`, `list`, `list_all`, `iterate`, `get`, `list_recipients`, `list_all_recipients`, `iterate_recipients`, `get_recipient`, `stats`, `analytics` और `cancel`।

हर मेथड

broadcasts.py
import time from openemail import openemailfrom openemail.types import BroadcastCreate draft: BroadcastCreate = {    'audienceIds': ['aud_4c1b8e2a7d9f05c36b4e8a71'],    'from': 'Acme <[email protected]>',    'subject': '{{firstName|Hello}}, the September release is out',    'html': '<p>Hi {{firstName|there}},</p><p>Here is what changed this month.</p>',    'text': 'Hi {{firstName|there}}, here is what changed this month. Unsubscribe: {{unsubscribeUrl}}',    'tags': {'campaign': 'release-2026-09'},} reach = openemail.broadcasts.preview(draft)print(reach['recipients'], reach['unsubscribed'], reach['suppressed']) broadcast = openemail.broadcasts.send(draft) latest = openemail.broadcasts.get(broadcast['id'])while latest['status'] in ('scheduled', 'queued', 'sending'):    time.sleep(5)    latest = openemail.broadcasts.get(broadcast['id']) for copy in openemail.broadcasts.iterate_recipients(broadcast['id']):    print(copy['email'], copy['status'], copy['opens'], copy['clicks']) bounced = openemail.broadcasts.list_recipients(broadcast['id'], filter='bounced')if bounced['items']:    content = openemail.broadcasts.get_recipient(broadcast['id'], bounced['items'][0]['emailId'])    print(content['subject'], content['bouncedAt']) stats = openemail.broadcasts.stats(broadcast['id'], grain='day')print(stats['totals']['opened'], stats['totals']['clicked'], stats['totals']['unsubscribed']) lately = openemail.broadcasts.stats(broadcast['id'], days=1)print(lately['window']['opened'] if lately['window'] else None) month = openemail.broadcasts.analytics(days=30)for row in month['broadcasts']:    print(row['subject'], row['sent'], row['opened']) later = openemail.broadcasts.send({**draft, 'scheduledAt': 'P1D'})openemail.broadcasts.cancel(later['id']) history = openemail.broadcasts.list(audience_id=draft['audienceIds'][0])print(latest['status'], latest['counts']['sent'], len(history['items']))

broadcast एक या अधिक ऑडियंस में सभी को एक संदेश भेजता है, हर व्यक्ति के लिए अलग कॉपी के रूप में। हर कॉपी का ठीक एक प्राप्तकर्ता होता है और कोई cc या bcc नहीं, इसलिए कोई नहीं देखता कि यह और किसे गई, और हर कॉपी अपने msg_ id, events, ट्रैकिंग और webhooks वाला सामान्य ईमेल है। list_recipients उन्हें सूचीबद्ध करता है और बताता है कि हर एक का क्या हुआ। कॉपियाँ Sent फ़ोल्डर में नहीं रखी जातीं, क्योंकि broadcast ही रिकॉर्ड है।

send तुरंत लौटता है, broadcast queued स्थिति में, या scheduledAt देने पर scheduled में, और भेजना बैकग्राउंड में चलता है। send को emails:send और audiences:read चाहिए, preview को audiences:read, list, list_all, iterate, get, list_recipients, list_all_recipients, iterate_recipients, get_recipient, stats और analytics को emails:read, और cancel को emails:send।

हर send में एक Idempotency-Key होती है, idempotency_key= से आपकी या SDK की बनाई हुई, इसलिए नेटवर्क विफलता के बाद दोबारा कोशिश पहली कोशिश से बने broadcast के साथ जवाब देती है, दो बार भेजने के बजाय। preview, get, cancel और हर read दोहराने में सुरक्षित हैं और दोबारा आज़माए जाते हैं।

मर्ज फ़ील्ड

subject, html और text हर व्यक्ति के लिए उसके संपर्क से भरे जाते हैं। {{firstName}} संपर्क के नाम का पहला शब्द है, {{lastName}} बाकी हिस्सा, {{name}} पूरा नाम, {{email}} वह पता जिस पर कॉपी जाती है और {{unsubscribeUrl}} वह लिंक जो उसकी सदस्यता छुड़ाता है।

हर फ़ील्ड बार के बाद एक फ़ॉलबैक लेता है, जो तब इस्तेमाल होता है जब संपर्क के पास उसका मान न हो, इसलिए बिना नाम सहेजे गए संपर्क के लिए {{firstName|there}} "there" बन जाता है। html में मान escape किए जाते हैं, और कोई भी दूसरा {{…}} ठीक वैसा ही छोड़ा जाता है जैसा लिखा है।

सहेजा गया टेम्पलेट भेजने के लिए html और text के बजाय template दें। वही पाँच मान उस तक props के रूप में पहुँचते हैं, पर सिर्फ़ वे props जिन्हें टेम्पलेट घोषित करता है, इसलिए जो टेम्पलेट firstName घोषित करता है उसे वह मिलता है और जो नहीं करता वह इसके कारण कभी मना नहीं होता। template.props में जो कुछ है वह हर कॉपी में एक जैसा जाता है।

सदस्यता छोड़ना

हर कॉपी में एक-क्लिक सदस्यता छोड़ने के हेडर होते हैं जिनसे मेल क्लाइंट अपना सदस्यता छोड़ने का बटन दिखा पाता है, जो बड़े मेलबॉक्स प्रदाता थोक मेल से माँगते हैं। जो html या text मुख्य भाग ख़ुद {{unsubscribeUrl}} नहीं रखता उसे लिंक वाला एक पंक्ति का फ़ुटर मिलता है। टेम्पलेट ठीक वैसा ही भेजा जाता है जैसा है, इसलिए {{unsubscribeUrl}} टेम्पलेट में डालें।

सदस्यता छोड़ना व्यक्ति को हर उस ऑडियंस में सदस्यता छोड़ा हुआ चिह्नित करता है जिसमें वह broadcast गया था, और AudienceContactResource.unsubscribedAt इसे audiences.list_contacts पर दिखाता है। वह ऑडियंस और पता पुस्तिका में रहता है, उसकी दूसरी ऑडियंस नहीं छुई जातीं, और उसे एक-एक करके भेजे गए मेल अब भी जाते हैं। उसे ऑडियंस से निकालकर फिर जोड़ने से वह फिर से सदस्य बन जाता है।

किसे छोड़ा जाता है

broadcast audienceIds में से कम से कम एक के हर संपर्क तक पहुँचता है, एक बार, चाहे कितनी भी उसे रखती हों। यह उस संपर्क को छोड़ता है जिसने उनमें से हर उस ऑडियंस की सदस्यता छोड़ दी है जिसमें वह है, और उस पते को जो बाउंस या शिकायत के बाद, या किसी के जोड़ने से, रोक सूची में है। send के बाद पर भेजना पहुँचने से पहले किसी ऑडियंस में जोड़े गए संपर्क को भी मिलता है।

preview बिना भेजे वही संख्याएँ लौटाता है: recipients, unsubscribed और suppressed। जो send किसी तक नहीं पहुँचेगा वह 422 no_recipients raise करता है।

कुछ भी लिखे जाने से पहले पूरे भेजे जाने की तुलना प्लान की मासिक भेजने की सीमा से की जाती है, इसलिए जिस broadcast को कोटा पूरा नहीं कर सकता वह 429 send_quota_exceeded raise करता है और पीछे कुछ नहीं छोड़ता। हर कॉपी एक भेजना गिनी जाती है।

स्थिति और प्रगति

get कॉपियों से counts सीधे पढ़ता है, इसलिए broadcast भेजते समय इसे बार-बार जाँचें। status scheduled या queued से sending पर जाता है और सौंपी गई हर कॉपी के जाने या विफल होने पर sent पर टिकता है। जब तक कॉपियाँ इंतज़ार में हैं यह sending रहता है, भले ही completedAt बताए कि आख़िरी व्यक्ति तक पहुँच गया। failed का मतलब है पूरा broadcast रुक गया, और lastError बताता है क्यों: from पते से अब भेजा नहीं जा सकता, टेम्पलेट हल होना बंद हो गया, प्लान बीच में ख़त्म हो गया, भेजना ख़ुद बार-बार विफल होता रहा, या एक भी कॉपी लिखी नहीं जा सकी।

cancel उस broadcast को रोकता है जो scheduled, queued या sending है। कोई और नहीं जोड़ा जाता और इंतज़ार कर रही हर कॉपी रद्द होती है, जबकि जा चुकी कॉपियाँ वापस नहीं लाई जा सकतीं। जब हर कॉपी जा चुकी हो, cancel 409 broadcast_not_cancellable raise करता है, और रद्द broadcast को रद्द करना उसे जैसा है वैसा लौटा देता है।

यह किन तक पहुँचा

list_recipients उन लोगों का एक पेज लौटाता है जिन तक broadcast गया, हर कॉपी की एक पंक्ति, पते के क्रम में, items, hasMore और nextCursor वाले dict के रूप में। list_all_recipients हर पेज से गुज़रकर एक list बनाता है और iterate_recipients एक बार में एक कॉपी देता है, अगला पेज तभी लाता है जब loop उसे माँगे। limit 1 से 200 तक होता है और डिफ़ॉल्ट 50 है, और cursor उन्हीं filter और q के साथ वापस भेजा जाता है।

filterरखता है
pendingकॉपियाँ जो अभी कतार में, शेड्यूल या भेजी जा रही हैं।
sentकॉपियाँ जो भेजी जा चुकीं।
deliveredकॉपियाँ जिन्हें प्राप्त करने वाले सर्वर ने स्वीकार किया।
openedकॉपियाँ जो कम से कम एक बार खोली गईं।
not_openedकॉपियाँ जो भेजी गईं और कभी नहीं खोली गईं।
clickedकॉपियाँ जिन पर कम से कम एक ट्रैक किया गया click हुआ।
bouncedकॉपियाँ जो बाउंस हुईं।
complainedकॉपियाँ जिन्हें व्यक्ति ने स्पैम के रूप में रिपोर्ट किया।
failedकॉपियाँ जो विफल या रद्द हुईं।
unsubscribedलोग जिन्होंने broadcast जाने के बाद unsubscribe किया।

BROADCAST_RECIPIENT_FILTERS हर filter का नाम देता है, और q पते और नाम में खोजता है, अक्षरों के छोटे-बड़े होने को अनदेखा करते हुए। Opens और clicks में image proxies और link scanners शामिल नहीं होते, और जब broadcast ट्रैकिंग बंद रखकर गया हो तो ये 0 रहते हैं।

get_recipient(id, email_id) एक कॉपी लौटाता है: वही पंक्ति, साथ में subject, html और text ठीक वैसे जैसे उस व्यक्ति को मिले, merge fields भरे हुए और उसके अपने unsubscribe लिंक के साथ। HTML open और click ट्रैकिंग जोड़े जाने से पहले का है। कोई email_id जो इस broadcast की कॉपी नहीं है 404 recipient_not_found raise करता है, और अज्ञात broadcast 404 broadcast_not_found raise करता है।

stats कुल योग और एक series लौटाता है। totals sent, delivered, bounced, complained और failed कॉपियाँ गिनता है, अभी प्रतीक्षा कर रही कॉपियों के लिए pending के साथ, और उन लोगों को जिन्होंने opened, clicked और unsubscribed किया, opens और clicks को event गिनती के रूप में। series विरल है और सबसे पुराना पहले, हर उस grain (minute, hour या day, डिफ़ॉल्ट hour) के लिए एक bucket जिसमें कुछ हुआ, UTC से पूर्व offset_minutes में काटा गया। यह हर व्यक्ति को एक बार गिनती है, उस पहले समय पर जब उसके साथ यह हुआ, इसलिए इसका जोड़ कुल योग के बराबर होता है।

कुछ ख़ास पतों या डोमेन तक सीमित कुंजी सिर्फ़ उन्हीं broadcast तक पहुँचती है जो उसके पास मौजूद पते या डोमेन से भेजे गए। list, list_all और iterate बाक़ी को छोड़ देते हैं, और get, प्राप्तकर्ता वाले मेथड, stats और cancel उनके लिए 404 broadcast_not_found raise करते हैं।

जवाब: BroadcastResource

get और cancel हर एक इनमें से एक लौटाता है, और send एक SentBroadcastResource लौटाता है, यानी वही फ़ील्ड और साथ में replayed, जो तब True होता है जब जवाब वह broadcast हो जिसे उसी idempotency कुंजी वाली किसी पिछली कॉल ने बनाया था। list इनका एक पेज लौटाता है, items, hasMore और nextCursor वाला dict, नए पहले, और list_all तथा iterate हर पेज से गुज़रते हैं। preview audienceIds, recipients, unsubscribed और suppressed के साथ एक BroadcastPreviewResource लौटाता है। list_recipients BroadcastRecipientResource पंक्तियों का एक पेज लौटाता है, get_recipient एक BroadcastRecipientContentResource और stats एक BroadcastStatsResource।

idstr
टिकाऊ हैंडल, `brd_` के बाद 24 hex अक्षर।
statusBroadcastStatus
`scheduled`, `queued`, `sending`, `sent`, `cancelled` या `failed`। `BROADCAST_STATUSES` हर एक का नाम देता है।
modeApiKeyMode
`live` या `test`, उस key से जिसने इसे बनाया। test broadcast की कॉपियाँ भेजी गई चिह्नित होती हैं और किसी को नहीं पहुँचाई जातीं।
sourceEmailSource | str
यह कहाँ से शुरू हुआ: key के लिए `api`, जुड़े ऐप के लिए `oauth`, ऐप के लिए `composer`, सहायक के लिए `mcp`।
audienceIdslist[str]
वे ऑडियंस जिन्हें यह भेजा गया, हर एक एक बार।
fromstr
वह पता जिससे हर कॉपी भेजी जाती है।
subjectstr
लिखे गए अनुसार विषय, मर्ज फ़ील्ड समेत। ख़ाली जब टेम्पलेट विषय देता है।
countsBroadcastCounts
`recipients` `send` के समय लिया गया अनुमान है। `created` लिखी गई कॉपियाँ गिनता है, `skipped` वे लोग जिन्हें छोड़ा गया क्योंकि तब तक उनका पता रोका जा चुका था, और `failedToQueue` वे लोग जिनकी कॉपी लिखी नहीं जा सकी। `queued`, `sending`, `sent`, `failed` और `cancelled` कॉपियों को उस स्थिति के हिसाब से गिनते हैं जिसमें हर एक अभी है।
lastErrorstr | None
broadcast क्यों विफल हुआ, या सबसे हाल की वह कॉपी जो लिखी नहीं जा सकी और क्यों। जब तक कुछ ग़लत नहीं हुआ तब तक `None`।
scheduledAtstr | None
ISO-8601 UTC, भेजना कब शुरू होना है। तुरंत भेजे गए broadcast के लिए `None`।
startedAtstr | None
ISO-8601 UTC, भेजना पहले लोगों तक कब पहुँचा।
completedAtstr | None
ISO-8601 UTC, आख़िरी व्यक्ति तक कब पहुँचा। इसके बाद भी कॉपियाँ जाने का इंतज़ार कर सकती हैं।
cancelledAtstr | None
ISO-8601 UTC, जब `cancel` ने इसे रोका।
createdAtstr
ISO-8601 UTC, जब `send` बुलाया गया। सूची का क्रम तय करता है।
updatedAtstr
ISO-8601 UTC, भेजना आगे बढ़ने के साथ अपडेट होता है।

प्रतिक्रिया: BroadcastRecipientResource

list_recipients, list_all_recipients और iterate_recipients की हर पंक्ति। get_recipient से मिलने वाला BroadcastRecipientContentResource इसमें subject, html और text जोड़ता है।

emailIdstr
इस व्यक्ति की कॉपी का `msg_` id। `get_recipient` उसे उसकी सामग्री के साथ पढ़ता है और `emails.get` उसे भेजे गए ईमेल के रूप में पढ़ता है।
contactIdstr | None
वह संपर्क जिसे यह गई, या `None` जब संपर्क बाद में हटा दिया गया हो।
emailstr
वह पता जिस पर कॉपी गई।
namestr | None
संपर्क पर दर्ज नाम।
statusstr
कॉपी की स्थिति: `queued`, `scheduled`, `sending`, `sent`, `failed` या `cancelled`।
sentAtstr | None
ISO-8601 UTC, जब कॉपी भेजी गई।
deliveredAtstr | None
ISO-8601 UTC, जब प्राप्त करने वाले सर्वर ने इसे स्वीकार किया, पहला `email.delivered`।
bouncedAtstr | None
ISO-8601 UTC, जब यह बाउंस हुई, पहला `email.bounced`।
complainedAtstr | None
ISO-8601 UTC, जब व्यक्ति ने इसे स्पैम के रूप में रिपोर्ट किया, पहला `email.complained`।
failurestr | None
कॉपी क्यों विफल हुई, अगर हुई।
opensint
दर्ज opens, image proxies और scanners वाले छोड़कर। ट्रैकिंग बंद होने पर 0।
firstOpenAtstr | None
ISO-8601 UTC, पहला open।
clicksint
ट्रैक किए गए लिंक पर दर्ज clicks, scanners के बिना।
firstClickAtstr | None
ISO-8601 UTC, पहला click।
unsubscribedAtstr | None
ISO-8601 UTC, जब इस व्यक्ति ने broadcast जाने के बाद उसकी किसी ऑडियंस से unsubscribe किया, उसके लिंक से या किसी और तरह।

संदर्भ