इवेंट प्रकाशित करना
अपनी Bird API कुंजी और Realtime ऐप की कुंजी व सीक्रेट का उपयोग करके अपने सर्वर से प्रकाशित करें। ऐप सीक्रेट को कभी भी क्लाइंट कोड में शामिल न करें। सब्सक्राइब किए गए क्लाइंट को अल्पकालिक सिग्नल आपस में भेजने देने के लिए, प्राइवेट या प्रेज़ेंस चैनलों पर क्लाइंट इवेंट का उपयोग करें।
न्यूनतम प्रकाशन
किसी इवेंट के लिए एक नाम और कम से कम एक चैनल ज़रूरी है। इसके वैकल्पिक पेलोड में कोई भी JSON ऑब्जेक्ट, ऐरे या स्केलर हो सकता है।
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({
apiKey: process.env.BIRD_API_KEY,
realtime: {
key: process.env.BIRD_REALTIME_KEY,
secret: process.env.BIRD_REALTIME_SECRET,
},
});
await bird.realtime.publish("rap_01krdgeqcxet5s7t44vh8rt9mg", {
event: "order-updated",
channels: ["orders"],
data: { id: 42, status: "shipped" },
});import os
from bird import Bird
client = Bird(
api_key=os.environ["BIRD_API_KEY"],
realtime_key=os.environ["BIRD_REALTIME_KEY"],
realtime_secret=os.environ["BIRD_REALTIME_SECRET"],
)
client.realtime.publish(
"rap_01krdgeqcxet5s7t44vh8rt9mg",
event="order-updated",
channels=["orders"],
data={"id": 42, "status": "shipped"},
)client, err := bird.NewClient(
option.WithAPIKey(os.Getenv("BIRD_API_KEY")),
option.WithRealtimeCredentials(os.Getenv("BIRD_REALTIME_KEY"), os.Getenv("BIRD_REALTIME_SECRET")),
)
if err != nil {
log.Fatal(err)
}
_, err = client.Realtime.Publish(context.Background(), "rap_01krdgeqcxet5s7t44vh8rt9mg", bird.RealtimePublishParams{
Event: "order-updated",
Channels: []string{"orders"},
Data: map[string]any{"id": 42, "status": "shipped"},
})use MessageBird\Bird;
use MessageBird\RealtimeOptions;
use MessageBird\Wire\Model\RealtimePublish;
$bird = new Bird(
getenv('BIRD_API_KEY') ?: '',
realtime: new RealtimeOptions(
key: getenv('BIRD_REALTIME_KEY') ?: '',
secret: getenv('BIRD_REALTIME_SECRET') ?: '',
),
);
$bird->realtime->publish('rap_01krdgeqcxet5s7t44vh8rt9mg', (new RealtimePublish())
->setEvent('order-updated')
->setChannels(['orders'])
->setData(['id' => 42, 'status' => 'shipped']));curl -X POST https://us1.platform.bird.com/v1/realtime/apps/rap_01krdgeqcxet5s7t44vh8rt9mg/events \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "X-Realtime-Key: $BIRD_REALTIME_KEY" \
-H "X-Realtime-Secret: $BIRD_REALTIME_SECRET" \
-H "Content-Type: application/json" \
-d '{
"event": "order-updated",
"channels": ["orders"],
"data": { "id": 42, "status": "shipped" }
}'orders पर order-updated से बाइंड किए गए क्लाइंट को यह इवेंट मिलता है। API सर्वर से प्रकाशित ऐसे नामों को अस्वीकार करता है जो प्रोटोकॉल प्रीफ़िक्स bird: या bird_internal: से शुरू होते हैं। क्लाइंट से आने वाले इवेंट के नाम client- से शुरू होने चाहिए।
हर फ़ील्ड सहित पूरा अनुरोध और प्रतिक्रिया इवेंट प्रकाशित करें संदर्भ में दिए गए हैं।
200 का क्या अर्थ है
Realtime एज के इवेंट स्वीकार करते ही प्रकाशन पूरा हो जाता है। डिलीवरी एसिंक्रोनस होती है और हर क्लाइंट के लिए अलग से कोई रसीद नहीं मिलती। डिलीवरी के दौरान डिस्कनेक्ट होने वाले क्लाइंट से इवेंट छूट सकता है, और दोबारा कनेक्ट होने पर Realtime उसे फिर से नहीं भेजता।
स्थायी स्थिति को अपने डेटाबेस में सहेजें। बदलावों की सूचना देने के लिए इवेंट का उपयोग करें, फिर दोबारा कनेक्ट होने के बाद क्लाइंट से मौजूदा स्थिति फिर से लोड करवाएँ।
कई चैनलों पर ब्रॉडकास्ट करना
एक ही कॉल से वही इवेंट अधिकतम 100 चैनलों पर भेजा जा सकता है। private-encrypted- चैनल अपने पब्लिश में अकेला चैनल होना चाहिए, क्योंकि हर एन्क्रिप्टेड चैनल अलग कुंजी का उपयोग करता है। API एन्क्रिप्टेड फ़ैन-आउट को E23000 के साथ अस्वीकार करता है। एन्क्रिप्टेड चैनल देखें।
await bird.realtime.publish(appId, {
event: "price-changed",
channels: ["ticker-btc", "ticker-eth", "ticker-sol"],
data: { at: "2026-07-31T09:00:00Z" },
});client.realtime.publish(
app_id,
event="price-changed",
channels=["ticker-btc", "ticker-eth", "ticker-sol"],
data={"at": "2026-07-31T09:00:00Z"},
)_, err := client.Realtime.Publish(context.Background(), appID, bird.RealtimePublishParams{
Event: "price-changed",
Channels: []string{"ticker-btc", "ticker-eth", "ticker-sol"},
Data: map[string]any{"at": "2026-07-31T09:00:00Z"},
})$bird->realtime->publish($appId, (new RealtimePublish())
->setEvent('price-changed')
->setChannels(['ticker-btc', 'ticker-eth', 'ticker-sol'])
->setData(['at' => '2026-07-31T09:00:00Z']));curl -X POST "https://us1.platform.bird.com/v1/realtime/apps/$APP_ID/events" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "X-Realtime-Key: $BIRD_REALTIME_KEY" \
-H "X-Realtime-Secret: $BIRD_REALTIME_SECRET" \
-H "Content-Type: application/json" \
-d '{
"event": "price-changed",
"channels": ["ticker-btc", "ticker-eth", "ticker-sol"],
"data": { "at": "2026-07-31T09:00:00Z" }
}'उपयोग की गणना में हर लक्ष्य चैनल एक अलग संदेश गिना जाता है। यह उदाहरण तीन संदेशों के रूप में गिना जाता है। इसलिए 10,000 प्रति-उपयोगकर्ता चैनलों पर एक पब्लिश 10,000 संदेशों के रूप में गिना जाता है।
असंबंधित इवेंट को बैच में भेजना
ब्रॉडकास्ट एक इवेंट को कई चैनलों पर भेजता है। बैच एक ही अनुरोध में अधिकतम 10 अलग-अलग इवेंट भेजता है, हर इवेंट एक चैनल पर। हर बैच आइटम एकवचन channel फ़ील्ड का उपयोग करता है।
await bird.realtime.publishBatch(appId, {
events: [
{ event: "order-updated", channel: "orders-42", data: { status: "shipped" } },
{ event: "stock-changed", channel: "inventory-99", data: { left: 3 } },
],
});client.realtime.publish_batch(
app_id,
events=[
{"event": "order-updated", "channel": "orders-42", "data": {"status": "shipped"}},
{"event": "stock-changed", "channel": "inventory-99", "data": {"left": 3}},
],
)_, err := client.Realtime.PublishBatch(context.Background(), appID, bird.RealtimePublishBatchParams{
Events: []bird.RealtimeBatchEventParams{
{Event: "order-updated", Channel: "orders-42", Data: map[string]any{"status": "shipped"}},
{Event: "stock-changed", Channel: "inventory-99", Data: map[string]any{"left": 3}},
},
})$bird->realtime->publishBatch($appId, (new RealtimeBatchPublish())
->setEvents([
(new RealtimeBatchEvent())->setEvent('order-updated')->setChannel('orders-42')->setData(['status' => 'shipped']),
(new RealtimeBatchEvent())->setEvent('stock-changed')->setChannel('inventory-99')->setData(['left' => 3]),
]));curl -X POST "https://us1.platform.bird.com/v1/realtime/apps/$APP_ID/batch-events" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "X-Realtime-Key: $BIRD_REALTIME_KEY" \
-H "X-Realtime-Secret: $BIRD_REALTIME_SECRET" \
-H "Content-Type: application/json" \
-d '{
"events": [
{ "event": "order-updated", "channel": "orders-42", "data": { "status": "shipped" } },
{ "event": "stock-changed", "channel": "inventory-99", "data": { "left": 3 } }
]
}'असंबंधित अपडेट को एक अनुरोध में जोड़ने के लिए बैच का उपयोग करें। उपयोग की गणना में हर इवेंट फिर भी अलग गिना जाता है, और एक बैच में अधिकतम 10 इवेंट हो सकते हैं। बैच पब्लिश करें देखें।
कार्रवाई करने वाले क्लाइंट को बाहर रखना
अगर किसी क्लाइंट ने अपनी कार्रवाई पहले ही स्थानीय रूप से लागू कर दी है, तो उसकी कनेक्शन ID भेजें, ताकि उससे होने वाला पब्लिश वही बदलाव दोबारा लागू न करे। एज केवल उसी कनेक्शन को छोड़ता है।
await bird.realtime.publish(appId, {
event: "message.created",
channels: ["presence-room-1"],
data: { body: "hello" },
exclude_connection_id: "26896.319537",
});client.realtime.publish(
app_id,
event="message.created",
channels=["presence-room-1"],
data={"body": "hello"},
exclude_connection_id="26896.319537",
)_, err := client.Realtime.Publish(context.Background(), appID, bird.RealtimePublishParams{
Event: "message.created",
Channels: []string{"presence-room-1"},
Data: map[string]any{"body": "hello"},
ExcludeConnectionID: "26896.319537",
})$bird->realtime->publish($appId, (new RealtimePublish())
->setEvent('message.created')
->setChannels(['presence-room-1'])
->setData(['body' => 'hello'])
->setExcludeConnectionId('26896.319537'));curl -X POST "https://us1.platform.bird.com/v1/realtime/apps/$APP_ID/events" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "X-Realtime-Key: $BIRD_REALTIME_KEY" \
-H "X-Realtime-Secret: $BIRD_REALTIME_SECRET" \
-H "Content-Type: application/json" \
-d '{
"event": "message.created",
"channels": ["presence-room-1"],
"data": { "body": "hello" },
"exclude_connection_id": "26896.319537"
}'क्लाइंट के मौजूदा कनेक्शन से ID पढ़ें और उसे उस अनुरोध में शामिल करें जो बदलाव शुरू करता है। दूसरे टैब अलग कनेक्शन का उपयोग करते हैं और उन्हें इवेंट फिर भी मिलता है।
पब्लिश करते समय चैनल की स्थिति पढ़ना
पब्लिश के समय हर लक्ष्य चैनल की स्थिति पाने और चैनल-स्थिति का अलग अनुरोध भेजने से बचने के लिए include का उपयोग करें:
const result = await bird.realtime.publish(appId, {
event: "order-updated",
channels: ["presence-lobby"],
data: { id: 42 },
include: ["member_count", "connection_count"],
});result = client.realtime.publish(
app_id,
event="order-updated",
channels=["presence-lobby"],
data={"id": 42},
include=["member_count", "connection_count"],
)result, err := client.Realtime.Publish(context.Background(), appID, bird.RealtimePublishParams{
Event: "order-updated",
Channels: []string{"presence-lobby"},
Data: map[string]any{"id": 42},
Include: []bird.RealtimeChannelInclude{bird.RealtimeIncludeMemberCount, bird.RealtimeIncludeConnectionCount},
})$result = $bird->realtime->publish($appId, (new RealtimePublish())
->setEvent('order-updated')
->setChannels(['presence-lobby'])
->setData(['id' => 42])
->setInclude(['member_count', 'connection_count']));curl -X POST "https://us1.platform.bird.com/v1/realtime/apps/$APP_ID/events" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "X-Realtime-Key: $BIRD_REALTIME_KEY" \
-H "X-Realtime-Secret: $BIRD_REALTIME_SECRET" \
-H "Content-Type: application/json" \
-d '{
"event": "order-updated",
"channels": ["presence-lobby"],
"data": { "id": 42 },
"include": ["member_count", "connection_count"]
}'member_count केवल प्रेज़ेंस चैनलों पर काम करता है। connection_count के लिए ऐप पर कनेक्शन गिनती चालू होनी चाहिए। इन एट्रिब्यूट का अनुरोध करने पर उपयोग में एक अतिरिक्त संदेश गिना जाता है।
सीमाएँ
| सीमा | मान |
|---|---|
| प्रति पब्लिश चैनल | 100 |
| प्रति बैच इवेंट | 10 |
| इवेंट पेलोड | सीरियलाइज़ करने के बाद 10 KB |
| चैनल का नाम | 164 वर्ण: अक्षर, अंक और _ - = @ , . ; |
| इवेंट का नाम | 200 वर्ण |
किसी भी सीमा से अधिक होने पर सत्यापन त्रुटि लौटती है। API अनुरोध को छोटा नहीं करता।
सुरक्षित रूप से फिर से प्रयास करना
डुप्लिकेट डिलीवरी से बचने के लिए उसी Idempotency-Key के साथ पब्लिश का फिर से प्रयास करें। TypeScript और Go SDK एक कुंजी बनाते हैं और स्वचालित फिर से प्रयासों के लिए उसी का दोबारा उपयोग करते हैं। यदि आपका ऐप्लिकेशन किसी अनुरोध का फिर से प्रयास करता है, तो अपनी कुंजी दें और उसी का दोबारा उपयोग करें। देखें Idempotency।
अगले चरण
- चैनल अधिकृत करना बताता है कि किसी क्लाइंट के सब्सक्राइब करने से पहले
private-याpresence-चैनल को क्या चाहिए। - Realtime अवलोकन चैनल, सदस्यों और कनेक्शनों को समझाता है, और बताता है कि उपयोग कहाँ दिखता है।
- इवेंट प्राप्तकर्ताओं को बाहर रखना कार्रवाई करने वाले क्लाइंट को उसका अपना बदलाव प्राप्त करने से रोकता है।
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।