diff --git a/vocode/models/telephony.py b/vocode/models/telephony.py index 47afa98..c161996 100644 --- a/vocode/models/telephony.py +++ b/vocode/models/telephony.py @@ -10,13 +10,6 @@ class TwilioConfig(BaseModel): auth_token: str -class InternalTwilioConfig(BaseModel): - account_sid: str - api_key: str - api_secret: str - outgoing_application_sid: str - - class CallEntity(BaseModel): phone_number: str @@ -31,6 +24,7 @@ class CreateInboundCall(BaseModel): class EndOutboundCall(BaseModel): call_id: str + twilio_config: Optional[TwilioConfig] = None class CreateOutboundCall(BaseModel): diff --git a/vocode/telephony/inbound_call_server.py b/vocode/telephony/inbound_call_server.py index 35fc5f4..64c1d01 100644 --- a/vocode/telephony/inbound_call_server.py +++ b/vocode/telephony/inbound_call_server.py @@ -6,11 +6,10 @@ from vocode.models.synthesizer import SynthesizerConfig from twilio.jwt.access_token.grants import VoiceGrant from vocode.models.transcriber import TranscriberConfig -from vocode.telephony.utils import create_access_token from .. import api_key, BASE_URL from ..models.agent import AgentConfig -from ..models.telephony import CreateInboundCall, InternalTwilioConfig, TwilioConfig +from ..models.telephony import CreateInboundCall, TwilioConfig, TwilioConfig VOCODE_INBOUND_CALL_URL = f"https://{BASE_URL}/create_inbound_call" @@ -22,7 +21,7 @@ class InboundCallServer: transcriber_config: Optional[TranscriberConfig] = None, synthesizer_config: Optional[SynthesizerConfig] = None, response_on_rate_limit: Optional[str] = None, - internal_twilio_config: Optional[InternalTwilioConfig] = None, + twilio_config: Optional[TwilioConfig] = None, ): self.agent_config = agent_config self.transcriber_config = transcriber_config @@ -33,20 +32,7 @@ class InboundCallServer: response_on_rate_limit or "The line is really busy right now, check back later!" ) - self.internal_twilio_config = internal_twilio_config - - def create_twilio_config(self) -> TwilioConfig: - access_token = create_access_token(self.internal_twilio_config) - access_token.add_grant( - VoiceGrant( - outgoing_application_sid=self.internal_twilio_config.outgoing_application_sid, - incoming_allow=True, - ) - ) - return TwilioConfig( - account_sid=self.internal_twilio_config.account_sid, - access_token=access_token.to_jwt(), - ) + self.twilio_config = twilio_config async def handle_call(self, twilio_sid: str = Form(alias="CallSid")): response = requests.post( @@ -57,6 +43,7 @@ class InboundCallServer: twilio_sid=twilio_sid, transcriber_config=self.transcriber_config, synthesizer_config=self.synthesizer_config, + twilio_config=self.twilio_config, ).dict(), ) if response.status_code == 429: diff --git a/vocode/telephony/outbound_call.py b/vocode/telephony/outbound_call.py index a715c46..0eb864d 100644 --- a/vocode/telephony/outbound_call.py +++ b/vocode/telephony/outbound_call.py @@ -2,12 +2,10 @@ from typing import Optional from vocode.models.agent import AgentConfig from vocode.models.synthesizer import SynthesizerConfig from vocode.models.transcriber import TranscriberConfig -from vocode.telephony.utils import create_access_token from ..models.telephony import ( CallEntity, CreateOutboundCall, EndOutboundCall, - InternalTwilioConfig, TwilioConfig, ) import requests @@ -29,7 +27,7 @@ class OutboundCall: transcriber_config: Optional[TranscriberConfig] = None, synthesizer_config: Optional[SynthesizerConfig] = None, conversation_id: Optional[str] = None, - internal_twilio_config: Optional[InternalTwilioConfig] = None, + twilio_config: Optional[TwilioConfig] = None, ): self.recipient = recipient self.caller = caller @@ -37,19 +35,7 @@ class OutboundCall: self.transcriber_config = transcriber_config self.synthesizer_config = synthesizer_config self.conversation_id = conversation_id - self.internal_twilio_config = internal_twilio_config - - def create_twilio_config(self) -> TwilioConfig: - access_token = create_access_token(self.internal_twilio_config) - access_token.add_grant( - VoiceGrant( - outgoing_application_sid=self.internal_twilio_config.outgoing_application_sid - ) - ) - return TwilioConfig( - account_sid=self.internal_twilio_config.account_sid, - access_token=access_token.to_jwt(), - ) + self.twilio_config = twilio_config def start(self) -> str: response = requests.post( @@ -62,9 +48,7 @@ class OutboundCall: transcriber_config=self.transcriber_config, synthesizer_config=self.synthesizer_config, conversation_id=self.conversation_id, - twilio_config=self.create_twilio_config() - if self.internal_twilio_config - else None, + twilio_config=self.twilio_config, ).dict(), ) assert response.ok, response.text @@ -77,6 +61,7 @@ class OutboundCall: headers={"Authorization": f"Bearer {api_key}"}, json=EndOutboundCall( call_id=self.conversation_id, + twilio_config=self.twilio_config, ).dict(), ) - assert response.ok, response.text + assert response.ok or response.status_code == 404, response.text diff --git a/vocode/telephony/utils.py b/vocode/telephony/utils.py deleted file mode 100644 index da9f410..0000000 --- a/vocode/telephony/utils.py +++ /dev/null @@ -1,12 +0,0 @@ -from twilio.jwt.access_token import AccessToken - -from vocode.models.telephony import InternalTwilioConfig - - -def create_access_token(twilio_config: InternalTwilioConfig): - return AccessToken( - twilio_config.account_sid, - twilio_config.api_key, - twilio_config.api_secret, - identity="user", - ) diff --git a/vocode/telephony/zoom_dial_in.py b/vocode/telephony/zoom_dial_in.py index 5433494..55b3583 100644 --- a/vocode/telephony/zoom_dial_in.py +++ b/vocode/telephony/zoom_dial_in.py @@ -6,7 +6,6 @@ from vocode.telephony.outbound_call import OutboundCall from ..models.telephony import ( CallEntity, DialIntoZoomCall, - InternalTwilioConfig, TwilioConfig, ) import requests @@ -26,7 +25,7 @@ class ZoomDialIn(OutboundCall): transcriber_config: Optional[TranscriberConfig] = None, synthesizer_config: Optional[SynthesizerConfig] = None, conversation_id: Optional[str] = None, - internal_twilio_config: Optional[InternalTwilioConfig] = None, + twilio_config: Optional[TwilioConfig] = None, ): super().__init__( recipient=recipient, @@ -35,7 +34,7 @@ class ZoomDialIn(OutboundCall): transcriber_config=transcriber_config, synthesizer_config=synthesizer_config, conversation_id=conversation_id, - internal_twilio_config=internal_twilio_config, + twilio_config=twilio_config, ) self.zoom_meeting_id = zoom_meeting_id self.zoom_meeting_password = zoom_meeting_password @@ -53,9 +52,7 @@ class ZoomDialIn(OutboundCall): transcriber_config=self.transcriber_config, synthesizer_config=self.synthesizer_config, conversation_id=self.conversation_id, - twilio_config=self.create_twilio_config() - if self.internal_twilio_config - else None, + twilio_config=self.twilio_config, ).dict(), ) assert response.ok, response.text