E-mail versturen vanuit Semantic Kernel
Voeg WeSender toe als KernelFunction-plugin in je .NET-agent en laat Semantic Kernel de REST API aanroepen.
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.