Maytapi/Documentación/Guía de Java
Guía de JavaUnos 10 minutosCómo enviar un mensaje de WhatsApp con Java
Envía mensajes de texto y multimedia desde Java con una sola petición HTTP y recibe las respuestas en tu propio webhook. REST y JSON puros: sin SDK ni aprobación de plantillas.
Última actualización:
- Java
- REST + JSON
- sin SDK
- respuestas por webhook
// Java 15+ (java.net.http, text blocks)
import java.net.URI;
import java.net.http.*;
String pid = "your-pid";
String phoneId = "your-phone-id";
String token = "your-token";
String body = """
{"to_number": "3461xxxxx67", "type": "text", "message": "Hello from Java!"}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.maytapi.com/api/" + pid + "/" + phoneId + "/sendMessage"))
.header("x-maytapi-key", token)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Qué necesitas
Cuatro cosas, todas disponibles en la consola en pocos minutos.
-
cuenta
Una cuenta de Maytapi
Regístrate e inicia la prueba gratuita, sin tarjeta.
-
teléfono
Un número vinculado
Escanea el código QR con WhatsApp en tu teléfono. Tu número sigue funcionando como siempre.
-
token
pid y token
Cópialos de la página de token de la consola; el phone_id aparece junto a tu número.
-
Java
Un entorno de Java
Basta con una versión reciente de Java y su cliente HTTP estándar.
Envía un mensaje de texto con Java
Haz un POST con un cuerpo JSON a /sendMessage con tu token en la cabecera x-maytapi-key. El mensaje se encola en tu teléfono y la respuesta llega al instante.
- ✓to_number en formato internacional, p. ej. 3461xxxxx67
- ✓type: text y el texto del mensaje
- ✓La respuesta incluye el id del mensaje
curl -X POST "https://api.maytapi.com/api/$PID/$PHONE_ID/sendMessage" \
-H "x-maytapi-key: $TOKEN" \
-H "Content-Type: application/json" \
-d '{"to_number": "3461xxxxx67", "type": "text", "message": "Hello from Java!"}'{
"success": true,
"data": {
"chatId": "3461xxxxx67@c.us",
"msgId": "3EB065B353B9493D00C9"
}
}Envía una imagen, un video o un documento
Usa el mismo endpoint con type media y una URL pública o un data URI en base64. Añade un pie de foto y un nombre de archivo opcionales.
- ✓Imágenes, video, audio, PDF y otros documentos
- ✓Pie de foto en el campo text
- ✓Los data URI en base64 funcionan igual que las URL
String body = """
{
"to_number": "3461xxxxx67",
"type": "media",
"message": "https://example.com/invoice-10482.pdf",
"text": "Your invoice for order #10482",
"filename": "invoice-10482.pdf"
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.maytapi.com/api/" + pid + "/" + phoneId + "/sendMessage"))
.header("x-maytapi-key", token)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());Recibe respuestas con un webhook en Java
Registra la URL del webhook una vez. Los mensajes entrantes y las confirmaciones de entrega y lectura llegan en JSON; responde con la URL reply incluida en cada evento.
- ✓Devuelve 200 rápido y luego procesa el evento
- ✓Omite tus propios mensajes con fromMe
- ✓Usa event.reply para responder en el mismo chat
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.maytapi.com/api/" + pid + "/setWebhook"))
.header("x-maytapi-key", token)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"webhook\": \"https://example.com/maytapi/webhook\"}"))
.build();
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());@RestController
public class WebhookController {
private final RestClient client = RestClient.create();
@PostMapping("/maytapi/webhook")
public ResponseEntity<Void> webhook(@RequestBody Map<String, Object> event) {
Map<String, Object> message = (Map<String, Object>) event.get("message");
if ("message".equals(event.get("type")) && !Boolean.TRUE.equals(message.get("fromMe"))) {
client.post()
.uri((String) event.get("reply"))
.header("x-maytapi-key", token)
.contentType(MediaType.APPLICATION_JSON)
.body(Map.of(
"to_number", event.get("conversation"),
"type", "text",
"message", "Thanks! We received your message."))
.retrieve()
.toBodilessEntity();
}
return ResponseEntity.ok().build();
}
}FAQ de WhatsApp API con Java
Pregunta lo que quieras a nuestro equipo de soporte por WhatsApp. El tiempo medio de respuesta es inferior a 24 horas.
Centro de ayuda →¿Hay un SDK oficial para Java?
No hace falta. La API es REST con JSON, así que basta con el cliente HTTP estándar de Java, como muestran los ejemplos de esta página.
¿Puedo enviar mensajes a grupos desde Java?
Sí. Usa el id del grupo (termina en @g.us) como to_number; los endpoints de grupos están disponibles en todos los planes.
¿Por qué no llegó mi mensaje?
Comprueba que el estado del teléfono esté activo y revisa la cola y los registros en la consola. Los números nuevos deben calentarse antes de enviar en volumen.
Más funciones de WhatsApp API

Consigue tu clave y envía tu primer mensaje en diez minutos
Sin aprobación, sin plantillas, sin tarjeta. Todos los endpoints abiertos durante tres días.