| Type | User | Amount | Payment Hash | Time | ||
|---|---|---|---|---|---|---|
Loading… | ||||||
| ID | Name | Phone | Wallet ID | Balance (Live) | Txns | Registered | |
|---|---|---|---|---|---|---|---|
Loading… | |||||||
| Type | User | Amount | Payment Hash | Time | ||
|---|---|---|---|---|---|---|
Loading… | ||||||
| ID | Name | Phone | Wallet ID | Balance (Live) | Txns | Registered | |
|---|---|---|---|---|---|---|---|
Loading… | |||||||
Any phone worldwide dials the Twilio number. Twilio handles the global PSTN connection and fires a webhook to our FastAPI server. No BitVoice app on the caller's side; the session is a normal voice call. WhatsApp invoices and receipts need data or Wi‑Fi when enabled.
📡 Twilio → FastAPI webhookThe caller's number is SHA-256 hashed and looked up in the database. New users enter a voice registration flow (name + PIN). Returning users enter their 6-digit PIN via keypad — no password to remember, no seed phrase.
🗄️ SQLite · bcrypt · SHA-256The main menu says "What would you like to do?" and Twilio's <Gather input="speech" enhanced="true"> listens. Recognition hints (contact names) and enhanced model give high accuracy even in noisy environments.
GPT-4o-mini classifies intent (send / receive / balance / history / add_contact) and extracts entities — recipient name, amount, currency. Common mishearings are corrected: "one set" → 1 sat, "side" → sat, "Box" → Bob.
🧠 GPT-4o-mini · keyword fallback · mishearing correctionSend: recipient's wallet creates a BOLT11 invoice → sender's wallet pays it. Instant, zero-fee internal transfer. Receive: user's wallet creates an invoice → shared via WhatsApp. Balance: live sats + USD equivalent read aloud.
⚡ LNbits API · BOLT11 · instant settlementThe outcome is spoken aloud via TwiML <Say>. Both sender and receiver get a rich WhatsApp message with sender name, amount, new balance, and payment hash — no app needed to see the receipt.
After every successful action BitVoice asks "Is there anything else I can help you with?" Say "Yes" to return to the menu, "No" to end gracefully. The session stays alive for 1 hour so users don't need to re-authenticate between actions.
⏱️ In-memory session · 1-hour TTL