Se você trabalha com Java e quer integrar envio de mensagens WhatsApp, este guia cobre duas abordagens: Java puro com HttpClient (Java 11+) e Spring Boot com RestTemplate. Sem SDK proprietário, sem aprovação da Meta — conecte-se à ZAP API em minutos.
Abordagem 1: Java HttpClient puro
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ZapApiService {
private static final String BASE_URL = "https://zap-api.tech/v1";
private final HttpClient client = HttpClient.newHttpClient();
private final String token;
private final String instanceId;
public ZapApiService(String token, String instanceId) {
this.token = token;
this.instanceId = instanceId;
}
public String enviarTexto(String phone, String mensagem) throws Exception {
String json = String.format(
"{\"phone\":\"%s\",\"type\":\"text\",\"body\":\"%s\"}",
phone, mensagem);
return enviar(json);
}
public String enviarImagem(String phone, String mediaUrl, String caption) throws Exception {
String json = String.format(
"{\"phone\":\"%s\",\"type\":\"image\",\"mediaUrl\":\"%s\",\"caption\":\"%s\"}",
phone, mediaUrl, caption);
return enviar(json);
}
private String enviar(String json) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(BASE_URL + "/instances/" + instanceId + "/send"))
.header("Authorization", "Bearer " + token)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) throw new RuntimeException("Erro " + response.statusCode());
return response.body();
}
}
// Uso
var zap = new ZapApiService("tk_seu_token", "inst_seu_id");
zap.enviarTexto("5511999998888", "Olá via Java!");
Abordagem 2: Spring Boot
// application.yml
// zap:
// token: tk_seu_token_aqui
// instance-id: inst_seu_id_aqui
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
@Service
public class ZapService {
private final RestTemplate rest = new RestTemplate();
@Value("zap.token") private String token;
@Value("zap.instance-id") private String instanceId;
public String enviarTexto(String phone, String mensagem) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(token);
Map<String, Object> body = Map.of("phone", phone, "type", "text", "body", mensagem);
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(body, headers);
return rest.postForEntity(
"https://zap-api.tech/v1/instances/" + instanceId + "/send",
entity, String.class
).getBody();
}
}
Webhook controller Spring Boot
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
public class WebhookController {
private final ZapService zap;
public WebhookController(ZapService zap) { this.zap = zap; }
@PostMapping("/webhook")
public Map<String, Boolean> receberWebhook(@RequestBody Map<String, Object> payload) {
if ("message.received".equals(payload.get("event"))) {
var data = (Map<String, Object>) payload.get("data");
if (!(boolean) data.getOrDefault("fromMe", true)) {
String phone = (String) data.get("phone");
zap.enviarTexto(phone, "Recebemos sua mensagem!");
}
}
return Map.of("ok", true);
}
}
Casos de uso com Java
- ERPs corporativos: alertas de faturamento
- Microservices Spring: serviço dedicado de mensageria
- Fintechs: alertas de transação e 2FA via WhatsApp
- Sistemas de agendamento: lembretes automáticos
FAQ
- Preciso de SDK?
Não. HttpClient nativo do Java 11+ é suficiente. - Funciona com Java 8?
Sim, usando HttpURLConnection ou Apache HttpClient. - Qual o preço?
R$49/mês (1a e 2a instância), R$29/mês (3a+). Trial 7 dias grátis. - Posso usar WebFlux?
Sim. Substitua RestTemplate por WebClient. A API REST funciona com qualquer cliente HTTP.