E-mail als schakel in AI-pijplijnen

Workflows lopen vaak automatisch, maar communiceren nog handmatig. Voeg e-mail toe als uitvoerkanaal: nachtelijke rapporten, batch-notificaties en bezorgfeedback via webhooks.

Data in Europa Webhooks inbegrepen Geen creditcard 3.000 e-mails p.m. gratis
Gebruik

Wat workflows versturen

Periodieke samenvattingen. Een nachtelijke datapijplijn haalt data op, laat een LLM er een rapport van maken en verstuurt dat naar de betrokkenen, elke nacht automatisch op hetzelfde tijdstip.

Getriggerde notificaties. Zodra een drempelwaarde wordt overschreden, stuurt de pijplijn automatisch een waarschuwing naar het juiste team, zonder handmatige tussenkomst.

Multi-stap orchestratie. Meerdere tools en API-aanroepen in een vaste volgorde. E-mail bevestigt de afronding van elke fase of vraagt menselijke goedkeuring voor de volgende stap.

Uitgewerkt scenario

Nachtelijke datapijplijn

Een geplande taak haalt verkoopdata op, laat een LLM er een HTML-samenvatting van maken en verstuurt die naar de stakeholders, elke nacht automatisch.

Cron-trigger

Een geplande taak start de pijplijn om 23:59, elke nacht.

Data ophalen

De pijplijn vraagt de database om de dagelijkse verkoopcijfers.

LLM genereert HTML

Een taalmodel vertaalt de ruwe data naar een leesbaar HTML-rapport.

Versturen via Wesender

De pijplijn roept de Wesender API aan en verstuurt het rapport naar alle ontvangers.

Webhook bevestigt

Wesender stuurt een bezorgevent terug. De pijplijn logt de afronding van de run.

nachtelijke-pijplijn.ts
// Scenario: nachtelijke datapijplijn
// Geplande taak haalt verkoopdata op, laat een LLM er een
// HTML-samenvatting van maken en verstuurt die naar stakeholders.

import { generateText, tool } from "ai"
import { openai }             from "@ai-sdk/openai"
import { z }                  from "zod"
import { Wesender }           from "@wesender/node"

const emailClient = new Wesender(process.env.WESENDER_API_KEY!)

const ONTVANGERS = ["directie@jouwdomein.nl", "finance@jouwdomein.nl"]

// 1. Data ophalen (vervang door jouw database-aanroep)
const data = await haalVerkoopDataOp()

// 2. LLM genereert rapport en verstuurt het via tool
for (const ontvanger of ONTVANGERS) {
  await generateText({
    model: openai("gpt-4o"), maxSteps: 3,
    system: "Genereer een beknopte HTML-verkoopsamenvatting. Gebruik send_report om te versturen.",
    prompt: `Data: ${JSON.stringify(data)}\nOntvanger: ${ontvanger}`,
    tools: {
      send_report: tool({
        description: "Verstuur het rapport",
        parameters: z.object({
          ontvanger: z.string().email(),
          onderwerp: z.string(),
          html:      z.string(),
        }),
        execute: async ({ ontvanger, onderwerp, html }) => {
          await emailClient.emails.send({
            from: "pijplijn@jouwdomein.nl",
            to: ontvanger, subject: onderwerp, html,
          })
          return { status: "verstuurd" }
        },
      }),
    },
  })
}

async function haalVerkoopDataOp() {
  return { verkopen: 1240, retouren: 38, datum: new Date().toISOString().slice(0, 10) }
}
Codevoorbeelden

n8n, queue-worker en Vercel AI SDK

Kies het patroon dat past bij jouw orchestrator. De webhook-code is hetzelfde ongeacht het gekozen framework.

{
  "type": "n8n-nodes-base.httpRequest",
  "parameters": {
    "method": "POST",
    "url": "https://api.wesender.nl/v1/emails",
    "authentication": "genericCredentialType",
    "genericAuthType": "httpHeaderAuth",
    "options": {},
    "sendBody": true,
    "bodyParameters": {
      "parameters": [
        { "name": "from",    "value": "pijplijn@jouwdomein.nl" },
        { "name": "to",      "value": "={{ $json.email }}" },
        { "name": "subject", "value": "Nachtelijk rapport {{ $now.format('dd-MM-yyyy') }}" },
        { "name": "html",    "value": "={{ $json.rapportHtml }}" }
      ]
    }
  }
}
Bezorgfeedback

