Enviar mensajes multimedia de WhatsApp a través de API

23 de abril de 2024

Bienvenido al mundo dinámico de la mensajería multimedia potenciada por API. Aquí tienes la oportunidad de revolucionar tus chats de WhatsApp enviando no sólo texto, sino toda una variedad de tipos de medios. Imagina animar tus mensajes con GIFs geniales, documentos importantes o incluso videos atractivos directamente desde tu ordenador.

Este tutorial no es solo para expertos en tecnología. Tanto si eres nuevo en la programación como si ya llevas tiempo trasteando, verás cómo con sólo unas pocas líneas de código puedes dar vida a tus mensajes. Hablamos de hacer tus conversaciones más ricas y coloridas, convirtiendo cada mensaje que envíes en una experiencia.

¿Listo para darle un toque especial a tus chats y conectar con tu audiencia de una forma completamente nueva? Vamos a sumergirnos en esta aventura multimedia y ver lo simple que es hacer que tus mensajes destaquen.

🤩 🤖 Wassenger es una plataforma de comunicación completa y una solución API para WhatsApp. Explora más de 100+ casos de uso de la API y automatiza cualquier cosa en WhatsApp registrándote para una prueba gratuita y empezando en minutos**!**

En este tutorial aprenderás a enviar mensajes multimedia a números de teléfono y listas de chat de grupo usando la API.

Un archivo multimedia puede ser cualquiera de los siguientes: imágenes (JPEG, PNG, WEBP), videos (MP4, 3GPP), audios (MP3, OGG, MP4, ACC), gifs (MP4) y documentos (PDF, PPT, PPTX, DOCX, DOC, ZIP, RAR, otros tipos binarios).

Si necesitas enviar mensajes desde código, puedes usar cualquier lenguaje de programación que pueda realizar solicitudes HTTPS a la API. A continuación encontrarás el probador de API en vivo con ejemplos de código listos para usar en varios lenguajes de programación.

Requisitos

  • Tener un número de WhatsApp ya vinculado a la plataforma y en línea.
  • Número de teléfono destinatario con prefijo internacional en formato E164. Ejemplo: +12345678900. Valida el formato del número de teléfono aquí.

Endpoints de la API

En este tutorial usaremos el siguiente endpoint de la API:

¡Últimas noticias! Ahora puedes enviar mensajes multimedia en una sola solicitud API pasando la URL remota donde está almacenado el archivo. Haz clic aquí para probarlo

Subir el archivo

Para enviar un archivo como mensaje multimedia, en este caso un archivo de imagen, primero debes subir el archivo a la plataforma.

Puedes subir el archivo utilizando los siguientes métodos mediante la API:

  • URL remota usando JSON con un campo url con la URL públicamente accesible para descargar el archivo (recomendado).
  • Form data (multipart/form-data) usando el campo file con el contenido del archivo.
  • Datos binarios en bruto subiendo el contenido del archivo como un stream de datos con el tipo MIME de archivo adecuado en el encabezado Content-Type, por ejemplo: image/jpeg, application/pdf.

En este tutorial cubriremos los dos primeros métodos de subida de archivos.

Subir el archivo permite al sistema validar y almacenar el archivo solo una vez, evitando el coste de subida y procesamiento cada vez que se entrega un mensaje multimedia, mejorando así la velocidad de entrega del mensaje y simplificando la integración con la API.

Ten en cuenta que el archivo subido se almacenará en la plataforma durante 90 días por defecto, por lo que en muchos casos solo deberías subir el archivo una vez y ya está. Opcionalmente, también puedes configurar cuánto tiempo debe almacenarse el archivo en la plataforma definiendo un tiempo de expiración personalizado; para más detalles consulta la documentación de la API. Por defecto, tu cuenta tiene 10GB de capacidad de almacenamiento de archivos en la nube.

Subir el archivo usando una URL remota

Puedes subir cualquier archivo a la plataforma simplemente especificando la URL pública desde donde descargar el archivo.

En caso de que la URL no sea accesible públicamente, devuelva un estado HTTP no válido (>=400) o devuelva contenido no binario, como HTML o texto, la API devolverá un error.

URL objetivo de la API (POST)

https://api.wassenger.com/v1/files

Encabezados HTTPS requeridos

Content-Type: application/json
Token: $API-TOKEN

Cuerpo de la solicitud en formato JSON

{
  "url": "https://picsum.photos/seed/picsum/600/400"
}

Alternativamente, también puedes especificar campos opcionales al subir el archivo, como un tiempo de expiración personalizado, un identificador de referencia o un nombre de archivo personalizado.

