vocode-python/vocode/streaming/telephony/conversation/zoom_dial_in.py
2023-03-28 10:29:00 -07:00

73 lines
2.7 KiB
Python

import logging
from typing import Optional
from twilio.rest import Client
from vocode.streaming.agent.base_agent import BaseAgent
from vocode.streaming.models.agent import AgentConfig
from vocode.streaming.models.synthesizer import SynthesizerConfig
from vocode.streaming.models.telephony import CallConfig, TwilioConfig
from vocode.streaming.models.transcriber import TranscriberConfig
from vocode.streaming.synthesizer.base_synthesizer import BaseSynthesizer
from vocode.streaming.telephony.config_manager.base_config_manager import (
BaseConfigManager,
)
from vocode.streaming.telephony.conversation.outbound_call import OutboundCall
from vocode.streaming.transcriber.base_transcriber import BaseTranscriber
from vocode.streaming.utils import create_conversation_id
class ZoomDialIn(OutboundCall):
def __init__(
self,
base_url: str,
zoom_number: str,
zoom_meeting_id: str,
zoom_meeting_password: Optional[str],
from_phone: str,
config_manager: BaseConfigManager,
twilio_config: TwilioConfig,
agent_config: AgentConfig,
transcriber_config: TranscriberConfig,
synthesizer_config: SynthesizerConfig,
conversation_id: Optional[str] = None,
logger: Optional[logging.Logger] = None,
):
super().__init__(
base_url=base_url,
to_phone=zoom_number,
from_phone=from_phone,
config_manager=config_manager,
transcriber_config=transcriber_config,
agent_config=agent_config,
synthesizer_config=synthesizer_config,
twilio_config=twilio_config,
conversation_id=conversation_id,
logger=logger,
)
self.zoom_number = zoom_number
self.zoom_meeting_id = zoom_meeting_id
self.zoom_meeting_password = zoom_meeting_password
self.from_phone = from_phone
def start(self):
self.validate_outbound_call(
self.zoom_number,
self.from_phone,
mobile_only=False,
)
digits = f"ww{self.zoom_meeting_id}#"
if self.zoom_meeting_password:
digits += f"wwww*{self.zoom_meeting_password}#"
self.logger.debug("Sending digits %s to the call", digits)
twilio_sid = self.create_twilio_call(
self.zoom_number,
self.from_phone,
digits=digits,
)
call_config = CallConfig(
transcriber_config=self.transcriber_config,
agent_config=self.agent_config,
synthesizer_config=self.synthesizer_config,
twilio_config=self.twilio_config,
twilio_sid=twilio_sid,
)
self.config_manager.save_config(self.conversation_id, call_config)