FastAPI server for handling Daily PSTN/SIP Webhook
A FastAPI server that handles PSTN (Public Switched Telephone Network) and SIP (Session Initiation Protocol) calls using the Daily API.
Setup
-
Clone the repository
-
Navigate to the
fastapi-webhook-serverdirectory:cd fastapi-webhook-server -
Install dependencies:
pip install -r requirements.txt -
Copy
env.exampleto.env:cp env.example .env -
Update
.envwith your credentials:AGENT_NAME: Your Daily agent namePIPECAT_CLOUD_API_KEY: Your Daily API keyPINLESS_HMAC_SECRET: Your HMAC secret for request verification
Running the Server
Start the server:
python server.py
The server will run on http://localhost:7860 and you can expose it via ngrok for testing:
`ngrok http 7860`
Tip: Use a subdomain for a consistent URL (e.g.
ngrok http -subdomain=mydomain http://localhost:7860)
API Endpoints
GET /
Health check endpoint that returns a "Hello, World!" message.
POST /api/dial
Initiates a PSTN/SIP call with the following request body format:
{
"To": "+14152251493",
"From": "+14158483432",
"callId": "string-contains-uuid",
"callDomain": "string-contains-uuid",
"dialout_settings": [
{
"phoneNumber": "+14158483432",
"callerId": "+14152251493"
}
],
"voicemail_detection": {
"testInPrebuilt": true
},
"call_transfer": {
"mode": "dialout",
"speakSummary": true,
"storeSummary": true,
"operatorNumber": "+14152250006",
"testInPrebuilt": true
}
}
Response
Returns a JSON object containing:
status: Success/failure statusdata: Response from Daily APIroom_properties: Properties of the created Daily room
Error Handling
- 401: Invalid signature
- 400: Invalid authorization header (e.g. missing Daily API key in bot.py)
- 405: Method not allowed (e.g. incorrect route on the webhook URL)
- 500: Server errors (missing API key, network issues)
- Other status codes are passed through from the Daily API