116 lines
2.4 KiB
Markdown
116 lines
2.4 KiB
Markdown
# Next.js server for handling Daily PSTN/SIP Webhook
|
|
|
|
Next.js API routes for handling Daily PSTN/SIP Pipecat requests.
|
|
|
|
## Features
|
|
|
|
- API endpoint for handling Daily PSTN/SIP Pipecat requests
|
|
- HMAC signature validation
|
|
- Structured logging with Pino
|
|
- Support for dial-in and dial-out settings
|
|
- Voicemail detection and call transfer functionality
|
|
- Test request handling
|
|
|
|
## Setup
|
|
|
|
1. Clone the repository
|
|
|
|
2. Navigate to the `nextjs-webhook-server` directory:
|
|
|
|
```bash
|
|
cd nextjs-webhook-server
|
|
```
|
|
|
|
3. Install dependencies:
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
4. Create `.env.local` file with your credentials:
|
|
|
|
```bash
|
|
cp env.local.example .env.local
|
|
```
|
|
|
|
5. Update your `.env` with your secrets:
|
|
|
|
```bash
|
|
PIPECAT_CLOUD_API_KEY=pk_*
|
|
AGENT_NAME=my-first-agent
|
|
PINLESS_HMAC_SECRET=your_hmac_secret
|
|
LOG_LEVEL=info
|
|
```
|
|
|
|
### Running the server
|
|
|
|
Run the development server:
|
|
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
The server will run on `http://localhost:7860` and you can expose it via ngrok for testing:
|
|
|
|
```bash
|
|
`ngrok http 7860`
|
|
```
|
|
|
|
> Tip: Use a subdomain for a consistent URL (e.g. `ngrok http -subdomain=mydomain http://localhost:7860`)
|
|
|
|
## API Endpoints
|
|
|
|
### GET /api
|
|
|
|
Returns a simple "Hello, World!" message with a cute cat emoji to verify the server is running.
|
|
|
|
### POST /api/dial
|
|
|
|
Handles dial-in and dial-out requests for Pipecat Cloud.
|
|
|
|
#### Test Requests
|
|
|
|
The endpoint handles test requests when a webhook is configured. Send a request with `"Test": "test"` to verify your setup:
|
|
|
|
```json
|
|
{
|
|
"Test": "test"
|
|
}
|
|
```
|
|
|
|
#### Production Request Format
|
|
|
|
```json
|
|
{
|
|
// for dial-in from webhook
|
|
"To": "+14152251493",
|
|
"From": "+14158483432",
|
|
"callId": "string-contains-uuid",
|
|
"callDomain": "string-contains-uuid",
|
|
// for making a dial out to a phone or SIP
|
|
"dialout_settings": [
|
|
{ "phoneNumber": "+14158483432", "callerId": "purchased_phone_uuid" },
|
|
{ "sipUri": "sip:username@sip.hostname.com" }
|
|
]
|
|
}
|
|
```
|
|
|
|
## Deployment
|
|
|
|
The application is configured for Vercel deployment:
|
|
|
|
1. Push your code to a Git repository
|
|
2. Import your project in Vercel dashboard
|
|
3. Configure environment variables:
|
|
- `PIPECAT_CLOUD_API_KEY`
|
|
- `AGENT_NAME`
|
|
- `PINLESS_HMAC_SECRET`
|
|
- `LOG_LEVEL` (optional, defaults to 'info')
|
|
4. Deploy!
|
|
|
|
## Security
|
|
|
|
- HMAC signature validation for request authentication
|
|
- Environment variables for sensitive credentials
|
|
- Method validation (POST only for /dial)
|