Se você desenvolve em C# e precisa integrar WhatsApp ao seu sistema, este tutorial é para você. Com a ZAP API e o HttpClient nativo do .NET, você envia mensagens de texto, imagens e documentos pelo WhatsApp em poucas linhas de código — sem instalar SDKs de terceiros, sem aprovação da Meta.
Pré-requisitos
- .NET 6 ou superior (recomendamos .NET 8)
- Conta na ZAP API (trial 7 dias grátis, sem cartão)
- Uma instância WhatsApp conectada no painel
Classe de serviço para envio
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
public class ZapApiService
{
private readonly HttpClient _http;
private readonly string _instanceId;
public ZapApiService(string token, string instanceId)
{
_instanceId = instanceId;
_http = new HttpClient
{
BaseAddress = new Uri("https://zap-api.tech/v1/")
};
_http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
}
public async Task<JsonDocument> EnviarTexto(string phone, string mensagem)
{
var payload = new { phone, type = "text", body = mensagem };
return await Post("instances/" + _instanceId + "/send", payload);
}
public async Task<JsonDocument> EnviarImagem(
string phone, string mediaUrl, string caption = "")
{
var payload = new { phone, type = "image", mediaUrl, caption };
return await Post("instances/" + _instanceId + "/send", payload);
}
public async Task<JsonDocument> EnviarDocumento(
string phone, string mediaUrl, string fileName)
{
var payload = new { phone, type = "document", mediaUrl, fileName };
return await Post("instances/" + _instanceId + "/send", payload);
}
private async Task<JsonDocument> Post(string endpoint, object payload)
{
var json = JsonSerializer.Serialize(payload);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await _http.PostAsync(endpoint, content);
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
return JsonDocument.Parse(body);
}
}
Enviar sua primeira mensagem
// Program.cs
var zap = new ZapApiService("tk_seu_token_aqui", "inst_seu_id_aqui");
// Texto
var result = await zap.EnviarTexto("5511999998888", "Olá! Mensagem via C# + ZAP API.");
Console.WriteLine(result.RootElement);
// Imagem
await zap.EnviarImagem("5511999998888", "https://cdn.loja.com/banner.jpg", "Promoção!");
// Documento PDF
await zap.EnviarDocumento("5511999998888", "https://cdn.loja.com/catalogo.pdf", "catalogo.pdf");
Webhook com ASP.NET Minimal API
using System.Text.Json;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
var zap = new ZapApiService("tk_seu_token_aqui", "inst_seu_id_aqui");
app.MapPost("/webhook", async (HttpContext ctx) =>
{
using var reader = new StreamReader(ctx.Request.Body);
var body = await reader.ReadToEndAsync();
var doc = JsonDocument.Parse(body);
var root = doc.RootElement;
if (root.GetProperty("event").GetString() == "message.received")
{
var data = root.GetProperty("data");
if (!data.GetProperty("fromMe").GetBoolean())
{
var phone = data.GetProperty("phone").GetString()!;
var msg = data.GetProperty("body").GetString()!;
Console.WriteLine("Mensagem de " + phone + ": " + msg);
await zap.EnviarTexto(phone, "Recebemos sua mensagem!");
}
}
return Results.Ok(new { ok = true });
});
app.Run("http://0.0.0.0:5000");
Injeção de dependência em projetos maiores
builder.Services.AddSingleton(sp =>
new ZapApiService(
builder.Configuration["ZapApi:Token"]!,
builder.Configuration["ZapApi:InstanceId"]!
)
);
Casos de uso populares com C#
- ERPs e sistemas legados: notificações de faturamento e cobrança
- E-commerce .NET: confirmação de pedido, rastreio, pós-venda
- CRMs corporativos: follow-up automático
- Azure Functions: envio serverless disparado por eventos
Confira mais casos de uso.
FAQ
- Preciso de SDK específico?
Não. OHttpClientnativo do .NET é suficiente. - Funciona com .NET Framework 4.x?
Sim. HttpClient existe desde o .NET 4.5. - Qual o custo?
R$49/mês (1a e 2a instância), R$29/mês (3a+). Trial 7 dias grátis. - Posso enviar em massa?
Sim. UseTask.Delay(1000)entre envios. Veja guia de disparo.