𝗛𝗮𝗻𝗱𝗹𝗲 𝗡𝘆𝗹𝗮𝘀 𝗪𝗲𝗯𝗵𝗼𝗼𝗸𝘀 𝗶𝗻 𝗡𝗲𝘅𝘁.𝗷𝘀

Barua pepe inafika kwenye AI agent wako. Una sekunde 10 za kuitikia.

Ukitumia Nylas Agent Accounts, webhook ya message.created inafika kwenye seva yako mara moja. Katika Next.js, unaweza kushughulikia hii kwa kutumia faili moja la route.

Hivi ndivyo unavyoweza kuijenga kwa usahihi.

𝗧𝗵𝗲 𝗖𝗵𝗮𝗹𝗹𝗲𝗻𝗴𝗲 𝗛𝗮𝗻𝗱𝘀𝗵𝗮𝗸𝗲

Unapounda webhook, Nylas hutuma ombi la GET likiwa na parameter ya challenge. Lazima urudishe thamani hiyo hiyo kwenye mwili wa majibu (response body).

Usitumie JSON. Usiongeze alama za nukuu (quotes). Tumia majibu ya kawaida (bare response). Ukishindwa hili, webhook itafeli.

Mfano wa mshughulikiaji wa GET:

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

𝗧𝗵𝗲 𝗣𝗢𝗦𝗧 𝗡𝗼𝘁𝗶𝗳𝗶𝗰𝗮𝘁𝗶𝗼𝗻

Ujumbe unapofika, Nylas hutuma ombi la POST. Fuata sheria hizi tatu ili kuepuka makosa:

Mfano wa mshughulikiaji wa POST:

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 });
}

𝗣𝗿𝗼𝗱𝘂𝗰𝘁𝗶𝗼𝗻 𝗧𝗶𝗽𝘀

• Ondoa ujirudiaji wa ujumbe. Webhooks hutuma angalau mara moja. Tumia kizuizi cha hifadhidata (database constraint) au Redis ili kuhakikisha kuwa huchakati ujumbe ule ule mara mbili. • Shughulikia payloads zilizokatwa. Ikiwa ujumbe una zaidi ya 1 MB, mwili wake (body) huondolewa. Kila mara chukua ujumbe huo tena kupitia API ili kupata maudhui kamili. • Tumia maudhui yaliyosafishwa. Tumia message.created.cleaned kupata markdown badala ya HTML iliyochafuka. Hii inafanya kazi vizuri zaidi kwa LLM yako.

Unashughulikiaje kuondoa ujirudiaji katika vichakataji vyako vya webhook? Je, unatumia Redis au kizuizi cha hifadhidata?

Chanzo: https://dev.to/qasim157/handle-messagecreated-webhooks-in-nextjs-4e80