11---
2- title : Banking Customer Support 💳
2+ title : Inbound customer support
33subtitle : Build a banking customer support agent that can process inbound phone calls and assist with common banking issues.
4- slug : examples/banking-customer -support
5- description : A practical example of how to build a banking customer support agent that can process inbound phone calls and assist with common banking issues .
4+ slug : examples/inbound -support
5+ description : Build a voice AI banking support agent with tools for account lookup, balance and transaction retrieval .
66---
77
8- By following this example, you'll learn how to:
8+ ## Overview
99
10- * Create a voice AI assistant that answers inbound support calls 24/7 on a dedicated phone line.
11- * Build custom tools to facilitate customer support without human intervention.
12- * Make an automated test suite to ensure your assistant is working as expected.
10+ Build a banking support agent with function tools, CSV knowledge bases, and voice test suites. The agent handles account verification, balance inquiries, and transaction history via phone calls.
11+
12+ ** Agent Capabilities:**
13+ * Account lookup and verification via phone number
14+ * Balance and transaction history retrieval
15+
16+ ** What You'll Build:**
17+ * Retrieval tools and CSV knowledge bases for account/transaction data
18+ * Voice test suites for automated quality assurance
19+ * Inbound phone number configuration for 24/7 availability
1320
1421## Prerequisites
1522
1623* A [ Vapi account] ( https://dashboard.vapi.ai/ ) .
1724
1825## Scenario
1926
20- We will be creating a customer support agent for VapiBank, a bank that wants to provide 24/7 support to consumers. It will be capable of:
21-
22- * identifying the caller's account
23- * retrieving current balance
24- * processing lost card claims
25- * disputing transactions
27+ We will be creating a customer support agent for VapiBank, a bank that wants to provide 24/7 support to consumers.
2628
2729
2830---
2931
30- ## 1. Creating a Knowledge Base
32+ ## 1. Create a Knowledge Base
3133
3234<Steps >
3335 <Step title = " Download the spreadsheets" >
3436 <div className = " flex gap-2" >
35- <Download src = " ../static/spreadsheets/banking-customer -support/accounts.csv" >
37+ <Download src = " ../static/spreadsheets/inbound -support/accounts.csv" >
3638 <Button intent = " primary" >Download accounts.csv</Button >
3739 </Download >
38- <Download src = " ../static/spreadsheets/banking-customer -support/transactions.csv" >
40+ <Download src = " ../static/spreadsheets/inbound -support/transactions.csv" >
3941 <Button intent = " primary" >Download transactions.csv</Button >
4042 </Download >
4143 </div >
@@ -49,11 +51,11 @@ We will be creating a customer support agent for VapiBank, a bank that wants to
4951 </Step >
5052</Steps >
5153
52- <video autoPlay loop muted src = " ../static/videos/banking-customer -support/upload-files.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
54+ <video autoPlay loop muted src = " ../static/videos/inbound -support/upload-files.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
5355
5456---
5557
56- ## 2. Creating an Assistant
58+ ## 2. Create an Assistant
5759
5860<Steps >
5961 <Step title = " Open the Vapi Dashboard" >
@@ -69,11 +71,11 @@ We will be creating a customer support agent for VapiBank, a bank that wants to
6971 </Step >
7072</Steps >
7173
72- <video autoPlay loop muted src = " ../static/videos/banking-customer -support/create-assistant.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
74+ <video autoPlay loop muted src = " ../static/videos/inbound -support/create-assistant.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
7375
7476---
7577
76- ## 3. Configuring an Assistant
78+ ## 3. Configure an Assistant
7779
7880<Steps >
7981 <Step title = " Update the introduction message" >
@@ -86,56 +88,58 @@ We will be creating a customer support agent for VapiBank, a bank that wants to
8688 <Step title = " Update the system prompt" >
8789 Update ` System Prompt ` to:
8890
89- ``` txt title="System Prompt" maxLines=10
90- # VapiBank - Phone Support Agent Prompt
91-
92- ## Identity & Purpose
93- You are **Tom**, VapiBank's friendly, 24x7 phone-support voice assistant. Do not introduce yourself after the first message.
94- You resolve two common requests without human intervention:
95- 1. **Check balance**
96- 2. **Report lost / stolen card** (immediately lock the card)
97-
98- ## Data Source
99- A CSV named **accounts.csv** is loaded in context. Columns:
100- `account_id, name, phone_last4, balance, card_status, email`.
101-
102- ## Available Tools
103- 1. **get_balance** → returns `balance` for given account holder name.
104- 2. **lock_card** → locks card to prevent unauthorized use.
105-
106- ## Conversation Flow
107- 1. **Greeting**
108- > “Hi, this is Tom at VapiBank. May I have the last four digits of the phone number on your account?”
109-
110- 2. **Account Verification**
111- • After caller answers → call **lookup_account**.
112- • Read back the returned `name` for confirmation.
113- • If no match after 2 tries → apologize and transfer.
114-
115- 3. **Handle Intent**
116- Ask: “How can I help you today—balance, lost card, or dispute a charge?”
117-
118- **Balance** → call **get_balance** → read result.
119- **Lost card** → call **secure_card** with `action:"lost_card"` → confirm card is locked.
120- **Dispute** → gather date & amount → call **secure_card** with `action:"dispute"` + meta details → give `ticketId`.
121-
122- 4. **Close**
123- > “Is there anything else I can help you with?”
124- If no → thank the caller and end the call.
125-
126- ## Style & Tone
127- * Warm, concise, ≤ 30 words per reply.
128- * One question at a time.
129- * Repeat critical numbers slowly (“Your ticket ID is 8 7 1 4”).
130- * Empathize with frustration but remain efficient.
131-
132- ## Edge Cases
133- * **No CSV match** → transfer to human.
134- * **Duplicate intents** → answer latest request, then ask if anything else.
135- * **Caller upset** → apologize, escalate urgency flag (`meta.urgent=true`) in **secure_card**.
136-
137- (Remember: never reveal CSV data beyond what the caller is entitled to.)
138- ```
91+ ``` txt title="System Prompt" maxLines=10
92+ # VapiBank - Phone Support Agent Prompt
93+
94+ ## Identity & Purpose
95+ You are **Tom**, VapiBank's friendly, 24x7 phone-support voice assistant. Do not introduce yourself after the first message.
96+ You help customers with account inquiries:
97+
98+ 1. **Check balance**
99+ 2. **View recent transactions**
100+
101+ ## Data Sources
102+ You have access to CSV files with account and transaction data:
103+ - **accounts.csv**: `account_id, name, phone_last4, balance, card_status, email`
104+ - **transactions.csv**: transaction history for all accounts
105+
106+ ## Available Tools
107+ 1. **lookup_account** → verify customer identity using phone number
108+ 2. **get_balance** → returns current balance for verified account
109+ 3. **get_recent_transactions** → returns recent transaction history
110+
111+ ## Conversation Flow
112+ 1. **Greeting**
113+ > "Hello, you've reached VapiBank customer support! My name is Tom, how may I assist you today?"
114+
115+ 2. **Account Verification**
116+ * After caller provides phone digits → call **lookup_account**
117+ * Read back the returned `name` for confirmation
118+ * If no match after 2 tries → apologize and offer to transfer
119+
120+ 3. **Handle Request**
121+ Ask: "How can I help you today—check your balance or review recent transactions?"
122+
123+ **Balance** → call **get_balance** → read current balance
124+ **Transactions** → call **get_recent_transactions** → summarize recent activity
125+
126+ 4. **Close**
127+ > "Is there anything else I can help you with today?"
128+ If no → thank the caller and end the call
129+
130+ ## Style & Tone
131+ * Warm, concise, ≤ 30 words per reply
132+ * One question at a time
133+ * Repeat important numbers slowly and clearly
134+ * Professional but friendly tone
135+
136+ ## Edge Cases
137+ * **No account match** → offer to transfer to human agent
138+ * **Multiple requests** → handle each request, then ask if anything else needed
139+ * **Technical issues** → apologize and offer callback or transfer
140+
141+ (Remember: only share account information with verified account holders.)
142+ ```
139143 </Step >
140144 <Step title = " Configure LLM settings (optional)" >
141145 Configure the LLM settings to your liking.
@@ -151,11 +155,11 @@ We will be creating a customer support agent for VapiBank, a bank that wants to
151155 </Step >
152156</Steps >
153157
154- <video autoPlay loop muted src = " ../static/videos/banking-customer -support/configure-assistant.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
158+ <video autoPlay loop muted src = " ../static/videos/inbound -support/configure-assistant.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
155159
156160---
157161
158- ## 4. Adding Tools to an Assistant
162+ ## 4. Add Tools to an Assistant
159163
160164<Steps >
161165 <Step title = " Navigate to Tools" >
@@ -226,11 +230,11 @@ We will be creating a customer support agent for VapiBank, a bank that wants to
226230 </Step >
227231</Steps >
228232
229- <video autoPlay loop muted src = " ../static/videos/banking-customer -support/assistant-tools.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
233+ <video autoPlay loop muted src = " ../static/videos/inbound -support/assistant-tools.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
230234
231235---
232236
233- ## 5. Assigning a Phone Number to an Assistant
237+ ## 5. Assign a Phone Number to an Assistant
234238
235239<Steps >
236240 <Step title = " Navigate to Phone Numbers" >
@@ -248,11 +252,11 @@ We will be creating a customer support agent for VapiBank, a bank that wants to
248252 </Step >
249253</Steps >
250254
251- <video autoPlay loop muted src = " ../static/videos/banking-customer -support/assign-phone-number.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
255+ <video autoPlay loop muted src = " ../static/videos/inbound -support/assign-phone-number.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
252256
253257---
254258
255- ## 6. Creating a Test Suite for an Assistant
259+ ## 6. Create a Test Suite for an Assistant
256260
257261<Steps >
258262 <Step title = " Navigate to Test Suites page" >
@@ -269,18 +273,18 @@ We will be creating a customer support agent for VapiBank, a bank that wants to
269273 - Use the following prompt to generate the test case:
270274
271275 ``` txt title="Test Case Prompt" wordWrap
272- Ensure that the assistant correctly captures customer name, email, and issue description when creating a support ticket .
276+ Test that the assistant can verify a customer account using phone number, retrieve their current balance, and provide recent transaction history .
273277 ```
274278
275279 - Accept the generated test case.
276280 </Step >
277281</Steps >
278282
279- <video autoPlay loop muted src = " ../static/videos/banking-customer -support/create-test-suite.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
283+ <video autoPlay loop muted src = " ../static/videos/inbound -support/create-test-suite.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
280284
281285---
282286
283- ## 7. Running the Test Suite on an Assistant
287+ ## 7. Run the Test Suite on an Assistant
284288
285289<Steps >
286290 <Step title = " Navigate to Test Suites page" >
@@ -294,7 +298,7 @@ We will be creating a customer support agent for VapiBank, a bank that wants to
294298 </Step >
295299</Steps >
296300
297- <video autoPlay loop muted src = " ../static/videos/banking-customer -support/run-test-suite.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
301+ <video autoPlay loop muted src = " ../static/videos/inbound -support/run-test-suite.mp4" type = " video/mp4" style = { { aspectRatio: ' 16 / 9' , width: ' 100%' }} />
298302
299303## Next Steps
300304
0 commit comments