WordPress plugin · v0.1 · GPLv3

A help desk that writes
half its replies itself.

EasyHelp bundles a knowledge base, a client ticket system, an embeddable chatbot, and an auto responder that only speaks up when it’s actually useful - all in one plugin, one admin menu, one settings option.

  • WP ≥ 6.0
  • PHP ≥ 7.4
  • REST /wp-json/easyhelp/v1
  • License GPLv3
Works with WordPress 6.0+ PHP 7.4+ Gutenberg & Classic Any theme

Four modules, one plugin

Everything a help desk needs.
Nothing it doesn’t.

Each module is independently useful. Turn on the ones you want, ignore the rest.

Docs

A first-class WordPress post type for help articles. Topics, products, configurable URLs, reader voting, and a grouped archive shortcode.

  • Topic & product taxonomies, manual ordering
  • Plain, topic, product, or nested URLs
  • Prism.js highlighting & Fancybox image zoom

Tickets

A full client ticketing system with eight statuses, automatic transitions, role-based access, and passwordless email login.

  • Status auto-flips on agent or client reply
  • Manager / Agent / User roles & capabilities
  • Templated notification emails with placeholders
AI

Chatbot

A self-contained JS widget that answers from your docs via RAG. Drop a single <script> tag on any site.

  • Brand & tone: name, avatar, color, welcome, suggested prompts
  • URL targeting, business hours & panel size
  • Auto-open on delay, scroll, or exit-intent
AI

Auto Responder

Every new ticket gets an AI reply, but only when the model’s relevance score clears the threshold you set.

  • Human-first: agent reply cancels
  • Relevance threshold 0–100% as you want
  • Configurable delay (min / hrs / days)

Docs

A real knowledge base.
Not a wiki bolted on.

A first-class WordPress post type with hierarchical topics, shared products, configurable URLs, voting, syntax highlighting, and a grouped archive shortcode.

  • Topics and Products. Hierarchical Topics for grouping articles, plus a shared Products taxonomy attached via the easyhelp_product_post_types filter.
  • Configurable URLs. Pick plain, topic-based, product-based, or nested permalinks from Settings. One option, one place, no rewrite-rule plugins.
  • Reader feedback. Upvote and downvote buttons on every doc, exposed at POST /docs/{id}/vote so you can plug your own analytics in.
  • Code-friendly. Prism.js syntax highlighting, Fancybox image zoom, and automatic heading anchors so any subhead is linkable.
page.php
[easyhelp_docs]

// scoped to one product:
[easyhelp_docs product="woocommerce"]

Tickets

Eight statuses.
Zero password resets.

A full client ticketing system with role-based access, automatic status transitions, a passwordless email login, and a REST API for everything.

  • Status, automated. Open, In Progress, Waiting, On Hold, Resolved, Reopened, Cancelled, Closed. Agent replies flip to In Progress; client replies flip to Waiting. Terminal states stay terminal.
  • Easylogin, no passwords. Clients enter their email, receive a short-lived link, and are signed in. Zero password-reset tickets in your queue.
  • Roles that match the work. Manager, Agent, and User, each with mapped capabilities. Drop in custom caps via the WordPress role API.
  • Embed anywhere. /easyhelp/tickets/embed renders the ticket UI in an iframe-safe shell, so you can drop the help desk into any external site.
  • Notification emails. New ticket, new reply, status change. Templated with placeholders like ##ticket_id##, ##client_name##, ##ticket_link##.
1
Client opens a ticket.

Status: Open. Agent and client both get a notification email.

2
Agent replies.

Status auto-flips to In Progress. Ball is in the client's court.

3
Client replies.

Status auto-flips to Waiting. Reappears in the agent queue.

4
Agent marks resolved.

Status: Resolved. Auto-transitions stop. Client can reopen.

5
Client comments after resolution.

Status: Reopened. The thread comes back into the active queue.

How the AI knows your product

Add a doc. Click Sync. Done.

Both the chatbot and the auto responder answer from a vector index built off your docs. No prompt engineering, no fine-tuning, no manual uploads. The whole feedback loop is two steps and lives inside WordPress.

  1. 01

    Write or import a doc.

    Author it in the WordPress editor like any other post, or migrate from BetterDocs, weDocs, Echo KB, BasePress, Awesome Support, SupportCandy, or JS Help Desk in a single click.

  2. 02

    Hit Sync.

    One button in EasyHelp → Settings → AI ships every published doc to the RAG backend. Embeddings are generated, the vector index is rebuilt, and only the deltas are re-embedded on subsequent runs.

  3. 03

    Done. Visitors get answers.

    The chatbot widget and the ticket auto responder both query the same index. Edit a doc, hit Sync again, and the next answer reflects it. No re-deploy, no model retraining.

Under the hood: a small Python service indexes your docs into a vector store. Every /ask and /respond call retrieves the most relevant chunks and grounds the model's reply on them, with a relevance score returned alongside the answer so the auto responder can stay quiet when confidence is low.

AI Chatbot

Your docs, on tap.
For every visitor.

