Channel orchestration

प्रीव्यू में

हमारे डिफ़ॉल्ट से शुरू करें. सिर्फ़ उतना ही override करें जितनी ज़रूरत हो.

इसमें सेट अप करें:
Cursor

Channel उपलब्धता, sender नियम, और नियम-कानून हर देश में अलग होते हैं, और उन्हें सही करना वर्षों का काम है। Bird इसे प्रति-देश base कॉन्फ़िगरेशन के रूप में देता है: कौन-से channel कहाँ पहुँचते हैं, कौन-से sender की अनुमति है, और समझदार code डिफ़ॉल्ट। आपकी सेटिंग्स इसके ऊपर layer होती हैं। आप एक देश के लिए एक चीज़ बदलते हैं; जिसे आप नहीं छूते वह नीचे वाले layer तक fall through हो जाता है। यही है प्रति-देश रूटिंग एक फ़र्स्ट-क्लास API resource के रूप में — वह नियंत्रण जो ज़्यादातर verification API नहीं देते।

verify.ts
200 · pending
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

// Send the code, then check it by recipient.
await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
}).safe();

const { data } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: userInput,
}).safe();

आप Bird के डिफ़ॉल्ट inherit करते हैं, फिर उन पर आगे बनाते हैं।

Bird Verify API पर हर verification अपनी सेटिंग्स एक cascade के ज़रिए resolve करता है। सबसे नीचे एक प्रति-देश base है जिसे Bird वर्षों तक email और SMS चलाने के अनुभव से मेंटेन करता है — तो कुछ भी कॉन्फ़िगर करने से पहले, हर देश में एक verification पहले से ही समझदारी से रूट होता है। आपका कॉन्फ़िगरेशन और प्रति-देश override इसके ऊपर layer होते हैं, और एक प्रति-request option एक अकेली call को ट्यून कर सकता है। आप कभी खाली स्लेट से शुरू नहीं करते, और आप सिर्फ़ उन्हीं निर्णयों के मालिक होते हैं जो आप वाकई लेना चाहते हैं।

value cascade।

सबसे ऊपर वाला tier जो कोई value सेट करता है वह जीतता है; जो कुछ आप unset छोड़ते हैं वह नीचे वाले tier तक fall through हो जाता है।

  1. 01

    प्रति-request options।

    create call पर मौजूद fields (code length, channel preference, locale) उस एक verification के लिए जीतते हैं। सबसे हल्का, सबसे लोकल override।

  2. 02

    आपके प्रति-देश overrides।

    एक देश के लिए channel क्रम या sender बदलें। एक override merge होता है: यह सिर्फ़ उन fields को छूता है जो आप सेट करते हैं, और उस देश का बाकी हिस्सा अब भी नीचे से inherit करता है।

  3. 03

    आपके कॉन्फ़िगरेशन डिफ़ॉल्ट।

    आपका ऐप-भर का plan और code नियम — channel क्रम, code length, TTL, और attempts जो आप हर जगह चाहते हैं जहाँ आपने देश override सेट नहीं किया।

  4. 04

    Bird का प्रति-देश base।

    सबसे निचला layer: Bird के अपने प्रति-देश डिफ़ॉल्ट, जो email और SMS को बड़े पैमाने पर चलाने के अनुभव से लिए गए हैं। जो कुछ आप unset छोड़ते हैं वह इस तक fall through हो जाता है, इसलिए एक verification हमेशा एक समझदार plan में resolve होता है।

एक देश override करें, बाकी inherit करें।

अपना plan एक बार सेट करें, फिर सिर्फ़ उन्हीं देशों को छुएँ जिन्हें कुछ अलग चाहिए। यहाँ Brazil पहले WhatsApp से शुरू होता है, फिर SMS; बाकी हर देश आपके डिफ़ॉल्ट और Bird के base तक fall through होता रहता है।

orchestration.ts
200
// Your app-wide default plan.
await bird.verify.verifications.configurations.update("vfc_login", {
  channels: [
    { channel: "email", state: "enabled" },
    { channel: "sms", state: "enabled" },
  ],
}).safe();

// Override one country; the rest inherits.
await bird.verify.verifications.configurations.countries.upsert("vfc_login", "BR", {
  channels: [
    { channel: "whatsapp", state: "enabled" },
    { channel: "sms", state: "enabled" },
  ],
}).safe();

एक verification किसमें resolve होता है।

इस कॉन्फ़िगरेशन के तहत एक ब्राज़ीली नंबर cascade के ज़रिए resolve होता है। BR override पहले WhatsApp फिर SMS का क्रम तय करता है, दोनों उपलब्ध हैं, और verification उस क्रमबद्ध plan की रिपोर्ट करता है जिसे वह उपयोग करेगा, अपनी typed vrf_ id के साथ।

resolved.ts
200
const { data } = await bird.verify.verifications.create({
  configuration_id: "vfc_login",
  to: { phone_number: "+5511998765432" }, // Brazil
}).safe();

// Resolved through the cascade + availability/kill-switch ceilings:
// {
//   id:           "vrf_01k2m9q8e7fh3v0b7m4d2a9xzt",
//   status:       "pending",
//   channels:     [{ channel: "whatsapp" }, { channel: "sms" }],
//   last_channel: "whatsapp"
// }

cascade के ऊपर दो सीलिंग बैठती हैं।

cascade डिफ़ॉल्ट तय करता है। दो gate तय करते हैं कि क्या अनुमति है — वे resolved plan को cap करते हैं, न कि ऐसी value देते हैं जो fall through हों:

