Skip to content

HectorHernandez1/VoiceValet

Repository files navigation

VoiceValet

AI phone agent that makes outbound calls on your behalf. Tell it who to call and what to accomplish — it handles the conversation and reports back with results via email.

Built on Vapi for voice orchestration, Claude for intelligence, Deepgram for speech-to-text and text-to-speech, and Resend for email notifications.

Quick Start

1. Set up conda environment

conda create -n voicevalet python=3.10 -y
conda activate voicevalet
pip install -r requirements.txt

2. Configure environment

cp .env.example .env

Edit .env and add:

  • VAPI_API_KEY — from Vapi Dashboard
  • VAPI_PHONE_NUMBER_ID — buy a phone number in Vapi Dashboard, copy its ID
  • USER_FULL_NAME — your name (the agent will say "calling on behalf of...")
  • USER_PHONE_NUMBER — your callback number
  • RESEND_API_KEY — from Resend (for email notifications)
  • NOTIFICATION_EMAIL — email address to receive call results

3. Set up your profile

cp user_profile.example.json user_profile.json

Edit user_profile.json with your personal details. This file is gitignored and never committed. It has four sections:

  • personal — name, date of birth, address, email, phone
  • vehicle — make, model, year, color, VIN, license plate
  • insurance — provider, policy number, coverage type, agent info
  • medical — doctor, pharmacy, insurance ID, allergies

4. Configure Vapi provider keys

In the Vapi Dashboard, add your API keys under Provider Keys:

  • Anthropic — for Claude LLM
  • Deepgram — for speech-to-text and text-to-speech

5. Create the assistant

python create_assistant.py

Copy the returned assistant ID into your .env as VAPI_ASSISTANT_ID.

6. Make a call

python make_call.py --phone +14155551234

# With context for the call:
python make_call.py --phone +14155551234 --message "Schedule an oil change for Thursday"

# With profile data shared with the agent:
python make_call.py --phone +14155551234 --message "Schedule an oil change" --profile vehicle,personal

Flags:

  • --phone (required) — destination number in E.164 format
  • --message — context/goal for the call (agent uses it naturally, won't read verbatim)
  • --profile — comma-separated profile sections to share: personal, vehicle, insurance, medical
  • --assistant-id — override the assistant ID from .env

After the call ends, a summary with the full transcript is emailed to your NOTIFICATION_EMAIL.

Project Structure

config/settings.py          — Environment variable management
config/profile.py           — User profile loader and formatter
utils/logger.py             — Rich-based logging
agents/base_agent.py        — System prompt and assistant configuration
services/vapi_client.py     — Vapi REST API client
services/email_service.py   — Resend email notifications
create_assistant.py         — Assistant setup script
make_call.py                — Outbound call CLI
user_profile.example.json   — Profile template (committed)
user_profile.json           — Your actual profile data (gitignored)

Voice Configuration

VoiceValet currently uses Deepgram asteria for text-to-speech. The voice provider and voice ID are configured in services/vapi_client.py and can be changed when creating a new assistant.

Supported Deepgram voices: asteria, luna, stella, athena, hera, orion, arcas, perseus, angus, orpheus, helios, zeus.

Roadmap

  • Phase 1 (current) — General-purpose conversational agent with email notifications and user profiles
  • Phase 2 — Specialized appointment booking agent
  • Phase 3 — Insurance rate shopping agent
  • Phase 4 — Web dashboard for call management

About

Your AI-powered personal phone agent — VoiceValet makes outbound calls on your behalf to book appointments, get insurance quotes, and handle phone tasks you'd rather not do yourself.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages