Blueprint: customer support

Support context that survives every handoff.

Keep TICKET, MESSAGE, and RESOLUTION records connected to the CUSTOMER across email, chat, and calls, so a resolved issue like the CSV export failure on customer cust-88 stays linked to the fix that resolved it. A support agent or copilot opens ticket tkt-512 already knowing the plan, prior tickets, and which RESOLUTION record answered a similar problem before.

Customer Support Memory is a RushDB pattern that connects CUSTOMER, TICKET, MESSAGE, and RESOLUTION records with semantic search over message text so support agents recall similar past issues and their fixes scoped to one customer across channels.

Support context resets on every new ticket.

Customers move across email, chat, and calls, and their history lands in separate tools each time. Without a connected record, ticket history stays split across channels, resolutions for similar issues are hard to find, account and plan context is missing when a ticket opens, and keyword search misses a problem described in different words than last time — so agents re-ask questions and miss fixes that already worked.

Before

  • Ticket history split across channels and tools
  • Resolutions hard to find for similar issues
  • Account context missing at the start of a ticket
  • Keyword search misses differently worded problems

With RushDB

  • Tickets, messages, and resolutions persist as records
  • Similar past issues recalled by meaning
  • Account and plan context attached to each ticket
  • One backend for search, filters, and relationships

Graph intelligence on ingest

Incoming data becomes queryable graph context.

A ticket lands as a TICKET record nested under its CUSTOMER, carrying channel and status, with MESSAGE and RESOLUTION records nested inside it, like the CSV export fix on ticket tkt-512. RushDB types those fields on write, auto-links MESSAGE and RESOLUTION records to their parent TICKET and CUSTOMER, and keeps message body text searchable so a differently worded export complaint still matches the resolution that already worked.

01

Normalize as tickets arrive

CUSTOMER, TICKET, MESSAGE, and RESOLUTION payloads are typed on write, so fields like channel and status are filterable the moment a ticket lands.

02

Auto-link nested structure

MESSAGE and RESOLUTION records nested under a TICKET are automatically related to it and to the owning CUSTOMER, without manual foreign keys.

03

Enrich scattered sources

Suggested-relationship analysis surfaces links between tickets opened on different channels by the same CUSTOMER, so a chat follow-up connects to the original email ticket.

Suggested relationship analysis requires an LLM configured for the project. Suggestions stay in draft form until you approve them, so inferred domain meaning never mutates the graph silently. You can also add explicit relationships through the SDK or API.

Review suggested relationship patterns

Data model

One flexible graph for the workflow.

Start with the payload shape your product already produces. RushDB stores it as Records, infers typed properties, and keeps nested or approved domain relationships queryable.

Schema sketch
Customer payload

One customer write can carry tickets, messages, and resolutions while later replies append new messages across channels.

{
  "customerId": "cust-88",
  "plan": "pro",
  "TICKET": [{
    "ticketId": "tkt-512",
    "channel": "email",
    "status": "resolved",
    "MESSAGE": [{ "role": "customer", "body": "Export to CSV fails on large datasets." }],
    "RESOLUTION": [{ "summary": "Raised export row limit; advised chunked export." }]
  }]
}

Working example

Resolve once. Recall the fix for the next similar ticket.

A resolved ticket stores its messages and resolution linked to the customer. A later ticket recalls similar past issues by meaning, scoped to the same customer.

Input
CUSTOMER cust-88  plan: pro
  TICKET tkt-512  channel: email  status: resolved
    MESSAGE "Export to CSV fails on large datasets."
    RESOLUTION "Raised export row limit; advised chunked export."
Query
{
  "labels": ["MESSAGE"],
  "propertyName": "body",
  "query": "CSV export failing for big exports",
  "where": { "CUSTOMER": { "customerId": "cust-88" } }
}
Result
{
  "ticket": "tkt-512",
  "match": "Export to CSV fails on large datasets.",
  "resolution": "Raised export row limit; advised chunked export."
}

Python SDK

Persist the ticket trail. Recall the resolution that worked.

RushDB keeps customers, tickets, messages, and resolutions connected and keeps message text searchable. Your support workflow and model decide how to use the recalled history.

from rushdb import RushDB

db = RushDB('RUSHDB_API_KEY')

db.ai.indexes.create({'label': 'MESSAGE', 'propertyName': 'body'})

db.records.import_json({
    'label': 'CUSTOMER',
    'data': {
        'customerId': 'cust-88',
        'plan': 'pro',
        'TICKET': [{
            'ticketId': 'tkt-512',
            'channel': 'email',
            'status': 'resolved',
            'MESSAGE': [{'role': 'customer', 'body': 'Export to CSV fails on large datasets.'}],
            'RESOLUTION': [{'summary': 'Raised export row limit; advised chunked export.'}],
        }],
    },
})

similar = db.ai.search({
    'labels': ['MESSAGE'],
    'propertyName': 'body',
    'query': 'CSV export failing for big exports',
    'where': {'CUSTOMER': {'customerId': 'cust-88'}},
    'limit': 10,
})

Implementation blueprint

Build the customer support memory path.

Use this sequence to connect ticket history across channels and retrieve similar past issues with their resolutions.

  1. 01Import CUSTOMER records with TICKET, MESSAGE, and RESOLUTION records
  2. 02Create a managed index for MESSAGE.body
  3. 03Append new messages and resolutions to the customer's ticket history
  4. 04Recall similar past issues by meaning, scoped to the customer
  5. 05Surface the linked RESOLUTION records with each match

Build path

  • Scope tickets, messages, and resolutions to a customer and channel.
  • Keep resolutions as records linked to the ticket they resolved.
  • Recall by meaning so differently worded problems still match.
  • Attach account and plan context so agents see it at ticket open.

How it works

Build the smallest useful workflow first.

01

Connect the ticket history

Import customers with their tickets, messages, and resolutions so cross-channel history stays linked.

02

Index message text

Create a managed embedding index once on the message body so issues are recalled by meaning, not keyword.

03

Recall before responding

Retrieve similar past tickets and their resolutions scoped to the customer before the agent replies.

Know where it fits.

Context across channels

Email, chat, and call records live in one graph, so an agent sees the full history regardless of where the customer started.

Reuse what already worked

Linking resolutions to tickets lets agents surface the fix that resolved a similar issue instead of starting over.

Questions developers ask.