Enviar documento (PDF, DOC, XLS...)
Envia un archivo PDF, Word, Excel, etc. (max 100MB). Default encola. directo=1 envia al instante.
/api/mensaje_enviar_documento.php
API Key
Parametros
| Nombre | Tipo | Requerido | Descripcion |
|---|---|---|---|
key |
string | Si | API key del celular |
destinatario |
string | Si | Numero con codigo de pais |
url |
string | Si | URL publica del documento |
filename |
string | Si | Nombre del archivo con extension. Ej: factura.pdf |
caption |
string | No | Caption opcional. Personalizarlo si envias el mismo doc a varios. |
directo |
boolean | No | 1 = envio instantaneo. 0 o ausente = cola. |
Ejemplos de codigo
Listos para copiar y pegar. Cubre los 8 lenguajes mas usados.
<?php
// PHP + cURL
$ch = curl_init('https://api.multimensajes.com/api/mensaje_enviar_documento.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'key' => 'WA_8_a1b2c3d4e5f6g7h8',
'destinatario' => '5218711281619',
'url' => 'https://ejemplo.com/imagen.jpg',
'filename' => 'factura.pdf',
'caption' => 'Mira esta imagen',
'directo' => 'valor_ejemplo',
]);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
import requests
response = requests.post(
'https://api.multimensajes.com/api/mensaje_enviar_documento.php',
data={
'key': 'key': 'WA_8_a1b2c3d4e5f6g7h8',
'destinatario': 'destinatario': '5218711281619',
'url': 'url': 'https://ejemplo.com/imagen.jpg',
'filename': 'filename': 'factura.pdf',
'caption': 'caption': 'Mira esta imagen',
'directo': 'directo': 'valor_ejemplo'
},
timeout=30
)
data = response.json()
print(data)
const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));
const params = new URLSearchParams();
params.append('key', 'WA_8_a1b2c3d4e5f6g7h8');
params.append('destinatario', '5218711281619');
params.append('url', 'https://ejemplo.com/imagen.jpg');
params.append('filename', 'factura.pdf');
params.append('caption', 'Mira esta imagen');
params.append('directo', 'valor_ejemplo');
const response = await fetch('https://api.multimensajes.com/api/mensaje_enviar_documento.php', {
method: 'POST',
body: params
});
const data = await response.json();
console.log(data);
curl -X POST 'https://api.multimensajes.com/api/mensaje_enviar_documento.php' \
-d 'key=WA_8_a1b2c3d4e5f6g7h8' \
-d 'destinatario=5218711281619' \
-d 'url=https%3A%2F%2Fejemplo.com%2Fimagen.jpg' \
-d 'filename=factura.pdf' \
-d 'caption=Mira+esta+imagen' \
-d 'directo=valor_ejemplo'
package main
import (
"fmt"
"net/url"
"net/http"
"io/ioutil"
)
func main() {
form := url.Values{}
form.Add("key", "WA_8_a1b2c3d4e5f6g7h8")
form.Add("destinatario", "5218711281619")
form.Add("url", "https://ejemplo.com/imagen.jpg")
form.Add("filename", "factura.pdf")
form.Add("caption", "Mira esta imagen")
form.Add("directo", "valor_ejemplo")
resp, _ := http.PostForm("https://api.multimensajes.com/api/mensaje_enviar_documento.php", form)
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class WhatsAppAPI {
public static void main(String[] args) throws Exception {
URL url = new URL("https://api.multimensajes.com/api/mensaje_enviar_documento.php");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
StringBuilder params = new StringBuilder();
params.append("key=WA_8_a1b2c3d4e5f6g7h8\&");
params.append("
params.append("destinatario=5218711281619\&");
params.append("
params.append("url=https%3A%2F%2Fejemplo.com%2Fimagen.jpg\&");
params.append("
params.append("filename=factura.pdf\&");
params.append("
params.append("caption=Mira+esta+imagen\&");
params.append("
params.append("directo=valor_ejemplo\&");
params.append("
con.getOutputStream().write(params.toString().getBytes());
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line;
while ((line = in.readLine()) != null) System.out.println(line);
}
}
require 'net/http'
require 'uri'
require 'json'
uri = URI('https://api.multimensajes.com/api/mensaje_enviar_documento.php')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new(uri.path)
req.set_form_data(
'key' => 'WA_8_a1b2c3d4e5f6g7h8',
'destinatario' => '5218711281619',
'url' => 'https://ejemplo.com/imagen.jpg',
'filename' => 'factura.pdf',
'caption' => 'Mira esta imagen',
'directo' => 'valor_ejemplo'
)
response = http.request(req)
puts JSON.parse(response.body)
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Collections.Generic;
class Program {
static async Task Main() {
var client = new HttpClient();
var form = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("key", "WA_8_a1b2c3d4e5f6g7h8"),
new KeyValuePair<string, string>("destinatario", "5218711281619"),
new KeyValuePair<string, string>("url", "https://ejemplo.com/imagen.jpg"),
new KeyValuePair<string, string>("filename", "factura.pdf"),
new KeyValuePair<string, string>("caption", "Mira esta imagen"),
new KeyValuePair<string, string>("directo", "valor_ejemplo")
});
var response = await client.PostAsync("https://api.multimensajes.com/api/mensaje_enviar_documento.php", form);
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
}
Pruebalo tu mismo
Copia este comando y pegalo en tu terminal (necesitas curl):
curl -X POST 'https://api.multimensajes.com/api/mensaje_enviar_documento.php' \
-d 'key=WA_8_a1b2c3d4e5f6g7h8' \
-d 'destinatario=5218711281619' \
-d 'url=https%3A%2F%2Fejemplo.com%2Fimagen.jpg' \
-d 'filename=factura.pdf' \
-d 'caption=Mira+esta+imagen' \
-d 'directo=valor_ejemplo'
Endpoints relacionados
Modo directo vs cola
Por default este endpoint usa la cola humanizada: el mensaje se encola y el worker lo envia en los proximos segundos, distribuyendo el trafico para que parezca mas natural y reduzca el riesgo de baneo de WhatsApp.
Si necesitas envio instantaneo (chatbots, 2FA, sistemas en tiempo real), envia el parametro directo=1. La API llama a WhatsApp al instante y registra el resultado como enviado en tu historial. Si WhatsApp devuelve error, la API registra el fallo y devuelve HTTP 5xx (tu codigo debe manejarlo).
- Cola (default): notificaciones batch, marketing, recordatorios, envios masivos. Mas seguro contra baneos.
- Directo (
directo=1): 2FA (codigos OTP), confirmaciones de pedido en tiempo real, chatbots interactivos, alertas criticas.
Ejemplo modo directo (Python):
import requests
r = requests.post(
'https://api.multimensajes.com/api/mensaje_enviar_texto.php',
headers={'Authorization': 'Bearer WA_11_a1b2c3d4...'},
json={
'destinatario': '5218711281619',
'mensaje': 'Tu codigo de verificacion es: 482915',
'directo': 1,
},
timeout=10,
)
data = r.json()
# data['modo'] == 'directo'
# data['wasenderapi_msg_id'] == 'ABC123...' (campo interno del API, ver CHANGELOG)
# data['msg_id'] == UUID interno para tracking
Proteccion anti-duplicado
Para evitar ser bloqueado por WhatsApp (y para que tu cuenta no envie el mismo mensaje en bucle por un bug), la API valida automaticamente que cada mensaje sea unico por destinatario y celular.
El hash de deduplicacion se calcula diferente por tipo:
texto:md5('texto:' . destinatario . '|' . mensaje)imagen:md5('imagen:' . destinatario . '|' . url . '|' . caption)documento:md5('documento:' . destinatario . '|' . url . '|' . filename)audio:md5('audio:' . destinatario . '|' . url)video:md5('video:' . destinatario . '|' . url . '|' . caption)sticker:md5('sticker:' . destinatario . '|' . url)base64:md5('kind:base64:' . sha256(binario))
Respuesta cuando se detecta duplicado:
HTTP 429
{
"ok": false,
"codigo": 306,
"error": "Mensaje duplicado / cuenta bloqueada",
"detalle": "Has enviado el mismo mensaje 3 veces en 120s. Tu cuenta queda bloqueada 300s. ... (bloqueo restante: 245s). Personaliza el contenido: cada mensaje debe ser unico para evitar ser bloqueado por WhatsApp."
}
- Personaliza cada mensaje. Usa el nombre del destinatario, una clave unica, la fecha, o un contador. Ej:
"Hola Juan, tu pedido #4827 esta en camino (enviado el 07/08)". - Respeta los rate limits de WhatsApp. 1 mensaje cada 5 segundos es seguro. Mas de 256 msg/min es riesgo de baneo. La cola humanizada te protege automaticamente.
- No envies el mismo contenido a muchos contactos. WhatsApp detecta spam. Si envias 1000 numeros con el mismo texto, te banean.
- Usa captions unicos. Si envias la misma imagen a 100 contactos, el caption debe ser distinto para cada uno.
- Si tu sistema tiene retry logic, asegurate de que el retry tenga backoff exponencial y un maximo de 3 intentos.
La respuesta exitosa incluye anti_dupe: { count, max: 3, window_s: 120 } para que sepas cuantos envios llevas en la ventana de 2 minutos. Cuando count llegue a 3, el siguiente envio sera rechazado.