尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Bilingual AI collections calls for Buy-Here-Pay-Here car dealers, powered by Muse Spark (Meta). Plans the day, calls, negotiates, texts a pay link, remembers.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗▶ Live demo (it really calls your phone): https://paymind-voice-hackathon.joarciniegas.workers.dev Built with: three Meta models (Muse Spark 1.3, Muse Wonder 1.0, Muse Voice Transcribe 1.0) on the Meta Model API · Twilio ConversationRelay · Cloudflare Workers, KV and Durable Objects · Stripe (test mode) Team: BizMind AI Agency, Houston, TX · Meta Global AI Developer Hackathon, Startup Track (Build for Your World)
Buy-Here-Pay-Here (BHPH) dealerships finance their own cars, mostly for buyers that banks turn down. Their business depends on collections, so someone on the lot spends hours every day calling late buyers:
Big lenders have call centers for this. A 40-car lot on the south side of Houston has one person and a spreadsheet.
| 🧠 Plans the day | Muse Spark reads the whole portfolio, the dealer's rules and each buyer's history, then decides who to call, when and with which opening offer, using tool calls (schedule_call, skip_buyer). The code then enforces compliance on top of its plan. |
| 📞 Makes the call | It speaks English or Spanish, confirms identity before saying a single word about the debt, explains the balance and negotiates a date within the dealer's limits. First words come in about 1 second. |
| 🛠️ Acts with tools | Each call ends in exactly one outcome, chosen by Muse Spark through function calling: record_promise, send_pay_link, transfer_to_human, do_not_call, wrong_person or end_call. |
| 💳 Gets paid | On a promise, the buyer gets a text with a secure Stripe pay link for the agreed amount. |
| 🗂️ Remembers | After hanging up, Muse Spark writes a two-line case note. The next call opens with it ("Last time you told me you'd pay Friday…"). |
| ⚖️ Audits itself | Every call gets an independent compliance audit. Muse Voice Transcribe re-transcribes the call recording with speaker labels, then Muse Wonder (a different, stronger Meta model than the one that spoke) checks it against 7 collection rules. The code checks what can be verified without AI. The scorecard appears on the page, the day's results feed the dealer's board, and the recording is deleted right after. |
Things to try:
4242 4242 4242 4242). Call again: the agent remembers your promise.All dealers, buyers and amounts are fictitious. Lone Star Motors does not exist. Stripe runs in test mode, so no real money moves. The demo is limited to US numbers, 3 calls per number per day, and a global daily cap.
flowchart LR
subgraph Plan["1 · Plan (Muse Spark, reasoning: low)"]
P[Portfolio + rules + memory] --> M1{{Muse Spark<br/>schedule_call / skip_buyer}}
M1 --> G[Compliance guardrails in code<br/>8 AM-9 PM · do-not-call · active promises<br/>max extension · split rules]
G --> KV1[(KV: plan per buyer)]
end
subgraph Call["2 · Call (Muse Spark, reasoning: minimal, streaming)"]
T[Twilio ConversationRelay<br/>speech-to-text / text-to-speech] <-->|WebSocket| W[Cloudflare Worker]
W <-->|Responses API, SSE| M2{{Muse Spark<br/>6 outcome tools}}
W --> DO[(Durable Object:<br/>live transcript)]
end
subgraph After["3 · After the call"]
W --> S[Stripe Checkout, test mode<br/>+ SMS pay link]
W --> M3{{Muse Spark<br/>case-note summary}} --> KV2[(KV: memory per buyer)]
W --> R[Twilio call recording] --> VT{{Muse Voice Transcribe<br/>diarized transcript}} --> M4{{Muse Wonder<br/>compliance audit: submit_audit}} --> ST[(KV: dealer's daily board)]
R -. deleted after transcription .-> X[ ]
end
KV1 --> W
KV2 --> P
KV2 --> W
| Job | Call | Model / settings |
|---|---|---|
| Daily planner: who, when and what offer | planner.ts → schedule_call, skip_buyer (parallel tool calls) | reasoning.effort: low |
| Voice agent: the live conversation | index.ts → streaming Responses API + 6 outcome tools | reasoning.effort: minimal (~1 s to first word) |
| Closing check: "is this call actually over?" | second pass with continue_conversation as an extra tool | minimal |
| Case notes: the memory for the next call | two-sentence summary of the transcript | minimal |
| Independent transcript of the recording | recording.ts → POST /v1/asr/transcribe, DIARIZATION mode, language + keyword biasing (Twilio's 8 kHz audio is resampled to 16 kHz in the Worker) | Muse Voice Transcribe 1.0 |
| Compliance auditor: a verifiable agent that isn't the model that spoke | audit.ts → submit_audit with one verdict + evidence per rule | Muse Wonder 1.0, low |
The model proposes and the code decides. Even if Muse Spark gets something wrong:
wrong_person, the code still ends the call.sk_test_ key.The hackathon rules ask to show only what was built during the event. Commit 7fa0cc7 is the pre-existing baseline: a Twilio ⇄ Worker voice loop on Llama 3.3 70B (Workers AI) with prompt rules and text tags. Everything after it was built Oct 27 – Nov 4, 2026:
| Commit | Built during the hackathon |
|---|---|
553d02c | Brain switched to Muse Spark 1.3 (Meta Model API, streaming, minimal reasoning) + 100% fictitious demo data |
dd5f131 | Call outcomes through Muse Spark tool calling (6 functions) |
81a09e8 | Per-buyer memory across calls (Muse Spark case notes in KV) |
749eeb3 | Public live demo: real outbound calls + live transcript (Durable Objects) + abuse limits |
6cf071d | Never leave a call hanging (found in the first real phone test) |
2db52cf, e095749 | Demo page redesigned as a live call console |
9236ba6 | SMS pay link: Stripe Checkout (test mode) for the promised amount |
e1250b8 | Agentic call planning: Muse Spark plans the day; compliance enforced in code |
56f6f3a | Dialer refuses do-not-call buyers; promises validated against the plan's window; README + MIT license |
1781aa1 | Compliance audit of every call (verifiable agent) + the dealer's live daily board |
b337271 | Counter-offer before handing off (found in a real phone test: "Saturday" went to a human instead of being negotiated) |
| latest | Muse Voice Transcribe re-transcribes the recording with speaker labels; Muse Wonder audits it; recording deleted after |
See it all: git diff 7fa0cc7..main.
npm install
npx wrangler secret put MODEL_API_KEY # Meta Model API key
npx wrangler secret put VOICE_KEY # random string, signs the WebSocket URL (HMAC)
npx wrangler secret put TWILIO_ACCOUNT_SID # outbound demo calls + SMS
npx wrangler secret put TWILIO_AUTH_TOKEN
npx wrangler secret put TWILIO_FROM # your Twilio number, E.164
npx wrangler secret put STRIPE_TEST_KEY # optional: sk_test_… for pay links
npx wrangler deploy
You also need a KV namespace (MEMORY) and the CallLog Durable Object, both declared in wrangler.jsonc.
| File | What's in it |
|---|---|
src/index.ts | WebSocket session with Twilio, streaming Muse Spark, outcome tools, closing check, memory |
src/planner.ts | Agentic daily planner and its compliance guardrails |
src/audit.ts | Post-call compliance audit (Muse Wonder) + daily board counters |
src/recording.ts | Recording → 16 kHz WAV → Muse Voice Transcribe (diarized) → audit → delete recording |
src/demo.ts | Demo API: outbound calls, rate limits, live transcript, Stripe pay link + SMS |
src/demo-page.ts | The public demo page (single HTML file) |
src/demo-data.ts | Fictitious dealer and buyers |
BHPH buyers are people with the fewest options in the car market. A late payment shouldn't turn into a threatening call or a repossession because nobody had time to call, or because nobody spoke their language. PayMind Voice gives a small dealer a patient, bilingual, rule-abiding collector that remembers every buyer's situation, and hands the hard cases to a human.
It is part of PayMind, the payments platform BizMind AI Agency is building for independent dealers in Houston.
MIT © 2026 BizMind AI Agency LLC