Next.js ನಲ್ಲಿ Nylas Webhooks ಅನ್ನು ನಿರ್ವಹಿಸಿ
ನಿಮ್ಮ AI ಏಜೆಂಟ್ಗೆ ಒಂದು ಇಮೇಲ್ ಬರುತ್ತದೆ. ಪ್ರತಿಕ್ರಿಯಿಸಲು ನಿಮ್ಮ ಬಳಿ ಕೇವಲ 10 ಸೆಕೆಂಡುಗಳ ಸಮಯವಿದೆ.
ನೀವು Nylas Agent Accounts ಬಳಸುತ್ತಿದ್ದರೆ, message.created webhook ತಕ್ಷಣವೇ ನಿಮ್ಮ ಸರ್ವರ್ಗೆ ತಲುಪುತ್ತದೆ. Next.js ನಲ್ಲಿ, ನೀವು ಇದನ್ನು ಕೇವಲ ಒಂದು route ಫೈಲ್ ಮೂಲಕ ನಿರ್ವಹಿಸಬಹುದು.
ಇದನ್ನು ಸರಿಯಾಗಿ ನಿರ್ಮಿಸುವುದು ಹೇಗೆ ಎಂಬುದು ಇಲ್ಲಿದೆ.
ಚಾಲೆಂಜ್ ಹ್ಯಾಂಡ್ಶೇಕ್ (The Challenge Handshake)
ನೀವು webhook ಅನ್ನು ರಚಿಸಿದಾಗ, Nylas ಒಂದು challenge ಪ್ಯಾರಾಮೀಟರ್ನೊಂದಿಗೆ GET ರಿಕ್ವೆಸ್ಟ್ ಅನ್ನು ಕಳುಹಿಸುತ್ತದೆ. ನೀವು ರೆಸ್ಪಾನ್ಸ್ ಬಾಡಿಯಲ್ಲಿ (response body) ನಿಖರವಾದ ಮೌಲ್ಯವನ್ನು ಹಿಂತಿರುಗಿಸಬೇಕು.
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 });
}
POST ನೋಟಿಫಿಕೇಶನ್ (The POST Notification)
ಸಂದೇಶ ಬಂದಾಗ, Nylas ಒಂದು POST ರಿಕ್ವೆಸ್ಟ್ ಅನ್ನು ಕಳುಹಿಸುತ್ತದೆ. ದೋಷಗಳನ್ನು ತಪ್ಪಿಸಲು ಈ ಮೂರು ನಿಯಮಗಳನ್ನು ಅನುಸರಿಸಿ:
- ತಕ್ಷಣವೇ ಅಕ್ನಾಲೆಡ್ಜ್ ಮಾಡಿ. ನಿಮ್ಮ ಭಾರೀ ಲಾಜಿಕ್ (heavy logic) ಅನ್ನು ರನ್ ಮಾಡುವ ಮೊದಲು 200 status ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ. ನಿಮ್ಮ LLM ಹೆಚ್ಚು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುತ್ತಿದ್ದರೆ, webhook ಟೈಮ್ ಔಟ್ ಆಗಬಹುದು.
- ಸಹಿಗಳನ್ನು (signatures) ಪರಿಶೀಲಿಸಿ.
X-Nylas-Signatureಹೆಡರ್ ಮತ್ತು ನಿಮ್ಮ webhook secret ಅನ್ನು ಬಳಸಿ. ಇದು ಅನಧಿಕೃತ ಬಳಕೆದಾರರು ನಿಮ್ಮ ಏಜೆಂಟ್ ಅನ್ನು ಟ್ರಿಗ್ಗರ್ ಮಾಡದಂತೆ ತಡೆಯುತ್ತದೆ. - raw body ಅನ್ನು ಬಳಸಿ. HMAC ಸಹಿಯನ್ನು ಪರಿಶೀಲಿಸಲು, ನಿಮಗೆ raw text ಅಗತ್ಯವಿದೆ. ಮೊದಲು ಪಠ್ಯವನ್ನು ಓದಿ, ಅದನ್ನು ಪರಿಶೀಲಿಸಿ, ನಂತರ JSON ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡಿ.
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)
• ಸಂದೇಶಗಳ ಪುನರಾವರ್ತನೆಯನ್ನು ತಪ್ಪಿಸಿ. Webhooks ಕನಿಷ್ಠ ಒಂದು ಬಾರಿ ಸಂದೇಶವನ್ನು ತಲುಪಿಸುತ್ತವೆ. ಒಂದೇ ಸಂದೇಶವನ್ನು ಎರಡು ಬಾರಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸದಂತೆ ನೋಡಿಕೊಳ್ಳಲು ಡೇಟಾಬೇಸ್ ಕನ್ಸ್ಟ್ರೇಂಟ್ ಅಥವಾ Redis ಅನ್ನು ಬಳಸಿ.
• ಕತ್ತರಿಸಲ್ಪಟ್ಟ ಪೇಲೋಡ್ಗಳನ್ನು ನಿರ್ವಹಿಸಿ. ಸಂದೇಶವು 1 MB ಗಿಂತ ಹೆಚ್ಚಿದ್ದರೆ, ಅದರ ಬಾಡಿ ಕತ್ತರಿಸಲ್ಪಡುತ್ತದೆ. ಪೂರ್ಣ ವಿಷಯವನ್ನು ಪಡೆಯಲು ಯಾವಾಗಲೂ API ಮೂಲಕ ಸಂದೇಶವನ್ನು ಮರು-ಪಡೆಯಿರಿ.
• ಕ್ಲೀನ್ ಮಾಡಲಾದ ವಿಷಯವನ್ನು ಬಳಸಿ. ಗೊಂದಲಮಯ HTML ಬದಲಿಗೆ ಮಾರ್ಕ್ಡೌನ್ ಪಡೆಯಲು message.created.cleaned ಬಳಸಿ. ಇದು ನಿಮ್ಮ LLM ಗೆ ಉತ್ತಮವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ.
ನಿಮ್ಮ ವೆಬ್ಹುಕ್ ಹ್ಯಾಂಡ್ಲರ್ಗಳಲ್ಲಿ ಡ್ಯೂಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನೀವು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತೀರಿ? ನೀವು Redis ಅಥವಾ ಡೇಟಾಬೇಸ್ ಕನ್ಸ್ಟ್ರೇಂಟ್ ಅನ್ನು ಬಳಸುತ್ತೀರಾ?
ಮೂಲ: https://dev.to/qasim157/handle-messagecreated-webhooks-in-nextjs-4e80