Full Time
2500-4000
40
Aug 22, 2026
Start your application with the word TRUNK so I know you read this post.
I run two production Asterisk/FreePBX servers handling live inbound calls for US businesses. Several thousand DIDs across both. This is real traffic - when the PBX is down, revenue stops.
There are two halves to this job.
FIRST: fix what's broken. I have already completed a full technical audit of both systems. The findings are written up as issues in a private GitHub repo. You pick them up, diagnose, fix, test, push, and document what changed.
SECOND: build the after-hours voice AI. I want an AI agent answering calls on nights and weekends - capturing the caller's details, handling common requests, and escalating or taking a message when it can't. You'll design and build that integration into the existing PBX.
This role is telephony only. You will not touch my websites, CRM, or other applications. Your entire focus is the two PBX servers, the voice AI layer, and the backend code around them.
PART ONE - PBX ISSUE BACKLOG
- Working through an existing backlog of audited issues
- Inbound call routing: DIDs, inbound routes, IVRs, queues, time conditions, failover destinations
- Custom dialplan work where the FreePBX GUI cannot express the logic
- SIP trunk configuration and carrier troubleshooting
- Debugging call failures end to end - carrier SIP trace, Asterisk logs, AstDB, dialplan, database state, backend workers
- Blocking, rate limiting, and spam-protection logic
- CDR reporting and call-data queries
PART TWO - AFTER-HOURS VOICE AI AGENT
- Time-condition routing so calls go to the AI outside business hours and on weekends, and to the normal destinations during the day
- Getting call audio in and out of Asterisk to the AI service - AudioSocket, ARI externalMedia, or equivalent - with acceptable latency
- Handling interruption and barge-in so the caller can speak over the agent
- Warm transfer and escalation: the agent hands off to a human, a queue, or voi
- A fallback path so that if the AI service is slow or down, the call still gets answered. Callers must never hit dead air.
- Capturing what happened on the call - transcript, caller details, outcome - and pushing it somewhere useful
- Tuning the agent based on real call recordings, not assumptions
TECHNICAL ENVIRONMENT
- Asterisk / FreePBX on Ubuntu
- chan_pjsip, SIP trunks (registration-based and IP-authenticated)
- Custom dialplan in extensions_custom.conf, AGI hand-offs
- Node.js backend services, PM2, Nginx
- PostgreSQL / MySQL, Redis
- Git / GitHub - issues, branches, pull requests
- Several thousand DIDs under management
REQUIRED
- You have administered a production Asterisk or FreePBX system with real inbound traffic. Not a lab, not a course, not a Twilio/Vapi integration on its own.
- Shell access comfort: asterisk -rvvvvv, pjsip set logger on, reading the full log, querying the CDR database
- You can write and debug dialplan by hand, not only through the GUI
- Comfortable on Ubuntu: systemd, Nginx, log files, firewall
- Node.js well enough to read, fix, and build backend services around the PBX
- Git workflow: branch, commit with a clear message, pull request
- You trace a problem to root cause before changing anything, and you can say which segment of the call path owns the fault
- Strong written English - every fix needs a written explanation
STRONG PLUS
- You have already connected an AI voice agent to a real phone system - Vapi, Retell, ElevenLabs, Deepgram, OpenAI Realtime, or a custom STT/LLM/TTS pipeline
- Real-time media streaming from Asterisk (AudioSocket, ARI externalMedia, EAGI)
- Carrier-side troubleshooting (codec negotiation, NAT/RTP, session timers)
- fail2ban and SIP security hardening
- AI coding tools (Claude Code, Cursor) used with judgment on real code
- Experience being the only telephony person in an organization
NOT A FIT IF
- Your VoIP experience is only Twilio, Vapi, or Retell rather than running a PBX yourself
- You have only used the FreePBX web interface and never edited a config file or read an Asterisk log
- You need task-by-task supervision
- You would test a change on a production system carrying live calls
PROCESS
Short call, then a PAID technical assessment on an isolated staging PBX (4-6 hours, paid at your rate). Long-term full-time position. References checked before any production access is granted. You will need 3-4 hours of daily overlap with US Central time.
TO APPLY - ANSWER THESE SIX QUESTIONS
Applications without answers will not be reviewed. Attach your resume and any GitHub or work I can look at - but an application with a resume and no answers will be ignored. Short and specific beats long and general.
Q1. Describe one real call-path problem you traced end to end. Where exactly did the call die, how did you prove it, and what did you change?
Q2. Inbound calls from one carrier have one-way audio. Every other trunk is fine. What are the first three things you check?
Q3. Calls are dropping at the same duration every time - always around 15 or 30 minutes. What is your first hypothesis and why?
Q4. How do you make a dialplan change on a PBX carrying live calls without dropping any of them?
Q5. What tables would you query in the CDR database to answer "how many calls hit this DID between these two timestamps, and how many were answered?"
Q6. How would you get live call audio out of Asterisk and into an AI voice service, and back to the caller? If you have built this before, tell me how. If you have not, tell me how you would approach it - I would rather have an honest plan than a bluff.