Skip to content
Menu
Case StudiesE-Commerce & Retail

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.

  1. 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

    1. 01

      Two Questions Covered FirstWhere the order is in processing, and the delivery status of the shipment

    2. Three Ways to AskWhatsAppA message, WhatsApp, or an inbound phone call reach the same agent

    3. 03

      Answers from the CRMThe reply reflects the order’s current stage, not a general script

  2. 02 / 05

    Order on holdInformation missing
    It 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 missing

    AI 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

    1. Orders on Hold, Found Each WeekdayPythonRecords are checked for a name, an order number, and a valid phone number before queuing

    2. A Voice Agent Places the CallVapiIt greets the customer by name and gives the order number and the reason

    3. A Conversation, Not a RecordingOpenAI APIThe customer can respond, ask for a person, or receive a voicemail message

    AWSAWS

    Each stage runs as its own serverless task on AWS, passing work through queues.

  3. 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

    1. 01

      Switched On Each MorningThe calling schedule is off by default and turns itself off when the day’s work is done

    2. A Daily Count and a Repeat CheckRedisCalls stop at the daily limit, and a customer called recently is skipped

    3. 03

      A Test Mode for Safe ChangesIn testing, calls go to a test number and nothing is written to the CRM

    TerraformGitHubGitHub

    Schedules and limits are written as code in Terraform and deployed through GitHub.

  4. 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

    1. 01

      Results Collected after Calling HoursHow the call ended, a summary, the transcript, and an AI reading of the customer’s sentiment

    2. 02

      Sorted into Plain CategoriesAccepted, declined, transferred, hang-up, voicemail, wrong number, or other

    3. 03

      Passed Back to the CRMOutcome, summary, customer sentiment, and transcript land on the order, where staff already work

    PythonAmazon S3

    Call records are staged on their way back. The CRM is where they land, and a record that fails is set aside and reported.

  5. 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

    1. 01

      Reads and Writes through the CRM’s Own RoutinesThe same database procedures the business already relies on, so its rules still apply

    2. 02

      Hands Over to the Existing Phone LineA transferred customer reaches the customer service team, with the agent’s introduction

    3. 03

      Reports Where the Team Already WorksA summary of each day’s run is posted to the team’s chat channel

    AWSAWS

    Runs inside the business’s own private cloud network, with database credentials held in a secrets vault.

The illustrations are schematic. Questions, replies, and order notes are examples, not the client’s conversations or records.

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

  1. Customer Asks

    By message, WhatsApp, or a phone call

  2. AI Agent Answers

    Where the order is, and the delivery status

  3. Customer Service

    Handles the calls that need a person

Both agents work from the same CRM

Orders Needing InformationAWSAWSWeekdays, within set hours and a daily limit

  1. Find Orders on Hold

    Collected and checked each morning

  2. AI Agent Calls

    Explains the reason, by name and order number

  3. A Person on Request

    The call is transferred to customer service

  4. 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

The 35% reduction in daily call volume and the same-day follow-up are reported by the project owner. Calling hours, the daily limit, and the three-day repeat rule come from the delivered configuration.

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

Working Through a Similar Problem?

Tell us about your situation and the change your business needs.