from datetime import datetime
from typing import Dict, List, Any
from linkzone.common.exceptions import UserValueError
from linkzone.common.data_models import SendSMSRequest, SMSParams
from linkzone.core.base_api_client import BaseAPIClient
[docs]
class SMS(BaseAPIClient[Dict[str, Any]]): # Especificar tipo de respuesta
"""
Class for SMS requests
"""
ERROR_MSG_PHONE_NUMBER_REQUIRED = "Phone number must be provided"
ERROR_MSG_MESSAGE_REQUIRED = "Message must be provided"
def __init__(self) -> None:
super().__init__()
self._send_sms_request: SendSMSRequest = SendSMSRequest(params=SMSParams())
[docs]
def send_sms(self, phone_numbers: List[str], message: str) -> Dict[str, any]:
"""
Send SMS to phone numbers
:param phone_numbers: List of phone numbers
:param message: Message
:return: Response
"""
self._validate_phone_numbers(phone_numbers)
self._validate_message(message)
self._prepare_sms_request(phone_numbers, message)
with self.session_scope():
request_data = self._prepare_request_data(self._send_sms_request)
response = self.post(data=request_data)
return self._handle_response(response)
def _validate_phone_numbers(self, phone_numbers: List[str]) -> None:
if not phone_numbers:
raise UserValueError(self.ERROR_MSG_PHONE_NUMBER_REQUIRED)
def _validate_message(self, message: str) -> None:
if not message:
raise UserValueError(self.ERROR_MSG_MESSAGE_REQUIRED)
def _prepare_sms_request(self, phone_numbers: List[str], message: str) -> None:
self._send_sms_request.params.PhoneNumber = phone_numbers
self._send_sms_request.params.SMSContent = message
self._send_sms_request.params.SMSTime = datetime.now().strftime(
"%Y-%m-%d %H:%M:%S"
)
[docs]
def read_sms(self) -> Dict[str, any]:
raise NotImplementedError