बैच में भेजना
POST /v1/email/batches एक अनुरोध में 100 तक पूरे भेजने वाले पेलोड स्वीकार करता है। हर आइटम एक स्वतंत्र संदेश है, जिसका अपना प्रेषक, अपने प्राप्तकर्ता और अपनी सामग्री होती है। रसीदें, अलर्ट या प्रति प्राप्तकर्ता अन्य संदेश कम API अनुरोधों में भेजने के लिए बैच का उपयोग करें। एक संदेश के लिए ईमेल भेजना देखें।
कब क्या उपयोग करें
- स्वतंत्र संदेश जो आपके पास पहले से तैयार हैं। बैच का उपयोग करें और उन्हें एक अनुरोध में सौंप दें।
- लगातार उच्च मात्रा वाला प्रवाह। एकल भेजने वाले एंडपॉइंट को लूप में कॉल करना एक ठीक आर्किटेक्चर है, और बैच से कोई भी एक संदेश सस्ता या जल्दी डिलीवर नहीं होता। बैच थ्रूपुट बदलता है, क्योंकि बैच अनुरोध
email_sendनीति के बजायemail_batchअनुरोध दर सीमा नीति पर गिने जाते हैं, और हर अनुरोध में 100 तक संदेश जाते हैं। - सहेजे गए ऑडियंस को एक ईमेल। यह एक ब्रॉडकास्ट है, जो ऑडियंस को प्राप्तकर्ताओं में बदलता है और हर संपर्क के लिए संदेश को वैयक्तिकृत करता है।
बैच में भेजे गए संदेश
अनुरोध का मुख्य भाग एक JSON ऑब्जेक्ट है, जिसकी messages ऐरे में 1 से 100 संदेश ऑब्जेक्ट होते हैं। हर आइटम एक पूरा, स्वतंत्र भेजने का अनुरोध है, जिसके अपने from, to, subject और सामग्री होते हैं, और वैकल्पिक रूप से अपने category, ip_pool_id, टैग और मेटाडेटा भी। आइटम का स्कीमा ठीक एकल भेजने वाले पेलोड जैसा है, इसलिए ईमेल भेजना में बताई गई हर बात हर आइटम पर लागू होती है, जिसमें category का डिफ़ॉल्ट marketing और टेम्पलेट से भेजना शामिल है।
इसमें scheduled_at भी शामिल है, इसलिए एक बैच में अभी जाने वाले और बाद में जाने वाले संदेश एक साथ हो सकते हैं, और हर संदेश अपने समय पर जाता है। शेड्यूल करके भेजना के नियम और सीमा हर आइटम पर अलग से लागू होते हैं, और शेड्यूल किया गया आइटम किसी भी अन्य शेड्यूल किए गए संदेश की तरह अपनी ID से रद्द किया जाता है।
const batch = await bird.email.sendBatch({
messages: [
{
from: { email: "onboarding@messagebird.dev", name: "Bird" },
to: ["alice@example.com"],
subject: "Your receipt",
html: "<p>Thanks, Alice.</p>",
},
{
from: { email: "onboarding@messagebird.dev", name: "Bird" },
to: ["bob@example.com"],
subject: "Your receipt",
html: "<p>Thanks, Bob.</p>",
},
],
});
for (const item of batch.data) console.log(item.id, item.status);batch = client.email.send_batch(
messages=[
{
"from_": {"email": "onboarding@messagebird.dev", "name": "Bird"},
"to": ["delivered@messagebird.dev"],
"subject": "Hello from Bird",
"html": "<p>My first Bird email.</p>",
},
{
"from_": {"email": "onboarding@messagebird.dev", "name": "Bird"},
"to": ["someone-else@messagebird.dev"],
"subject": "Hello again from Bird",
"text": "My second Bird email.",
},
],
)
for item in batch.data:
print(item.id, item.status)package main
import (
"context"
"fmt"
"log"
"os"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey(os.Getenv("BIRD_API_KEY")))
if err != nil {
log.Fatal(err)
}
batch, err := client.Email.SendBatch(context.Background(), bird.EmailSendBatchParams{
Messages: []bird.EmailSendParams{
{
From: "onboarding@messagebird.dev",
To: []string{"alice@example.com"},
Subject: "Hello, Alice",
HTML: "<p>Welcome!</p>",
},
{
From: "onboarding@messagebird.dev",
To: []string{"bob@example.com"},
Subject: "Hello, Bob",
HTML: "<p>Welcome!</p>",
},
},
})
if err != nil {
log.Fatal(err)
}
for _, item := range batch.Data {
fmt.Println(item.Id)
}
}$batch = $bird->email->sendBatch(messages: [
(new EmailMessageSendRequest())
->setFrom((new EmailAddress())->setEmail('onboarding@messagebird.dev')->setName('Bird'))
->setTo([(new EmailAddress())->setEmail('delivered@messagebird.dev')])
->setSubject('Hello from Bird')
->setHtml('<p>My first Bird email.</p>'),
(new EmailMessageSendRequest())
->setFrom((new EmailAddress())->setEmail('onboarding@messagebird.dev')->setName('Bird'))
->setTo([(new EmailAddress())->setEmail('someone-else@messagebird.dev')])
->setSubject('Hello again from Bird')
->setText('My second Bird email.'),
]);
foreach ($batch->getData() ?? [] as $item) {
echo $item->getId(), ' ', $item->getStatus(), "\n";
}bird email send-batch --body-file - <<'JSON'
{
"messages": [
{
"from": {
"email": "noreply@acme.com",
"name": "Acme Support"
},
"to": [
{
"email": "delivered@messagebird.dev",
"name": "Jane Doe"
}
],
"subject": "Your receipt for order #1234",
"text": "Thanks for your purchase! Your receipt is attached."
},
{
"from": {
"email": "noreply@acme.com",
"name": "Acme Support"
},
"to": [
{
"email": "delivered@messagebird.dev",
"name": "John Roe"
}
],
"subject": "Your receipt for order #1235",
"text": "Thanks for your purchase! Your receipt is attached."
}
]
}
JSONcurl -X POST https://us1.platform.bird.com/v1/email/batches \
-H "Authorization: Bearer bk_us1_..." \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"from": "hello@yourdomain.com",
"to": ["delivered@messagebird.dev"],
"subject": "Your receipt",
"html": "<p>Thanks for your order.</p>",
"category": "transactional"
},
{
"from": "newsletter@yourdomain.com",
"to": ["delivered@messagebird.dev"],
"subject": "June product news",
"html": "<p>What shipped this month.</p>",
"category": "marketing"
},
{
"from": "alerts@yourdomain.com",
"to": ["delivered@messagebird.dev"],
"subject": "Usage threshold reached",
"text": "You have used 80% of your quota.",
"category": "transactional"
}
]
}'सभी या कोई नहीं वाला सत्यापन
किसी भी आइटम को कतार में डालने से पहले हर आइटम का सत्यापन किया जाता है। अगर एक भी संदेश विफल होता है, चाहे फ़ील्ड-स्तर की सत्यापन त्रुटि हो या असत्यापित प्रेषक डोमेन, तो पूरा बैच 422 के साथ अस्वीकार कर दिया जाता है और कुछ भी नहीं भेजा जाता। उस आइटम को ठीक करें और बैच फिर से सबमिट करें।
सप्रेशन इस जाँच का हिस्सा नहीं है। जिस आइटम के सभी प्राप्तकर्ता सप्रेस किए गए हैं, वह भी स्वीकार होता है और उसे अपना em_ ID मिलता है। संदेश प्रोसेस होने के बाद वे प्राप्तकर्ता status: rejected के रूप में लौटते हैं (देखें सप्रेशन)।
202 प्रतिक्रिया को संभालें
सफल बैच 202 Accepted लौटाता है, जिसमें हर संदेश के लिए एक प्रविष्टि होती है, उसी क्रम में जिसमें वे सबमिट किए गए थे:
{
"data": [
{ "id": "em_01ky7q1vmkerwa7fxyycfe5ks1", "status": "accepted", "category": "transactional" },
{ "id": "em_01ky7q1vmkesr9h1y52tkqng9f", "status": "accepted", "category": "marketing" },
{ "id": "em_01ky7q1vmkesyr1z1h4s48jjxm", "status": "accepted", "category": "transactional" }
]
}हर चाइल्ड एक सामान्य संदेश है। उसे उसके em_ ID से GET /v1/email/messages/{message_id}, उसके प्राप्तकर्ता और इवेंट एंडपॉइंट, और वेबहुक के ज़रिए ठीक वैसे ही ट्रैक करें जैसे आपने उसे अलग से भेजा हो। वही असिंक्रोनस मॉडल लागू होता है, इसलिए 202 का अर्थ है कि संदेश स्थायी रूप से स्वीकार हो गया है, और हर प्राप्तकर्ता के परिणाम बाद में आते हैं।
आइडेम्पोटेंट तरीके से फिर से प्रयास
आइडेम्पोटेंसी वैकल्पिक है। SDK अपने-आप फिर से प्रयास करने के लिए एक कुंजी बनाते हैं। अलग-अलग कॉल में फिर से प्रयास करने के लिए, या सीधे HTTP का उपयोग करते समय, कुंजी के दोबारा उपयोग और रीप्ले की सीमाओं के लिए आइडेम्पोटेंसी गाइड देखें।
अटैचमेंट और बॉडी की सीमा
हर बैच आइटम के अपने attachments हो सकते हैं, जिन पर एकल भेजने वाला ही फ़ील्ड नियम और प्रति-संदेश आकार सीमा लागू होती है (देखें अटैचमेंट)। पूरे बैच पर एक और सीमा लागू होती है: सीरियलाइज़ की गई JSON अनुरोध बॉडी अधिकतम 20 MB हो सकती है, और इससे बड़ी बॉडी 413 के साथ अस्वीकार कर दी जाती है। Base64-एन्कोड किए गए अटैचमेंट इसी सीमा में गिने जाते हैं, इसलिए ज़्यादा अटैचमेंट वाले बैच जल्दी सीमा तक पहुँच जाते हैं। उन्हें कई बैच में बाँटें, या एक-एक करके भेजें।
ब्रॉडकास्ट
ब्रॉडकास्ट एक संग्रहीत ऑडियंस को एक ईमेल भेजता है। भेजना शुरू होने पर हम ऑडियंस के मौजूदा सदस्यों को, सप्रेशन घटाकर, प्राप्तकर्ता सूची में बदलते हैं, और हर प्राप्तकर्ता की संपर्क प्रॉपर्टी टेम्पलेट के वेरिएबल भरती हैं। ब्रॉडकास्ट को डैशबोर्ड से, /v1/email/broadcasts से, या bird email broadcasts कमांड से चलाएँ। पूरे चरण ब्रॉडकास्ट में दिए गए हैं।
अगले कदम
- ईमेल भेजना: हर आइटम का पूरा पेलोड, जिसमें फ़ील्ड, सीमाएँ और टैग बनाम मेटाडेटा शामिल हैं
- ब्रॉडकास्ट: संग्रहीत ऑडियंस को एक ईमेल, जो हर संपर्क के लिए वैयक्तिकृत होता है
- श्रेणियाँ:
marketingऔरtransactional, और हर एक सप्रेशन नीति पर क्या असर डालता है - आइडेम्पोटेंसी: कुंजी का प्रारूप, उसे कितने समय तक रखा जाता है, और दोबारा चलाने का व्यवहार
- API संदर्भ: बैच अनुरोध और प्रतिक्रिया के पूरे स्कीमा
- एक API कॉल में 100 ईमेल भेजें: एक वीडियो, जिसमें एक बैच भेजा जाता है और दिखाया जाता है कि हर संदेश अपनी स्थिति कैसे बताता है
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।