DailyTransport supports both SIP and PSTN calls. This means that you can receive and make calls to and from external SIP addresses. Similarly for PSTN, you are able to purchase phone numbers and hence make and receive calls to and from the purchased phone numbers.

Getting Started with Daily Telephony

Purchase a phone number

You can buy a phone number through the Pipecat Cloud Dashboard:

  1. Go to Settings > Telephony
  2. Follow the UI to purchase a phone number
  3. Configure the webhook URL to receive incoming calls

Or purchase the number using Daily’s PhoneNumbers API.

Configure Pinless Dial-In

When a phone call or a SIP interconnect call is received on Daily, the call is placed on hold and the caller hears hold music while Daily triggers a webhook (room_creation_api). This phone number–to–webhook mapping is managed through your Daily domain. You can create a domain-dialin-config entry using Daily’s REST API:

curl --request POST \
  --url https://api.daily.co/v1/domain-dialin-config \
  --header 'Authorization: Bearer $DAILY_API_KEY' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "type": "pinless_dialin",
    "name_prefix": "Customer1",
    "phone_number": "+1PURCHASED_NUM",
    "room_creation_api": "https://your-app.example.com/api/dial",
    "hold_music_url": "https://example.com/static/ringtone.mp3",
    "timeout_config": {
      "message": "No agent is available right now"
    }
  }'

In the example, if you omit the phone_number field, Daily will generate a static SIP URI (sip_uri) that can be used for SIP interconnect. This is useful if you’re routing calls from providers like Twilio, Telnyx, Exotel, or Plivo.

Dial-in

The call flow for handling inbound calls looks like this:

  1. The user calls your purchased phone number. Daily receives the call and places it on hold.
  2. A webhook triggers the room_creation_api.
  3. Your server calls the Pipecat Cloud endpoint ({service}/start) with the dialin_settings.
  4. The bot starts speaking as soon as the remote user joins.

In a future update, steps 2 and 3 will be automatically managed by Daily via a new {service}/ endpoint, simplifying the process. While the update is being rolled out, we provide example servers built with Next.js and FastAPI to help you get started with your own implementation.

A call can be received on the phone_number or the sip_uri.

Dial-in Example Servers

Complete example of a Pipecat bot implementation that handles both incoming (dial-in) and outgoing (dial-out) calls with voicemail detection

Dial-out

The call flow looks like this:

  1. Your application calls the Pipecat Cloud endpoint with dialout_settings
  2. Bot begins dialing out when the call state moves to joined
  3. Bot waits for the remote party to speak before responding