# अपने एप्लिकेशन को ऑटोमेशन से कनेक्ट करें

जब आपके सिस्टम में कुछ होता है, जैसे ऑर्डर बनना या पेमेंट आना, तब एक एप्लिकेशन इवेंट भेजें। इवेंट एक रन शुरू कर सकता है, प्रतीक्षारत रन को जारी रख सकता है, या मिलते-जुलते कैंसिलेशन नियम वाले रन को रद्द कर सकता है। हर ऑटोमेशन के पास तीनों उपयोगों के लिए एक ही इवेंट URL होता है।

> Automations is in Early access. Your workspace permissions determine which actions you can perform.

अगर आप Automations नहीं खोल पा रहे या ड्राफ़्ट नहीं बना पा रहे, तो [वर्कस्पेस एक्सेस और एडिटिंग कंट्रोल](/docs/guides/automations/troubleshooting#automations-is-missing-from-the-dashboard) देखें।

## रन शुरू करने वाले इवेंट को कॉन्फ़िगर करें

1. **Event from your application** को ट्रिगर के रूप में चुनकर एक ऑटोमेशन बनाएँ।
2. **Event name** सेट करें, उदाहरण के लिए `order.created`। नाम केस-सेंसिटिव हैं और इनमें अक्षर, संख्याएँ, डॉट, अंडरस्कोर या हाइफ़न हो सकते हैं।
3. आपका एप्लिकेशन जो डेटा भेजता है उसके लिए **Event fields** परिभाषित करें। किसी ऑर्डर के लिए, `order_id` नाम का एक स्ट्रिंग फ़ील्ड जोड़ें। बाद के स्टेप इन फ़ील्ड्स का उपयोग कर सकते हैं।
4. ऑटोमेशन पब्लिश करें। सफलता स्क्रीन पर **How to start a run** दिखाई देगा, जिसमें इवेंट URL और एक रिक्वेस्ट उदाहरण शामिल है।

कनेक्शन विवरण दोबारा खोजने के लिए, ट्रिगर चुनें और क्विक एडिट में **How to connect your application** पर क्लिक करें। विस्तारित एडिटर कनेक्शन कंट्रोल दिखाता है।

## ड्राफ़्ट को सिम्युलेट करें या पब्लिश किया गया वर्शन चलाएँ

बिना मैसेज भेजे या डेटा बदले अपने ड्राफ़्ट को सिम्युलेट करने के लिए सैंपल डेटा के साथ **Preview workflow** का उपयोग करें। cURL कमांड चलाना, **Send event…** पर क्लिक करना, या **Start run** का उपयोग करना पब्लिश किए गए ऑटोमेशन को एक्ज़ीक्यूट करता है और वास्तविक कार्य कर सकता है। सेव किए गए और बिना सेव किए गए ड्राफ़्ट परिवर्तन उन रन पर लागू नहीं होते।

इवेंट भेजने से पहले ऑटोमेशन पब्लिश करें। अगर इसका कोई पब्लिश किया गया वर्शन नहीं है, तो रिक्वेस्ट तुरंत अस्वीकार हो जाती है; इवेंट को क्यू में नहीं रखा जाता या बाद के लिए सेव नहीं किया जाता। एडिटर के उदाहरण ड्राफ़्ट परिवर्तन दिखा सकते हैं, इसलिए उन पर निर्भर डेटा भेजने से पहले उन परिवर्तनों को पब्लिश करें।

## URL कॉपी करें और इवेंट भेजें

URL, हेडर और उदाहरण बॉडी वाला cURL कमांड पाने के लिए **Copy request** का उपयोग करें। उदाहरण वैल्यू को अपने एप्लिकेशन के डेटा से बदलें।

URL में वर्कस्पेस और ऑटोमेशन ID शामिल हैं:

```text
POST https://<your-regional-api-host>/v1/hooks/automations/<workspace-id>/<automation-id>
```

डैशबोर्ड से कॉपी किए गए पूरे URL का उपयोग करें। आपको `X-Workspace-Id` हेडर की ज़रूरत नहीं है। वर्तमान ऑथेंटिकेशन विकल्प **No authentication** है: इस URL वाला कोई भी व्यक्ति इवेंट भेज सकता है। इसे अपने सर्वर कॉन्फ़िगरेशन में रखें।

`order.created` के लिए कॉन्फ़िगर किए गए ऑटोमेशन के लिए, `AUTOMATION_EVENT_URL` को कॉपी किए गए URL पर सेट करें और भेजें:

```bash
curl --request POST "$AUTOMATION_EVENT_URL" \
  --header 'Content-Type: application/json' \
  --data '{
    "type": "order.created",
    "data": { "order_id": "order_123" }
  }'
```

`type` को कॉन्फ़िगर किए गए इवेंट नाम पर और `data` को इवेंट फ़ील्ड्स से मेल खाने वाले ऑब्जेक्ट पर सेट करें। आप `occurred_at` को RFC 3339 टाइमस्टैंप के रूप में भी दे सकते हैं; यह डिफ़ॉल्ट रूप से इवेंट के आने के समय पर सेट होता है।

`status: "queued"` के साथ `202 Accepted` रिस्पॉन्स पुष्टि करता है कि इवेंट क्यू में है। Bird इवेंट आइडेंटिफ़ायर जेनरेट करता है और इसे `event_id` के रूप में लौटाता है। एक्ज़ीक्यूशन देखने के लिए ऑटोमेशन का **Runs** टैब खोलें। क्यू स्वीकृति इस बात की पुष्टि नहीं करती कि इवेंट किसी ट्रिगर से मैच हुआ या कोई रन शुरू हुआ।

आप बिना टर्मिनल के उदाहरण सबमिट करने के लिए डैशबोर्ड में **Send event…** का भी उपयोग कर सकते हैं। यह एक वास्तविक इवेंट भेजता है।

## किसी इवेंट की प्रतीक्षा कर रहे रन को जारी रखें

वेटिंग स्टेप ट्रिगर के समान ऑटोमेशन URL का उपयोग करता है। इसका इवेंट नाम और `subject_key` पहचानते हैं कि क्या हुआ और किस रन को यह प्राप्त करना चाहिए।

1. **Automation settings** में, **Skip overlapping runs** और **Use a business key** सक्षम करें। **Business key** को ऐसी वैल्यू पर सेट करें जो ऑर्डर, इनवॉइस या अन्य ऑब्जेक्ट की पहचान करे। ऑर्डर उदाहरण के लिए, एक्सप्रेशन `trigger.data.data.order_id` का उपयोग करें।
2. **Wait for application event** जोड़ें और इसका इवेंट नाम, इवेंट फ़ील्ड्स और टाइमआउट कॉन्फ़िगर करें। उदाहरण के लिए, स्ट्रिंग `payment_id` फ़ील्ड के साथ `order.paid` की प्रतीक्षा करें।
3. पब्लिश करें, स्टार्टिंग इवेंट भेजें, और तब तक प्रतीक्षा करें जब तक इसका रन **Runs** में दिखाई न दे।
4. फ़ॉलो-अप इवेंट उसी URL पर भेजें, जिसमें `subject_key` रन की बिज़नेस की के बराबर हो:

```json
{
  "type": "order.paid",
  "subject_key": "order_123",
  "data": { "payment_id": "payment_456" }
}
```

`subject_key` बिज़नेस की वैल्यू है, जैसे `order_123`; यह इवेंट ID या रन ID नहीं है। वेटिंग स्टेप का विस्तारित कनेक्शन व्यू आपकी कॉन्फ़िगर की गई की के लिए मार्गदर्शन दिखाता है।

रन शुरू होने के बाद, वेटिंग स्टेप तक पहुँचने से पहले भी, एक मैचिंग इवेंट कैप्चर किया जा सकता है। मैचिंग रन मौजूद होने से पहले प्रोसेस किए गए इवेंट भविष्य के रन के लिए सेव नहीं किए जाते। फ़िल्टर वाला वेट तभी जारी रहता है जब इसके इवेंट फ़ील्ड्स और फ़िल्टर दोनों मैच हों। डेडलाइन से पहले कोई योग्य इवेंट प्रोसेस न होने पर रन अपना टाइमआउट पाथ लेता है।

**Automation settings** में कैंसलेशन नियम भी इसी URL का उपयोग करते हैं। कोई नियम ऑटोमेशन के सभी सक्रिय रन को, या `subject_key` से मैच करने वाले रन को लक्षित कर सकता है। किन रन को कैंसल करना है यह सीमित करने के लिए फ़िल्टर कॉन्फ़िगर करें। कैंसलेशन किसी ऐसी कार्रवाई को पूर्ववत नहीं कर सकता जो पहले हो चुकी है।

## पब्लिश किए गए वर्शन और रोके गए ऑटोमेशन

नए रन उस वर्शन का उपयोग करते हैं जो इवेंट प्रोसेस होते समय सक्रिय था। मौजूदा रन अपना मूल वर्शन रखते हैं, जिसमें उनके इवेंट फ़ील्ड्स और वेट कंडीशन शामिल हैं। बदला हुआ इवेंट फ़ॉर्मेट पब्लिश करने से पहले से शुरू हो चुके रन अपडेट नहीं होते।

पब्लिश किए गए ऑटोमेशन को रोकने से नए रन बंद हो जाते हैं। रोके जाने के दौरान भी इवेंट मौजूदा रन को जारी रख सकते हैं या कैंसल कर सकते हैं।

## डिलीवरी और रीट्राई संभालें

इवेंट एसिंक्रोनस रूप से प्रोसेस होते हैं और फिर से प्रयास किए जा सकते हैं या क्रम से बाहर प्रोसेस हो सकते हैं। फ़ॉलो-अप इवेंट भेजने से पहले स्टार्टिंग रन के मौजूद होने की प्रतीक्षा करें। किसी इवेंट का `occurred_at` प्रोसेसिंग क्रम को नियंत्रित नहीं करता, वेट को बढ़ाता नहीं, या टाइमआउट को रोकता नहीं।

रीट्राई सुरक्षा सीमित है। अगर रीट्राई रिकॉर्ड एक्सपायर हो जाते हैं या खो जाते हैं, तो इवेंट फिर से प्रोसेस हो सकता है, संभवतः किसी नए वर्शन या किसी अलग सक्रिय रन के विरुद्ध। अपने एप्लिकेशन को डुप्लिकेट इवेंट सहन करने के लिए डिज़ाइन करें।

रिट्राई सुरक्षा का उपयोग करने के लिए, पहले प्रयास पर एक `Idempotency-Key` दें, फिर रिट्राई के लिए उसी URL और अपरिवर्तित बॉडी के साथ इसे दोबारा उपयोग करें। हर नए अनुरोध के लिए एक नई की का उपयोग करें। रीप्ले वही `event_id` लौटाता है। [इडेम्पोटेंसी गाइड](/docs/guides/idempotency) सीमित रीप्ले विंडो और कॉन्फ़्लिक्ट प्रतिक्रियाओं की व्याख्या करती है।

## इवेंट की समस्या निवारण करें

- **रिक्वेस्ट 4xx लौटाती है:** रिस्पॉन्स की त्रुटि विवरण, URL, और आवश्यक `type` तथा ऑब्जेक्ट `data` फ़ील्ड्स जाँचें। `Content-Type: application/json` भेजें। पूरी रिक्वेस्ट बॉडी 25 KB (25,000 बाइट) के भीतर होनी चाहिए; बड़ी बॉडी `413` लौटाती हैं।
- **ऑटोमेशन पब्लिश नहीं किया गया है:** इवेंट भेजने से पहले इसे पब्लिश करें। अस्वीकृत इवेंट को रखा नहीं जाता; पब्लिश करने के बाद नई रिक्वेस्ट भेजें।
- **अनुरोध 202 लौटाता है लेकिन कोई रन शुरू नहीं होता:** जाँचें कि ऑटोमेशन सक्रिय है, इवेंट नाम उसके ट्रिगर से मेल खाता है, और डेटा प्रकाशित इवेंट फ़ील्ड से मेल खाता है। ओवरलैप सुरक्षा किसी अन्य रन के सक्रिय रहते हुए नया रन छोड़ सकती है। [मासिक रन सीमा](/docs/guides/automations/runs#early-access-run-allowance) भी जाँचें; सीमा पर छोड़े गए रन अगले महीने के लिए कतार में नहीं रखे जाते।
- **रन वेटिंग स्टेप पर रुका हुआ है:** इवेंट नाम, सटीक बिज़नेस की, डेटा फ़ील्ड्स, फ़िल्टर और टाइमआउट जाँचें। रन के मूल पब्लिश किए गए वर्शन का इवेंट फ़ॉर्मेट उपयोग करें।
- **रीट्राई कॉन्फ़्लिक्ट लौटाता है:** मूल की और अपरिवर्तित रिक्वेस्ट के साथ फिर से प्रयास करें। अगर आप कोई अलग इवेंट भेजना चाहते हैं, तो नई की उपयोग करें।

रिक्वेस्ट का एन्वेलप क्यूइंग से पहले जाँचा जाता है। इवेंट डेटा प्रोसेसिंग के दौरान ट्रिगर, वेट और कैंसलेशन नियमों के विरुद्ध जाँचा जाता है, इसलिए क्यू में रखा गया इवेंट इनमें से किसी से भी मैच न करने में विफल हो सकता है।

## अगले कदम

- अपना वर्कफ़्लो कॉन्फ़िगर और पब्लिश करने के लिए [**Automations** खोलें](https://bird.com/dashboard/w/automations)।
- अपने एप्लिकेशन में [आइडेम्पोटेंट रीट्राई संभालें](/docs/guides/idempotency)।
- चल रहे वर्कफ़्लो में [किसी इवेंट की प्रतीक्षा करें](/docs/guides/automations/waits)।
- [Automations गाइड ब्राउज़ करें](/docs/guides/automations)।

## Related resources

- [Preview your first automation](/docs/get-started/automations) (docs)