Webhooks terug in je pijplijn

Wesender stuurt een HTTP POST naar jouw endpoint zodra de status van een bericht verandert. Zo weet je pijplijn direct of een rapport is bezorgd of teruggestuiterd.

  • Stel het endpoint in via het Wesender-dashboard
  • Events: delivered, bounced, complained
  • Markeer stuiteradressen als ongeldig en probeer het opnieuw
  • Log elke bezorging voor auditdoeleinden
wesender-webhook.ts
import type { RequestHandler } from "express"

// Ontvang bezorgingsevents van Wesender
// Stel deze URL in als webhook-endpoint in het dashboard
export const wesenderWebhook: RequestHandler = (req, res) => {
  const event = req.body as {
    type:      "delivered" | "bounced" | "complained"
    email_id:  string
    to:        string
    timestamp: string
  }

  if (event.type === "bounced") {
    // Markeer als mislukt in je pijplijn-log
    console.log("Bounce bij pijplijn-mail naar", event.to)
  }

  if (event.type === "delivered") {
    // Noteer bezorging in je pipeline-run-log
    console.log("Bezorgd aan", event.to, "om", event.timestamp)
  }

  res.sendStatus(200)
}
Waarom Wesender

Waarom Wesender voor pijplijnen

Hoge afleverbaarheid

Verzending via EU-infrastructuur met SPF, DKIM en DMARC. Minder kans op spam, ook bij hoog volume.

Webhooks voor pijplijnfeedback

Ontvang bezorgingsevents direct in je pijplijn. Sla mislukte berichten op en probeer ze opnieuw.

Volume schaalt mee

Van tien naar tienduizend mails per dag zonder aanpassingen in je pijplijncode. Geen throttle-instellingen nodig.

Data in Europa

Je e-maildata blijft in Europese datacenters. Sluit een verwerkersovereenkomst voor AVG-toepassingen.

FAQ

Veelgestelde vragen

Kan ik een workflow plannen die elke nacht e-mails verstuurt?

Ja. Gebruik een cron-job (Vercel Cron, GitHub Actions, n8n Trigger) om je workflow te starten. Wesender verwerkt de verzending zodra je de API aanroept. De timing zit in jouw orchestrator, niet in Wesender.

Hoe zorg ik ervoor dat e-mails niet twee keer worden verstuurd bij een retry?

Implementeer idempotentie in je handler: genereer een unieke sleutel op basis van run-ID en ontvanger, sla die op in Redis of een database vóórdat je verstuurt, en sla de aanroep over als de sleutel al bestaat. Dit patroon staat uitgewerkt in de queue-worker-tab hierboven.

Hoe verwerk ik bounces terug in mijn pijplijn?

Stel een webhook-endpoint in via het Wesender-dashboard. Wesender stuurt een POST-verzoek naar dat endpoint zodra de bezorgstatus verandert. In je handler markeer je het adres als ongeldig of trigger je een herstelstap in de pijplijn.

Werkt Wesender samen met n8n?

Ja. Gebruik de HTTP Request-node met Header Auth en de Wesender API-URL. Een concrete n8n-node-configuratie staat in de tab 'n8n HTTP-node' hierboven.

Kan ik batch-e-mails versturen vanuit een workflow?

Ja. Loop over je ontvangerlijst en roep client.emails.send() aan per ontvanger. Stuur ze parallel of sequentieel, afhankelijk van je volumerequirements. Voor grote lijsten verwerk je ze in stukken van tien tot honderd adressen per iteratie.

Welk volume kan ik via de API doorsturen?

Het gratis abonnement omvat 3.000 e-mails per maand. Betaalde abonnementen bieden hogere limieten. Tijdelijke pieken worden opgevangen zonder berichten te verliezen. Neem contact op als je hoge dagelijkse volumes verwacht.

Voeg e-mail toe aan je pijplijn

Maak een gratis account aan en stuur je eerste geautomatiseerde rapport in minder dan vijf minuten.