Inspiration
Schools spend a lot of time manually following up with parents and guardians about outstanding school fees. This often means repeated phone calls, messages, and manual tracking of payment commitments.
I wanted to explore how AI voice agents could handle the first payment follow-up for schools while keeping the conversation polite and human-friendly.
The idea was not to replace school administrators, but to automate a repetitive task and give them a structured summary of each conversation so they can focus on cases that require human attention.
What it does
School Collections Assistant helps schools follow up with parents or guardians about outstanding payments using AI-powered voice calls.
A school administrator provides the parent/guardian details, student name, outstanding amount, due date, school name, and phone number. The application then initiates a payment reminder workflow.
After the conversation, the system produces a structured result such as:
- Whether the parent is aware of the outstanding payment
- Whether they intend to pay
- Their expected payment date
- A summary of their response
The application also has a fake/no-call mode by default, allowing the workflow to be tested without placing a real phone call.
How we built it
I built the project using TypeScript, Node.js, Express, and CALL-E.
The application consists of a web dashboard connected to an Express API. The API validates the request and either runs a safe simulated workflow or, when explicitly enabled and authorized, sends the request to CALL-E for an outbound voice call.
School Admin
│
▼
Web Dashboard
│
▼
Express API
│
├── Fake Mode ──► Structured Result
│
└── Live Mode ──► CALL-E ──► Parent/Guardian
Because phone calls have real-world side effects, I also built several safety controls into the application, including authentication, strict phone-number validation, destination authorization, explicit confirmation for live calls, phone-number masking, idempotency, and protection against accidental duplicate calls.
Challenges I ran into
The biggest challenge was regional availability.
I am developing the project from Zambia, but CALL-E outbound calling currently does not support Zambian numbers. This meant I could not test the complete live workflow using my own phone number.
I created an Issue on the repo and I was given the testing phone number which I can use for testing
This challenge also made me think more carefully about safety. A voice agent is not just producing text it can perform a real-world action by calling someone. Therefore, the application needed strong controls around when a call could actually happen.
Accomplishments that I am proud of
I am particularly proud that the project goes beyond simply connecting an AI agent to a phone call.
The application has a complete workflow from the school administrator's request to a structured conversation result, while also treating live phone calls as potentially sensitive real-world actions.
Some of the things I am proud of include:
- Building a working CALL-E integration in TypeScript
- Designing fake mode so the application can be tested safely
- Adding authentication and strict destination authorization
- Implementing phone-number masking and validation
- Adding idempotency to reduce the risk of duplicate calls
- Writing tests for the safety controls
- Designing the application so live calling is explicitly opt-in
Most importantly, I was able to turn a real administrative problem into a practical AI agent use case.
What I learned
This project taught me that building an AI agent is not only about making the AI work. The surrounding system and its safety controls are just as important.
I learned how to integrate a voice-agent API into a real application, structure the results of natural conversations into data that a school can use, and design safeguards around actions that can have real-world consequences.
I also learned how limitations in an external API — such as regional phone availability — can influence the architecture of a project. Instead of treating the limitation as a blocker, I used it to build a safer development and testing workflow.
What's next for School Collections Assistant
The next step would be integrating the assistant directly with a school's existing student and accounting systems.
Instead of manually entering outstanding payments, the system could automatically identify overdue accounts and initiate the appropriate follow-up workflow.
Future versions could include:
- Automatic follow-up scheduling
- Integration with school accounting/ERP systems
- Payment links sent after a conversation
- Support for multiple local languages
- Payment confirmation and reconciliation
- Dashboards showing collection follow-up results
- Escalation to a human administrator when necessary
The long-term goal is to make school fee collection less repetitive for administrators while keeping the actual relationship with parents human-friendly.
Log in or sign up for Devpost to join the conversation.