Logo
Search
API Docs

Banking Assistant Walkthrough

Guides

Inbound Support Example: A Banking Assistant Walkthrough

Overview

This is a full worked example of building an inbound banking support assistant, using the same techniques covered in Prebuilt Templates & Example Use Cases, Files API, and Query Tool Setup — combined into one end-to-end walkthrough. The fictional bank is called Meridian Bank, and its assistant is named Tom. The assistant handles account verification, balance inquiries, and transaction history, entirely through knowledge-base files and function tools.


Step 1: Upload the Knowledge Base Files

Tom's account and transaction data live in two CSV files, uploaded through the Files API before anything else is built:

  • accounts.csv — columns: account_id, name, phone_last4, balance, card_status, email
  • transactions.csv — transaction history rows for every account
curl --location 'https://api.sulus.ai/file' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--form 'file=@"accounts.csv"'

curl --location 'https://api.sulus.ai/file' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--form 'file=@"transactions.csv"'

Each response returns a file id — save both, since the tools built in Step 3 reference these files by ID. See the Files API page for the complete field reference and supported formats.


Step 2: Create the Assistant

Create the base assistant with its model, voice, and first message, before attaching any tools:

import { CoreSystemClient } from "@core-system/server-sdk";

const client = new CoreSystemClient({ token: process.env.CORE_SYSTEM_API_KEY });

const assistant = await client.assistants.create({
  name: "Tom",
  firstMessage: "Hello, you've reached Meridian Bank customer support! My name is Tom, how may I assist you today?",
  model: {
    provider: "openai",
    model: "gpt-4o",
    messages: [
      { role: "system", content: systemPrompt }
    ]
  },
  voice: {
    provider: "11labs",
    voiceId: "burt"
  }
});

systemPrompt is built out in full further down this page.


Step 3: The Three Tools

Tom uses three function tools, each backed by the knowledge base files uploaded in Step 1:

ToolPurposeKnowledge Base(s)
lookup_accountVerifies the caller's identity using the last 4 digits of their phone number, returning the matching accountaccounts.csv
get_balanceReturns the current balance for an already-verified accountaccounts.csv
get_recent_transactionsReturns the most recent transactions for a verified accountaccounts.csv, transactions.csv

Each tool is created the same way a query tool is (see Query Tool Setup), referencing the file IDs from Step 1 in its knowledgeBases array, with a clear description so the model knows when each one is relevant.


Step 4: Attach the Tools

Once all three tools exist, attach them to Tom by their tool IDs:

const updatedAssistant = await client.assistants.update(assistant.id, {
  model: {
    toolIds: [
      lookupAccountTool.id,
      getBalanceTool.id,
      getTransactionsTool.id
    ]
  }
});

As noted on Query Tool Setup, this kind of update replaces the entire model object — include every field you want to keep, not just toolIds.


Writing the System Prompt

A good system prompt for this use case has five distinct parts:

  1. Identity & purpose — who the assistant is, which bank it represents, and what it's for.
  2. Data sources — what the CSV files contain, so the model understands what data it has access to.
  3. Available tools — a short description of each of the three tools and when to use it.
  4. Conversation flow — a numbered sequence: greet, verify identity via phone number, handle the request, close.
  5. Style, tone, and edge-case handling — concise replies, one question at a time, and what to do when identity verification fails.

Full System Prompt Example

# Meridian Bank - Phone Support Agent Prompt

## Identity & Purpose
You are Tom, Meridian Bank's friendly, 24x7 phone-support voice assistant. Do not introduce yourself again after the first message.
You help customers with account inquiries:
1. Check balance
2. View recent transactions

## Data Sources
You have access to CSV files with account and transaction data:
- accounts.csv: account_id, name, phone_last4, balance, card_status, email
- transactions.csv: transaction history for all accounts

## Available Tools
1. lookup_account - verify customer identity using phone number
2. get_balance - returns current balance for a verified account
3. get_recent_transactions - returns recent transaction history

## Conversation Flow
1. Greeting
   "Hello, you've reached Meridian Bank customer support! My name is Tom, how may I assist you today?"
2. Account Verification
   - After the caller provides their phone digits, call lookup_account
   - Read back the returned name for confirmation
   - If there's no match after 2 tries, apologize and offer to transfer to a human
3. Handle Request
   Ask: "How can I help you today, check your balance or review recent transactions?"
   - Balance -> call get_balance -> read the current balance
   - Transactions -> call get_recent_transactions -> summarize recent activity
4. Close
   "Is there anything else I can help you with today?"
   If no, thank the caller and end the call

## Style & Tone
- Warm, concise, 30 words or fewer per reply
- One question at a time
- Repeat important numbers slowly and clearly
- Professional but friendly tone

## Edge Cases
- No account match: offer to transfer to a human agent
- Multiple requests: handle each one, then ask if anything else is needed
- Technical issues: apologize and offer a callback or transfer

(Only share account information with verified account holders.)

This walkthrough covers the same pattern described at a higher level in Prebuilt Templates & Example Use Cases' Customer Support template — knowledge base access plus escalation to a human when needed — applied here to a concrete banking scenario end to end.