Enviar mensajes de video automatizados a grupos de WhatsApp

3 de julio de 2024

Cuando el marketing digital se hizo famoso hace unos años, nadie pensó en usar WhatsApp para estrategias de ventas. Las empresas se centraban en banners y anuncios en internet. Hoy, todo ha cambiado. Ahora tenemos Influencer Marketing, estrategias digitales para redes sociales, comercio electrónico, marketing de afiliados y tiendas que venden exclusivamente vía WhatsApp.

WhatsApp es una plataforma sumamente efectiva para desarrollar nuevos negocios. Con Wassenger, puedes aprovechar las mejores estrategias de ventas a través de WhatsApp, ayudándote a hacer crecer tu negocio e incrementar las ventas. Enviar videos promocionales, informativos o de documentación es una forma eficaz de mantener a los clientes comprometidos e informados.

En este tutorial, te enseñaremos cómo enviar mensajes de video automatizados y más usando Wassenger, para que puedas potenciar tus esfuerzos de marketing y lograr mejores resultados.

🤩 🤖 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 comienza en minutos**!**

Si necesitas enviar mensajes desde código, puedes usar cualquier lenguaje de programación que pueda realizar peticiones 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

Endpoints de la API

En este tutorial usaremos el siguiente endpoint de la API:

¡Noticia de última hora! Ahora puedes enviar mensajes con medios en una sola petición a la 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 video, 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).
  • Datos de formulario (multipart/form-data) usando el campo file con el contenido del archivo.
  • Datos binarios crudos subiendo el contenido del archivo como un flujo de datos con el tipo MIME de archivo apropiado en la cabecera Content-Type, por ejemplo: video/mp4.

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

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

Ten en cuenta que el archivo subido se almacenará en la plataforma por 90 días de forma predeterminada, por lo tanto, 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 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.

Target API URL (POST)

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

Cabeceras HTTPS requeridas

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

Cuerpo de la petición en formato JSON

{
  "url": "https://download.samplelib.com/mp4/sample-5s.mp4"
}

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://download.samplelib.com/mp4/sample-5s.mp4",
  "expiration": "1d",
  "filename": "sample-5s.mp4",
  "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-5s.mp4",
    "size": 53697,
    "mime": "video/mp4",
    "ext": "mp4",
    "kind": "video",
    "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 luego usaremos para enviar el archivo como mensaje multimedia en una petición separada a la API.

Subir archivo usando multipart form data

Puedes subir cualquier archivo a la plataforma usando el mecanismo tradicional de datos de formulario multipart ampliamente usado por los navegadores web para subir distintos tipos de contenido, incluidos archivos, a un servidor remoto.

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

Target API URL (POST)

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

Cabeceras HTTPS requeridas

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

Cuerpo de la petición

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

Dependiendo del lenguaje de programación o del cliente HTTP que utilices, el proceso puede variar. Por simplicidad, vamos a resaltar las herramientas más populares, como Postman, y lenguajes de programación populares.

El requisito principal es definir el campo file en el formulario, 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 comienza en minutos**!**

Subir el archivo desde tu navegador web

Puedes subir archivos manualmente a la plataforma desde la consola web sin instalar ningún software:

Para la subida automatizada de archivos, por favor 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/video.mp4 debe representar la ruta del archivo que deseas subir desde tu disco local:

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

Subir archivo usando Postman

Postman es una herramienta versátil y útil 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/video.mp4'

# 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/video.mp4';
// 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/video.mp4';
// 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/video.mp4"
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)
}
  • C# (RestClient)
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/video.mp4");
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/video.mp4") 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/video.mp4"))
.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 comienza 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 grupo

Para hacerlo, simplemente necesitas conocer el ID del chat de grupo destino y el ID del archivo subido (24 caracteres hexadecimales) que puedes obtener desde los archivos subidos listados aquí o desde la lista de archivos subidos vía la API.

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

Preparar la solicitud

Target API URL (POST)

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

Cabeceras HTTPS requeridas

Content-Type: application/json
Token: $API_KEY

Cuerpo de la petición en formato JSON

Enviando un mensaje a un chat de grupo:

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

Envía el video en el idioma que mejor se adapte a tus necesidades

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:

# Examples requires to have installed requests Python package. # Install it by running: pip install requests

import requests

url = "https://api.wassenger.com/v1/messages"

payload = { "group": "1234567890-100000000@g.us", "message": "This is a caption for a video message", "media": { "url": "https://download.samplelib.com/mp4/sample-5s.mp4", "viewOnce": False } } headers = { "Content-Type": "application/json", "Token": "ENTER API KEY HERE" }

