62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
import requests
|
|
import logging
|
|
from django.conf import settings
|
|
from .models import WhatsAppConfig
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def send_whatsapp_message(phone, message):
|
|
"""
|
|
Sends a WhatsApp message using the Wablas API.
|
|
"""
|
|
try:
|
|
config = WhatsAppConfig.objects.filter(is_active=True).first()
|
|
except Exception as e:
|
|
logger.error(f"Error fetching WhatsApp configuration: {e}")
|
|
config = None
|
|
|
|
if not config or not config.api_token:
|
|
# Fallback to settings for backward compatibility or if DB entry is missing
|
|
token = getattr(settings, 'WABLAS_API_TOKEN', None)
|
|
secret_key = getattr(settings, 'WABLAS_SECRET_KEY', None)
|
|
else:
|
|
token = config.api_token
|
|
secret_key = config.secret_key
|
|
|
|
if not token:
|
|
logger.warning("Wablas API credentials not configured.")
|
|
return False
|
|
|
|
url = "https://deu.wablas.com/api/send-message"
|
|
|
|
# Headers logic based on whether secret key exists
|
|
auth_header = token
|
|
if secret_key:
|
|
auth_header = f"{token}.{secret_key}"
|
|
|
|
headers = {
|
|
"Authorization": auth_header,
|
|
"Content-Type": "application/x-www-form-urlencoded"
|
|
}
|
|
|
|
# Normalize phone number
|
|
phone = str(phone).replace('+', '').replace(' ', '')
|
|
|
|
data = {
|
|
"phone": phone,
|
|
"message": message,
|
|
}
|
|
|
|
try:
|
|
response = requests.post(url, headers=headers, data=data, timeout=10)
|
|
response_json = response.json()
|
|
|
|
if response.status_code == 200 and response_json.get('status') == True:
|
|
logger.info(f"WhatsApp message sent to {phone}")
|
|
return True
|
|
else:
|
|
logger.error(f"Failed to send WhatsApp message to {phone}: {response.text}")
|
|
return False
|
|
except Exception as e:
|
|
logger.exception(f"Exception while sending WhatsApp message: {str(e)}")
|
|
return False |