Set up a live final expense AI calling agent on Vapi for me. My Vapi private API key is in .env as VAPI. Use the Vapi REST API (https://api.vapi.ai) with Node scripts, and never print the key. MY DETAILS - Assistant ID: - Company name the agent says: - Licensed agent's transfer number: - My Vapi phone number: - My cell for the test call: - My details for the test lead: , , STEP 1: LOOK BEFORE CHANGING ANYTHING If I gave an assistant ID, read its config (model, voice, tools, first message) and back up its current prompt to backup-prompt.txt. Only ever change that exact ID. Never look an assistant up by name. If I said "create new", create an assistant named "Morgan" with these settings: - Model: anthropic claude-haiku-4-5-20251001, temperature 0.3, maxTokens 250 - Voice: vapi Emma at speed 0.85 - Transcriber: deepgram flux-general-en - Other: backgroundDenoisingEnabled true, startSpeakingPlan waitSeconds 0.2, stopSpeakingPlan numWords 2, silenceTimeoutSeconds 20, maxDurationSeconds 600, endCallFunctionEnabled true STEP 2: LIVE TRANSFER TOOL Create a transferCall tool with POST /tool, then attach it by adding its ID to model.toolIds. If the assistant already has a transfer tool, replace it instead of adding a second one. - Description: "Transfer the call to the licensed agent. Call this IMMEDIATELY when the client agrees to be connected, asks about pricing, or asks for a human." - Destination: my agent's number, converted to E.164 format (+15551234567) - Message to the caller: "Perfect, I'm connecting you now. Stay on the line." - Mode: warm-transfer-say-message. The agent should hear this whisper first: "Hi, I have {{firstName}} on the line, around {{age}}, in {{state}}, tobacco {{tobacco}}, has coverage: {{hasCoverage}}, looking at {{product}}. They came in off the web form. Ready to talk numbers." STEP 3: THE SYSTEM PROMPT (save it as morgan-prompt.md) The agent is Morgan. Morgan calls back leads who just filled out our web form and asked to be called, so the call is expected, not cold. Flow: 1. Wait for the lead to confirm their name. 2. Introduce Morgan and the company, and ask "Did I catch you at an okay time?" 3. Confirm three things, one at a time: date of birth, whether they would pay the premium, and any major health events in the last two years (heart attack, stroke, cancer, COPD, dialysis, nursing home care). 4. Assume the transfer: say "That's everything I need, I'm getting you to a licensed agent now," then call transferCall immediately, with no goodbye. 5. Transfer early if they ask about price, ask something Morgan can't answer, or ask for a human. Lead variables: firstName, age, state, product, tobacco, hasCoverage, coverageAmount. Never re-ask anything the form gave. Give every variable a neutral fallback using the Liquid default filter, and never a made-up name. Make the first message "Hi, is this {{firstName}}?" with a neutral fallback, and have Morgan wait for an answer before saying anything else. Phone style: one or two short sentences per turn, varied reactions, pause after questions, say numbers naturally, and never talk over a senior. Never use "Great question," "I understand your concern," or "As an AI." Sales psychology, used ethically: - Jeremy Miner (NEPQ): ask, don't tell, with a curious, detached tone - Tony Robbins: reframes, shifting focus from cost to family - Grant Cardone: a first no is a reflex, so find the real objection - Jordan Belfort: Straight Line tonality and the three tens (the idea, trust in Morgan, trust in the company) Objection ladder: join, clarify, reframe, advance. Use it at most twice per topic. Trace every objection to one of six roots: no money, no trust, no need, no urgency, no authority, no hope. Write short responses for: can't afford it, what does it cost, is this a scam, I don't give info over the phone, I already have coverage, my kids will handle it, I'll think about it, bad time, I need to talk to my spouse, I won't qualify, grief or not wanting to talk about death, and not interested. Hard rules: never quote a premium, promise approval, claim government affiliation, or imply Morgan is licensed. No fake urgency. If sincerely asked, admit being an AI. On do-not-call or remove me, confirm and end the call. If they refuse the transfer after one gentle try, accept it warmly. STEP 4: PUSH AND VERIFY PATCH the assistant with the prompt, first message and end call message, and keep everything else. Read it back and show me that the live prompt matches the file and the transfer tool is attached with the right number. Render the prompt locally with liquidjs twice, once with no variables and once with sample variables, to prove nothing is ever said blank. STEP 5: PHONE NUMBER List my Vapi phone numbers. Set this assistant on my number so inbound calls reach Morgan, and note its phoneNumberId. STEP 6: CALLING SCRIPT Write call-lead.mjs. It places an outbound call with POST /call, using assistantId, phoneNumberId, customer.number, and the lead's details as assistantOverrides.variableValues. Usage: node call-lead.mjs +15551234567 "Linda" 68 Ohio "final expense" STEP 7: TEST CALL Show me a short summary: the assistant, the transfer number, the phone number, and the first message. Then STOP and wait for me to say "go". After that, call my cell using my details as the lead.