> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Inngest

> Dodo Payments घटनाओं के आधार पर Inngest में सर्वर रहित कार्य और बैकग्राउंड जॉब्स को ट्रिगर करें।

## परिचय

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

<Info>
  इस एकीकरण के लिए आपके फ़ंक्शन कॉन्फ़िगरेशन से Inngest webhook URL की आवश्यकता होती है।
</Info>

## प्रारंभ करना

<Steps>
  <Step title="Open the Webhook Section">
    अपने Dodo Payments डैशबोर्ड में, <b>Webhooks → + Add Endpoint</b> पर जाएं और इंटीग्रेशन ड्रॉपडाउन का विस्तार करें।

    <Frame>
      <img src="https://mintcdn.com/dodopayments/slbAEdrLLwKHfaRf/images/integrations/inngest.png?fit=max&auto=format&n=slbAEdrLLwKHfaRf&q=85&s=b160678c00ceed38439160b4b253c8f3" alt="Add Endpoint and integrations dropdown" style={{ maxHeight: '500px', width: 'auto' }} width="1646" height="944" data-path="images/integrations/inngest.png" />
    </Frame>
  </Step>

  <Step title="Select Inngest">
    <b>Inngest</b> integration कार्ड चुनें।
  </Step>

  <Step title="Create Inngest Function">
    In Inngest में, एक नया फ़ंक्शन बनाएं और फ़ंक्शन कॉन्फ़िगरेशन से webhook URL कॉपी करें।
  </Step>

  <Step title="Paste Webhook URL">
    Inngest webhook URL को endpoint configuration में पेस्ट करें।
  </Step>

  <Step title="Configure Transformation">
    इवेंट्स को आपके Inngest फ़ंक्शन के लिए फॉर्मेट करने हेतु transformation कोड संपादित करें।
  </Step>

  <Step title="Test & Create">
    नमूना payloads के साथ परीक्षण करें और <b>Create</b> पर क्लिक करके integration को सक्रिय करें।
  </Step>

  <Step title="Done!">
    🎉 भुगतान इवेंट अब आपके Inngest फ़ंक्शन्स को स्वतः ट्रिगर करेंगे।
  </Step>
</Steps>

## रूपांतरण कोड उदाहरण

### बुनियादी घटना पेलोड

```javascript basic_event.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      name: "payment.succeeded",
      data: {
        payment_id: p.payment_id,
        amount: (p.total_amount / 100).toFixed(2),
        currency: p.currency || "USD",
        customer_email: p.customer.email,
        customer_name: p.customer.name,
        payment_method: p.payment_method || "unknown"
      },
      user: {
        email: p.customer.email
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}
```

### सदस्यता घटना हैंडलर

```javascript subscription_event.js icon="js" expandable theme={null}
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        name: "subscription.started",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          customer_name: s.customer.name,
          product_id: s.product_id,
          amount: (s.recurring_pre_tax_amount / 100).toFixed(2),
          frequency: s.payment_frequency_interval,
          next_billing: s.next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        name: "subscription.cancelled",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          cancelled_at: s.cancelled_at,
          cancel_at_next_billing: s.cancel_at_next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
  }
  return webhook;
}
```

### विवाद घटना हैंडलर

```javascript dispute_event.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    webhook.payload = {
      name: webhook.eventType,
      data: {
        dispute_id: d.dispute_id,
        payment_id: d.payment_id,
        amount: (d.amount / 100).toFixed(2),
        status: d.dispute_status,
        stage: d.dispute_stage,
        remarks: d.remarks || "",
        urgent: webhook.eventType === "dispute.opened"
      },
      user: {
        email: d.customer?.email || "unknown"
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}
```

## सामान्य Inngest उपयोग के मामले

<AccordionGroup>
  <Accordion title="Payment Processing">
    * पुष्टि ईमेल भेजें
    * ग्राहक रिकॉर्ड अपडेट करें
    * रिफंड प्रोसेस करें
    * इनवॉइस जनरेट करें
    * इन्वेंटरी अपडेट करें
  </Accordion>

  <Accordion title="Subscription Management">
    * नए सब्सक्राइबर्स का स्वागत करें
    * रद्दीकरण प्रोसेस करें
    * नवीकरण रिमाइंडर भेजें
    * बिलिंग साइकिल अपडेट करें
    * विफल भुगतान संभालें
  </Accordion>

  <Accordion title="Analytics & Reporting">
    * राजस्व मेट्रिक्स अपडेट करें
    * ग्राहक व्यवहार ट्रैक करें
    * रिपोर्ट जनरेट करें
    * डेटा को एनालिटिक्स प्लेटफ़ॉर्म से सिंक करें
    * चर्न दरें गणना करें
  </Accordion>
</AccordionGroup>

## सुझाव

* बेहतर कार्य संगठन के लिए वर्णनात्मक घटना नामों का उपयोग करें
* कार्य निष्पादन के लिए उपयोगकर्ता संदर्भ शामिल करें
* घटना क्रम के लिए उचित समय मुहैया करें
* घटनाओं के बीच डेटा को लगातार संरचना करें
* Inngest की पुनः प्रयास और त्रुटि हैंडलिंग सुविधाओं का उपयोग करें

## समस्या निवारण

<AccordionGroup>
  <Accordion title="Functions not triggering">
    * वेबहोॉक URL सही और सक्रिय है इसकी जाँच करें
    * सुनिश्चित करें Inngest फ़ंक्शन डिप्लॉय और सक्रिय है
    * सुनिश्चित करें इवेंट नाम फ़ंक्शन ट्रिगर्स से मेल खाते हैं
    * त्रुटियों के लिए Inngest फ़ंक्शन लॉग की समीक्षा करें
  </Accordion>

  <Accordion title="Data not received correctly">
    * payload संरचना Inngest की अपेक्षाओं से मेल खाती है इसकी जाँच करें
    * सुनिश्चित करें इवेंट नाम सही ढंग से फॉर्मेट किए गए हैं
    * सुनिश्चित करें सभी आवश्यक फ़ील्ड शामिल हैं
    * Inngest के webhook परीक्षण उपकरण के साथ परीक्षण करें
  </Accordion>
</AccordionGroup>