response = requests.post(url, json=payload, headers=headers)

print(response.json())

<?php
$curl = curl_init();
curl_setopt_array($curl, [
  CURLOPT_URL => 'https://api.wassenger.com/v1/messages',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => json_encode([
    'group' => '1234567890-100000000@g.us',
    'message' => 'This is a caption for a video message',
    'media' => [
      'url' => 'https://download.samplelib.com/mp4/sample-5s.mp4',
      'viewOnce' => null,
    ],
  ]),
  CURLOPT_HTTPHEADER => [
    'Content-Type: application/json',
    'Token: ENTER API KEY HERE',
  ],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
  echo 'cURL Error #:' . $err;
} else {
  echo $response;
}
// Examples requires to have installed pecl_http package, a simple and elegant HTTP client for PHP.
// Install it by running: pecl install pecl_http
// More information: https://pecl.php.net/package/pecl_http/3.2.0
<?php
$client = new http\Client();
$request = new http\Client\Request();
$body = new http\Message\Body();
$body->append(
  json_encode([
    'group' => '1234567890-100000000@g.us',
    'message' => 'This is a caption for a video message',
    'media' => [
      'url' => 'https://download.samplelib.com/mp4/sample-5s.mp4',
      'viewOnce' => null,
    ],
  ])
);
$request->setRequestUrl('https://api.wassenger.com/v1/messages');
$request->setRequestMethod('POST');
$request->setBody($body);
$request->setHeaders([
  'Content-Type' => 'application/json',
  'Token' => 'ENTER API KEY HERE',
]);
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
package main
import(
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url:= "https://api.wassenger.com/v1/messages"
payload:= strings.NewReader("{\"group\":\"1234567890-100000000@g.us\", \"message\":\"This is a caption for a video message\", \"media\":{\"url\":\"https://download.samplelib.com/mp4/sample-5s.mp4\", \"viewOnce\":false}}")
req, _:= http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Token", "ENTER API KEY HERE")
res, _:= http.DefaultClient.Do(req)
defer res.Body.Close()
body, _:= io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
  • C# (RestClient)
// This code requires you to have installed RestSharp package.
// Documentation: https://restsharp.dev
// Installation: https://www.nuget.org/packages/RestSharp
var client = new RestClient("https://api.wassenger.com/v1/messages");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Token", "ENTER API KEY HERE");
request.AddParameter("application/json", "{\"group\":\"1234567890-100000000@g.us\", \"message\":\"This is a caption for a video message\", \"media\":{\"url\":\"https://download.samplelib.com/mp4/sample-5s.mp4\", \"viewOnce\":false}}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
require 'uri'
require 'net/http'
url = URI("https://api.wassenger.com/v1/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request["Token"] = 'ENTER API KEY HERE'
request.body = "{\"group\":\"1234567890-100000000@g.us\", \"message\":\"This is a caption for a video message\", \"media\":{\"url\":\"https://download.samplelib.com/mp4/sample-5s.mp4\", \"viewOnce\":false}}"
response = http.request(request)
puts response.read_body
// This code requires you to have installed Unirest package.
// Documentation: https://kong.github.io/unirest-java/#requests
// Installation: http://kong.github.io/unirest-java/
HttpResponse<String> response = Unirest.post("https://api.wassenger.com/v1/messages")
.header("Content-Type", "application/json")
.header("Token", "ENTER API KEY HERE")
.body("{\"group\":\"1234567890-100000000@g.us\", \"message\":\"This is a caption for a video message\", \"media\":{\"url\":\"https://download.samplelib.com/mp4/sample-5s.mp4\", \"viewOnce\":false}}")
.asString();

Prueba en vivo para enviar un mensaje a un grupo usando la API

Explora nuestro probador de API en vivo

🤩 🤖 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 comienza en minutos**!**

Preguntas frecuentes

¿Qué tipo 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 peticiones a la API, una por cada número de teléfono destino.

Por ejemplo, si quieres enviar un mensaje a 10 números de teléfono, deberías enviar 10 peticiones HTTPS independientes a la API.

No existe una opción para enviar múltiples mensajes en una sola petición a la 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, por favor consulta la documentación del endpoint de la API aquí.

Antes de verificar 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 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 preguntas frecuentes extendidas.

Recursos útiles adicionales

Documentación de la API

Para más detalles sobre los endpoints de la API, por favor revisa la documentación donde encontrarás todos los detalles sobre los parámetros de petición 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