Integraties

E-mail versturen vanuit Pydantic AI

Type-veilige Python-agents met automatische validatie — stuur e-mail via Wesender als gevalideerde tool.

Agent-framework Python Webhooks

Vereisten

  • Python 3.11+ geïnstalleerd
  • Wesender-account met API-sleutel
  • pip install "pydantic-ai[openai]" wesender
  • Omgevingsvariabelen: WESENDER_API_KEY en OPENAI_API_KEY

Stap 1: Installeer Pydantic AI en de Wesender Python SDK

Voeg de benodigde packages toe. Pydantic AI ondersteunt meerdere model-providers via een uniforme interface.

pip install "pydantic-ai[openai]" wesender

Stap 2: Definieer de send_email-tool met type-annotaties

Pydantic AI gebruikt Python-functies met type-annotaties voor automatische validatie van toolparameters. Decoreer de functie met @agent.tool_plain om hem als tool te registreren.

from pydantic_ai import Agent
from wesender import Wesender
import os

client = Wesender(api_key=os.environ["WESENDER_API_KEY"])

agent = Agent(
    model="openai:gpt-4o",
    system_prompt="Je bent een assistent die e-mails verstuurt via Wesender.",
)

@agent.tool_plain
async def send_email(to: str, subject: str, html: str) -> str:
    """Verstuur een e-mail via Wesender."""
    result = client.emails.send(
        from_="noreply@jouwdomein.nl",
        to=to,
        subject=subject,
        html=html,
    )
    return f"E-mail verzonden. ID: {result.id}"

Stap 3: Roep de agent aan

De agent herkent automatisch wanneer send_email moet worden aangeroepen op basis van de gebruikersvraag. Pydantic AI valideert alle parameters vóór uitvoering.

import asyncio

async def main():
    response = await agent.run(
        "Stuur een welkomstmail naar jan@voorbeeld.nl "
        "met onderwerp 'Welkom bij ons platform'."
    )
    print(response.data)

asyncio.run(main())

Stap 4: Verwerk het resultaat

De agent geeft het resultaat van de tool terug als string. Sla het e-mail-ID op voor bezorgingscontrole via Wesender-webhooks.

response = await agent.run(
    "Stuur een bevestigingsmail naar klant@voorbeeld.nl."
)
# response.data bevat het tekstantwoord van de agent
# bijv: "E-mail verzonden. ID: em_abc123"
print(response.data)

Volledig voorbeeld

Hier is de volledige implementatie in pydantic_ai_email.py:

import asyncio
import os
from pydantic_ai import Agent
from wesender import Wesender

client = Wesender(api_key=os.environ["WESENDER_API_KEY"])

agent = Agent(
    model="openai:gpt-4o",
    system_prompt="Je bent een assistent die e-mails verstuurt via Wesender.",
)

@agent.tool_plain
async def send_email(to: str, subject: str, html: str) -> str:
    """Verstuur een e-mail via Wesender."""
    result = client.emails.send(
        from_="noreply@jouwdomein.nl",
        to=to,
        subject=subject,
        html=html,
    )
    return f"E-mail verzonden. ID: {result.id}"

async def main():
    response = await agent.run(
        "Stuur een welkomstmail naar jan@voorbeeld.nl "
        "met als onderwerp 'Welkom bij ons platform' "
        "en als inhoud een vriendelijke HTML-begroeting."
    )
    print(response.data)

if __name__ == "__main__":
    asyncio.run(main())

Bezorgstatussen via webhooks

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

Veelgestelde vragen

Welke model-providers werken met Pydantic AI?

Pydantic AI ondersteunt OpenAI, Anthropic, Google Gemini, Groq en Mistral via een uniforme interface. Je wisselt van provider door de model-parameter aan te passen, bijv. van 'openai:gpt-4o' naar 'anthropic:claude-sonnet-4-5'.

Hoe valideer ik e-mailadressen vóór het versturen?

Gebruik Pydantic-modellen als toolparameters. Vervang losse string-annotaties door een dataclass met EmailStr uit pydantic[email]. Pydantic AI valideert de invoer automatisch voordat de tool wordt aangeroepen.

Kan ik meerdere e-mails in één agent-run versturen?

Ja. De agent roept send_email herhaaldelijk aan als de instructie dat vereist. Elke aanroep retourneert een uniek e-mail-ID. Je kunt ook een batchfunctie definiëren die een lijst adressen accepteert.

Volgende stappen