import json import base64 from fastapi import WebSocket from vocode.streaming.output_device.base_output_device import BaseOutputDevice class TwilioOutputDevice(BaseOutputDevice): def __init__(self, ws: WebSocket = None, stream_sid: str = None): self.ws = ws self.stream_sid = stream_sid async def send_async(self, chunk: bytes): twilio_message = { "event": "media", "streamSid": self.stream_sid, "media": {"payload": base64.b64encode(chunk).decode("utf-8")}, } await self.ws.send_text(json.dumps(twilio_message)) async def maybe_send_mark_async(self, message_sent): mark_message = { "event": "mark", "streamSid": self.stream_sid, "mark": { "name": "Sent {}".format(message_sent), }, } await self.ws.send_text(json.dumps(mark_message))