asopi tech
asopi techIndie Developer

Asopitech With · Customer service

Zendesk with Alopex DB

Zendesk is a customer service platform for receiving and resolving customer requests. How would we make it with Alopex DB?

Updated: Oct 12, 2026

What the service does

Zendesk receives and resolves customer inquiries. Inquiries are managed as tickets, and answers come from knowledge base articles. The data is tickets, customers, conversations and articles.

Where the data lives

  • SQL tables: tickets, customers, agents and conversations live in tables.
  • Full-text search: a full-text index on articles and conversations finds product names and error messages.
  • Vectors: embeddings of articles and past answers in a vector column find answers close to a new inquiry.
  • Columnar tables: ticket records also go in a columnar table to aggregate time to resolution.

Computing embeddings and composing replies are app code.

Deployment

Alopex DB runs as a server that answers the agent workspace and the help center over HTTP and gRPC.

Why Alopex DB fits

Support answers live in past tickets and the knowledge base. Alopex DB keeps tickets, articles and semantic search in one database, and finds answers close to a new inquiry with the same SQL.

See it in code

Tickets and knowledge articles are kept, and a new inquiry finds the nearest articles by meaning. Just the core of finding an answer.

import alopex
import numpy as np

db = alopex.Database.open("zendesk.alopex")

db.execute_sql("CREATE TABLE IF NOT EXISTS tickets (id INTEGER PRIMARY KEY, subject TEXT)")
db.execute_sql("""
    CREATE TABLE IF NOT EXISTS articles (
        id INTEGER PRIMARY KEY,
        title TEXT,
        body TEXT,
        embedding VECTOR(4)
    )
""")

articles = [
    (1, "パスワードの再設定", "ログインできないとき", [0.9, 0.1, 0.0, 0.0]),
    (2, "請求書の発行", "領収書と請求のまとめ", [0.0, 0.0, 0.9, 0.1]),
    (3, "ログインの二段階認証", "認証アプリの設定", [0.8, 0.2, 0.0, 0.0]),
]
for aid, title, body, emb in articles:
    db.execute_sql("INSERT INTO articles (id, title, body, embedding) VALUES (?, ?, ?, ?)", [aid, title, body, np.array(emb, dtype=np.float32)])

# 新しい問い合わせ(ログインできない)に近いナレッジ記事を、意味で探す
db.execute_sql("INSERT INTO tickets (id, subject) VALUES (?, ?)", [1, "ログインできない"])
query = np.array([0.95, 0.05, 0.0, 0.0], dtype=np.float32)
rows = db.execute_sql("""
    SELECT title, vector_similarity(embedding, ?, 'cosine') AS score
    FROM articles
    ORDER BY score DESC
    LIMIT 2
""", [query])

for row in rows:
    print(round(row["score"], 3), row["title"])

Articles closest to the new inquiry’s embedding rank first, so an agent gets candidates from past answers and the knowledge base right away.

Alopex DB keeps tickets, articles and semantic search in one database. Prototype a support desk where answers turn up fast; the quickstart is the first step.