From 0513d0b6a89cda8024c8dc128286407d46ea2905 Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Fri, 2 May 2025 22:44:50 -0400 Subject: [PATCH] Update README --- .../phone-chatbot-daily-twilio-sip/README.md | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/examples/phone-chatbot-daily-twilio-sip/README.md b/examples/phone-chatbot-daily-twilio-sip/README.md index 21dea417e..d2cde8186 100644 --- a/examples/phone-chatbot-daily-twilio-sip/README.md +++ b/examples/phone-chatbot-daily-twilio-sip/README.md @@ -68,6 +68,56 @@ Call your Twilio phone number. The system should answer the call, put you on hol You can customize the bot's behavior by modifying the system prompt in `bot.py`. +### Changing the Hold Music + +To change the ringing sound or hold music that callers hear while waiting to be connected to the bot, update the URL in `server.py`: + +```python +resp = VoiceResponse() +resp.play( + url="https://your-custom-audio-file-url.mp3", + loop=10, +) +``` + +> Read [Twilio's guide](https://www.twilio.com/en-us/blog/adding-mp3-to-voice-call-using-twilio) on how to set up an mp3 in a voice call. + +## Handling Multiple SIP Endpoints + +The bot is configured to handle multiple `on_dialin_ready` events that might occur with multiple SIP endpoints. It ensures that each call is only forwarded once using a simple flag: + +```python +# Flag to track if call has been forwarded +call_already_forwarded = False + +@transport.event_handler("on_dialin_ready") +async def on_dialin_ready(transport, cdata): + nonlocal call_already_forwarded + + # Skip if already forwarded + if call_already_forwarded: + logger.info("Call already forwarded, ignoring this event.") + return + + # ... forwarding code ... + call_already_forwarded = True +``` + +Note that normally calls only require a single SIP endpoint. If you are planning to forward the call to a different number, you will need to set up 2 SIP endpoints: one for the initial call and one for the forwarded call. IMPORTANT: ensure that your `on_dialin_ready` handler only handles the first call. + +## Daily SIP Configuration + +The bot configures Daily rooms with SIP capabilities using these settings: + +```python +sip_params = DailyRoomSipParams( + display_name="phone-user", # This will show up in the Daily UI; optional display the dialer's number + video=False, # Audio-only call + sip_mode="dial-in", # For receiving calls (vs. dial-out) + num_endpoints=1, # Number of SIP endpoints to create +) +``` + ## Troubleshooting ### Call is not being answered @@ -80,7 +130,7 @@ You can customize the bot's behavior by modifying the system prompt in `bot.py`. - Ensure your Daily API key is correct and has SIP capabilities - Check that the SIP endpoint is being correctly passed to the bot -- Verify that the ElevenLabs API key and voice ID are correct +- Verify that the Cartesia API key and voice ID are correct ### Bot starts but disconnects immediately