{ "name": "Pre-Screening Recruiting Agent", "nodes": [ { "name": "introduction", "type": "conversation", "isStart": true, "metadata": { "position": { "x": -400, "y": -150 } }, "prompt": "You are a friendly yet time-efficient recruiting assistant. 1) Verify the candidate’s identity. 2) If they can talk now, advance to screening. 3) If busy, offer to reschedule. 4) If not interested or wrong number, apologise and end.", "model": { "provider": "openai", "model": "gpt-4o-mini", "temperature": 0.3, "maxTokens": 250 }, "messagePlan": { "firstMessage": "Hi {{customer.name}}, this is the recruiting assistant for {{companyName}} calling about your application for the {{roleTitle}} position. Do you have a few minutes for some quick pre-screening questions?" } }, { "name": "screening_questions", "type": "conversation", "metadata": { "position": { "x": 100, "y": 650 } }, "prompt": "Ask up to 8 concise questions and capture: full name; work-authorisation; years of relevant experience & key skills; earliest start date & interview availability; salary expectation; best contact email; additional notes. Acknowledge briefly. When done or call ends, proceed to save_summary.", "model": { "provider": "openai", "model": "gpt-4o-mini", "temperature": 0.3, "maxTokens": 300 }, "variableExtractionPlan": { "output": [ { "type": "string", "title": "full_name", "description": "candidate full name" }, { "type": "string", "title": "work_authorisation", "description": "visa or work eligibility" }, { "type": "string", "title": "years_experience", "description": "total relevant years" }, { "type": "string", "title": "key_skills", "description": "main skills mentioned" }, { "type": "string", "title": "availability_to_start", "description": "earliest start date" }, { "type": "string", "title": "preferred_interview_time", "description": "best interview window" }, { "type": "string", "title": "salary_expectation", "description": "salary figure or range" }, { "type": "string", "title": "email", "description": "best contact email" }, { "type": "string", "title": "additional_notes", "description": "other useful info" } ] } }, { "name": "reschedule_call", "type": "conversation", "metadata": { "position": { "x": -650, "y": 350 } }, "prompt": "If the candidate is busy, ask for a better time, capture preferred time and contact method, confirm, then end.", "variableExtractionPlan": { "output": [ { "type": "string", "title": "callback_time", "description": "preferred callback time" }, { "type": "string", "title": "contact_preference", "description": "phone, email or text" } ] } }, { "name": "human_request_check", "type": "conversation", "metadata": { "position": { "x": 850, "y": 0 } }, "prompt": "Confirm the user wants a human recruiter and ask what they’d like to discuss before transferring.", "globalNodePlan": { "enabled": true, "enterCondition": "User explicitly asks to speak to a human" } }, { "name": "transfer_call", "type": "tool", "metadata": { "position": { "x": 1150, "y": 300 } }, "tool": { "type": "transferCall", "function": { "name": "transfer_to_live_recruiter", "parameters": { "type": "object", "properties": {} } }, "destinations": [ "{{liveAgentNumberId}}" ] } }, { "name": "leave_voicemail", "type": "tool", "metadata": { "position": { "x": -200, "y": -600 } }, "tool": { "type": "endCall", "function": { "name": "leave_voicemail", "parameters": { "type": "object", "properties": {} } }, "messages": [ { "type": "request-start", "content": "Hi {{customer.name}}, we tried to reach you regarding your application to {{companyName}}. Please call us back on this number or reply to the email you received. Thanks!", "blocking": true } ] }, "globalNodePlan": { "enabled": true, "enterCondition": "Call answered by voicemail or answering machine" } }, { "name": "no_response_end", "type": "tool", "metadata": { "position": { "x": -950, "y": 900 } }, "tool": { "type": "endCall", "function": { "name": "end_for_no_response", "parameters": { "type": "object", "properties": {} } }, "messages": [ { "type": "request-start", "content": "It seems we’re having trouble connecting. I’ll send you an email to reschedule. Have a great day!", "blocking": true } ] }, "globalNodePlan": { "enabled": true, "enterCondition": "No user speech detected for 8 seconds twice" } }, { "name": "save_summary", "type": "tool", "metadata": { "position": { "x": 150, "y": 1500 } }, "tool": { "type": "webhook", "function": { "name": "save_screening_summary", "parameters": { "type": "object", "required": [ "callOutcome", "summary" ], "properties": { "callOutcome": { "type": "string" }, "summary": { "type": "object" } } } }, "url": "https://YOUR-N8N-URL/webhook/vapi_summary", "method": "POST", "timeout": 9000 } }, { "name": "end_call", "type": "tool", "metadata": { "position": { "x": -150, "y": 2000 } }, "tool": { "type": "endCall", "function": { "name": "goodbye", "parameters": { "type": "object", "properties": {} } }, "messages": [ { "type": "request-start", "content": "Thanks for your time today! A recruiter will review your answers and be in touch soon. Have a great day!", "blocking": true } ] } } ], "edges": [ { "from": "introduction", "to": "screening_questions" }, { "from": "introduction", "to": "reschedule_call" }, { "from": "introduction", "to": "end_call" }, { "from": "screening_questions", "to": "save_summary" }, { "from": "save_summary", "to": "end_call" }, { "from": "reschedule_call", "to": "end_call" }, { "from": "human_request_check", "to": "transfer_call" }, { "from": "transfer_call", "to": "end_call" } ], "globalPrompt": "" }