add rate limiting support in inbound call server
This commit is contained in:
parent
7737514eab
commit
68a51e7131
1 changed files with 21 additions and 12 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
from fastapi import FastAPI, Response, Form
|
from fastapi import FastAPI, Response, Form
|
||||||
|
from typing import Optional
|
||||||
import requests
|
import requests
|
||||||
import uvicorn
|
import uvicorn
|
||||||
from .. import api_key, BASE_URL
|
from .. import api_key, BASE_URL
|
||||||
|
|
@ -8,25 +9,33 @@ from ..models.telephony import CreateInboundCall
|
||||||
|
|
||||||
VOCODE_INBOUND_CALL_URL = f"https://{BASE_URL}/create_inbound_call"
|
VOCODE_INBOUND_CALL_URL = f"https://{BASE_URL}/create_inbound_call"
|
||||||
|
|
||||||
class InboundCallServer():
|
|
||||||
|
|
||||||
def __init__(self, agent_config: AgentConfig):
|
class InboundCallServer:
|
||||||
|
def __init__(
|
||||||
|
self, agent_config: AgentConfig, response_on_rate_limit: Optional[str] = None
|
||||||
|
):
|
||||||
self.agent_config = agent_config
|
self.agent_config = agent_config
|
||||||
self.app = FastAPI()
|
self.app = FastAPI()
|
||||||
self.app.post("/vocode")(self.handle_call)
|
self.app.post("/vocode")(self.handle_call)
|
||||||
|
self.response_on_rate_limit = (
|
||||||
|
response_on_rate_limit
|
||||||
|
or "The line is really busy right now, check back later!"
|
||||||
|
)
|
||||||
|
|
||||||
async def handle_call(self, twilio_sid: str = Form(alias='CallSid')):
|
async def handle_call(self, twilio_sid: str = Form(alias="CallSid")):
|
||||||
response = requests.post(
|
response = requests.post(
|
||||||
VOCODE_INBOUND_CALL_URL,
|
VOCODE_INBOUND_CALL_URL,
|
||||||
headers={
|
headers={"Authorization": f"Bearer {api_key}"},
|
||||||
"Authorization": f"Bearer {api_key}"
|
|
||||||
},
|
|
||||||
json=CreateInboundCall(
|
json=CreateInboundCall(
|
||||||
agent_config=self.agent_config,
|
agent_config=self.agent_config, twilio_sid=twilio_sid
|
||||||
twilio_sid=twilio_sid
|
).dict(),
|
||||||
).dict()
|
|
||||||
)
|
)
|
||||||
assert response.ok
|
if response.status_code == 429:
|
||||||
|
return Response(
|
||||||
|
f"<Response><Say>{self.response_on_rate_limit}</Say></Response>",
|
||||||
|
media_type="application/xml",
|
||||||
|
)
|
||||||
|
assert response.ok, response.text
|
||||||
return Response(
|
return Response(
|
||||||
response.text,
|
response.text,
|
||||||
media_type="application/xml",
|
media_type="application/xml",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue