Integraties

E-mail versturen vanuit Semantic Kernel

Voeg WeSender toe als KernelFunction-plugin in je .NET-agent en laat Semantic Kernel de REST API aanroepen.

Agent-framework .NET Webhooks

Vereisten

  • WeSender-account met geverifieerd domein en API-sleutel
  • WESENDER_API_KEY en een OpenAI- of Azure OpenAI-sleutel
  • .NET 8 of nieuwer
  • dotnet add package Microsoft.SemanticKernel

Stap 1: Installeer het pakket

Voeg de Semantic Kernel NuGet toe aan je .NET-project.

dotnet add package Microsoft.SemanticKernel

Stap 2: Maak de e-mailplugin

Definieer een klasse met een KernelFunction-methode. WeSender heeft geen .NET SDK, dus je roept de REST API aan via HttpClient.

using System.ComponentModel;
using System.Net.Http.Json;
using Microsoft.SemanticKernel;

public class EmailPlugin
{
    private static readonly HttpClient http = new();

    [KernelFunction("send_email")]
    [Description("Verstuur een transactionele e-mail via WeSender")]
    public async Task<string> SendEmailAsync(
        string to, string subject, string html)
    {
        var key = Environment.GetEnvironmentVariable("WESENDER_API_KEY");
        var req = new HttpRequestMessage(
            HttpMethod.Post,
            "https://api.wesender.nl/v1/emails"
        );
        req.Headers.Add("Authorization", $"Bearer {key}");
        req.Content = JsonContent.Create(new
        {
            from = "agent@jouwdomein.nl",
            to,
            subject,
            html,
        });
        var res = await http.SendAsync(req);
        res.EnsureSuccessStatusCode();
        return "E-mail verstuurd";
    }
}

Stap 3: Registreer de plugin en draai de kernel

Bouw de kernel op, voeg de EmailPlugin toe en schakel automatisch function calling in. De kernel roept de plugin zelf aan op het juiste moment.

using Microsoft.SemanticKernel;

var builder = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion(
        "gpt-4o",
        Environment.GetEnvironmentVariable("OPENAI_API_KEY")!
    );

var kernel = builder.Build();
kernel.Plugins.AddFromType<EmailPlugin>("Email");

var result = await kernel.InvokePromptAsync(
    "Mail een welkomstbericht naar nieuwe@klant.nl",
    new KernelArguments(new OpenAIPromptExecutionSettings
    {
        FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(),
    })
);
Console.WriteLine(result);

Volledig voorbeeld

Hier is de volledige implementatie in Program.cs:

using System.ComponentModel;
using System.Net.Http.Json;
using Microsoft.SemanticKernel;

// Plugin
public class EmailPlugin
{
    private static readonly HttpClient http = new();

    [KernelFunction("send_email")]
    [Description("Verstuur een transactionele e-mail via WeSender")]
    public async Task<string> SendEmailAsync(
        string to, string subject, string html)
    {
        var key = Environment.GetEnvironmentVariable("WESENDER_API_KEY");
        var req = new HttpRequestMessage(
            HttpMethod.Post,
            "https://api.wesender.nl/v1/emails"
        );
        req.Headers.Add("Authorization", $"Bearer {key}");
        req.Content = JsonContent.Create(new { from = "agent@jouwdomein.nl", to, subject, html });
        var res = await http.SendAsync(req);
        res.EnsureSuccessStatusCode();
        return "E-mail verstuurd";
    }
}

// Program
var builder = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion(
        "gpt-4o",
        Environment.GetEnvironmentVariable("OPENAI_API_KEY")!
    );

var kernel = builder.Build();
kernel.Plugins.AddFromType<EmailPlugin>("Email");

var result = await kernel.InvokePromptAsync(
    "Mail een welkomstbericht naar nieuwe@klant.nl",
    new KernelArguments(new OpenAIPromptExecutionSettings
    {
        FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(),
    })
);
Console.WriteLine(result);

Bezorgstatussen via webhooks

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

Veelgestelde vragen

Waarom de REST API in plaats van een SDK?

Er is nog geen officiële WeSender .NET SDK. De REST API biedt precies dezelfde functionaliteit en werkt net zo betrouwbaar via HttpClient.

Werkt automatisch function calling?

Ja. Met FunctionChoiceBehavior.Auto() roept de kernel de plugin zelf aan op het juiste moment, zonder dat je de tool-lus handmatig hoeft te beheren.

Kan ik meer functies toevoegen aan de plugin?

Ja. Voeg extra KernelFunction-methoden toe aan de EmailPlugin-klasse. Semantic Kernel herkent ze automatisch via reflectie.

Volgende stappen