=== NiroHelp – AI-Native Helpdesk for Knowledge Base, Tickets, AI Chatbot, AI Ticket Responder and more ===
Contributors: easycommerce
Tags: helpdesk, knowledge base, support ticket, ai chatbot, customer support
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.html

AI help desk: knowledge base, support ticket system, and an AI chatbot and auto-responder that answer from your own docs. Unlimited agents.

== Description ==

[Website](https://nirohelp.com/) | [All features](https://nirohelp.com/features/) | [Pricing](https://nirohelp.com/pricing/) | [Documentation](https://nirohelp.com/docs/) | [FAQ](https://nirohelp.com/faq/) | [Migration](https://nirohelp.com/migrate/) | [Roadmap](https://nirohelp.com/docs/roadmap/) | [Blog](https://nirohelp.com/blog/)

**Let your documentation do the answering.**

NiroHelp is a WordPress help desk plugin that puts three things in one place: a **knowledge base** for your documentation, a **support ticket system** for your customers, and **AI** that answers tickets and chat questions from the docs you publish.

[youtube https://www.youtube.com/watch?v=ZYM4IvjlC8s]

The AI is built to stay quiet when it should. The auto-responder replies to a ticket only when its answer clears a confidence threshold you set, and only after a response delay you choose. When it isn't confident, it posts nothing and the ticket waits for your team, as if the AI were not there.

The help desk itself (docs, tickets, emails, dashboard and migration) works on its own, with no account and no external service. AI features are optional and run on NiroHelp Cloud. See *External services* below.

= How the AI answers a ticket =

1. **A customer writes in.** A new ticket or a client reply schedules one AI reply.
2. **The AI searches your docs.** It looks for a real answer in the documentation you synced.
3. **Above your threshold, it replies.** The answer is posted after your response delay (5 minutes by default). Each new client message restarts the delay.
4. **Below it, a human takes over.** Nothing is posted, the attempt is logged, and the ticket stays in your queue. Any agent reply cancels the pending AI reply.

Raise the threshold and the AI speaks only when it is sure. Lower it and it handles more. The default is 70%.

= Why teams choose NiroHelp =

* **Grounded in your own docs.** Replies come from the documentation you publish and the instructions you write.
* **You decide when it speaks.** A confidence threshold and response delay you control, not a black box.
* **Human-first.** An agent reply always wins. The AI never talks over your team.
* **No API keys.** No OpenAI or other model key to configure, and no second AI vendor to manage.
* **Unlimited agents and tickets.** The plugin has no seat limits, on any plan.
* **Your content stays WordPress content.** Docs and tickets are posts and replies are comments, in your own database. No custom tables.
* **One plugin instead of three.** Knowledge base, ticketing and AI chatbot share one admin menu, one settings screen and one product list.

= Built for =

* **Product companies** that answer the same questions every day and want documentation to carry the load.
* **Support teams** that need real ticketing without per-agent pricing.
* **Agencies** running support for client sites, with a chatbot branded for each one.

= Explore each feature =

* 📚 [Knowledge base](https://nirohelp.com/features/knowledge-base/) — documentation your customers and your AI both read.
* 🎫 [Support ticket system](https://nirohelp.com/features/support-tickets/) — front-end form, agent queue and client portal.
* 💬 [AI chatbot](https://nirohelp.com/features/ai-chatbot/) — one snippet, answers from your docs on any website.
* 🤖 [AI auto-responder](https://nirohelp.com/features/ai-auto-responder/) — replies to tickets only when it is confident.
* 📊 [Dashboard and copilot](https://nirohelp.com/features/dashboard/) — a 360° view of your support, plus Ask NiroHelp.
* 🔄 [Migration](https://nirohelp.com/migrate/) — import from seven help desk and knowledge base plugins.

= Knowledge base =

* **Documentation on native WordPress.** Each doc is a standard post written in the WordPress editor, with a featured image. Drafts stay drafts and private docs stay private.
* **Topics and products.** Group docs into nested topics and tag them by product. Products are shared with tickets — see [topics and products](https://nirohelp.com/docs/knowledge-base/topics-and-products/).
* **Docs archive with search.** The `[nirohelp_docs]` shortcode renders topic cards and a search box that shows results in place, without a page reload. Limit it to one product with the `product` attribute.
* **Doc voting.** "Was this doc helpful?" Yes and No buttons, stored as counts only — no IP address, no visitor identity. Vote totals show in the admin list and on the dashboard. See [doc voting](https://nirohelp.com/docs/knowledge-base/doc-voting/).
* **Nine URL structures.** Build doc URLs from your docs page, topic and product, with or without the docs base — handy for keeping the shape your old plugin used. See [doc URLs](https://nirohelp.com/docs/knowledge-base/doc-urls/).
* **Reader navigation.** Sidebar, breadcrumbs, previous and next links, rating buttons and comments, each switchable on its own.
* **Archive sizing.** Set how many docs a page lists, and how many show under a topic before "View all".
* **Code and images.** Syntax-highlighted code with `[nirohelp_code lang="php"]` (Prism.js) and click-to-zoom images (Fancybox). See [code blocks and images](https://nirohelp.com/docs/knowledge-base/code-blocks-and-images/).
* **Drag-and-drop ordering** for docs and topics.
* **Fast at scale.** Doc lists are cached in your object cache (Redis, Memcached) or in transients, with a cache lifetime you set, and cleared automatically when a doc changes.
* **Content insights.** Doc views, votes and failed searches feed the dashboard's most-read, never-read, unhelpful, not-updated-in-a-year and missing-docs panels.

More on the [knowledge base feature page](https://nirohelp.com/features/knowledge-base/).

= Support ticket system =

* **Front-end ticket form.** `[nirohelp_new_ticket]` lets customers open tickets from your site. They never need wp-admin.
* **Form builder.** Show, hide, reorder and require the built-in fields (subject, description, product, topic, urgency, order ID), and add custom text, number, email, textarea or select fields. See [ticket form fields](https://nirohelp.com/docs/ticket-management/ticket-form-fields/).
* **File attachments.** Customers and agents attach images, PDFs and ZIP files (up to 10 MB by default) to tickets and replies. Files are stored in a protected folder outside the media library and served only to people allowed to see the ticket.
* **Eight ticket statuses,** with automatic changes when the client or an agent replies — see *Ticket statuses* below.
* **Status history.** Every status change adds a note to the thread saying who changed it.
* **Urgency and reasons.** Four [urgency levels](https://nirohelp.com/docs/ticket-management/urgency-levels/) (Low, Medium, High, Severe) and a [reasons taxonomy](https://nirohelp.com/docs/ticket-management/reasons/) that shows why customers contact you.
* **Agent queue.** `[nirohelp_all_tickets]` gives agents a front-end queue with status tabs, search, filters (agent, product, reason, urgency, date), quick edit and a rich-text reply box.
* **Client portal.** `[nirohelp_tickets]` shows each customer their own tickets and conversations.
* **Automatic assignment.** Random, round-robin or least-loaded, with a per-agent ticket cap. Or turn it off and assign by hand. See [auto-assigning agents](https://nirohelp.com/docs/workflows-automation/auto-assigning-agents/).
* **Agents page.** Each agent's open and total tickets, with an "At capacity" badge and a link to their queue.
* **Roles.** NiroHelp Manager, NiroHelp Agent, and a minimal NiroHelp User role for customers, alongside Administrators. See [roles and permissions](https://nirohelp.com/docs/setup-configuration/roles-and-permissions/).
* **Embeddable ticket widget.** A theme-free "Need Help?" button and ticket form for other websites, served from `/nirohelp/tickets/embed/` — see [embedding the ticket UI](https://nirohelp.com/docs/developers/embedding-the-ticket-ui/).

More on the [support ticket feature page](https://nirohelp.com/features/support-tickets/).

= Ticket statuses =

Eight statuses, and you rarely set them by hand:

* **Open** — submitted, nobody has picked it up yet.
* **Waiting** — the client replied, so the ball is in your team's court.
* **In Progress** — an agent replied, so you are waiting on the client.
* **On Hold** — parked on purpose, usually pending something outside support.
* **Resolved** — answered. The auto-responder will not touch it again.
* **Reopened** — the client came back after a resolution.
* **Cancelled** — withdrawn or no longer relevant.
* **Closed** — finished and archived out of the working queue.

Transitions are automatic: a client reply moves a ticket to **Waiting**, an agent reply moves it to **In Progress**, and tickets that are Resolved, Cancelled or Closed are left alone. Prefer to drive the queue by hand? Turn **Auto-transition status on reply** off under **Settings → Tickets → Behaviour**. Status changes fire an action hook and send the matching notification email. More in [ticket statuses](https://nirohelp.com/docs/workflows-automation/ticket-statuses/).

= Passwordless client login =

Customers sign in without a password by default. Pick the method under **Settings → Tickets → Submission**:

* **Verification code.** A 6-digit code sent by email (default).
* **Magic link.** A one-click sign-in link, valid for 5 minutes.
* **Password.** A standard login, with email-verified sign-up.

Password logins run through WordPress's own authentication, so security plugins that hook into login, such as brute-force limiters, keep working. Guest submission is optional: visitors send a ticket with their name and email and get a sign-in link by email. More in [client login](https://nirohelp.com/docs/ticket-management/client-login/).

= Email notifications =

* Seven notifications: login code, magic link, new ticket (to the client and to the agent), agent reply, client reply, and ticket resolved.
* Edit the header, subject and body of each, with placeholders such as `##client_name##`, `##ticket_subject##` and `##ticket_link##` (a one-click sign-in link to the ticket).
* Shared branding: logo, footer text, brand colour, email background and content width, set once for every notification.
* Emails are sent through `wp_mail`, so any SMTP plugin works.

More in [notification emails](https://nirohelp.com/docs/email-notifications/notification-emails/).

= AI chatbot =

* **One snippet, any website.** Embed the chat widget with a single `<script>` tag on WordPress or any other site, or download it as a ready-to-install mini plugin. See [embedding the chatbot](https://nirohelp.com/docs/ai-assistance/embedding-the-chatbot/).
* **Answers from your docs.** Sync your knowledge base and the chatbot answers visitor questions from it, following your AI instructions.
* **Conversation memory.** Follow-up questions are understood in context, and the thread survives a page change.
* **Your brand.** Agent name, avatar, accent colour, position, welcome message, suggested questions, input placeholder, launcher label and panel size (400 × 620 by default, capped to small screens). See [customizing the chatbot](https://nirohelp.com/docs/ai-assistance/customizing-the-chatbot/).
* **Auto-open triggers.** Open after a delay, at a scroll depth or on exit intent, at most once per visit.
* **Page targeting.** Show or hide the widget on URL paths such as `/docs/*` or `/checkout/*`. Hide rules win.
* **Business hours.** Set hours like `mon-fri:9-17` in the visitor's local time. Outside them, show an offline message or hide the widget entirely.
* **Route to a human.** Give the chatbot your support email and ticket page to share when a visitor needs a person.
* **Optional lead capture.** Ask visitors for their name and email early in the chat, and link known addresses to their WordPress account. Off by default.
* **"Powered by NiroHelp" footer**, on or off.
* **Live preview.** Try your settings on the settings screen before you copy the code; the snippet is built server-side from the same rules the widget uses, and values left at their default are omitted.
* **Private by design.** Conversations live in the visitor's browser session and clear when the tab closes — see [chatbot conversation storage](https://nirohelp.com/docs/ai-assistance/chatbot-conversation-storage/).

More on the [AI chatbot feature page](https://nirohelp.com/features/ai-chatbot/).

= AI auto-responder =

* Replies to new tickets and client replies from your synced docs, after a delay you set in minutes, hours or days.
* Posts only when the answer clears your confidence threshold (0 to 100%, default 70%). Low-confidence answers are withheld and logged with the score and the reason it held back.
* Cancels automatically when an agent replies or the ticket is resolved, closed or cancelled. A new client message restarts the delay, so it never answers stale context.
* One attempt per client message — it never replies to itself and never sends twice for the same message.
* Replies under an author name you choose ("Support Bot" by default), and can move the ticket to In Progress.
* Context sent with the question: ticket title, client name and email, order ID, products, urgency and the full Client/Agent transcript.

More on the [AI auto-responder feature page](https://nirohelp.com/features/ai-auto-responder/), and in [the auto-responder guide](https://nirohelp.com/docs/workflows-automation/ai-auto-responder/).

= Ticket sentiment =

* Tickets are labelled **positive**, **neutral** or **negative**, with a short note on what is blocking the customer.
* Classified about two minutes after a new ticket or client reply, with an hourly catch-up sweep, so a customer never waits on an AI call to file a ticket.
* Terminal tickets are classified too: an angry message on a resolved ticket is the strongest reopen signal a desk gets.
* An agent can override the label on the ticket screen, or re-analyse it on demand, and a manual label is never overwritten.
* Sentiment feeds the dashboard's mood split and the risk ranking behind the **Needs attention** queue. A ticket the AI has not reached yet reads as undecided rather than as a guess.

= AI tools for your team =

* **Generate response with AI.** Agents draft a reply from your docs in one click, then edit it before sending.
* **AI instructions.** Standing guidance on tone and scope for the chatbot and auto-responder — see [custom instructions](https://nirohelp.com/docs/ai-assistance/custom-instructions/).
* **Ask NiroHelp.** Administrators ask plain-language questions about tickets, agents, chatbot activity and doc gaps. Answers say what they were based on, and say "not enough history yet" rather than inventing a number. It can propose creating a ticket, changing a status or adding an internal note, and acts only after you confirm. See [Ask NiroHelp](https://nirohelp.com/docs/reports-analytics/ask-nirohelp/).
* **Logs.** Separate feeds for chatbot answers, auto-responder replies and Ask NiroHelp questions, with the relevance score behind each attempt; auto-responder entries link back to their ticket.
* **Usage.** Chatbot responses, auto-responder replies and plan credits remaining, with the date the allowance renews.
* **Connect and disconnect from one screen.** Register the site, sync docs, and disconnect whenever you like — disconnecting clears the stored credentials on that site only. See [registering for AI](https://nirohelp.com/docs/ai-assistance/registering-for-ai/) and [syncing docs](https://nirohelp.com/docs/ai-assistance/syncing-docs/).

= Support dashboard =

A 360° view of the desk, over the last 7, 30 or 90 days, this week or this month:

* **Key numbers** for the range you pick: open tickets, waiting on your team, average first reply, resolved, AI deflection, AI replies sent, docs published and doc helpfulness — each against the previous period.
* **Work queues:** **Needs attention** (ranked by risk — wait time, follow-up count, urgency and how the thread reads, with reopened tickets first), **Needs reply** (oldest first) and **New tickets**.
* **Daily briefing** written each morning — plain figures when AI is off.
* **Customer sentiment** split across recent tickets.
* **AI performance:** replies sent, deflection, answers withheld below the threshold, and how often (and how quickly) a human took over afterwards.
* **Chatbot outcomes:** questions asked, sessions that ended in an answer, sessions handed to a ticket, sessions abandoned, and the questions asked most.
* **Agent workload:** per-agent first reply and resolution times and the share of their tickets the AI helped with, plus how work is spread across the team.
* **Busiest hours** heatmap for tickets, agent replies and chatbot questions.
* **Doc insights:** most read, never read, read only once, marked unhelpful, untouched for a year, searches that found nothing, and ticket subjects your docs do not cover.
* **Activity feed** across tickets, docs and AI, plus a **Rescan** button that re-classifies sentiment and regenerates the briefing.

More on the [dashboard feature page](https://nirohelp.com/features/dashboard/) and in [the dashboard guide](https://nirohelp.com/docs/reports-analytics/the-dashboard/).

= Migrate from other help desk and knowledge base plugins =

Import in the background, in batches, from:

* **[BetterDocs](https://nirohelp.com/migrate/betterdocs/)**: docs, categories and votes.
* **[weDocs](https://nirohelp.com/migrate/wedocs/)**: parent pages become topics, articles become docs, votes included.
* **[Echo Knowledge Base](https://nirohelp.com/migrate/echo-knowledge-base/)**: articles and categories from every knowledge base.
* **[BasePress](https://nirohelp.com/migrate/basepress/)**: articles, knowledge bases, sections and votes.
* **[Awesome Support](https://nirohelp.com/migrate/awesome-support/)**: tickets, replies, attachments, assigned agents, products and departments.
* **[SupportCandy](https://nirohelp.com/migrate/supportcandy/)**: tickets, threads, customers, agents, categories, priorities, tags, custom fields and attachments.
* **[JS Help Desk](https://nirohelp.com/migrate/js-help-desk/)**: tickets, replies, departments, products, priorities, custom fields and attachments.

Each source's button stays disabled until that plugin is detected, so keep the old plugin active while you import. Re-running a migration skips what is already imported. Once you have checked the result, **Clean** permanently deletes the migrated data from the old plugin — it asks first, and there is no undo. Every source has a [migration guide](https://nirohelp.com/migrate/) listing what comes across and what stays behind.

= Your data, your site =

* **Stored in WordPress.** Docs and tickets are posts, replies are comments, and attachments stay in your uploads folder. No custom tables.
* **Modular.** Turn the knowledge base or ticketing off at any time. Disabling a module hides it and deletes nothing — see [enabling modules](https://nirohelp.com/docs/getting-started/enabling-modules/).
* **Nothing lost on uninstall.** Deleting the plugin leaves your docs, tickets and settings in the database.
* **Translation-ready.** Every string uses the `nirohelp` text domain, and a `.pot` file is included — see [translating NiroHelp](https://nirohelp.com/docs/developers/translating-nirohelp/).

= Shortcodes =

* `[nirohelp_docs]`: knowledge base archive with search.
* `[nirohelp_new_ticket]`: ticket submission form.
* `[nirohelp_tickets]`: the signed-in customer's tickets.
* `[nirohelp_all_tickets]`: the agent ticket queue.
* `[nirohelp_login_form]`: customer sign-in form.
* `[nirohelp_code lang="php"]`: highlighted code block.

= For developers =

* REST API under `/wp-json/nirohelp/v1/` for docs, tickets, comments, attachments, settings, migration, AI and the dashboard — see the [REST API reference](https://nirohelp.com/docs/developers/rest-api-reference/).
* Ticket lifecycle actions, including `nirohelp-tickets-ticket_created`, `nirohelp-tickets-client_commented`, `nirohelp-tickets-agent_commented`, `nirohelp-tickets-agent_changed` and `nirohelp-tickets-ticket_status_changed` — see [action hooks](https://nirohelp.com/docs/developers/action-hooks/).
* Filters, including `nirohelp_settings_menus`, `nirohelp_product_post_types`, `nirohelp_auto_status_transition_on_comment`, `nirohelp_can_register_users`, `nirohelp_attachment_types` and `nirohelp_attachment_max_bytes` — see [filter hooks](https://nirohelp.com/docs/developers/filter-hooks/).
* A theme-free ticket portal you can drop into an iframe on any site: [embedding the ticket UI](https://nirohelp.com/docs/developers/embedding-the-ticket-ui/).
* PSR-4 autoloading, a PHP 7.4 floor and a WordPress 6.0 minimum.
* Point the AI features at another NiroHelp Cloud server with the `NIROHELP_CLOUD_SITE` constant.
* Full hook and extension guide in the [developer documentation](https://nirohelp.com/docs/doc-topic/developers/), and every setting in the [settings reference](https://nirohelp.com/docs/setup-configuration/settings-reference/).

= Plans, credits and pricing =

The knowledge base, ticket system, emails, dashboard and migration tools are free, with no limits on agents, tickets or docs. AI features run on NiroHelp Cloud and need a paid NiroHelp plan: **Starter** (1 site), **Growth** (5 sites) and **Agency** (10 sites), all with unlimited agents and a 30-day money-back guarantee.

AI answers use credits: one credit is one AI answer — a chatbot reply, an auto-responder reply or an Ask NiroHelp question — and a long answer costs the same as a short one. The allowance is counted across every connected site and renews monthly; when it runs out the AI pauses and everything else keeps working. The **Usage** panel on the AI screen shows what is left and when it renews. See [NiroHelp pricing](https://nirohelp.com/pricing/).

== Installation ==

= Automatic installation =

1. In your WordPress admin, go to **Plugins → Add New Plugin** and search for **NiroHelp**.
2. Click **Install Now**, then **Activate**.

= Manual installation =

1. Download the plugin ZIP file from [nirohelp.com](https://nirohelp.com/).
2. Go to **Plugins → Add New Plugin → Upload Plugin**, choose the file and click **Install Now**.
3. Activate **NiroHelp**.

Step by step, with screenshots: [installing NiroHelp](https://nirohelp.com/docs/getting-started/installing-nirohelp/).

= After activation =

NiroHelp creates three pages and links them in its settings: **Docs** (`[nirohelp_docs]`), **My Tickets** (`[nirohelp_tickets]`) and **Submit a Ticket** (`[nirohelp_new_ticket]`). Existing pages that already hold those shortcodes are reused, so activating again never creates duplicates.

1. Add the new pages to your site menu.
2. Choose the modules you need under **NiroHelp → Settings → General**.
3. Publish a few docs, so your knowledge base and your AI have something to answer from.
4. Optional: create an **All Tickets** page with `[nirohelp_all_tickets]` for your agents and select it under **Settings → Tickets → Pages**.
5. Optional: moving from another plugin? Keep it active and open **NiroHelp → Settings → Migration**.
6. Optional, AI: open **NiroHelp → AI**, register with your name and email, enter the key you receive and click **Sync Docs**. Then set your confidence threshold and response delay under **Auto Responder**, and get your embed code under **Chatbot**.

The [first-run setup guide](https://nirohelp.com/docs/getting-started/first-run-setup/) walks through the same steps, and the rest of the manual is in the [NiroHelp documentation](https://nirohelp.com/docs/).

== Frequently Asked Questions ==

= What is NiroHelp? =

NiroHelp is a WordPress help desk plugin that combines a knowledge base, a support ticket system and optional AI. The AI chatbot and auto-responder answer customers from the documentation you publish, and leave the conversation to your team when they are not confident. See [what it does](https://nirohelp.com/features/) on nirohelp.com.

= Is NiroHelp free? =

Yes. The knowledge base, ticketing, email notifications, dashboard and migration tools are free, with unlimited agents, tickets and docs. AI features are optional and need a paid NiroHelp plan. See [NiroHelp pricing](https://nirohelp.com/pricing/).

= What do the paid plans add? =

The AI: the chatbot, the ticket auto-responder, AI reply drafts, sentiment, the daily briefing and the Ask NiroHelp copilot. Starter covers one site, Growth five and Agency ten, each with a monthly allowance of AI answers and unlimited agents. Everything else — docs, tickets, assignment, roles, emails, the dashboard's free panels and all seven importers — is in the free plugin.

= What is an AI credit, and what happens when I run out? =

One credit is one AI answer: a chatbot reply, an auto-responder reply or an Ask NiroHelp question. Length makes no difference. The allowance is shared across every connected site and renews monthly. If it runs out, the AI pauses until it renews and nothing else changes — tickets keep arriving, your team keeps answering, the knowledge base keeps working. The **Usage** panel on the AI screen shows what is left and the renewal date.

= How does the AI decide when to answer a ticket? =

It searches your synced docs and scores how well they answer the question. If the score clears your confidence threshold, the reply is posted after your response delay. If it does not, nothing is posted and the ticket waits for an agent.

= Can I control how confident the AI has to be? =

Yes. Set the confidence threshold from 0 to 100% (default 70%) and the response delay in minutes, hours or days (default 5 minutes) under **NiroHelp → AI → Auto Responder**. The [AI auto-responder page](https://nirohelp.com/features/ai-auto-responder/) walks through both settings.

= What happens when the AI is not confident enough? =

It stays silent. No reply is posted, the attempt is recorded in the AI logs with its score and the reason it held back, and the ticket stays in your queue for a human agent. The customer sees nothing unusual.

= Will the auto-responder reply over my agents? =

No. Each client message schedules at most one AI reply, and a new client message restarts the delay. Any agent reply, or resolving, closing or cancelling the ticket, cancels the pending AI reply.

= Do I need an OpenAI API key? =

No. There is no OpenAI, Anthropic or other model key to set up. You connect your site to NiroHelp Cloud once, from inside WordPress.

= How does the AI learn my documentation? =

Click **Sync Docs** under **NiroHelp → AI**. NiroHelp Cloud reads your published, publicly visible docs and indexes them. Syncing is manual, so unfinished drafts never reach answers, and NiroHelp reminds you to sync after you edit or publish a doc. See [syncing docs](https://nirohelp.com/docs/ai-assistance/syncing-docs/).

= How do I disconnect a site from the AI? =

Open **NiroHelp → AI** and use **Disconnect** on the connection card. It clears the stored credentials on that site only, and you can connect again whenever you like — see [disconnecting and reconnecting AI](https://nirohelp.com/docs/ai-assistance/disconnecting-and-reconnecting-ai/).

= What does the dashboard show? =

Key numbers for the range you pick (7, 30 or 90 days, this week or this month), three work queues, a busiest-hours heatmap, agent workload, doc insights and an activity feed. With AI connected it adds the daily briefing, the customer sentiment split, AI performance and chatbot outcomes. More on the [dashboard page](https://nirohelp.com/features/dashboard/).

= How does a ticket end up in "Needs attention"? =

By risk rather than by date: how long the customer has waited, whether anyone has replied at all, the urgency on the ticket and how the recent replies read. Reopened tickets lead the queue. Tickets rise when several of those line up badly.

= How is sentiment worked out? =

The AI service labels each ticket positive, neutral or negative and notes what is blocking the customer, about two minutes after the latest message, with an hourly catch-up. A ticket it has not reached yet is shown as undecided rather than guessed at, and an agent can override the label or re-analyse the ticket from the ticket screen.

= Can I use only the knowledge base, or only ticketing? =

Yes. Switch either module off under **NiroHelp → Settings → General**. At least one must stay on, and turning a module off deletes nothing.

= Do customers need a WordPress account? =

Customers never use wp-admin and do not need a password. The first time someone submits a ticket, NiroHelp creates a minimal NiroHelp User account for them, and they sign in with an emailed code or magic link. New accounts are only created when your site allows it: either WordPress's "Anyone can register" setting or NiroHelp's "Create accounts for new clients" setting must be on.

= Can visitors submit tickets without logging in? =

Yes. Turn on guest submissions under **Settings → Tickets → Submission**. Visitors enter their name and email with the ticket and receive a sign-in link by email.

= Can customers attach files to tickets? =

Yes. Customers and agents can attach PNG, JPG, PDF and ZIP files, up to 10 MB by default, to tickets and replies. They never go through the media library: NiroHelp writes them into a protected folder and serves them through a route that checks who is asking, so the customer role needs no WordPress upload permission. Developers can change the allowed types and size with the `nirohelp_attachment_types` and `nirohelp_attachment_max_bytes` filters.

= How do ticket statuses change on their own? =

A client reply moves the ticket to **Waiting** (your team's turn) and an agent reply moves it to **In Progress** (the client's turn). Resolved, Cancelled and Closed tickets are left alone. Switch the behaviour off under **Settings → Tickets → Behaviour**, or filter it per ticket with `nirohelp_auto_status_transition_on_comment`. See [ticket statuses](https://nirohelp.com/docs/workflows-automation/ticket-statuses/).

= Can I add the AI chatbot to a site that isn't WordPress? =

Yes. The chatbot is a single `<script>` tag that works on any website. For another WordPress site, **Download Plugin** gives you a tiny plugin that adds the widget without touching code. See the [AI chatbot page](https://nirohelp.com/features/ai-chatbot/).

= Can I show the chatbot only on certain pages? =

Yes. List the URL paths to show or hide it on, with `*` wildcards such as `/docs/*`. Only the path is matched, not the query string, and hide rules win when a page matches both lists.

= Can I customize how the chatbot looks? =

Yes. Set the agent name, avatar, accent colour, position, welcome message, suggested questions, input placeholder, launcher label, panel size and business hours, switch the "Powered by NiroHelp" footer off, and preview the result before copying the code. Agencies can brand it separately for each client site — see [customizing the chatbot](https://nirohelp.com/docs/ai-assistance/customizing-the-chatbot/).

= Can the chatbot collect a visitor's name and email? =

Optionally. Turn on lead collection and the bot asks for them early in the conversation, matching a known address to its WordPress account. It is off by default, and the widget works without it.

= How are tickets assigned to agents? =

New tickets are assigned automatically with random, round-robin or least-loaded assignment, skipping agents who have reached their ticket cap. You can also turn auto-assignment off and assign tickets by hand.

= How many agents can I add? =

As many as you like. NiroHelp has no per-agent limits and no seat pricing.

= Can I customize the ticket form? =

Yes. Under **Settings → Tickets → Form fields**, show, hide and reorder the built-in fields, mark fields as required, and add custom text, number, email, textarea or select fields.

= Can I customize the notification emails? =

Yes. Each of the seven emails has an editable header, subject and body with placeholders, plus a shared logo, footer, brand colour, background and content width. Emails are sent through `wp_mail`, so they work with any SMTP plugin.

= Can customers open tickets by email? =

Not in this version. Tickets are created from the ticket form, the embeddable ticket widget or the REST API, and notification emails bring customers back to their ticket with a one-click sign-in link. [Email piping](https://nirohelp.com/features/email-piping/) — piping a support mailbox into the queue over IMAP or POP3 — is on the [roadmap](https://nirohelp.com/docs/roadmap/).

= How do I migrate from BetterDocs, weDocs, Echo Knowledge Base, BasePress, Awesome Support, SupportCandy or JS Help Desk? =

Keep the old plugin active, open **NiroHelp → Settings → Migration** and click **Migrate** next to it. Each button stays disabled until that plugin is detected. The import runs in the background and is safe to run again. Use **Clean** only after checking the result: it permanently deletes the migrated data from the old plugin, and there is no undo. Each source has its own guide under [Migrate](https://nirohelp.com/migrate/).

= Should I try a migration on a staging site first? =

Yes, especially for tickets. An import behaves like real activity: assigned agents can be notified, statuses can change, and the auto-responder — if it is on — treats imported tickets as new work. A staging copy shows exactly what lands before your team or your customers see it. See [migrating from other plugins](https://nirohelp.com/docs/migration/migrating-from-other-plugins/).

= Where is my support data stored? =

In your WordPress database. Docs and tickets are posts, replies are comments, and attachments are in your uploads folder. The AI features send only the data listed under *External services* to NiroHelp Cloud.

= What happens to my data if I disable a module or uninstall the plugin? =

Nothing is deleted. Disabling a module hides its screens and shortcodes. Uninstalling NiroHelp leaves your docs, tickets, replies and settings in the database.

= Does NiroHelp work with my theme? =

Yes. Docs and ticket screens appear inside regular pages through shortcodes, so they work with classic and block themes.

= Is NiroHelp translation-ready? =

Yes. Every string uses the `nirohelp` text domain, and a `.pot` template is included in the `languages` folder.

= Where can I ask a question that isn't answered here? =

More answers are on the [NiroHelp FAQ](https://nirohelp.com/faq/), common issues are in [troubleshooting](https://nirohelp.com/docs/troubleshooting-support/common-problems/), and the full manual is at [nirohelp.com/docs](https://nirohelp.com/docs/).

= Is there a REST API? =

Yes. The `/wp-json/nirohelp/v1/` namespace covers docs, tickets, comments, attachments, settings, migration, AI and the dashboard, and action and filter hooks cover the ticket lifecycle. Routes and hooks are listed in the [REST API reference](https://nirohelp.com/docs/developers/rest-api-reference/).

== External services ==

The knowledge base, tickets, emails, dashboard and migration tools do not contact any external service.

The optional AI features connect to **NiroHelp Cloud**, a service run by NiroSuite at `https://my.nirosuite.com`. It indexes your documentation and generates AI answers. Nothing is sent until an administrator registers the site under **NiroHelp → AI**. From then on, the plugin exchanges the following data with the service:

* **Registration and verification.** When you click Send Code, Resend or Verify: your site URL, site title, and the name and email you enter, followed by the site key you receive.
* **Doc sync.** When you click Sync Docs: your site key. The service then reads your published, publicly visible docs (title, URL and content) from your site's REST API.
* **AI instructions.** When you save them: the instructions text.
* **Chatbot.** On pages where you add the chatbot snippet, and when you preview it in the admin, the browser loads the widget script from `https://cdn.nirosuite.com`. For each question it sends the question, up to 10 earlier messages from the conversation, the page URL, your site key, and the chatbot's name, avatar, support email and ticket page URL. If you turn lead collection on, it also sends the name and email the visitor gives it.
* **Auto-responder and AI drafts.** After the delay on a new ticket or client reply (when the auto-responder is on), or when an agent clicks Generate response with AI: the ticket title and ID, client name and email, order ID, product, urgency, ticket description and conversation, the latest client message, and your AI instructions.
* **Sentiment.** About two minutes after a new ticket or client reply, and in an hourly catch-up, while the site is connected: the ticket title and up to the last four messages. Internal notes are not sent.
* **Daily briefing.** Once a day, when enough tickets have arrived: aggregate numbers only, such as ticket counts and reply times. No ticket content.
* **Ask NiroHelp.** When an administrator asks a question: the question, the conversation so far, and the help desk data looked up to answer it, which can include ticket titles and conversations, client names and emails, and agent and doc statistics.
* **Status, usage and logs.** When you open the dashboard or the AI screens: your site key, to fetch the service status, credit usage and AI logs.
* **Disconnect.** When you click Disconnect: your site key, to remove the site from the service.

NiroHelp Cloud is provided under the [NiroSuite Terms of Service](https://nirosuite.com/terms/) and the [NiroSuite Privacy Policy](https://nirosuite.com/privacy/).

== Screenshots ==

1. The support dashboard: a daily briefing written from the week's own tickets, customer sentiment, deflection and reply-time figures, work queues ranked by risk, and a live activity feed.
2. Chatbot setup — agent name, avatar, colour and launcher corner — with a live preview beside the form. View Code or Download Plugin embeds it on any site.
3. The AI auto-responder: the confidence threshold it must clear before it posts, the delay before it replies, the name it posts under, and whether it moves the ticket to In progress.
4. Ask NiroHelp answers plain-language questions about your help desk — why first reply time moved, who is at capacity, which docs are missing. It reads your help desk only and never messages a customer.
5. The agent queue, with status tabs, search, and filters by agent, product, reason, urgency and date. "Support Bot" on a last reply marks a ticket the AI answered.
6. The customer's portal: every ticket they have opened, with its status, the agent on it and when it last moved.
7. The AI chatbot answering a shopper on the storefront, from the documentation you published.
8. Email branding — logo, footer text, brand colour, background and content width, applied to every ticket notification email.
9. Import from BetterDocs, weDocs, Echo Knowledge Base, BasePress, Awesome Support, SupportCandy and JS Help Desk. Each button stays disabled until that plugin is detected.
10. The new-ticket form: show, require, relabel and reorder the built-in fields, or add custom ones of your own.
11. AI logs — every question the chatbot and the auto-responder answered, with the answer that was given, newest first.

== Changelog ==

= 1.0.0 - 2026-09-17 =
A rebuild rather than a point release. The admin is now a React application, every browser request goes through the plugin's own REST API, and the help desk gained a dashboard, ticket sentiment, AI reply drafts, attachments and an assistant that answers questions about your own support data. Docs, tickets, settings, agents and emails carry over from 0.8.1 untouched — there is no migration step.

**Added — the support dashboard**

* A daily briefing written from the period's own tickets, searches and docs, naming the knowledge gaps behind them.
* A KPI band: open tickets, waiting on us, average first reply, resolved, docs published, doc helpfulness, AI deflection and AI replies sent, each against the previous period.
* Work queues ranked by risk — needs attention, needs reply and new tickets — with what is blocking each row on the row itself.
* Customer sentiment, AI performance, chatbot outcomes, an agent workload table, busiest-hours heatmaps, doc insights and an activity feed.
* Date ranges that govern every figure on the screen: this week, this month, and the last 7, 30 or 90 days, each with its comparison window. Rescan re-reads the period on demand.
* A section whose module is switched off says so, in place of figures that would read as zero.

**Added — Ask NiroHelp**

* Plain-language questions about your own help desk: why first reply time moved, who is at capacity, which docs are missing. It cites the tickets it used.
* It reads your help desk only and never messages a customer.
* It can propose a change to a ticket, held until you confirm or decline it.
* Every turn is logged under its own tab, with the rest of the AI logs.

**Added — tickets**

* Sentiment on every ticket, classified by the AI service and recorded with where it came from. An agent can overrule it or re-read one on demand, and a site can refuse to send ticket text to the classifier at all.
* AI reply drafts for agents, offered in the reply box and never posted on their own.
* File attachments on tickets and replies: uploaded before the reply is posted, listed beneath it in the thread, inline images served through a signed link, and unposted uploads pruned.
* Internal notes, drawn in the agent's thread and kept out of the client's.
* A ticket is now a route addressed by its slug, not a page addressed by its ID, with a redirect from the old permalink. Non-Latin titles produce a usable slug.

**Added — AI**

* A logs screen covering the chatbot, the auto responder and Ask NiroHelp, paginated, with the answer that was given.
* Plan credits and usage on the Connectivity screen, including when the credits run out.
* A warning when the service has nothing indexed, instead of an AI that quietly answers nothing.
* The auto responder keeps the reason it declined to answer, and reports it.
* The chatbot files the ticket itself, carrying the conversation onto it, and replies inside the visitor's existing open ticket rather than opening a second one.
* A chatbot embed can be scoped to chosen products, and a ticket's products travel with its question.

**Rebuilt**

* Dashboard, AI and Settings are one React application on a single admin page, with loading skeletons, notices drawn inside the app, and redirects from the old query-string URLs onto the new routes.
* The public screens are React too: the ticket queue, the single ticket, the new-ticket form and the sign-in screen.
* Notification emails have a new template and branding controls — logo, footer text, brand colour, background and content width — read when a notification is sent rather than on every request.
* Settings renders every field type the schema declares, edits email bodies in the classic WordPress editor, and draws each permalink structure as the URL it produces.
* The migration screen moved off admin-ajax, and both destructive actions now confirm in a dialog before they run.

**Changed**

* All browser-to-server traffic goes through REST routes under `nirohelp/v1`, each with a real permission callback. No `wp_ajax_*` actions remain in the plugin.
* Encryption is handled by mukto90/ncrypt.
* The admin application's strings are extracted and translatable; they were silently absent from the POT before.
* The PHP test suite runs against a real WordPress install rather than stubs.

**Fixed**

* The plugin's namespaces are plural (`Traits`, `Interfaces`, `Abstracts`). The singular forms are PHP reserved words before 8.0 and made most of the plugin unloadable on the PHP 7.4 floor it advertises.
* Notification emails no longer send blank on a site that has not configured them, and an empty placeholder no longer leaves its punctuation behind.
* Doc content renders inline, the docs feed paginates, and turning a module off no longer leaves its screens half-drawn.
* Orphaned auto-responder cron events are cancelled with the ticket they belonged to.
* The chatbot no longer cross-links the same ticket twice.

**Security**

* The ticket comment routes are authorized per ticket. They were authorized as "any logged-in member", which is the role every client holds, so a client could read another client's thread.
* Every superglobal read is unslashed and sanitized at the boundary.
* An anonymous ticket submission can no longer rename an existing account: `POST /tickets` is public so the widget can file tickets, and it named whichever account the supplied address resolved to.
* Guest ticket submission creates an account only where account creation is actually allowed.
* Values substituted into notification emails are escaped, and a notification with no recipient is no longer sent to nobody.

= 0.8.1 - 2026-09-13 =
* Update assets.

= 0.8 - 2026-09-13 =
* First submission: knowledge base, tickets, emails, migration, AI chatbot and AI auto responder.

== Upgrade Notice ==

= 1.0.0 =
A rebuilt admin, a support dashboard, ticket sentiment, attachments, internal notes, AI reply drafts and Ask NiroHelp. Your docs, tickets, settings and agents carry over as they are. Includes a fix for ticket comment routes that let one client read another's thread.
