Next.js मध्ये Nylas Webhooks हाताळा

तुमच्या AI agent कडे एक ईमेल येतो. प्रतिसाद देण्यासाठी तुमच्याकडे फक्त १० सेकंद आहेत.

जर तुम्ही Nylas Agent Accounts वापरत असाल, तर message.created webhook तुमच्या सर्व्हरवर त्वरित येतो. Next.js मध्ये, तुम्ही एकाच route फाईलद्वारे हे हाताळू शकता.

ते योग्यरित्या कसे तयार करायचे ते खाली दिले आहे.

चॅलेंज हँडशेक (The Challenge Handshake)

जेव्हा तुम्ही webhook तयार करता, तेव्हा Nylas एक challenge पॅरामीटरसह GET request पाठवते. तुम्हाला response body मध्ये तोच अचूक व्हॅल्यू (value) परत करणे आवश्यक आहे.

JSON वापरू नका. कोट्स (quotes) जोडू नका. फक्त 'bare response' वापरा. जर तुम्ही यात अपयशी ठरलात, तर webhook काम करणार नाही.

Example GET handler:

export async function GET(req: NextRequest) {
  const challenge = req.nextUrl.searchParams.get("challenge");
  return new Response(challenge ?? "", { status: 200 });
}

द पोस्ट नोटिफिकेशन (The POST Notification)

जेव्हा एखादा मेसेज येतो, तेव्हा Nylas एक POST request पाठवते. त्रुटी टाळण्यासाठी या तीन नियमांचे पालन करा:

Example POST handler:

export async function POST(req: NextRequest) {
  const raw = await req.text();
  const signature = req.headers.get("x-nylas-signature") ?? "";

  const expected = crypto
    .createHmac("sha256", process.env.NYLAS_WEBHOOK_SECRET!)
    .update(raw, "utf8")
    .digest("hex");

  const valid =
    signature.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));

  if (!valid) {
    return new Response("invalid signature", { status: 401 });
  }

  const payload = JSON.parse(raw);
  const { object } = payload.data;

  processMessage(object.grant_id, object.id).catch(console.error);

  return NextResponse.json({ ok: true }, { status: 200 });
}

प्रोडक्शन टिप्स (Production Tips)

• संदेशांमधील पुनरावृत्ती (Deduplication) टाळा. वेबहुक्स 'at-least-once' डिलिव्हरी करतात. एकच संदेश दोनदा प्रोसेस होणार नाही याची खात्री करण्यासाठी डेटाबेस कन्स्ट्रेंट (database constraint) किंवा Redis वापरा. • कापलेले (truncated) पेलोड हाताळा. जर संदेश १ MB पेक्षा जास्त असेल, तर त्याचा मुख्य भाग (body) काढून टाकला जातो. पूर्ण मजकूर मिळवण्यासाठी नेहमी API द्वारे संदेश पुन्हा मिळवा (re-fetch). • स्वच्छ (cleaned) मजकूर वापरा. विस्कळीत HTML ऐवजी मार्कडाउन मिळवण्यासाठी message.created.cleaned वापरा. हे तुमच्या LLM साठी अधिक प्रभावी ठरते.

तुम्ही तुमच्या वेबहुक हँडलर्समध्ये ड्युप्लिकेशन कसे हाताळता? तुम्ही Redis वापरता की डेटाबेस कन्स्ट्रेंट?

स्रोत: https://dev.to/qasim157/handle-messagecreated-webhooks-in-nextjs-4e80