Skip to main content

tungsten-tickets

Help desk (ticketing) plugin for Tungsten, the admin panel for FastAPI.

What you get

  • Tickets with a number (TCK-00012), status, priority, category, agent, tags and the customer's name, email and phone.
  • A conversation on each ticket: replies to the customer, the customer's messages, internal notes only your team sees, and a log of status and agent changes.
  • Reply box with saved replies (canned answers), file attachments and "then set status".
  • SLA: each priority has hours to resolve (urgent 4, high 8, normal 24, low 72). Late tickets show in red and in the Overdue tab.
  • Tabs for Open, My tickets, Unassigned, Overdue, Waiting on customer and Resolved; filters; search; export.
  • Bulk actions: assign, resolve, close, delete.
  • Categories (Billing, Bug...) that can send new tickets to one agent.
  • Dashboard numbers: open, unassigned, overdue, resolved this week.
  • Support page for customers at <panel>/support: raise a ticket, then follow and answer it from a private link. No login needed.
  • Emails to the customer when the ticket is received, on every reply and when resolved. New tickets and customer replies go to the agent's notification bell.
  • Optional API: POST tickets to <panel>/api/tickets.
  • Hooks so other plugins (WhatsApp, Slack...) can act on new tickets, replies and status changes.

Install

pip install tungsten-tickets
from tungsten_tickets import TicketsPlugin

panel = Panel(..., app_url="https://admin.example.com", auth=Auth(User, mailer=send_mail))
panel.plugin(TicketsPlugin())
panel.create_tables(engine)   # creates the ticket tables too

mailer is your function send_mail(to, subject, body). app_url makes the links in emails full links.

Options

TicketsPlugin(
    statuses={"open": ("Open", "info"), ...},          # key: (label, color). "resolved" and "closed" mean done
    priorities={"low": ("Low", "gray"), ...},
    sla_hours={"urgent": 4, "high": 8, "normal": 24, "low": 72},   # None for no due time
    number_prefix="TCK-",
    portal=True, portal_path="support",                # the public support page
    api_token="long-secret",                           # turns on POST <panel>/api/tickets
    email_requester=True,                              # emails to the customer
    notify_agents=True,                                # bell notifications for agents
    mailer=None,                                       # defaults to Auth(mailer=...)
    navigation_group="Help desk",
)

Open tickets from code

from tungsten_tickets import add_reply, create_ticket

ticket = create_ticket(db, subject="Order late", description="Where is order 12?",
                       requester_email="amit@example.com", priority="high", source="email")
add_reply(db, ticket, "It ships today.", user_id="1", status="waiting")
db.commit()

API

curl -X POST https://admin.example.com/admin/api/tickets \
  -H "X-Tickets-Token: long-secret" -H "Content-Type: application/json" \
  -d '{"subject": "Order late", "message": "Where is order 12?", "name": "Amit", "email": "amit@example.com"}'

Answer: {"id": 1, "number": "TCK-00001", "url": "<customer link>"}. Send external_id to skip duplicates.

Hooks

desk = panel.get_plugin("tickets")
desk.on_ticket_created("whatsapp", lambda db, ticket: ...)
desk.on_ticket_replied("whatsapp", lambda db, ticket, reply: ...)
desk.on_status_changed("slack", lambda db, ticket, old_status: ...)

Try it

pip install -e . -e plugins/tickets uvicorn
uvicorn plugins.tickets.example:app --reload

Sign in at http://127.0.0.1:8000/admin with admin@example.com / password. The support page is http://127.0.0.1:8000/admin/support.

More Tungsten plugins

Package What it adds Docs
tungsten-leads Leads list, stages, timeline and your own lead form fields README
tungsten-meta-leads Facebook and Instagram lead form leads, with one-click setup Guide
tungsten-whatsapp WhatsApp for leads: click-to-chat, Cloud API or WhatsApp Web Guide
tungsten-mcp MCP server, so AI assistants like Claude can read and change your data Guide
tungsten-blog Blog built for SEO, GEO and AEO, with a live score, sitemap and llms.txt Guide
tungsten-seo-audit SEO audit of your website: score, fix tips, AI search checks, history Guide
tungsten-security-audit Security audit with a score and fix tips, plus a login log with lockout Guide

Core package: tungsten-admin. Website and docs: https://tungsten.prisminfoways.com/

Metadata

Release files for tungsten-tickets 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tungsten-tickets 0.1.0
File Size Uploaded
tungsten_tickets-0.1.0.tar.gz 23.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tungsten-tickets 0.1.0
File Interpreter ABI Platform
tungsten_tickets-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 48.2 kB

Release files / tungsten_tickets-0.1.0.tar.gz

Download URL tungsten_tickets-0.1.0.tar.gz
Size 23.6 kB
Tags Source
SHA-256 checksum
How to use checksums
f4ace6240767bb99d1dce1eae5500846ce5431ed6e56094ad1a3e47ffc4f3c04
BLAKE2b-256 checksum
How to use checksums
d6af1feeec380570150108e78c99723e225479c03cb7c988018d8a5be7f6409e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tungsten_tickets-0.1.0-py3-none-any.whl

Download URL tungsten_tickets-0.1.0-py3-none-any.whl
Size 24.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
80fc906c828dabdcbba56df9fa7018372958b027ed0e19c4f8fc33f7ed744fb2
BLAKE2b-256 checksum
How to use checksums
a455ed29e03c127bb791b61e9856bf87bab87d79211e221863b2842d33df1a20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page