I Built an AI Subscription Cancel-Save Agent That Does Not Manipulate You Telnyx released an open-source AI subscription cancel-save agent built with Python Flask that combines voice, AI inference, and messaging. The agent classifies cancellation reasons, offers one relevant save option, and respects direct cancellation requests without manipulative dark patterns. The demo covers three flows—saved, cancelled, and transferred—and is designed to mirror ethical customer-success team practices. Cancel-save flows are easy to over-engineer into manipulative dark patterns, and easy to under-engineer into "your subscription has been cancelled, goodbye" experiences that lose revenue. A good cancel-save agent does three things: classifies the reason, offers one relevant save option, and respects a direct cancellation request. The Telnyx code example is: It is a Python Flask app that combines Telnyx Voice, AI Inference, and Messaging into a small demo you can clone and run in a few minutes. A customer calls in saying they want to cancel. The Flask app receives the webhook, verifies the customer by caller ID, and asks why they want to cancel. AI Inference returns the reason too expensive , not using , missing feature , support issue , competitor switch , temporary pause , other and the sentiment. Hardcoded urgent phrases lawyer , sue , fraud , chargeback and direct cancel phrases cancel now , please cancel my subscription short-circuit before any offer. Otherwise, the agent offers one save option from the OFFER POLICY mapping. A "yes" applies the save or pauses the subscription. A "no" or "cancel" ends the call with a graceful cancellation. An ambiguous yes/no gets exactly one clarifying prompt — the agent never loops. The case is recorded with the outcome saved , cancelled , paused , transferred , needs followup , and the customer record is updated. Hangups before resolution are recorded as needs followup so reps can call back. It is small enough to demo live, but it covers the parts that often get cut from a "Hello World" voice AI demo: The design choice I care most about is non-manipulation. The agent does not push back on a direct cancellation, and it offers one save option — not five — when the customer is open to one. That maps to how good customer-success teams actually operate. git clone https://github.com/team-telnyx/telnyx-code-examples.git cd telnyx-code-examples/ai-subscription-cancel-save-retention-agent-python cp .env.example .env pip install -r requirements.txt python app.py Expose the webhook: ngrok http 5000 In the Telnyx Portal, set the Voice API app webhook URL to https://