Integraties

E-mail versturen vanuit CrewAI

Laat een team van AI-agents samenwerken: een schrijver stelt de mail op, een reviewer keurt hem goed en een verzender stuurt hem via Wesender.

Agent-framework Webhooks

Vereisten

  • Wesender-account met geverifieerd verzenddomein
  • API-sleutel van Wesender (WESENDER_API_KEY)
  • OpenAI API-sleutel (OPENAI_API_KEY)
  • Python 3.11 of nieuwer

Stap 1: Installeer CrewAI en dependencies

Installeer CrewAI en de requests-bibliotheek voor de Wesender REST API.

pip install crewai crewai-tools python-dotenv requests

Stap 2: Maak de Wesender-tool

Definieer een CrewAI-tool die de Wesender API aanroept. Agents kunnen deze tool gebruiken als ze een e-mail willen versturen.

import os, requests
from crewai.tools import tool

@tool("send_email")
def send_email(to: str, subject: str, html: str) -> str:
    """Verstuur een e-mail via Wesender. Geef to, subject en html mee."""
    requests.post(
        "https://api.wesender.nl/v1/emails",
        headers={ "Authorization": f"Bearer {os.environ['WESENDER_API_KEY']}" },
        json={ "from": "noreply@jouwdomein.nl", "to": to, "subject": subject, "html": html },
    ).raise_for_status()
    return f"E-mail verstuurd naar {to}"

Stap 3: Definieer de agents en taken

Maak een schrijver-agent en een verzender-agent. Elke agent krijgt een rol en een taak. De crew voert de taken sequentieel uit.

from crewai import Agent, Task, Crew

schrijver = Agent(
    role="E-mailschrijver",
    goal="Schrijf een professionele welkomstmail in HTML",
    backstory="Jij bent een copywriter gespecialiseerd in transactionele e-mails.",
    verbose=True,
)

verzender = Agent(
    role="E-mailverzender",
    goal="Verstuur de mail via Wesender",
    backstory="Jij zorgt dat e-mails correct worden verstuurd via de Wesender API.",
    tools=[send_email],
    verbose=True,
)

schrijf_taak = Task(
    description="Schrijf een HTML-welkomstmail voor {ontvanger}. Geef alleen de HTML terug.",
    expected_output="Volledige HTML-e-mail als string",
    agent=schrijver,
)

verstuur_taak = Task(
    description="Verstuur de HTML-mail naar {ontvanger} met onderwerp 'Welkom bij ons platform'.",
    expected_output="Bevestiging dat de e-mail verstuurd is",
    agent=verzender,
    context=[schrijf_taak],
)

crew = Crew(agents=[schrijver, verzender], tasks=[schrijf_taak, verstuur_taak])
result = crew.kickoff(inputs={ "ontvanger": "kees@voorbeeld.nl" })
print(result)

Volledig voorbeeld

Hier is de volledige implementatie in crewai_email.py:

import os, requests
from crewai import Agent, Task, Crew
from crewai.tools import tool

@tool("send_email")
def send_email(to: str, subject: str, html: str) -> str:
    """Verstuur een e-mail via Wesender. Geef to, subject en html mee."""
    requests.post(
        "https://api.wesender.nl/v1/emails",
        headers={ "Authorization": f"Bearer {os.environ['WESENDER_API_KEY']}" },
        json={ "from": "noreply@jouwdomein.nl", "to": to, "subject": subject, "html": html },
    ).raise_for_status()
    return f"E-mail verstuurd naar {to}"

schrijver = Agent(
    role="E-mailschrijver",
    goal="Schrijf een professionele welkomstmail in HTML",
    backstory="Jij bent een copywriter gespecialiseerd in transactionele e-mails.",
    verbose=True,
)

verzender = Agent(
    role="E-mailverzender",
    goal="Verstuur de mail via Wesender",
    backstory="Jij zorgt dat e-mails correct worden verstuurd via de Wesender API.",
    tools=[send_email],
    verbose=True,
)

schrijf_taak = Task(
    description="Schrijf een HTML-welkomstmail voor {ontvanger}. Geef alleen de HTML terug.",
    expected_output="Volledige HTML-e-mail als string",
    agent=schrijver,
)

verstuur_taak = Task(
    description="Verstuur de HTML-mail naar {ontvanger} met onderwerp 'Welkom bij ons platform'.",
    expected_output="Bevestiging dat de e-mail verstuurd is",
    agent=verzender,
    context=[schrijf_taak],
)

crew = Crew(agents=[schrijver, verzender], tasks=[schrijf_taak, verstuur_taak])
result = crew.kickoff(inputs={ "ontvanger": "kees@voorbeeld.nl" })
print(result)

Bezorgstatussen via webhooks

CrewAI kan bezorg-, bounce- en klachtsignalen ontvangen via webhooks. Configureer een webhook-endpoint in je CrewAI-workflow dat POST-verzoeken van Wesender accepteert. Zie Webhooks instellen voor de volledige configuratiestappen en het payload-formaat.

Veelgestelde vragen

Kan ik een reviewstap toevoegen voor het versturen?

Ja. Voeg een reviewer-agent toe tussen de schrijver en de verzender. Geef de reviewer-taak de schrijftaak als context. De reviewer past de HTML aan als dat nodig is, waarna de verzender de definitieve versie doorstuurt.

Hoe gebruik ik een ander taalmodel per agent?

Geef elke agent zijn eigen llm-parameter mee: Agent(llm=ChatOpenAI(model='gpt-4o'), ...). Je kunt de schrijver op een krachtig model zetten en de verzender op een sneller model, omdat die agent weinig generatieve intelligentie nodig heeft.

Wat kost het om CrewAI met OpenAI te gebruiken?

Kosten hangen af van het model en het aantal tokens. Gebruik gpt-4o-mini voor lage kosten tijdens ontwikkeling. Schakel over naar gpt-4o voor productie als de kwaliteit dat vereist. De Wesender API-kosten zijn afhankelijk van je abonnement.

Volgende stappen