46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
import os
|
|
from flask import Flask, request, abort, Response
|
|
from dotenv import load_dotenv
|
|
from twilio.request_validator import RequestValidator
|
|
from twilio.twiml.messaging_response import MessagingResponse
|
|
|
|
load_dotenv()
|
|
|
|
app = Flask(__name__)
|
|
|
|
twilio_auth_token = os.environ["TWILIO_AUTH_TOKEN"]
|
|
public_webhook_url = os.environ["PUBLIC_WEBHOOK_URL"]
|
|
|
|
validator = RequestValidator(twilio_auth_token)
|
|
|
|
|
|
@app.post("/whatsapp")
|
|
def whatsapp_webhook():
|
|
signature = request.headers.get("X-Twilio-Signature", "")
|
|
|
|
is_valid = validator.validate(
|
|
public_webhook_url,
|
|
request.form.to_dict(),
|
|
signature
|
|
)
|
|
|
|
if not is_valid:
|
|
print("Firma inválida. Request rechazado.")
|
|
abort(403)
|
|
|
|
incoming_message = request.form.get("Body", "")
|
|
sender = request.form.get("From", "")
|
|
|
|
print("Mensaje recibido desde WhatsApp")
|
|
print("De:", sender)
|
|
print("Texto:", incoming_message)
|
|
|
|
response = MessagingResponse()
|
|
response.message(f"Hola. Recibí tu mensaje: {incoming_message}")
|
|
|
|
return Response(str(response), mimetype="text/xml")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app.run(port=3000, debug=True)
|