Source code for terminusgps.twilio.caller

from typing import Any

import asyncio
import twilio.rest

from django.conf import settings
from twilio.http.async_http_client import AsyncTwilioHttpClient


[docs] class TwilioCaller: def __init__(self) -> None: self.client_sid = settings.TWILIO_SID self.client_token = settings.TWILIO_TOKEN self.from_number = settings.TWILIO_FROM_NUMBER self.messaging_sid = settings.TWILIO_MESSAGING_SID def __enter__(self) -> "TwilioCaller": self.client = twilio.rest.Client( self.client_sid, self.client_token, http_client=AsyncTwilioHttpClient() ) return self def __exit__(self, exc_type, exc_value, exc_tb) -> None: return None
[docs] async def create_notification( self, to_number: str, message: str, method: str = "sms" ) -> asyncio.Task[Any]: match method: case "sms": task = asyncio.create_task( self.create_sms(to_number=to_number, message=message) ) case "call" | "phone": task = asyncio.create_task( self.create_call(to_number=to_number, message=message) ) case _: raise ValueError(f"Unsupported TwilioCaller method '{method}'.") return task
[docs] async def create_call(self, to_number: str, message: str) -> None: await self.client.calls.create_async( to=to_number, from_=self.from_number, twiml=f"<Response><Say>{message}</Say></Response>", )
[docs] async def create_sms(self, to_number: str, message: str) -> None: await self.client.messages.create_async( to=to_number, from_=self.from_number, body=message, messaging_service_sid=self.messaging_sid, )