The chatbot reads from a vector index of your synced docs - not the open internet. It answers in your voice, from your content, and never invents features you haven’t shipped.

  • One tag, everywhere. Paste a single <script> tag into any HTML page, or generate a tiny companion plugin straight from the admin.
  • Brand it without a build. Agent name, avatar, primary color, launcher position, welcome message, suggested-prompt chips, input placeholder, and launcher tooltip - all data-attributes.
  • Show it where it matters. Path-based data-show-on / data-hide-on rules with wildcards. Hide on checkout, surface on docs - without forking the script.
  • Open on intent. Auto-open after a delay, at a scroll percentage, or on exit-intent - once per session, so visitors aren’t re-prompted.
  • Business-hours aware. Define windows like mon-fri:9-17. Outside hours, swap in an offline greeting or hide the launcher entirely.
  • Sized to fit. Set the panel width and height in pixels. Defaults to 400 × 620; caps to the viewport on small screens, fullscreen on phones.
  • Preview before you ship. The AI settings page renders the live widget in-place from your current form values - no save, no copy-paste, no guesswork.
  • Site-key authenticated. Every request is signed with a per-site key issued during registration - revocable from your admin.
embed.html
<script
  src="https://ai.easysuite.org/static/chat.min.js"
  data-site-key="YOUR_SITE_KEY"
  data-agent-name="Luna"
  data-primary-color="#1a6c52"
  data-welcome-message="Hi! Ask me anything about
  our product."
  data-suggested-prompts="Reset password | Where's my
  order? | Pricing"
  data-auto-open="delay"
  data-auto-open-value="15"
  data-business-hours="mon-fri:9-17"
  data-hide-on="/checkout/*"
  data-panel-width="420"
  data-panel-height="640"
  defer
></script>

AI Auto Responder

The bot that knows
when to stay quiet.

Most auto-reply systems fire on every ticket. Ours runs on a delay, checks its own confidence, and backs off when a human is already in the thread.

  • Delayed by design. Wait 5 minutes (or an hour) before responding, so agents get first shot.
  • Threshold-gated. Below the configured relevance? The bot stays silent and the ticket stays unread. No hallucinated answers.
  • Cancelled by humans. Any agent reply, or a move to resolved / closed, un-schedules the pending bot job automatically.
  • Full context. The model sees ticket title, client details, product terms, urgency, and the entire transcript - not just the last message.
1
Ticket opens.

Client submits a question. Bot job is scheduled for +5 min.

2
Agent replies within 5 min?

Bot job is cancelled. Client gets a human answer. Done.

3
No agent yet.

Bot queries the RAG index, scores the best match.

4
Relevance ≥ threshold?

Post the reply as a ticket comment, optionally flip status to in progress.

5
Below threshold?

Stay quiet. Log the abort. Wait for an agent.

One-click migration

Already running another help desk?
Bring it with you.

EasyHelp ships with first-party importers for the most common knowledge-base and ticketing plugins. Articles, categories, tickets, replies, attachments, and product terms map straight into native EasyHelp posts. Resumable, batched, idempotent.

BetterDocs

Articles and doc_category terms map to EasyHelp docs and topics. Tag taxonomy is preserved.

weDocs

Container pages (parents with children) become EasyHelp topics; leaf pages become docs. Hierarchy is kept.

Echo Knowledge Base

Multiple KBs supported. Articles, categories, and tags fold into one unified EasyHelp library.

BasePress

BasePress knowledgebase articles and knowledgebase_cat categories migrate into docs and topics.

Awesome Support

Tickets, replies, attachments, and product / department terms become EasyHelp tickets, comments, and taxonomies.

SupportCandy

Tickets, threads, customers, agent assignments, categories, priorities, tags, custom fields, and attachments map straight into EasyHelp tickets and comments.

JS Help Desk

Tickets, replies, departments, products, priorities, custom fields, and attachments from the js_ticket_* tables become EasyHelp tickets, comments, reasons, and products.

Safe by design

Each migrated post stores a _easyhelp_migrated_from_* meta key, so re-runs are idempotent and a Clean Up button rolls everything back.

Find the importer at EasyHelp → Settings → Migration. Source plugins must be installed and activated before they appear in the list.

Under the hood

Built on WordPress standards.

No hidden layers. No custom admin UI to learn. Everything you’d expect from a well-behaved plugin.

Native Settings API

One easyhelp_settings option, keyed tab → section → field. Extensible via the easyhelp_settings_menus filter.

PSR-4 autoload

Composer-powered, namespaced EasyHelp\. Controllers are glob-autodiscovered - drop a file in the right folder and it boots.

Full REST API

Docs, tickets, comments, taxonomies, AI register/verify/sync, and the easylogin flow - all at /wp-json/easyhelp/v1/.

Hook-driven

Ticket lifecycle events fire at easyhelp-tickets-*. Listen, filter, replace. The auto responder itself is just another listener.

Email-first clients

The passwordless “easylogin” flow means zero password-reset tickets. Clients get a short-lived link by email and they’re in.

Shortcodes, not widgets

Docs archive, ticket list, and submission form are drop-in shortcodes. Paste, save, done - works with every theme and block editor.

Get running

Three steps to a full help desk.

  1. 01

    Install the plugin.

    You need to Download EasyHelp, install on your site and activate it. The CPTs, taxonomies, roles, and settings are registered on first boot.

  2. 02

    Wire up shortcodes.

    Create three pages and paste [easyhelp_docs], [easyhelp_tickets], and [easyhelp_new_ticket]. You now have a live knowledge base and ticket system.

  3. 03

    Turn on AI (optional).

    Open EasyHelp → Settings → AI, register the site, verify by email, hit Sync. The chatbot embed and auto responder are now live.

Ready to clear your ticket queue?

EasyHelp is free and GPLv3. No account required for the core plugin. AI features need a registered site key - also free for reasonable use.