Inspiration

At MCIPP, we run a program that registers small businesses across Abia State and connects them to growth opportunities. Every day, business owners, tailors, traders, mechanics, food vendors, open WhatsApp and send messages asking the same questions: "Where is my certificate?" "What is happening with my registration?" "Nobody has called me back." WhatsApp is how these business owners communicate. It is on every phone, it requires no email address, no portal, no form. It is the most natural thing in the world for a small business owner in Aba to send a text when they have a problem. And they do. Every single day. Behind those messages is a program coordinator, a real person, manually checking spreadsheets, cross-referencing records, drafting responses, forwarding complaints to the right staff member, and compiling everything into a weekly report for leadership. It works. But it is slow, it is inconsistent, and it depends entirely on one person being available. We watched complaints pile up over weekends. We watched business owners wait days for answers that should have taken minutes. We watched the coordinator, who was us, spend hours every week on work that followed the same pattern every single time. That pattern was the insight. If the work is that predictable, an agent can do it.

What it does

Proxy is an autonomous WhatsApp-based complaint resolution agent that handles business registration inquiries for MCIPP end to end, without human intervention. When a business owner sends a message on WhatsApp, Proxy receives it instantly. It understands what they are asking, looks up their registration record in the database, and acts. If their business is registered, it asks for their email and sends their certificate as an attachment. If their registration is pending, it tells them exactly what is missing or gives them a timeline. If it cannot resolve the issue, it escalates to a staff member automatically with full context, so the human picking it up knows everything they need to act immediately. Every complaint is logged, tracked, and documented from the moment it arrives to the moment it is closed. Leadership receives a structured report without asking for one.

How we built it

Proxy is built on a Three-agent pipeline, each with a focused responsibility: The Triage Agent reads every incoming WhatsApp message, classifies the intent, extracts the business name and owner details, and decides whether enough information is present to proceed. If information is missing, it asks the user for it in natural language before routing forward. The Registration Agent receives the classified complaint and the business record from the database. It follows a decision tree: registered businesses get their certificate sent, pending registrations get a status update or a request for missing documents, rejected applications are escalated with a clear explanation. Also It compiles the full complaint context and notifies the responsible staff member by email so they can follow up directly. The Report Agent runs on request, queries the database for all complaint activity, and generates a plain-English executive summary for program leadership. The stack uses Qwen on Qwen Cloud for all agent reasoning and response generation, Green API for WhatsApp integration, FastAPI for the webhook backend, PostgreSQL on Supabase for the central database, and SMTP for email delivery. All agents share conversation history so the system remembers context across multiple messages from the same user.

Challenges we ran into

The hardest problem was conversation state. A business owner rarely sends one clean message. They send three. Name first, then business name, then the actual complaint. Building a pipeline that could accumulate partial information across multiple messages, hold it in memory, and only proceed when enough context was present took significant iteration. The second challenge was making the agent a resolver rather than a documenter. Early versions logged everything and responded politely but did not actually close anything. Shifting to a tool-call architecture where the agent is forced to declare an action and the pipeline executes that action against the database made the difference. Also due to cost involved in using session based database like Redis, For the hackathon, it implemented in memory sessions to store data for different sessions.

Accomplishments that we're proud of

Proxy handles a complete complaint lifecycle end to end, from a WhatsApp message arriving to a certificate landing in a business owner's inbox, with no human in the loop. That was the original goal and it works. The agent writes every response itself. There are no hardcoded templates. Qwen drafts the WhatsApp replies, the email subject lines, the email bodies, and the escalation notes. The tone is warm and appropriate every time. Every action is logged to the database. Every complaint has a full audit trail from first message to resolution.

What we learned

Agents need boundaries more than they need intelligence. The moment we gave each agent one job and one job only, everything became easier to build, easier to debug, and easier to trust. We also learned that the pipeline, not the agent, should own irreversible actions like database writes and email sends. Agents return decisions. The pipeline executes them. That separation made the system reliable.

What's next for Proxy

Proxy currently handles certificate and registration complaints. The next step is expanding to cover the full range of MCIPP program complaints, trainer no-shows, missed program activities, incorrect beneficiary information, and general feedback. Beyond MCIPP, the architecture is not specific to business registration. Any organisation that receives high volumes of structured complaints through WhatsApp and manages records in a database can deploy Proxy. NGOs, government agencies, and field programs across Nigeria face exactly this problem. The Report Agent is also currently basic. The next version will include trend detection, anomaly flagging, and week-over-week comparisons so leadership gets not just what happened but what it means.

Built With

Share this project:

Updates