80 lines
2.5 KiB
Python
80 lines
2.5 KiB
Python
# Copyright (c) 2025 Patrick Motsch
|
|
# All rights reserved.
|
|
"""
|
|
Twilio SMS Connector
|
|
Handles SMS sending via Twilio
|
|
"""
|
|
|
|
import logging
|
|
from typing import Optional
|
|
from modules.shared.configuration import APP_CONFIG
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class ConnectorMessagingSms:
|
|
"""
|
|
Twilio SMS connector.
|
|
Handles SMS sending.
|
|
"""
|
|
|
|
def __init__(self):
|
|
"""
|
|
Initialize Twilio SMS client using APP_CONFIG.
|
|
"""
|
|
try:
|
|
accountSid = APP_CONFIG.get("MESSAGING_TWILIO_ACCOUNT_SID")
|
|
authToken = APP_CONFIG.get("MESSAGING_TWILIO_AUTH_TOKEN")
|
|
fromNumber = APP_CONFIG.get("MESSAGING_TWILIO_FROM_NUMBER")
|
|
|
|
if not accountSid or not authToken:
|
|
logger.warning("Twilio credentials not configured for SMS")
|
|
self._client = None
|
|
self._fromNumber = None
|
|
return
|
|
|
|
try:
|
|
from twilio.rest import Client
|
|
self._client = Client(accountSid, authToken)
|
|
self._fromNumber = fromNumber
|
|
logger.info("Twilio SMS client initialized successfully")
|
|
except ImportError:
|
|
logger.error("Twilio library not installed. Please install with: pip install twilio")
|
|
self._client = None
|
|
self._fromNumber = None
|
|
|
|
except Exception as e:
|
|
logger.error(f"Failed to initialize Twilio SMS client: {e}")
|
|
self._client = None
|
|
self._fromNumber = None
|
|
|
|
def send(self, recipient: str, subject: str, message: str) -> bool:
|
|
"""
|
|
Send an SMS via Twilio.
|
|
|
|
Args:
|
|
recipient: Recipient phone number (with country code, e.g., '+41791234567')
|
|
subject: Ignored (SMS has no subject)
|
|
message: SMS message content
|
|
|
|
Returns:
|
|
bool: True if successful, False otherwise
|
|
"""
|
|
if not self._client or not self._fromNumber:
|
|
logger.error("Twilio SMS client not initialized")
|
|
return False
|
|
|
|
try:
|
|
messageObj = self._client.messages.create(
|
|
body=message,
|
|
from_=self._fromNumber,
|
|
to=recipient
|
|
)
|
|
|
|
logger.info(f"SMS sent successfully to {recipient}. SID: {messageObj.sid}")
|
|
return True
|
|
|
|
except Exception as e:
|
|
logger.error(f"Failed to send SMS to {recipient}: {e}")
|
|
return False
|
|
|