{
  "url": "https://picsum.photos/seed/picsum/600/400",
  "expiration": "1d",
  "filename": "custom-filename.jpg",
  "reference": "Optional reference ID"
}

Obtén el ID del archivo desde la respuesta de la API

Si el archivo se sube correctamente a la plataforma, la API devolverá una respuesta válida en formato JSON como esta:

[
  {
    "id": "[Redacted ID]",
    "format": "native",
    "filename": "sample.jpg",
    "size": 53697,
    "mime": "image/jpeg",
    "ext": "jpeg",
    "kind": "image",
    "sha2": "[Redacted Hash]",
    "tags": [],
    "status": "active",
    "mode": "default",
    "createdAt": "2021-05-08T22:49:50.954Z",
    "expiresAt": "2021-09-06T22:49:50.949Z"
  }
]

Importante: Del JSON de respuesta debes obtener el campo id con un valor, por ejemplo 06248ed01a7a65946c0701, que representa el ID único del archivo que posteriormente usaremos para enviar el archivo como mensaje multimedia en una solicitud API separada.

Subir archivo usando multipart form data

Puedes subir cualquier archivo a la plataforma usando el mecanismo tradicional de multipart form data ampliamente usado por los navegadores web para subir diferentes tipos de contenido, incluyendo archivos, a un servidor remoto.

Aquí puedes aprender más sobre cómo funciona la subida multipart.

URL objetivo de la API (POST)

https://api.wassenger.com/v1/files

Encabezados HTTPS requeridos

Content-Type: multipart/form-data
Token: $API-TOKEN

Cuerpo de la solicitud

A diferencia de la subida basada en JSON, en este caso necesitamos apoyarnos en un mecanismo más complejo basado en el cliente HTTP que estemos usando y que nos ayudará a componer los campos del formulario según la especificación multipart.

Dependiendo del lenguaje de programación o software cliente HTTP que estés usando, el proceso puede variar. Por simplicidad, destacaremos las herramientas más populares, como Postman, y los lenguajes de programación más utilizados.

El requisito principal es definir el campo file en el formulario de datos; de lo contrario, la API devolverá un error, ya que este campo es obligatorio.

🤩 🤖 Wassenger es una plataforma de comunicación completa y una solución API para WhatsApp. Explora más de 100+ casos de uso de la API y automatiza cualquier cosa en WhatsApp registrándote para una prueba gratuita y empezando en minutos**!**

Subir el archivo desde tu navegador web

Puedes subir archivos manualmente con facilidad a la plataforma desde la consola web sin instalar software:

Para la subida automatizada de archivos, consulta las opciones alternativas a continuación.

Subir archivo usando cURL

cURL es un cliente HTTP de línea de comandos popular y útil.

Puedes subir archivos fácilmente desde la línea de comandos usando el siguiente comando, donde path/to/image.jpg debe representar la ruta del archivo que deseas subir desde tu disco local:

curl \
-F file=@path/to/image.jpg \
-H 'Token: $API-TOKEN' \
https://api.wassenger.com/v1/files

Subir archivo usando Postman

Postman es una herramienta versátil y práctica para pruebas y depuración HTTP.

Siguiendo este sencillo tutorial, puedes subir archivos usando Postman, reemplazando la URL objetivo por la de la API.

Explora el tutorial de Postman aquí

Subir archivo usando código

Explora cómo usar el código en tu navegador sin instalar ningún software.

Además, puedes encontrar diferentes lenguajes que puedes probar en Replit.com:

