Parte 1: Si no tiene tiempo para leer
- Responder a un comando desconocido, esto podría ser una instrucción o tu mensaje de bienvenida;
- Enviar mensaje regular;
- Enviar imagen;
- Enviar archivo;
- Enviar video;
- Enviar contacto (vCard);
- Enviar producto;
- Crear nuevo grupo, enviar una invitación y enviar mensaje al grupo;
- Recibir y leer mensajes entrantes;
Y si necesitas ayuda, solo escríbenos en el chat de soporte en cualquier página del sitio.
Si estás decidiendo qué proveedor elegir, o no entiendes bien la diferencia entre WhatsApp Business API y WhatsApp API, te será útil estudiar nuestra guía donde compararemos proveedores, funcionalidades, precios y soluciones actuales. Esto será útil para que todos puedan decidir qué API y qué proveedor elegir. Así que sumérgete en nuestro artículo "Cómo elegir WhatsApp API. Comparación."
Parte 2: Automatización de WhatsApp usando Python
- Interacción con WhatsApp API usando Python;
- Integración con Whapi.Cloud y automatización de cualquier funcionalidad;
- Uso de Flask para procesar mensajes entrantes y responder a ellos;
Preparándose para el desarrollo
- Instalación de Python. Si aún no has instalado Python, visita el sitio oficial de Python y sigue las instrucciones de instalación. Recomendamos usar la versión Python 3.6 o superior.
- Token de Whapi.Cloud WhatsApp API. Necesitarás una cuenta de Whapi.Cloud para obtener un token que permita a tu bot interactuar con WhatsApp a través de la API. Tras registrarte, recibirás un canal gratuito con un token único. Actualmente, Whapi.Cloud es el proveedor más funcional y estable que ofrece acceso asequible a la API de WhatsApp.
- Instalación de Flask. Flask es un marco web ligero en Python que usaremos para configurar nuestro servidor y procesar los webhooks de WhatsApp. Puedes instalar Flask con el siguiente comando: pip install Flask
- Configuración del webhook. Para que tu servidor pueda recibir mensajes y eventos entrantes de WhatsApp, necesitas configurar un webhook. En Whapi.Cloud podrás indicar varios ganchos (URL de tu servidor) para diferentes eventos, donde se enviarán las notificaciones. Abordaremos este tema con más detalle más adelante en el artículo.
- Entorno de trabajo. Se recomienda usar un entorno virtual (por ejemplo, virtualenv) para aislar las dependencias y asegurar la portabilidad de tu proyecto.
Integración con WhatsApp API vía Whapi.Cloud en Python
Después de activar el canal, busque su token API en la sección de límites. Este token es crucial para la autenticación al acceder al API. Por lo general, se envía en los encabezados de las solicitudes como un Bearer Token o como un parámetro, dependiendo de cómo acceda al API.
La API de Whapi.Cloud ofrece muchos métodos para interactuar con WhatsApp, permitiéndole realmente automatizar las principales características y funciones del mensajero. En la página del canal, puede explorar y probar todos los métodos disponibles. Se le proporciona un hub especializado para desarrolladores, donde cada función está acompañada de ejemplos de código y la capacidad de probar in situ, mostrando los resultados y respuestas del servidor. Esto simplifica y acelera enormemente el proceso de integración. ¡Le encantará! Una de las ventajas de Whapi.Cloud es la facilidad y rapidez de conexión, lo que le permite comenzar a interactuar con WhatsApp en solo unos minutos.
¿Qué es Webhook y cómo lo configuro?
Hemos explorado todos los matices del trabajo con webhooks en más detalle en nuestra base de conocimientos: Ver artículo sobre webhooks
Creando la base del Bot de WhatsApp en Python
Enviar mensaje de WhatsApp usando Python
import requests
url = "https://gate.whapi.cloud/messages/text?token=bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX"
payload = {
"typing_time": 0,
"to": "[email protected]",
"body": "Hello, world!"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
Recibiendo mensajes a través de Flask Webhook
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def whatsapp_webhook():
incoming_message = request.json
# Process the message here
return jsonify(status='success'), 200
import requests
url = "https://gate.whapi.cloud/settings?token=YOUR_TOKEN"
payload = {
"callback_persist": True,
"webhooks": [
{
"events": [
{
"type": "messages",
"method": "post"
},
{
"type": "ack",
"method": "post"
}
],
"mode": "body",
"url": "Webhook URL, http or https"
}
]
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)
Código fuente del bot de WhatsApp en Python
TOKEN=Your_token # API token from your channel
API_URL=https://gate.whapi.cloud # API endpoint URL
BOT_URL=https://your_bot_url_here/messages # Webhook Link to your server. At ( {server link}/messages ), when POST is requested, processing occurs
PRODUCT_ID=6559353560856703 # The ID of the product we will send for the example. Create a product in your WhatsApp and find out the product ID: https://whapi.readme.io/reference/getproducts
[email protected] # The ID of the group to which we will send the message. Use to find out the ID: https://whapi.readme.io/reference/getgroups
PORT=80 # example, 80 or 443
from flask import Flask, request, jsonify
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
import os
from dotenv import load_dotenv
load_dotenv() # Load environment variables from a .env file
app = Flask(__name__)
COMMANDS = {
'TEXT': 'Simple text message',
'IMAGE': 'Send image',
'DOCUMENT': 'Send document',
'VIDEO': 'Send video',
'CONTACT': 'Send contact',
'PRODUCT': 'Send product',
'GROUP_CREATE': 'Create group',
'GROUP_TEXT': 'Simple text message for the group',
'GROUPS_IDS': "Get the id's of your three groups"
}
FILES = {
'IMAGE': './files/file_example_JPG_100kB.jpg',
'DOCUMENT': './files/file-example_PDF_500_kB.pdf',
'VIDEO': './files/file_example_MP4_480_1_5MG.mp4',
'VCARD': './files/sample-vcard.txt'
}
def send_whapi_request(endpoint, params=None, method='POST'):
headers = {
'Authorization': f"Bearer {os.getenv('TOKEN')}"
}
url = f"{os.getenv('API_URL')}/{endpoint}"
if params:
if 'media' in params:
details = params.pop('media').split(';')
with open(details[0], 'rb') as file:
m = MultipartEncoder(fields={**params, 'media': (details[0], file, details[1])})
headers['Content-Type'] = m.content_type
response = requests.request(method, url, data=m, headers=headers)
elif method == 'GET':
response = requests.get(url, params=params, headers=headers)
else:
headers['Content-Type'] = 'application/json'
response = requests.request(method, url, json=params, headers=headers)
else:
response = requests.request(method, url, headers=headers)
print('Whapi response:', response.json())
return response.json()
def set_hook():
if os.getenv('BOT_URL'):
settings = {
'webhooks': [
{
'url': os.getenv('BOT_URL'),
'events': [
{'type': "messages", 'method': "post"}
],
'mode': "method"
}
]
}
send_whapi_request('settings', settings, 'PATCH')
@app.route('/messages', methods=['POST'])
def handle_new_messages():
try:
messages = request.json.get('messages', [])
endpoint = None
for message in messages:
if message.get('from_me'):
continue
sender = {'to': message.get('chat_id')}
command_input = message.get('text', {}).get('body', '').strip()
command = list(COMMANDS.keys())[int(command_input) - 1] if command_input.isdigit() else None
if command == 'TEXT':
sender['body'] = 'Simple text message'
endpoint = 'messages/text'
elif command == 'IMAGE':
sender['caption'] = 'Text under the photo.'
sender['media'] = FILES['IMAGE'] + ';image/jpeg'
endpoint = 'messages/image'
elif command == 'DOCUMENT':
sender['caption'] = 'Text under the document.'
sender['media'] = FILES['DOCUMENT'] + ';application/pdf'
endpoint = 'messages/document'
elif command == 'VIDEO':
sender['caption'] = 'Text under the video.'
sender['media'] = FILES['VIDEO'] + ';video/mp4'
endpoint = 'messages/video'
elif command == 'CONTACT':
sender['name'] = 'Whapi Test'
with open(FILES['VCARD'], 'r') as vcard_file:
sender['vcard'] = vcard_file.read()
endpoint = 'messages/contact'
elif command == 'PRODUCT':
# Example: You need to replace config.product with an actual product ID
product_id = os.getenv('PRODUCT_ID') # Replace with your product ID
endpoint = f'business/products/{product_id}'
elif command == 'GROUP_CREATE':
# Example: You need to replace config.phone with an actual phone number
participants = [message.get('chat_id').split('@')[0]] # Replace with the phone number
response = send_whapi_request('groups', {'subject': 'Whapi.Cloud Test', 'participants': participants})
sender['body'] = f"Group created. Group id: {response.get('group_id')}" if response.get('group_id') else 'Error'
endpoint = 'messages/text'
elif command == 'GROUP_TEXT':
sender['to'] = os.getenv('GROUP_ID') # Replace with your group ID
sender['body'] = 'Simple text message for the group'
endpoint = 'messages/text'
elif command == 'GROUPS_IDS':
groups_response = send_whapi_request('groups', {'count': 3}, 'GET')
groups = groups_response.get('groups', [])
sender['body'] = ',\n '.join(f"{group['id']} - {group['name']}" for group in groups) if groups else 'No groups'
endpoint = 'messages/text'
else:
sender['body'] = "Hi. Send me a number from the list. Don't forget to change the actual data in the code!\n\n" + \
'\n'.join(f"{i + 1}. {text}" for i, text in enumerate(COMMANDS.values()))
endpoint = 'messages/text'
if endpoint is None:
return 'Ok', 200
response = send_whapi_request(endpoint, sender)
print(f"Response from Whapi: {response}")
return 'Ok', 200
except Exception as e:
print(e)
return str(e), 500
@app.route('/', methods=['GET'])
def index():
return 'Bot is running'
if __name__ == '__main__':
set_hook()
port = os.getenv('PORT') or (443 if os.getenv('BOT_URL', '').startswith('https:') else 80)
app.run(port=port, debug=True)
Capacidades avanzadas
Enviar un mensaje con una imagen multimedia
import requests
url = "https://gate.whapi.cloud/messages/image?token=bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX"
payload = {
"to": "[email protected]",
"media": "data:image/png;name=android-chrome-192x192.png;base64,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"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
Enviar un archivo a través de la API de WhatsApp
import requests
url = "https://gate.whapi.cloud/messages/document?token=bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX"
payload = {
"to": "[email protected]",
"media": "data:application/octet-stream;name=site.webmanifest;base64,ewogICAgIm5hbWUiOiAiIiwKICAgICJzaG9ydF9uYW1lIjogIiIsCiAgICAiaWNvbnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAic3JjIjogIi9hbmRyb2lkLWNocm9tZS0xOTJ4MTkyLnBuZyIsCiAgICAgICAgICAgICJzaXplcyI6ICIxOTJ4MTkyIiwKICAgICAgICAgICAgInR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgIH0KICAgIF0sCiAgICAidGhlbWVfY29sb3IiOiAiI2ZmZmZmZiIsCiAgICAiYmFja2dyb3VuZF9jb2xvciI6ICIjZmZmZmZmIiwKICAgICJkaXNwbGF5IjogInN0YW5kYWxvbmUiCn0K"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)