इवेंट पब्लिश करना
अपने सर्वर से पब्लिश करने के लिए अपनी Bird API key और Realtime ऐप की key और secret का उपयोग करें। ऐप secret को कभी भी क्लाइंट कोड में न भेजें। सब्सक्राइब्ड क्लाइंट को अल्पकालिक सिग्नल आदान-प्रदान करने देने के लिए, private या presence चैनलों पर क्लाइंट इवेंट का उपयोग करें।
एक न्यूनतम पब्लिश
एक इवेंट के लिए एक नाम और कम से कम एक चैनल आवश्यक है। इसका वैकल्पिक पेलोड किसी भी JSON object, array, या scalar हो सकता है।
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 edge इवेंट स्वीकार कर लेता है। डिलीवरी असिंक्रोनस होती है और इसमें प्रति-क्लाइंट पुष्टि नहीं होती। डिलीवरी के दौरान डिस्कनेक्ट होने वाला क्लाइंट इवेंट से चूक सकता है, और Realtime पुनः कनेक्ट होने के बाद इसे दोबारा नहीं भेजता।
स्थायी स्थिति अपने डेटाबेस में संग्रहित करें। परिवर्तनों की सूचना देने के लिए इवेंट का उपयोग करें, फिर पुनः कनेक्ट होने के बाद क्लाइंट को वर्तमान स्थिति रीलोड करने दें।
कई चैनलों पर ब्रॉडकास्ट करना
एक कॉल एक ही इवेंट को 100 चैनलों तक भेज सकती है। private-encrypted- चैनल को अपने पब्लिश में एकमात्र चैनल होना चाहिए क्योंकि हर एन्क्रिप्टेड चैनल अलग key का उपयोग करता है। 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 अलग-अलग इवेंट भेजता है, प्रत्येक एक चैनल पर।
await bird.realtime.publishBatch(appId, {
events: [
{ event: "order-updated", channels: ["orders-42"], data: { status: "shipped" } },
{ event: "stock-changed", channels: ["inventory-99"], data: { left: 3 } },
],
});client.realtime.publish_batch(
app_id,
events=[
{"event": "order-updated", "channels": ["orders-42"], "data": {"status": "shipped"}},
{"event": "stock-changed", "channels": ["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 इवेंट स्वीकार करता है। बैच पब्लिश करें देखें।
कार्रवाई करने वाले क्लाइंट को बाहर रखना
यदि किसी क्लाइंट ने अपनी कार्रवाई पहले से लोकल रूप से लागू कर दी है, तो परिणामी पब्लिश को वही परिवर्तन दोबारा लागू करने से रोकने के लिए उसका connection ID पास करें। Edge केवल उस कनेक्शन को छोड़ता है।
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 केवल presence चैनलों पर काम करता है। connection_count के लिए ऐप पर connection counting सक्षम होना आवश्यक है। इन एट्रिब्यूट का अनुरोध करना उपयोग में एक अतिरिक्त संदेश के रूप में गिना जाता है।
सीमाएँ
| सीमा | मान |
|---|---|
| प्रति पब्लिश चैनल | 100 |
| प्रति बैच इवेंट | 10 |
| इवेंट पेलोड | 10 KB सीरियलाइज़्ड |
| चैनल नाम | 164 कैरेक्टर, अक्षर, अंक, और _ - = @ , . ; |
| इवेंट नाम | 200 कैरेक्टर |
किसी भी सीमा से अधिक होने पर वैलिडेशन त्रुटि मिलती है। API अनुरोध को ट्रंकेट नहीं करता।
सुरक्षित रूप से फिर से प्रयास करना
डुप्लिकेट डिलीवरी से बचने के लिए उसी Idempotency-Key के साथ पब्लिश फिर से प्रयास करें। TypeScript और Go SDK एक key जेनरेट करते हैं और स्वचालित रीट्राई के लिए उसे पुनः उपयोग करते हैं। यदि आपका एप्लिकेशन अनुरोध फिर से प्रयास करता है, तो अपनी खुद की key प्रदान करें और पुनः उपयोग करें। Idempotency देखें।
अगले कदम
- चैनल अधिकृत करना वह है जो किसी private- या presence- चैनल को क्लाइंट के सब्सक्राइब करने से पहले चाहिए।
- Realtime अवलोकन चैनल, सदस्य, और कनेक्शन समझाता है, और बताता है कि उपयोग कहाँ दिखता है।
- इवेंट प्राप्तकर्ताओं को बाहर रखना कार्रवाई करने वाले क्लाइंट को उसका अपना परिवर्तन प्राप्त करने से रोकता है।
संबंधित संसाधन
इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।
क्षमता जानेंRealtimeलर्निंग पाथ फ़ॉलो करेंBuild your first integrationइम्प्लीमेंटेशन गाइडSend your first realtime event
अभ्यास करें और इम्प्लीमेंटेशन ब्रीफ़ पाएँ