Twilio Flex for Charities: Lessons From a Coaching Contact Centre

Building a Twilio Flex contact centre for a UK children's charity: one configurable desk, conversations that survive, and Salesforce records that match.

A major UK children's charity runs a free parenting support service where parents message a qualified coach by webchat or WhatsApp. I was one of the developers who built and maintained the Twilio Flex platform behind it, in a team that started with two developers and grew to four. In 2025/26, 3,984 parents had one-to-one coaching through it.

Charity contact centres are not sales call centres with a softer tone. Conversations run over days, parents step away and come back, and the record of what was said matters long after the chat ends. This post covers what that meant for the build. The case study tells the story of the service itself.

Why Twilio Flex suits this kind of service

Flex is a contact-centre platform you program rather than configure. That was the point. The charity needed a desk built around how its coaches work, not a generic ticket queue: booked follow-up sessions, handovers between colleagues, links to local services, and case records in the charity's Salesforce.

The trade-off is that you own more of the system. Flex gives you the building blocks, including Studio for conversation flows, TaskRouter for routing and Conversations for the messages themselves. Everything that makes it fit your service is code your team writes and maintains.

Build one desk, switch features per service

We built the coaches' desk as a single Flex plugin, written in React, organised into modules: task management, transfers, scheduled sessions, follow-ups, out-of-hours requests, saved replies, supervisor drop-ins, surveys, reminders and more. Each service turns on only the modules it needs.

That decision paid off when the charity launched a second service on the same platform: a text and email helpline where coaches support young people aged 13 to 18. It needed a different set of features, not a different system.

If you are building on Flex for more than one programme, avoid separate plugins per service. They drift apart, and every fix has to be made several times.

Route every message deliberately

Each incoming message goes through a Twilio Studio flow before any coach sees it. The flow records the request, reads what the parent entered before the chat began, checks whether the service is open and passes the conversation to the right TaskRouter queue. Conversations that raise concern reach a safeguarding specialist.

Outside opening hours, the message is not lost. It is logged as an out-of-hours request, and a coach picks it up and replies when the service opens. For a parent writing at eleven at night, the difference between "we are closed" and "a coach will reply tomorrow" matters.

Make conversations survive the platform

The hardest problems were about keeping conversations whole.

Twilio can delete a task at the platform level, for example when a timeout is reached. For a parenting conversation that pauses for a day, that could mean the parent's thread disappearing from the coach's view. We handled it in the TaskRouter callbacks: when the platform deletes a task, the server reopens the conversation, creates a new task on the same workflow and sends it back to the coach who was handling it, or to the original queue if that coach is unavailable. Recreated tasks can stay open for two weeks.

The same callbacks track the original task identity across these changes, pause scheduled follow-ups while a conversation is active and snooze accepted tasks when a coach goes offline. None of this is visible to parents, which is the point.

Keep Salesforce and the chat in step

Every conversation has to land correctly in the charity's Salesforce case records, which staff rely on long after the chat has ended. Much of our maintenance work went into chat history, data integrity and the Salesforce sync.

A Node.js server sits between Flex, Twilio and Salesforce. Background workers on Redis handle the slow or repeated jobs: transcripts, follow-ups, reminders, message syncing and regular health checks on live conversations. When either side changed or a sync failed, the fix had to restore the record without duplicating it, because a case record that disagrees with the chat is worse than a missing one.

What I would tell a charity considering Flex

  • Budget for a development team, not a licence. Flex's value is that you can shape it, and that shaping is ongoing work.
  • Design for conversations that last days, not minutes.
  • Build one configurable desk if you run more than one service.
  • Decide early where the record of truth lives, and test the sync to it as seriously as the chat itself.
  • Plan for Twilio's own lifecycle rules, such as task timeouts, before they surprise a coach.

The platform is live and runs the service every day, though I no longer maintain it. If you are planning a contact centre for a charity or public service, I am happy to talk through whether Flex is the right fit.

Related writing