Case Study
How an E-Commerce Store Cut Daily Customer Service Calls by 35%.
Customers phoned to ask where their order was, and orders missing information waited for someone to reach the customer. An AI agent now answers order questions by message, WhatsApp, or phone, and a second one calls customers when an order needs their attention.
- Fewer daily calls to customer service
- 35%
- To follow up on an order that needs information, down from 3 days
- <1 Day
- Order questions resolved by the AI agent without a person
- 20%
The Challenge
Routine Calls Were Taking the Team’s Day.
Let AI agents take the routine contact in both directions, keep a person one request away, and leave a record of every conversation on the order.
The Business Context
The business is an e-commerce store that ships orders to customers. Customers can follow an order in an online portal, and a customer service team handles calls. Two kinds of contact took most of the team’s time: customers asking for an order update, and staff needing information from a customer before an order could be processed.
Customers were not logging in to the portal. They phoned instead, mostly to ask where an order was in processing or when a shipment would arrive. At the same time, some orders could not move because information was missing, and each one depended on someone reaching that customer. Both kinds of contact are routine, and both kept the team from the calls that needed a person.
- Customers had a portal for order updates, and many phoned instead.
- The most common questions were where an order was in processing and when a shipment would arrive.
- Orders with missing information waited until someone could reach the customer.
- Staff needed to see, on the order itself, who had been called and what the customer said.
What We Delivered
We delivered two AI agents that work from the business’s CRM. The first answers order and shipment questions by message, WhatsApp, or an inbound phone call. The second places outbound calls to customers whose order needs information, explains why, and transfers the customer to a person on request. Both are integrated with the systems the team already uses: they read live orders, write back to the same order, transfer calls to the existing customer service line, and report to the team’s chat channel. We also built the scheduled pipeline behind the outbound calls, with calling limits, every call’s result passed back to the order, and infrastructure defined as code.
The Solution
Five Problems, and What We Built for Each.
01 / 05
The customer service line
- “Where is my order?”
- “Has my order shipped yet?”Waiting
- “When will it arrive?”Waiting
The Problem
Customers Phoned to Ask Where Their Order Was
The portal had the answer, and customers were not logging in. The same question filled the customer service line.
Where is my order?
It is being prepared now. You will get tracking details once it ships.
MessageWhatsAppPhone call What We Built
An AI Agent Answers, on the Channel the Customer Chooses
Customers ask by message, WhatsApp, or a phone call, and the agent tells them where the order is and the delivery status of the shipment.
How We Built It
- 01
Two Questions Covered FirstWhere the order is in processing, and the delivery status of the shipment
Three Ways to AskWhatsAppA message, WhatsApp, or an inbound phone call reach the same agent
- 03
Answers from the CRMThe reply reflects the order’s current stage, not a general script
02 / 05
Order on holdInformation missingIt waits until someone reaches the customer The Problem
Orders Waited until Someone Could Reach the Customer
An order with missing information cannot be processed. Each one depended on a call to that customer.
Order on holdInformation missingAI agent, calling the customer
“Your order needs some information before we can process it.”
Continue on the callSpeak to a person
What We Built
An AI Voice Agent Calls, and a Person Is One Request Away
The agent calls the customer, explains that the order needs their attention, and transfers them to customer service if they ask.
How We Built It
Orders on Hold, Found Each WeekdayPythonRecords are checked for a name, an order number, and a valid phone number before queuing
A Voice Agent Places the CallVapiIt greets the customer by name and gives the order number and the reason
A Conversation, Not a RecordingOpenAI APIThe customer can respond, ask for a person, or receive a voicemail message
Each stage runs as its own serverless task on AWS, passing work through queues.
03 / 05
- When is it acceptable to call?
- How many calls in one day?
- Has this customer already been called?
The Problem
Automated Calls Need Limits before They Start
Calling hours, daily volume, and repeat calls all had to be decided and enforced, not left to chance.
One weekdayCalls only inside the set hours
Daily limitNo repeat call for three daysVoicemail message What We Built
Calls Only within Set Hours and Written Limits
Calls go out on weekdays inside a fixed window, under a daily limit, and never to the same customer again within three days.
How We Built It
- 01
Switched On Each MorningThe calling schedule is off by default and turns itself off when the day’s work is done
A Daily Count and a Repeat CheckRedisCalls stop at the daily limit, and a customer called recently is skipped
- 03
A Test Mode for Safe ChangesIn testing, calls go to a test number and nothing is written to the CRM
Schedules and limits are written as code in Terraform and deployed through GitHub.
04 / 05
Order noteCalled. What happened?
The Problem
Staff Needed to See What Happened on Every Call
Staff needed to see who had been called, what happened, and which customers still needed a person.
Order noteAdded after the call
Customer confirmed the details and asked to continue.
Sentiment: satisfiedTranscript attached
- Accepted
- Declined
- Transferred to a Person
- Voicemail
- Wrong Number
What We Built
Every Call Is Passed Back to the CRM
Each call returns to the order with a plain outcome, a short summary, how the customer felt, and the transcript.
How We Built It
- 01
Results Collected after Calling HoursHow the call ended, a summary, the transcript, and an AI reading of the customer’s sentiment
- 02
Sorted into Plain CategoriesAccepted, declined, transferred, hang-up, voicemail, wrong number, or other
- 03
Passed Back to the CRMOutcome, summary, customer sentiment, and transcript land on the order, where staff already work
Call records are staged on their way back. The CRM is where they land, and a record that fails is set aside and reported.
05 / 05
The AI agents
- Their CRM
- CRM order notes
- Customer service line
- Team chat
A separate tool is a second place to check The Problem
An AI Tool beside the Business Is One More Place to Check
If the agents ran on their own, staff would copy details in, copy results out, and look in two places to know what happened.
The AI agents
- Their CRMreads orders on hold
- CRM order notesoutcome · sentiment · transcript
- Customer service linetransfers live calls
- Team chatdaily summary
What We Built
Built into the Systems the Team Already Uses
The agents read live orders, write their notes back to the same order, hand calls to the existing customer service line, and report to the team’s chat channel.
How We Built It
- 01
Reads and Writes through the CRM’s Own RoutinesThe same database procedures the business already relies on, so its rules still apply
- 02
Hands Over to the Existing Phone LineA transferred customer reaches the customer service team, with the agent’s introduction
- 03
Reports Where the Team Already WorksA summary of each day’s run is posted to the team’s chat channel
Runs inside the business’s own private cloud network, with database credentials held in a secrets vault.
Two AI Agents, Working from the Same CRM
Before: Every Routine Contact Went through the Team
- Customers Asking for an Update
- Orders Waiting on the Customer
The Customer Service TeamRoutine calls fill the day
Customers waited on the phone for an answer the portal already had, and orders on hold waited until the customer could be reached.
After: AI Agents Take the Routine Contact in Both Directions
Customers AskingOrder and shipment questions, answered without the phone queue
Customer Asks
By message, WhatsApp, or a phone call
AI Agent Answers
Where the order is, and the delivery status
Customer Service
Handles the calls that need a person
Both agents work from the same CRM
Orders Needing InformationWeekdays, within set hours and a daily limit
Find Orders on Hold
Collected and checked each morning
AI Agent Calls
Explains the reason, by name and order number
A Person on Request
The call is transferred to customer service
Back into the CRM
Outcome, summary, sentiment, and transcript, on the order
The agents handle order questions only. A person stays one request away.
Daily Calls to Customer Service35% Fewer
Technologies Used
Vapi
AI Voice Agent Platform
OpenAI API
Conversation Model behind the Voice Agent
WhatsApp
Customer Messaging Channel
Python
Pipeline Tasks
AWS
Serverless Cloud Infrastructure
Redis
Daily Call Count & Repeat-Call Check
Amazon S3
Call Record Staging
Terraform
Infrastructure as Code
GitHub
Version Control & Deployment
How the System Was Built
- 01
Answer the Routine Question Where Customers Already Are
Customers were not logging in to the portal, so the answer had to reach them another way. The AI agent takes the same question by message, WhatsApp, or an inbound phone call, and replies with where the order is in processing and the delivery status of the shipment.
Technical Detail: Answer the Routine Question Where Customers Already Are
The agent’s scope is deliberately narrow: order stage and shipment delivery status, the two subjects behind most update calls. Questions outside that scope stay with the customer service team.
- 02
Find the Orders on Hold, and Check Every Record First
Each weekday morning the pipeline collects the orders that are missing information. A record is queued for a call only when it has an order number, a customer name, and a phone number that passes validation. Anything else is set aside for review instead of being called.
Technical Detail: Find the Orders on Hold, and Check Every Record First
A Python task reads the CRM database in pages and validates each record, including cleaning the phone number to a standard length. Valid records go to a first-in, first-out queue with de-duplication; invalid ones go to a separate dead-letter queue. Database credentials are held in AWS Secrets Manager.
- 03
Place the Call with a Voice Agent, and Keep a Person Close
The voice agent greets the customer by name, gives the order number, and explains that the order needs their attention before it can be processed. The customer can ask for a person at any point, and the call is transferred to customer service. If nobody answers, the agent leaves a voicemail message.
Technical Detail: Place the Call with a Voice Agent, and Keep a Person Close
Calls are placed through Vapi with a conversation model from the OpenAI API. Each call carries the customer’s name, order number, and the brand’s contact details as variables. The configuration sets a maximum call length, a silence timeout, a limited number of idle prompts, voicemail detection, and a warm transfer to a customer service number.
- 04
Write the Limits Down, and Enforce Them in the System
Calls go out only on weekdays inside a fixed window. A daily limit caps the number of calls, a small batch is placed every few minutes, and a customer who was called recently is skipped for three days. The schedule is off by default: it is switched on each morning and switches itself off when the work is done.
Technical Detail: Write the Limits Down, and Enforce Them in the System
Amazon EventBridge schedules drive the tasks, and an AWS Step Functions workflow starts the daily extraction. Redis holds the day’s call count and a three-day key for each record, alongside queue-level de-duplication. A short pause between calls respects the telephony rate limit. A test mode redirects calls to a test number and skips database writes.
- 05
Pass Every Call Back to the CRM
After calling hours, the pipeline collects the result of each call and sorts it into a plain outcome: accepted, declined, transferred to a person, hang-up, voicemail, wrong number, or other. The outcome goes back to the order with a short summary, the customer’s sentiment, and the transcript, so staff see what happened without listening to a recording.
Technical Detail: Pass Every Call Back to the CRM
A load task retrieves each call’s status, ending reason, summary, transcript, and an AI-assessed sentiment, such as satisfied, neutral, frustrated, or confused, then classifies the outcome. Records are staged in Amazon S3 on the way and written back through the CRM’s own procedure; the CRM is the final destination. A run summary is posted to the team’s chat channel, and errors are reported to Sentry.
- 06
Integrate with the CRM, Not beside It
The agents are part of the CRM’s daily work. Orders on hold are read from the live CRM each morning, and every call’s outcome is written back to that same order as a customer note. A transferred call reaches the existing customer service line, and the day’s summary appears in the chat channel the team already reads. Staff do not open a separate tool to see what the agents did.
Technical Detail: Integrate with the CRM, Not beside It
Reads and writes go through the CRM’s own stored procedures, so selection rules and note formats stay under the business’s control and can change without redeploying the pipeline. The tasks run inside the business’s private cloud network, and database credentials are held in AWS Secrets Manager, not in code. Each call carries the customer’s name, the order number, and the brand’s contact details from the CRM record.
- 07
Define the Infrastructure as Code
The pipeline runs as separate serverless tasks, each with one job, so a failure in one stage does not restart the others. Development and production are separate environments, deployed the same way.
Technical Detail: Define the Infrastructure as Code
Each task is a Python container image on AWS Lambda, stored in Amazon ECR. Terraform defines the functions, queues, schedules, storage, network, and access roles. GitHub Actions builds and deploys each task using short-lived AWS credentials, with separate development and production branches.
The Results
Fewer Routine Calls. Orders That Keep Moving.
What Was Delivered
Customers can get an order or shipment update from an AI agent by message, WhatsApp, or phone. Orders missing information are followed up by an AI voice agent, starting the same morning the order is found, within set hours and limits, with a transfer to customer service on request. Every outbound call is passed back to the CRM with its outcome, summary, sentiment, and transcript.
Reported Operational Change
The project owner reports that daily call volume to customer service fell by 35% after the AI agent began answering order and shipment questions, and that the agent resolves 20% of order questions without a person. An order that needs information is now followed up the same day, down from 3 days.
The 35% reduction in daily call volume, the 20% of order questions resolved by the AI agent, and the move from 3 days to same-day follow-up were reported by the project owner; no measurement period or independent validation was supplied. Calling hours and limits describe the delivered configuration, not measured call volumes.
What Changed for the People Doing the Work
- Customers
- Ask about an order by message, WhatsApp, or phone, and hear promptly when an order needs their attention.
- Customer Service Agents
- Spend less of the day on order updates, and receive transferred calls from customers who asked for a person.
- Order Processing Staff
- See on the order whether the customer was reached, what they said, how they felt, and whether someone needs to follow up.
- Operations Leaders
- Receive a summary of each day’s calling run, and can read how customers responded, order by order.
- Technical Teams
- Change schedules and limits in code, test safely against a test number, and trace a failed record to its stage.
What This Project Reinforced
Meet Customers on the Channel They Already Use
A portal only helps the customers who log in. The same answer on WhatsApp or the phone reaches the rest.
Start with the Most Common Question
Two subjects accounted for most update calls. Answering those well did more than covering every subject thinly.
Decide the Limits before the First Call
Hours, daily volume, and repeat calls belong in the system’s configuration, where they are enforced on every run.
Integrate Deeply, or Staff Do the Integrating
When an agent reads from and writes to the system of record, nobody re-enters its work. Left beside that system, it creates a second job.
An Automated Call Should Leave a Record
The note on the order is what lets staff trust the calls and pick up where the agent stopped.

