A telephonic game to discover who likes you <3
Built using Pipecat, Pipecat Cloud, Gemini Live, and Twilio.
TL;DR: Call bots on the telephone and ask for clues about who has a crush on you.
Start the quest here
- High level 'How It Works'
- Directory Structure
- Local Development ( sans telephony/Twilio )
- Configure Production
- Deploy to Production
- Troubleshooting
- Purchase a phone number on Twilio and configure it to call a
TwiML binwhen it receives a call. - Make a Pipecat bot using
FastAPIWebsocketTransportfor transport layer. - Deploy bot to Pipecat Cloud (ensure there is a
async def bot(runner_args: RunnerArguments)function). - When someone calls that phone number, the
TwiMLtells Twilio to start a WebSocket stream to your bot. - Audio streams between caller and your bot over the WebSocket connection.
- Profit. (or in Crush Quest's case, Enjoy.)
/docs: files to publish game board website via GitHub Pages./game-board: code used to generate character images (Nano Banana) and QR Code./pc_bot: the Pipecat bot code. deploy to pipecatcloud from here.
This is a bare-bones development environment with minimal dependencies (basically just Python 3.10+ and a Gemini API Key). It's not really "playable" in terms of the game, but it is super useful for experimenting with Pipecat code and prompts, etc.
- Python 3.10+
uvpackage manager- Gemini API Key
- [required] permissions to use Gemini Live model
gemini-2.5-flash-native-audio-preview-09-2025 - [optional] permissions to use Nano Banana (to generate new character images)
- [required] permissions to use Gemini Live model
- Clone repo:
git clone https://github.com/daily-co/pipecat-crush-quest.git
cd crush-quest- Set up a virtual environment and install dependencies:
cd pc_bot
uv sync- Create an .env file and add API keys:
cp env.example .envfrom /pc_bot directory:
python bot.py --port <last four digits of phone number>for example, Taylor's phone number is +1-337-333-8444. To talk to Taylor:
- run command
python bot.py --port 8444
$ python bot.py --port 8444
==>
2025-10-08 10:44:44.726 | INFO | pipecat:<module>:14 - ᓚᘏᗢ Pipecat 0.0.86 (Python 3.12.0 (main, Oct 2 2023, 20:56:14) [Clang 16.0.3 ]) ᓚᘏᗢ
🚀 Bot ready!
→ Open http://localhost:8444/client in your browser
Looking for dist directory at: /PATH/crush-quest/pc_bot/.venv/lib/python3.12/site-packages/pipecat_ai_small_webrtc_prebuilt/client/dist
INFO: Started server process [14570]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://localhost:8444 (Press CTRL+C to quit)-
Navigate to
http://localhost:8444and clickconnectin the upper right corner. -
Talk to Taylor and ask who has a crush on you.
-
After the call,
Ctrl-Cthe server. To test a different character, say Chris, run:
python bot.py --port 8102because Chris' phone number is +1-337-333-8102.
-
choose an
Agent Name. This will be used in Docker, Pipecat Cloud, and Twilio steps. -- the Agent Name in this repo iscrush-quest. maybe use that.
Push to DockerHub so Pipecat Cloud can pull image.
- login to Docker
- Build / Tag / Push
- Dockerfile has all the Pipecat Cloud goodies in it already.
export AGENT_NAME="crush-quest"
export DOCKER_USERNAME="yup"
docker build --platform=linux/arm64 -t $AGENT_NAME:latest .
docker tag $AGENT_NAME:latest $DOCKER_USERNAME/$AGENT_NAME:latest
docker push $DOCKER_USERNAME/$AGENT_NAME:latestNote
Be aware, Docker repos are PUBLIC by default. Don't put .env in there.
Create agent on Pipecat Cloud platform.
- click
+ Deploy new agentbutton in the upper right corner.
Name: theAgent Nameyou chose. most likelycrush-questImage:$DOCKER_USERNAME/$AGENT_NAME:latestie,my_docker_username/crush-quest:latest
Image Pull Secret: used to pull the docker image. required by Pipecat Cloud.- click the
Select...dropdown menu, then click+ create
Important
Auth Value your $DOCKER_USERNAME and your Docker password formatted like so:
docker_username:docker_password
More info on Image Pull Secrets here
Secret: this is where.envvalues go! You didn't copy them in your Dockerfile (way to go!), this is the safe place to add them.- click the
Select...dropdown menu, then click+ create
- click
Create agent
Note
Create agent deploys the agent, but it won't work without Twilio configured. Keep going...
- Add a credit card
- Navigate to
Settings > Billingorhttps://pipecat.daily.co/ORGANIZATION_NAME/settings/billing
Tip
Keep an eye on billing at https://pipecat.daily.co/ORGANIZATION_NAME/settings/invoices
Create TwiML and configure telephony.
- Add to your
.env:
-
Purchase a phone number for each character aka "Crush Potential".
Phone Numbers > Manage > Buy a number -
Create TwiML: Navigate to TwiML bin dashboard.
-
Add this TwiML and name it
pipecat-crush-quest:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Connect>
<Stream url="wss://api.pipecat.daily.co/ws/twilio">
<Parameter name="pipecatCrushQuestTo" value="{{To}}"/>
<Parameter name="pipecatCrushQuestFrom" value="{{From}}"/>
<Parameter name="_pipecatCloudServiceHost" value="AGENT_NAME.ORGANIZATION_NAME"/>
</Stream>
</Connect>
</Response>AGENT_NAME is the name of the Pipecat bot.
- Find it under the
Agentstab in Pipecat Cloud dashboard, but it is most likelycrush-quest.
ORGANIZATION_NAME is your Pipecat Cloud organization name.
- Find the name in the dashboard URL:
https://pipecat.daily.co/ORGANIZATION_NAME
- Configure phone numbers Configure each phone number to direct incoming calls to this TwiML. Use this same TwiML for every phone number.
- Navigate to (Phone Numbers > Manage > Active numbers)
- Select a phone number and in "Configure" tab, under “Voice Configuration” section, find “A call comes in”
Set this dropdown to “TwiML Bin” and select the
pipecat-crush-quest
Tip
Keep an eye on billing here.
Once the three pillars are configured (Docker, Pipecat Cloud, and Twilio), the app is deployed!
To re-deploy, build/tag/push the Docker image and deploy to Pipecat Cloud.
docker build --platform=linux/arm64 -t $AGENT_NAME:latest .
docker tag $AGENT_NAME:latest $DOCKER_USERNAME/$AGENT_NAME:latest
docker push $DOCKER_USERNAME/$AGENT_NAME:latest- Update
pcc-deploy.tomlwith your docker username (and agent name if notcrush-quest) - Use
pcccommand line:
pcc auth login
pcc deploy- Navigate to
Agents > crush-quest > Deployments - Click
+ Add Deploymentin the upper right corner. - Navigate to
Overviewto monitor Deployment status
- 📚 Learn more withPipecat's docs
- 💬 Get help: Join Pipecat's Discord to connect with the community







