KambaSMS 1.1.2

dotnet add package KambaSMS --version 1.1.2
                    
NuGet\Install-Package KambaSMS -Version 1.1.2
                    
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="KambaSMS" Version="1.1.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="KambaSMS" Version="1.1.2" />
                    
Directory.Packages.props
<PackageReference Include="KambaSMS" />
                    
Project file
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 KambaSMS --version 1.1.2
                    
#r "nuget: KambaSMS, 1.1.2"
                    
#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 KambaSMS@1.1.2
                    
#: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=KambaSMS&version=1.1.2
                    
Install as a Cake Addin
#tool nuget:?package=KambaSMS&version=1.1.2
                    
Install as a Cake Tool

🇦🇴 KambaSMS C# SDK

NuGet Version .NET Version License

SDK oficial e leve da KambaSMS para integração de envio de mensagens SMS em Angola. Desenvolvido em C# com suporte nativo a async/await e tipagem forte.

✨ Funcionalidades

  • 🚀 Zero Dependências: Utiliza HttpClient nativo do .NET.
  • 🛡️ Validação no Cliente: Deteta números inválidos, URLs ou emojis antes de fazer a chamada à API.
  • 💎 Totalmente Assíncrono: Suporte nativo a async/await e CancellationToken.
  • 📦 MVP Completo: Envio único, envio em massa, agendamento e gestão de saldo/histórico.

📦 Instalação

Instala o pacote via NuGet:

dotnet add package KambaSMS

Ou via Package Manager Console:

Install-Package KambaSMS

Nota: Requer .NET 6.0 ou superior.

⚡ Início Rápido

1. Inicialização

using KambaSMS;

using var client = new KambaClient(
    apiKey: "kamba_tua_chave_aqui",
    baseUrl: "https://nexasms-api.onrender.com" // Opcional
);

2. Enviar um SMS Único

try
{
    var response = await client.Sms.SendAsync(new SendSmsRequest
    {
        To = "+244923456789",
        Text = "O seu código de verificação é 1234. Não partilhe com ninguém.",
        SenderId = "KAMBA"
    });

    Console.WriteLine($"✅ SMS Enviado! ID: {response.MessageId}");
    Console.WriteLine($"Saldo Restante: {response.RemainingBalance}");
}
catch (Exception ex)
{
    Console.WriteLine($"Falha no envio: {ex.Message}");
}

3. Envio em Massa (Bulk)

try
{
    var response = await client.Sms.SendBulkAsync(new SendBulkRequest
    {
        Name = "Campanha Natal 2024",
        SenderId = "PROMO",
        Text = "Feliz Natal! Aproveite 20% de desconto.",
        Recipients = new[]
        {
            "+244923456789",
            "+244933123456",
            "+244943987654"
        }
    });

    Console.WriteLine($"✅ Job criado! ID: {response.JobId} | Total: {response.Total}");
}
catch (Exception ex)
{
    Console.WriteLine($"Falha: {ex.Message}");
}

4. Agendar um SMS

try
{
    var dataFutura = DateTime.UtcNow.AddHours(2).ToString("o"); // ISO 8601

    var response = await client.Sms.ScheduleAsync(new ScheduleSmsRequest
    {
        To = "+244923456789",
        Text = "Lembrete: A sua consulta está marcada para amanhã.",
        SenderId = "CLINICA",
        ScheduledAt = dataFutura
    });

    Console.WriteLine("✅ SMS agendado com sucesso!");
}
catch (Exception ex)
{
    Console.WriteLine($"Falha: {ex.Message}");
}

5. Consultar Saldo e Histórico

// Verificar Saldo
var balance = await client.Account.GetBalanceAsync();
Console.WriteLine($"Saldo atual: {balance.Balance} SMS");

// Ver Histórico
var history = await client.Account.GetHistoryAsync(limit: 10);
foreach (var msg in history)
{
    Console.WriteLine($"Para: {msg.To} | Status: {msg.Status}");
}

🔐 OTP Service

Serviço gerido de autenticação por SMS. Rate limiting (3/hora/número), expiração (5min) e validação incluídos.

Enviar OTP

var otp = await client.Otp.SendAsync(new OtpSendRequest
{
    Phone = "+244912345678"
});

Console.WriteLine($"Expira em: {otp["expires_in"]} segundos");
// → Expira em: 300 segundos

Verificar OTP

⚠️ O endpoint verify é público — não requer API Key. Pode ser chamado diretamente do frontend.

var result = await client.Otp.VerifyAsync(new OtpVerifyRequest
{
    Phone = "+244912345678",
    Code = "123456"
});

if ((bool)result["success"])
{
    Console.WriteLine("✅ Código válido!");
}
else
{
    Console.WriteLine("❌ Código inválido ou expirado.");
}

Regras do OTP

Regra Valor
Formato do código 6 dígitos numéricos
Validade 5 minutos
Rate limit (envio) 3 OTPs/hora por número
Rate limit (verificação) 20 tentativas/15min
Custo 1 crédito SMS por envio

🛡️ Regras de Validação (Específicas para Angola)

O SDK faz validações automáticas no lado do cliente. Se estas regras forem violadas, o SDK lança uma KambaValidationException sem sequer chamar a API.

  1. Formato do Número: Deve começar obrigatoriamente com +244 seguido de exatamente 9 dígitos.
  2. Sem URLs: Mensagens contendo URLs são rejeitadas (filtradas como spam).
  3. Sem Emojis: Caracteres emoji não são suportados.
  4. Limite de Caracteres: Máximo de 160 caracteres por SMS.

⚠️ Tratamento de Erros

using KambaSMS;
using KambaSMS.Exceptions;

try
{
    await client.Sms.SendAsync(new SendSmsRequest
    {
        To = "923456789",
        Text = "Teste",
        SenderId = "KAMBA"
    });
}
catch (KambaValidationException ex)
{
    Console.WriteLine($"🚫 Dados inválidos: {ex.Message}");
}
catch (KambaApiException ex)
{
    Console.WriteLine($"🔌 Erro da API ({ex.StatusCode}): {ex.Message}");
}
catch (KambaException ex)
{
    Console.WriteLine($"💥 Erro KambaSMS: {ex.Message}");
}

📚 Documentação Completa

Para mais detalhes, consulta a Documentação Oficial da KambaSMS.

🆘 Suporte

📄 Licença

Este projeto está licenciado sob a Licença MIT.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  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.
  • net6.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.2 119 7/24/2026
1.0.0 103 7/23/2026