add support for user twilio config

This commit is contained in:
Ajay Raj 2023-03-18 15:40:14 -07:00
commit a03a3634b5
5 changed files with 13 additions and 62 deletions

View file

@ -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):

View file

@ -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:

View file

@ -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

View file

@ -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",
)

View file

@ -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