# Requires to install requests package:
# Run: pip install requests
import requests
# Customize the local path of the file to upload
filepath = '/path/to/image.jpg'
# API key required in order to authenticate the upload
apikey = '$API_KEY'
# Read file to upload
files = {'file': open(filepath, 'rb')}
# Upload file
response = requests.post('https://api.wassenger.com/v1/files', files=files)
if response.status_code >= 400:
print('Request failed with invalid status:', response.status_code)
else:
json = response.json()
file_id = json[0]['id']
print('File uploaded successfully with ID:', file_id)
// Customize the local path of the file to upload
$filepath = '/path/to/image.jpg';
// API key required in order to authenticate the upload
$apikey = '$API_KEY';
// Upload file
$upload = curl_init();
curl_setopt_array($upload, array(
CURLOPT_URL => 'https://api.wassenger.com/v1/files', 
CURLOPT_HTTPHEADER => array(
"Token: $apikey"
), 
CURLOPT_POSTFIELDS => array(
'file' => new CURLFile($filepath)
), 
CURLOPT_POST => TRUE, 
CURLOPT_SSL_VERIFYPEER => FALSE, 
CURLOPT_SSL_VERIFYHOST => FALSE
);
$response = curl_exec($upload);
if(curl_errno($ch) {
echo("Request failed");
} else if(curl_getinfo($ch, CURLINFO_HTTP_CODE) >= 400) {
echo("Invalid request or unsupported file to upload");
} else {
$json = json_decode($response, true);
$file_id = $json[0]['id'];
echo("File uploaded successfully with ID: $file_id");
}
// Requires to install pecl_http package
// Run: pecl install pecl_http
// More information: https://pecl.php.net/package/pecl_http/3.2.0
$client = new http\Client;
$request = new http\Client\Request;
// Customize the local path of the file to upload
$filepath = '/path/to/image.jpg';
// API key required in order to authenticate the upload
$apikey = '$API_KEY';
// Prepare request
$body = new http\Message\Body;
$body->addForm(null, [
[
'name' => 'file', 
'type' => null, 
'file' => $filename, 
'data' => null
]
]);
$request->setRequestUrl('https://api.wassenger.com/v1/files');
$request->setRequestMethod('POST');
$request->setBody($body);
$request->setQuery(new http\QueryString([
'reference' => 'optional-reference-id'
]));
$request->setHeaders([
'Token' => $apikey
]);
$client->enqueue($request)->send();
$response = $client->getResponse();
if($response->getResponseCode() >= 400) {
echo("Invalid request or unsupported file to upload");
} else {
$body = json_decode($response->getBody()->toString());
$file_id = $json[0]['id'];
echo("File uploaded successfully with ID: $file_id");
}
package main
import(
"net/http"
"os"
"bytes"
"path"
"path/filepath"
"mime/multipart"
"io"
"encoding/json"
)
// API key required in order to authenticate the upload
const apiKey = "$API_KEY"
func main() {
# Customize the local path of the file to upload
fileName:= "path/to/image.jpg"
fileDir, _:= os.Getwd()
filePath:= path.Join(fileDir, fileName)
file, _:= os.Open(filePath)
defer file.Close()
body:= &bytes.Buffer{}
writer:= multipart.NewWriter(body)
part, _:= writer.CreateFormFile("file", filepath.Base(file.Name()))
io.Copy(part, file)
writer.Close()
r, _:= http.NewRequest("POST", "https://api.wassenger.com/v1/files", body)
r.Header.Add("Token", apiKey)
r.Header.Add("Content-Type", writer.FormDataContentType())
client:= &http.Client{Timeout: 90 * time.Second}
response, err:= client.Do(r)
if err != nil {
fmt.Printf("Request failed with an error: %s", err.Error())
return
}
if(response.StatusCode >= 400) {
fmt.Printf("Request failed with response status: %d", response.StatusCode)
return
}
body:= []struct{
Id string `json:"id"`
}{}
defer response.Body.Close()
err:= json.NewDecoder(response.Body).Decode(&body)
if err != nil {
fmt.Printf("Failed to decode JSON: %s", err.Error())
return
}
fileId:= body[0].Id
fmt.Printf("File uploaded successfully with ID:", fileId)
}
RestClient restClient = new RestClient("https://api.wassenger.com");
RestRequest restRequest = new RestRequest("/v1/files");
restRequest.Method = Method.POST;
restRequest.AddHeader("Token", "$API_KEY");
restRequest.AddHeader("Content-Type", "multipart/form-data");
restRequest.AddFile("file", "/path/to/image.jpg");
var response = restClient.Execute(restRequest);
var json = JsonConvert.DeserializeObject(response.Content);
var fileId =(string)json[0]["id"];
Console.WriteLine("File uploaded successfully with ID: {0}", fileId);
require 'net/http/post/multipart'
url = URI.parse('https://api.wassenger.com/v1/files')
File.open("/path/to/image.jpg") do |image|
req = Net::HTTP::Post::Multipart.new url.path, "file" => UploadIO.new(image, "image/jpeg", "image.jpg")
req['Token'] = "API_KEY"
res = Net::HTTP.start(url.host, url.port) do |http|
http.request(req)
end
end
List<File> = Unirest.post("https://api.wassenger.com/v1/files")
.header("Token", "API_KEY")
.field("file", new File("/path/to/image.jpg"))
.getBody()

🤩 🤖 Wassenger es una plataforma de comunicación completa y una solución API para WhatsApp. Explora más de 100+ casos de uso de la API y automatiza cualquier cosa en WhatsApp registrándote para una prueba gratuita y empezando en minutos**!**

Prueba en vivo de la subida de archivos usando la API

Explora nuestro probador de API en vivo

Enviar mensajes multimedia a un número de teléfono

Enviar un nuevo mensaje multimedia vía API es fácil; solo necesitas conocer el número de teléfono objetivo en formato E164 y el ID del archivo subido (hexadecimal de 24 caracteres) que puedes obtener desde el listado de archivos subidos aquí o desde la lista de archivos subidos vía API.

Puedes enviar mensajes a cualquier número de teléfono en todo el mundo que tenga una cuenta de WhatsApp; no es necesario agregar un número de teléfono como contacto en la agenda de tu dispositivo móvil.

Preparar la solicitud

URL objetivo de la API (POST)

https://api.wassenger.com/v1/messages

Encabezados HTTPS requeridos

Content-Type: application/json
Token: $API_KEY

Cuerpo de la solicitud en formato JSON

{
  "phone": "+12345678900",
  "message": "This is a media message example 😀",
  "media": {
    "file": "UPLOADED FILE ID GOES HERE"
  }
}

Ahora puedes enviar el mensaje multimedia vía API.

Enviar mensajes multimedia a un grupo

Muy similar al escenario anterior, también puedes enviar mensajes multimedia a chats de grupo.

Para enviar mensajes a un grupo, debes ser participante del mismo con permisos para enviar mensajes. Si eres el administrador del grupo tendrás permisos completos para enviar mensajes.

Preparar la solicitud

URL objetivo de la API (POST)

https://api.wassenger.com/v1/messages

Encabezados HTTPS requeridos

Content-Type: application/json
Token: $API_KEY

Cuerpo de la solicitud en formato JSON

Enviar un mensaje a un chat de grupo:

{
  "group": "120363163556487865@g.us",
  "message": "This is a media message example sent a group 😀",
  "media": {
    "file": "UPLOADED FILE ID GOES HERE"
  }
}

Prueba en vivo: enviar mensajes multimedia usando la API

Ahora puedes ejecutar, depurar y probar la API en vivo directamente desde tu navegador; explora y prueba más ejemplos de la API y obtén con un clic fragmentos de código listos para usar disponibles en más de 15 lenguajes de programación 😎

Pruébalo ahora

🤩 🤖 Wassenger es una plataforma de comunicación completa y una solución API para WhatsApp. Explora más de 100+ casos de uso de la API y automatiza cualquier cosa en WhatsApp registrándote para una prueba gratuita y empezando en minutos**!**

Preguntas frecuentes

¿Qué tipos de archivos multimedia se pueden enviar?

Puedes enviar imágenes (JPEG, PNG, WEBP), videos (MP4, 3GPP), audios (MP3, OGG, MP4, ACC), gifs (MP4) y documentos (PDF, PPT, PPTX, DOCX, DOC, ZIP, RAR, otros tipos binarios).

Consulta la documentación de la API para más detalles.

Cómo enviar mensajes a múltiples números de teléfono

Solo tienes que enviar múltiples solicitudes API, una por cada número de teléfono destino.

Por ejemplo, si quieres enviar un mensaje a 10 números de teléfono, debes enviar 10 solicitudes HTTPS independientes a la API.

No existe una opción para enviar múltiples mensajes en una sola solicitud API.

Cómo validar si un número de teléfono puede recibir mensajes de WhatsApp

Puedes validar si un número de teléfono dado está vinculado a una cuenta de WhatsApp y puede recibir mensajes.

La API proporciona un endpoint que puede validar si un número de teléfono existe en WhatsApp o no.

El único requisito es tener al menos un número de WhatsApp conectado a la plataforma en tu cuenta actual.

Para más detalles, consulta la documentación del endpoint de la API aquí.

Antes de comprobar si un número de teléfono existe en WhatsApp, también puedes validar y normalizar el formato de una lista de números de teléfono usando el endpoint validador de números. Este endpoint solo valida el formato correcto E164, pero no comprueba si el número de teléfono existe efectivamente en WhatsApp.

Nota: El número de validaciones de comprobación de WhatsApp está limitado por mes según tu plan de suscripción. Consulta la tabla de precios para más detalles sobre los límites.

¿Buscas más respuestas? Consulta las FAQs extendidas.

Recursos útiles adicionales

Documentación de la API

Para más detalles sobre los endpoints de la API, consulta la documentación donde encontrarás todos los detalles sobre los parámetros de solicitud aceptados, posibles respuestas de éxito o error y ejemplos de código listos para usar en múltiples lenguajes de programación:

https://app.wassenger.com/docs/#tag/Files

Ready to transform your WhatsApp communication?

Start automating your customer interactions today with Wassenger

Get Started Free