Zindua.Sdk
1.0.1
dotnet add package Zindua.Sdk --version 1.0.1
NuGet\Install-Package Zindua.Sdk -Version 1.0.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Zindua.Sdk" Version="1.0.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Zindua.Sdk" Version="1.0.1" />
<PackageReference Include="Zindua.Sdk" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Zindua.Sdk --version 1.0.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Zindua.Sdk, 1.0.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Zindua.Sdk@1.0.1
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Zindua.Sdk&version=1.0.1
#tool nuget:?package=Zindua.Sdk&version=1.0.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Zindua.Sdk
Official .NET 8 SDK for Zindua — send transactional email and WhatsApp OTP from ASP.NET Core.
Server-side only. Never put
ZINDUA_API_KEYin Blazor WebAssembly, SPA, or mobile apps.
Install
dotnet add package Zindua.Sdk
Quick start (ASP.NET Core)
using Zindua;
using Zindua.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddZindua(builder.Configuration);
var app = builder.Build();
app.MapPost("/auth/otp", async (IZinduaClient zindua, OtpRequest req) =>
{
var result = await zindua.SendAsync(new ZinduaSendOptions
{
To = req.Email,
Template = "otp-login",
Channel = "email",
Lang = "en",
Variables = new Dictionary<string, string>
{
["code"] = req.Code,
["appName"] = "MyApp",
},
});
return Results.Ok(new { result.LogId });
});
app.Run();
record OtpRequest(string Email, string Code);
appsettings.json:
{
"Zindua": {
"ApiKey": "znd_test_xxxxxxxxxxxxxxxxxxxxxxxx"
}
}
Or environment variable:
export ZINDUA_API_KEY=znd_test_xxxxxxxxxxxxxxxxxxxxxxxx
await zindua.SendAsync(new ZinduaSendOptions
{
To = "+243812345678",
Channel = "whatsapp",
Template = "otp-login",
Variables = new Dictionary<string, string> { ["code"] = "482910" },
});
WhatsApp anti-ban robot (required)
Zindua’s anti-ban robot enforces a ≥ 3 second gap between WhatsApp sends to protect your linked number from bans. Burst / simultaneous OTP looks like spam.
- Server returns
RATE_LIMIT_EXCEEDED/ wait messages if you ignore the gap. - SDK defaults
AutoPaceWhatsapp = true: waits on this client and writes a warning to stderr. - Your app should still use a queue or resend countdown in production.
Guide: WhatsApp OTP anti-ban pacing
builder.Services.Configure<ZinduaClientOptions>(o =>
{
o.ApiKey = builder.Configuration["Zindua:ApiKey"]!;
// o.AutoPaceWhatsapp = false; // only if you already queue OTP yourself
});
Other methods
var project = await zindua.GetProjectAsync();
var templates = await zindua.GetTemplatesAsync();
var log = await zindua.GetLogAsync(result.LogId);
Without DI
using var client = new ZinduaClient(new ZinduaClientOptions
{
ApiKey = Environment.GetEnvironmentVariable("ZINDUA_API_KEY")!,
});
await client.SendAsync(new ZinduaSendOptions
{
To = "user@example.com",
Template = "otp-login",
});
Docs
- Marketing: https://zindua.run/dotnet
- Dashboard: https://zindua.run/dashboard/developper
- Example:
examples/login-otp-aspnetin the Zindua monorepo
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Http (>= 8.0.1)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 8.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.