Next.js માં Nylas Webhooks હેન્ડલ કરો
તમારા AI એજન્ટ પર એક ઈમેલ આવે છે. તમારી પાસે જવાબ આપવા માટે 10 સેકન્ડ છે.
જો તમે Nylas Agent Accounts નો ઉપયોગ કરો છો, તો message.created webhook તરત જ તમારા સર્વર પર આવે છે. Next.js માં, તમે આને એક જ રૂટ ફાઇલ દ્વારા હેન્ડલ કરી શકો છો.
તેને યોગ્ય રીતે કેવી રીતે બનાવવું તે અહીં છે.
ચેલેન્જ હેન્ડશેક (The Challenge Handshake)
જ્યારે તમે webhook બનાવો છો, ત્યારે Nylas challenge પેરામીટર સાથે GET રિક્વેસ્ટ મોકલે છે. તમારે રિસ્પોન્સ બોડીમાં તે જ ચોક્કસ વેલ્યુ પરત કરવી આવશ્યક છે.
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 નોટિફિકેશન
જ્યારે મેસેજ આવે છે, ત્યારે Nylas POST રિક્વેસ્ટ મોકલે છે. ભૂલો ટાળવા માટે આ ત્રણ નિયમોનું પાલન કરો:
- તરત જ સ્વીકારો (Acknowledge). તમારું હેવી લોજિક ચલાવતા પહેલા 200 સ્ટેટસ પરત કરો. જો તમારું LLM વધુ સમય લેશે, તો webhook ટાઈમ આઉટ થઈ જશે.
- સિગ્નેચર વેરિફાય કરો.
X-Nylas-Signatureહેડર અને તમારા webhook secret નો ઉપયોગ કરો. આ અનધિકૃત વપરાશકર્તાઓને તમારા એજન્ટને ટ્રિગર કરતા અટકાવશે. - raw body નો ઉપયોગ કરો. HMAC સિગ્નેચર વેરિફાય કરવા માટે, તમારે raw ટેક્સ્ટની જરૂર પડશે. પહેલા ટેક્સ્ટ વાંચો, તેને વેરિફાય કરો, અને પછી JSON ને parse કરો.
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 ઓછામાં ઓછી એક વાર (at-least-once) ડિલિવરી કરે છે. તમે એક જ મેસેજને બે વાર પ્રોસેસ ન કરો તે સુનિશ્ચિત કરવા માટે ડેટાબેઝ કન્સ્ટ્રેઇન્ટ અથવા Redis નો ઉપયોગ કરો.
• ટ્રંકેટેડ (truncated) પેલોડ્સને હેન્ડલ કરો. જો મેસેજ 1 MB થી વધુ હોય, તો બોડી કાઢી નાખવામાં આવે છે. સંપૂર્ણ કન્ટેન્ટ મેળવવા માટે હંમેશા API દ્વારા મેસેજ ફરીથી ફેચ કરો.
• ક્લીન કરેલ કન્ટેન્ટનો ઉપયોગ કરો. અસ્તવ્યસ્ત HTML ને બદલે માર્કડાઉન મેળવવા માટે message.created.cleaned નો ઉપયોગ કરો. આ તમારા LLM માટે વધુ સારું કામ કરે છે.
તમે તમારા webhook handlers માં ડુપ્લીકેશન કેવી રીતે હેન્ડલ કરો છો? શું તમે Redis અથવા ડેટાબેઝ કન્સ્ટ્રેઇન્ટનો ઉપયોગ કરો છો?
સ્ત્રોત: https://dev.to/qasim157/handle-messagecreated-webhooks-in-nextjs-4e80