Enviar imagen

Envia una imagen (JPG/PNG) con caption opcional. Default encola. directo=1 envia al instante.

POST /api/mensaje_enviar_imagen.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 de la imagen (max 5MB)
caption string No Texto que acompana la imagen. Debe ser UNICO si envias la misma imagen a varios destinatarios.
directo boolean No 1 = envio instantaneo. 0 o ausente = cola humanizada.

Respuestas

200 OK
{
    "ok": true,
    "msg_id": "abc123...",
    "modo": "directo|cola"
}
400 Peticion invalida
{
    "ok": false,
    "error": "URL invalida o imagen no accesible"
}

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_imagen.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',
    '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_imagen.php',
    data={
    'key': 'key': 'WA_8_a1b2c3d4e5f6g7h8',
    'destinatario': 'destinatario': '5218711281619',
    'url': 'url': 'https://ejemplo.com/imagen.jpg',
    '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('caption', 'Mira esta imagen');
params.append('directo', 'valor_ejemplo');

const response = await fetch('https://api.multimensajes.com/api/mensaje_enviar_imagen.php', {
    method: 'POST',
    body: params
});
const data = await response.json();
console.log(data);
curl -X POST 'https://api.multimensajes.com/api/mensaje_enviar_imagen.php' \
  -d 'key=WA_8_a1b2c3d4e5f6g7h8' \
  -d 'destinatario=5218711281619' \
  -d 'url=https%3A%2F%2Fejemplo.com%2Fimagen.jpg' \
  -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("caption", "Mira esta imagen")
    form.Add("directo", "valor_ejemplo")

    resp, _ := http.PostForm("https://api.multimensajes.com/api/mensaje_enviar_imagen.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_imagen.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("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_imagen.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',
  '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>("caption", "Mira esta imagen"),
            new KeyValuePair<string, string>("directo", "valor_ejemplo")
        });
        var response = await client.PostAsync("https://api.multimensajes.com/api/mensaje_enviar_imagen.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_imagen.php' \
  -d 'key=WA_8_a1b2c3d4e5f6g7h8' \
  -d 'destinatario=5218711281619' \
  -d 'url=https%3A%2F%2Fejemplo.com%2Fimagen.jpg' \
  -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).

¿Cuando usar cada uno?
  • 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.

Regla: si envias el mismo mensaje (mismo texto + mismo destinatario + mismo celular) 3 veces en 2 minutos, tu cuenta queda bloqueada 5 minutos para ese celular. El bloqueo se aplica con cache en memoria (memoria compartida) y NO requiere query a BD.

El hash de deduplicacion se calcula diferente por tipo:

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."
}
Como evitar el baneo de WhatsApp (y nuestro baneo anti-duplicado):
  1. 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)".
  2. 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.
  3. No envies el mismo contenido a muchos contactos. WhatsApp detecta spam. Si envias 1000 numeros con el mismo texto, te banean.
  4. Usa captions unicos. Si envias la misma imagen a 100 contactos, el caption debe ser distinto para cada uno.
  5. 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.