Assistent stelt op, gebruiker bevestigt, Wesender verstuurt
Een AI-assistent die e-mails verstuurt moet dat doen met expliciete toestemming van de gebruiker. Bouw het draft-bevestig-verstuur-patroon in je assistent met de Wesender API.
Wat je assistent met e-mail doet
Concept opstellen, gebruiker bevestigt. De assistent schrijft een e-mail op basis van de instructie. De gebruiker leest het concept en geeft goedkeuring vóór er iets verstuurd wordt.
Namens de gebruiker versturen. De assistent verstuurt via het domein van de organisatie, met het reply-to-adres van de gebruiker. Antwoorden komen direct bij de juiste persoon.
Volledig auditlogboek. Elke mail die de assistent verstuurt, is terug te vinden in het Wesender-dashboard met tijdstempel, ontvanger en bezorgstatus.
Wat je assistent verstuurt
Opvolgmail met bevestigingsstap
De gebruiker instrueert de assistent. De assistent schrijft een concept. Na expliciete bevestiging verstuurt de code het bericht.
Gebruiker instrueert
Schrijf een opvolgmail aan klant@voorbeeld.nl over ons gesprek van gisteren.
Assistent stelt op
De assistent genereert het concept en presenteert het aan de gebruiker. Geen verzending.
Gebruiker beoordeelt
De gebruiker leest het concept en geeft goedkeuring of vraagt aanpassingen.
Versturen na bevestiging
Pas na expliciete 'ja' roept de code handleSendEmail() aan via Wesender.
Webhook bevestigt
Wesender stuurt een bezorgevent terug. Het auditlogboek wordt bijgewerkt.
// Scenario: assistent stelt concept op, gebruiker bevestigt, daarna versturen
// Geen automatisch versturen zonder expliciete bevestiging.
import OpenAI from "openai"
import { Wesender } from "@wesender/node"
import { assistantTools } from "./assistant-tools"
import { handleSendEmail } from "./send-handler"
import readline from "readline/promises"
const openai = new OpenAI()
const emailClient = new Wesender(process.env.WESENDER_API_KEY!)
const rl = readline.createInterface({ input: process.stdin, output: process.stdout })
const gebruiker = { naam: "Jan", email: "jan@jouwdomein.nl" }
const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [
{
role: "system",
content:
"Je bent een e-mailassistent voor " + gebruiker.naam + ". " +
"Stel altijd eerst een concept voor. Stuur pas als de gebruiker bevestigt.",
},
{ role: "user", content: "Schrijf een opvolgmailtje aan klant@voorbeeld.nl over ons gesprek van gisteren." },
]
// 1. Assistent stelt concept op
const draft = await openai.chat.completions.create({ model: "gpt-4o", messages, tools: assistantTools })
const draftMsg = draft.choices[0].message
console.log("Concept:\n", draftMsg.content)
// 2. Vraag bevestiging
const antwoord = await rl.question("Versturen? (j/n): ")
rl.close()
if (antwoord.toLowerCase() !== "j") {
console.log("Verzending geannuleerd.")
process.exit(0)
}
// 3. Stuur na bevestiging
messages.push(draftMsg)
messages.push({ role: "user", content: "Ja, verstuur dit bericht." })
const sendRun = await openai.chat.completions.create({
model: "gpt-4o", messages, tools: assistantTools, tool_choice: "auto"
})
for (const call of sendRun.choices[0].message.tool_calls ?? []) {
if (call.function.name === "send_email") {
const args = JSON.parse(call.function.arguments)
await handleSendEmail(args, gebruiker.email)
console.log("Verstuurd naar", args.to)
}
} Tool-definitie, draft-flow en handler
Drie losse onderdelen die samenwerken: de tool-definitie geeft de assistent de juiste instructies, de draft-flow regelt de bevestigingsstap, de handler verstuurt via Wesender.
Versturen namens een gebruiker: waar je op let
Als je assistent e-mails verstuurt met persoonsgegevens, heb je te maken met de AVG. Wesender verwerkt data in Europese datacenters. Voor de rest van de verantwoordelijkheden ben jij als ontwikkelaar aan zet.
Toestemming voor verzending
Verstuur alleen naar adressen waarvoor de gebruiker expliciete toestemming heeft gegeven. De bevestigingsstap in je UX is daar een onderdeel van.
Afzenderidentiteit
Gebruik een herkenbaar from-adres op je domein. Stel reply-to in op het echte adres van de gebruiker, zodat antwoorden op de juiste plek terechtkomen.
Verwerkersovereenkomst
Als e-mailinhoud persoonsgegevens bevat, sluit dan een verwerkersovereenkomst met Wesender. Die is beschikbaar via het dashboard.
Dataminimalisatie
Sla geen e-mailinhoud op langer dan nodig. Stel een bewaartermijn in en verwijder data op verzoek van de betrokkene.
Checklist voor assistenten die versturen
- Bevestigingsstap ingebouwd in de UI
- From-adres op geverifieerd domein
- Reply-to is het gebruikersadres
- Verwerkersovereenkomst gesloten
- Bewaartermijn voor e-maildata ingesteld
- Verzending gelogd in auditlogboek
- Afmeldmogelijkheid bij periodieke mails
Waarom Wesender voor AI-assistenten
Draft-bevestiging ingebouwd
Stuur alleen met expliciete goedkeuring van de gebruiker. De assistent stelt voor, de gebruiker beslist.
Hoge afleverbaarheid
SPF, DKIM en DMARC automatisch geconfigureerd. Berichten van je assistent komen in de inbox, niet in spam.
Volledig auditlogboek
Elk bericht dat de assistent verstuurt, is terug te vinden in het dashboard met tijdstempel en bezorgstatus.
Data in Europa
Je e-maildata blijft in Europese datacenters. Sluit een verwerkersovereenkomst voor AVG-toepassingen.
Veelgestelde vragen
Kan mijn assistent e-mails versturen namens een specifieke gebruiker?
Ja. Stel het from-adres in op een adres op jouw geverifieerde domein, en geef het echte e-mailadres van de gebruiker mee als reply-to. Antwoorden op de mail gaan dan direct naar die gebruiker, niet naar het assistent-adres.
Hoe voorkom ik dat de assistent e-mails verstuurt zonder toestemming?
Bouw een bevestigingsstap in de UI of in de agent-loop. De assistent stelt het concept voor, de gebruiker keurt goed, pas daarna roept de code handleSendEmail() aan. De tool-definitie en de system-prompt versterken dit patroon. Zorg dat de assistent nooit rechtstreeks de tool aanroept zonder dat er een bevestiging is teruggekoppeld.
Hoe houd ik bij welke e-mails de assistent heeft verstuurd?
Het Wesender-dashboard toont een volledig overzicht van alle verstuurde berichten met tijdstempel, afzender, ontvanger en bezorgstatus. Je kunt ook via de REST API de berichtgeschiedenis opvragen en opslaan in je eigen database.
Wat als ik persoonsgegevens verwerk in de e-mailinhoud?
Als de e-mailinhoud persoonsgegevens bevat, ben je verwerker onder de AVG. Sluit een verwerkersovereenkomst met Wesender. De data wordt verwerkt in Europese datacenters. Sla geen e-mailinhoud op langer dan nodig en verwijder data op verzoek van de betrokkene.
Hoe voorkom ik dat mijn assistent als spam wordt gezien?
Wesender configureert SPF, DKIM en DMARC voor je domein. Verstuur alleen naar adressen waarvoor de gebruiker toestemming heeft gegeven. Gebruik een herkenbaar from-adres, een duidelijk onderwerp en bied altijd een afmeldmogelijkheid als je nieuwsbrieven of periodieke mails verstuurt.
Kan ik bijlagen meesturen, zoals rapporten of samenvattingen?
Bijlagen worden ondersteund via de API. Je geeft de bestandsinhoud base64-gecodeerd mee in het verzoek. Er is geen limiet op het aantal bijlagen, alleen op de totale berichtgrootte. Controleer de API-documentatie voor de exacte limieten.
Geef je assistent een e-mailkanaal
Maak een gratis account aan en koppel je AI-assistent aan Wesender in minder dan vijf minuten.