प्रति-देश उपलब्धता. आप सिर्फ़ वही channel enable कर सकते हैं जो Bird किसी देश में वाकई ऑफ़र करता है। जिसे हम वहाँ सपोर्ट नहीं करते उसे enable करना no-op है, चुपचाप विफल होना नहीं — उपलब्धता एक intersection है, कभी override नहीं।

ग्लोबल kill-switch. जब किसी provider के साथ कोई incident होता है, तो Bird एक channel को हर जगह एक साथ खींच सकता है। आपका कॉन्फ़िगरेशन नहीं छुआ जाता; resolved plan बस अगले channel पर fall back हो जाता है, फिर switch साफ़ होने पर बहाल हो जाता है।

रूटिंग जो आप सेट करते हैं, कोई ticket नहीं जो आप फ़ाइल करते हैं।

हर verification के लिए resolved, response पर लौटाया गया।

  1. 01

    प्रति-देश रूट, नंबर के हिसाब से।

    देश recipient के E.164 नंबर से निकाला जाता है — आप इसे पास नहीं करते। किसी देश के लिए रूट सेट करें और यह वहाँ का क्रम और sender override कर देता है।

  2. 02

    channel चालू और बंद करें।

    हर channel अपने साथ एक enable/disable स्टेट रखता है, इसलिए आप किसी देश के लिए एक को बंद कर सकते हैं बिना plan में उसकी जगह खोए।

  3. 03

    resolved plan response पर होता है।

    हर verification उन क्रमबद्ध channels की रिपोर्ट करता है जिनमें वह resolve हुआ, इसलिए cascade ने जो तय किया वह कभी रहस्य नहीं रहता।

  4. 04

    Automatic failover रोल आउट हो रहा है।

    plan के ज़रिए delivery-आधारित आगे बढ़ना (जब एक channel न पहुँचे तो अगला आज़माना) delivery status आने के साथ रोल आउट हो रहा है। plan आज ही resolve होकर लौटाया जाता है।

Channel orchestration FAQ

कॉन्फ़िगरेशन cascade क्या है?+
यह वह तरीका है जिससे एक verification की सेटिंग्स resolve होती हैं: प्रति-request options, फिर आपके प्रति-देश overrides, फिर आपके कॉन्फ़िगरेशन डिफ़ॉल्ट, फिर Bird का प्रति-देश base। सबसे ऊपर वाला tier जो कोई value सेट करता है वह जीतता है, और जो कुछ आप unset छोड़ते हैं वह नीचे वाले tier तक fall through हो जाता है — इसलिए आप सिर्फ़ वही कॉन्फ़िगर करते हैं जो आप बदलना चाहते हैं।
Bird का प्रति-देश base मुझे क्या देता है?+
बिना किसी सेटअप के हर देश में एक समझदार शुरुआती बिंदु: कौन-से channel आज़माने लायक हैं, कौन-से sender की अनुमति है, और वाजिब code डिफ़ॉल्ट, जिन्हें Bird वर्षों तक email और SMS चलाने के अनुभव से मेंटेन करता है। आप इसे फिर से खोजने के बजाय इसके ऊपर बनाते हैं।
क्या एक प्रति-देश override पूरा plan बदल देता है?+
नहीं — यह merge होता है। आप उन fields को सेट करते हैं जो उस देश के लिए अलग हैं और बाकी अब भी आपके कॉन्फ़िगरेशन और Bird के base से inherit होता है, इसलिए एक override पूरे re-specification के बजाय एक छोटा, लक्षित बदलाव है।
क्या मैं ऐसा channel enable कर सकता हूँ जो Bird किसी देश में ऑफ़र नहीं करता?+
नहीं। प्रति-देश उपलब्धता एक सीलिंग है, डिफ़ॉल्ट नहीं: आप सिर्फ़ वही enable कर सकते हैं जो Bird वहाँ सपोर्ट करता है। किसी अनुपलब्ध channel को enable करना चुपचाप विफल होने के बजाय no-op है, इसलिए एक plan कभी ऐसे channel का वादा नहीं कर सकता जो वाकई भेज न सके।
देश कैसे तय होता है?+
recipient के E.164 फ़ोन नंबर से, resolve के समय। आप कोई देश पास नहीं करते; Bird इसे निकालता है और मिलती-जुलती रूट लागू करता है। Email देश-स्वतंत्र है।
मेरे यूज़र code किससे आया देखते हैं?+
Authifly, Bird का verification ब्रांड। यह हर उस code पर पहचान है जो आपके यूज़र पाते हैं: email otp@verify.authifly.com या आपके अपने verified डोमेन से आता है, और SMS और WhatsApp Authifly-ब्रांडेड होते हैं। authifly.com एक सार्वजनिक पेज है जो recipient को भरोसा दिलाता है कि Authifly किसी व्यवसाय की ओर से वैध one-time code भेजता है। Bird वह प्लेटफ़ॉर्म है जिस पर आप बनाते हैं; Authifly वह है जो recipient देखता है।

वह प्रति-देश नियंत्रण जो कोई और verification API नहीं देता।

Orchestration, Bird Verify की एक क्षमता है: channel, code, और limits इसके साथ आते हैं, उन्हीं दो endpoints पर।

एक चैनल से शुरुआत करें।
तैयार होने पर बाकी जोड़ें।

एक test API key तुरंत आपकी है। जब आप payment method जोड़ते हैं और sender verify करते हैं, तब production अनलॉक हो जाता है।

Claude Code, Cursor या Codex इस्तेमाल कर रहे हैं? एक setup prompt कॉपी करें और आपका agent आपके लिए Bird CLI और skills इंस्टॉल कर देगा। अपना चुनें:

Cursor