AI assistant
How AI auto-response, Ask AI, approval mode, answer ratings, schedules, vacation periods, and monthly response limits actually behave.
Joely's AI assistant can answer customer messages automatically, or draft replies that your team reviews before sending. It builds its answers from your knowledge base and the ticket conversation.
Auto-response
When a customer posts a message on the portal, the AI prepares an automatic reply if all of these are true:
- AI is enabled for the project
- Auto-reply is enabled in the AI settings
- AI is enabled on that specific ticket (the per-ticket toggle)
- The AI is currently available according to your schedule
- Your monthly AI response quota is not exhausted
The response delay
The AI does not reply instantly. It waits a configurable delay (1 to 10 minutes, default 3) so your team has a chance to answer first:
- If a staff member sends a public reply before the delay elapses, the AI response is cancelled.
- If the customer sends another message during the delay, the timer restarts based on the newest message.
- Customizing the delay requires the Plus plan or higher; on Free, the delay is always 3 minutes.
When the AI doesn't know the answer
The AI only answers from your knowledge base — curated facts and indexed documentation, with the curated facts taking precedence when they conflict. When all or part of a question is not covered by it (including partially answered questions), the reply says so explicitly and ends with a short note that a staff member will take over, written in the customer's language. On the dashboard, that message carries a Staff handoff badge so your team can spot tickets waiting for a human. The badge is informational only: it does not change the ticket status, assignments, or notifications.
Pause after a staff reply
An optional setting, off by default: when enabled, the first public staff reply on a ticket turns off that ticket's per-ticket toggle, which stops its automatic replies. Auto-responses stay off until someone manually re-enables it from the ticket sidebar. Internal notes do not trigger this.
The per-ticket toggle
Every ticket has its own AI on/off switch in the ticket sidebar:
- New tickets inherit the project-level AI setting at creation time.
- Toggling it requires the Toggle AI auto-response on/off for individual tickets permission (project owners always can).
- Turning it off stops auto-responses on that ticket only. It does not block Ask AI, nor the customer's own AI reply requests.
Ask AI
Staff with the Use AI to generate response suggestions permission can request an AI draft at any time from the ticket view (except on Closed tickets).
Ask AI always produces a pending draft, even when approval mode is off: the customer never sees it until a staff member approves it. Each Ask AI request counts toward the monthly response quota.
Customer-requested reply
When Let customers request an AI reply is enabled in the AI settings, an "Ask AI" button appears on the customer's ticket in the portal, attached to the top of the message box, with the number of requests left (it is hidden once the ticket is closed). Unlike the staff Ask AI button above, this one never produces a draft:
- The reply is always sent to the customer immediately, even with approval mode on: the customer is waiting for it and would otherwise never see an answer. Approval mode keeps applying to auto-responses and to staff Ask AI.
- The per-ticket AI toggle does not affect it: the button stays available when AI is off for that ticket, for example after a staff reply paused the auto-response. The toggle only stops automatic replies.
- Each ticket allows a limited number of customer-requested replies, after which the button stays disabled for that ticket. You set this limit under Requests per ticket, from 1 to 20 (default 10). Lowering it applies to existing tickets too: a ticket that already used as many requests as the new limit keeps its button disabled.
- The button is on hold ("select a package above first") while a question posted by an Ask for the package automation is unanswered, even if packages are already linked and even if the customer wrote since. Such a question only holds back this button: automatic replies and the automation Ask AI action still run. The same applies while the AI's own "which package?" question is unanswered and no package is linked to the ticket. Clicking the button on hold scrolls to that question and highlights it. Picking a package, or Other, enables the button again right away.
- The button is hidden while the AI's reply is the last message of the conversation: another reply would answer the same thing. It comes back as soon as the customer or a staff member writes. Internal notes, system lines (status or package changes, participants joining) and the package question do not count as messages here, and neither do drafts waiting for approval. A request sent anyway in that state is refused and not counted, unless it finds AI work already under way (see below).
The button reuses the AI work already under way on the ticket instead of writing a second reply. The button keeps loading until the reply exists, then the reply appears in the conversation:
- An auto-response is counting down (the auto-response delay): the countdown is cancelled and the reply is written right away. The customer does not wait out the delay, and the ticket never receives two replies.
- An auto-response is already being written: no second reply is generated. The one in progress is delivered as the customer's requested reply, so the rules above apply to it: it is sent immediately, even with approval mode on. It is only dropped if a staff member posts a reply to the customer while it is being written (an internal note does not count), and the customer then gets a fresh reply that takes the staff reply into account.
- An AI draft is waiting for approval and was written after the customer's last message: the click sends that draft to the customer, exactly as if a staff member had pressed Send, whatever your approval settings. The customer's click counts as the approval, and the draft is recorded as approved by the customer: your team sees an Approved by the customer badge on the reply (the customer does not). A draft older than the customer's last message is not sent: a fresh reply is written instead, and the old draft stays pending.
- Otherwise, a new reply is written, unless the AI's reply is already the last message: the request is then refused and not counted.
A request counts toward the ticket's limit when the customer gets an AI reply out of it (a new reply, the auto-response it took over, or a draft it sent). A click that finds that a staff member sent that draft a moment earlier is not counted, and neither is one that fails. Only newly written replies count toward the monthly response quota; taking over an auto-response or sending an existing draft costs nothing extra.
Only one request runs at a time on a ticket. While it runs, the button shows that the reply is being generated and cannot be clicked again, including after the customer reloads the page or opens the ticket in another tab. It becomes available again as soon as the request ends, whether the reply was sent or the request failed.
Approval mode
With Require approval enabled in the AI settings, auto-responses are not sent directly. Instead they are saved as pending drafts:
- Pending drafts are only visible to staff with the Approve or reject pending AI messages permission. Customers never see them.
- Send approves the draft and delivers it to the customer (including their Discord DM notification, if enabled).
- Rejecting permanently deletes the draft.
- Edit in composer loads the draft into your reply box so you can rework it and send it yourself (if the box already holds text, you are asked before it is replaced). The draft disappears from the ticket and a notice offers Cancel for 10 seconds: cancelling puts the draft back, still pending, with its versions, and restores your previous text unless you already edited the loaded suggestion. Once the notice closes, as soon as you send your reply, or when you leave the ticket, the draft is deleted for every staff member (if you close the browser tab first, it simply stays pending). Editing a draft this way is not counted as a rejection.
After 3 consecutive rejections across the project, Joely suggests importing documentation into the knowledge base to fix accuracy at the root. Approving any draft resets the counter, and each staff member can dismiss the suggestion permanently.
The /ai command
Typing /ai in the reply box drafts an answer, optionally steered by an instruction: /ai shorter, and mention the refund policy. It is the same pipeline as the Ask AI button, and needs the Use AI to generate response suggestions permission.
Write the instruction in any language: the reply stays in the customer's language, unless the instruction asks for another one ("answer in English").
The command follows the language of your interface — it reads /ia in French, Spanish and Italian, and /ki in German. Every spelling always works on input, whatever your language, so a shared instruction like "type /ai" never breaks for a colleague using another one.
It is listed on the Commands page with its own switch (Manage chat command settings): turning it off removes /ai and its other spellings from every ticket of the project, while the Ask AI button and auto-responses keep working. The command also needs the project's AI to be on; when it is off, the row is greyed out and flagged, whatever its switch says. A custom command cannot be created under any of those names — it would be shadowed by the built-in and never reach its own content.
Refining a draft
Every pending AI draft (from Ask AI, the /ai command, or an auto-response under approval mode) carries a Refine button. It opens an Ask for a change field: type an instruction such as "Add the links" or "Shorter, bullet points" and the AI rewrites the draft in place. The field folds back once the change is applied, or when you press Escape. Every staff member viewing the ticket sees the draft being revised.
- Asking for a change requires both the Use AI to generate response suggestions and Approve or reject pending AI messages permissions. It is refused on Closed tickets.
- Each change creates a new version of the same draft, and so does each translation (see below). The draft always shows its current version, the one that gets sent; the version counter in the draft's action row tells which one it is.
- Click the version counter to open the version history: every version, oldest first, with what produced it (the AI's first answer, automatic or requested by a staff member, a change request and its instruction, or a translation), who asked for it and when. A change or translation made after restoring an older version shows which version it started from ("From version 2"). The current version is marked, and any other can be made current with Restore, which closes the history. Restoring a version does not add one to the history, and is unavailable while a change or a translation is running.
- A change request can be written in any language: the draft stays in the customer's language, unless the request asks for another one.
- A draft accepts up to 10 changes (restoring a version does not count). Past that, edit it in the composer instead.
- Changes do not count toward the monthly response quota, and are limited to 10 requests per minute per staff member.
- The AI keeps the knowledge it found for the first version: a change does not search the knowledge base again. Customer messages posted since the draft are taken into account (their text only, not their images).
- One change runs at a time per draft. If someone approves, rejects, or edits the draft in the composer while a change is running, that change is discarded.
- While a draft is pending, a new Ask AI or
/airequest on the ticket is refused: use Refine on the draft instead.
To make changes possible, the draft's conversation context is kept by the AI provider until the draft is approved, rejected, or edited in the composer, and for about 72 hours at most. After that the draft can still be approved, edited in the composer, or rejected, but no longer changed with AI. Drafts created before this feature existed cannot be changed with AI either.
Translating a draft
Under the Refine button, a translate button translates the pending draft into any of the languages your project supports. The translation replaces the draft: approving then sends the translated text. It is stored as a new version labelled "Translated to" and the language, so it appears in the version history and can be restored like any other version, and the confirmation toast's Undo restores the version you had before. Undo is refused if the draft changed since the translation (refined or translated again, by you or a teammate), so it never discards a newer version: pick the version you want from the version history instead.
- The text is translated by the AI, which keeps the draft's formatting, mentions, links and code untouched, with a classic translation service as backup if the AI is unavailable. It never goes through your browser's built-in translation, and does not count toward the monthly response quota.
- A translation does not count toward the 10 changes of a draft, but a draft accepts up to 10 translations.
- It is unavailable while a change is running and while the draft is being approved.
- Requires the Approve or reject pending AI messages and Send messages permissions, and the Message Translation feature on the project owner's plan, like the other translation surfaces.
- Drafts created before versions existed cannot be translated this way: edit them in the composer instead.
Correcting a sent AI reply
An AI reply the customer already received (an approved draft, or an auto-response sent without approval) can still be fixed with Edit in the message's menu, like your own messages.
- Requires the Approve or reject pending AI messages permission (the project owner always can). The staff member who requested an Ask AI or
/aireply can also edit it as their own message, with Edit own messages. - It works in every ticket status, Closed included, like any staff edit. A pending draft is not edited this way: use Refine or Edit in composer.
- The reply keeps its AI badge, and (corrected by staff) appears next to it instead of the usual "(edited)" label, for your team and for the customer alike. The customer's Discord DM is updated with the new text, ends with the same mention instead of the AI disclaimer, and stays signed with the assistant's name.
- A correction makes no AI call: it does not count toward the monthly response quota.
- The original AI text is not shown anywhere in your project once corrected.
Rating AI answers
Every AI reply the customer received ends with Was this answer helpful? and a thumbs up / thumbs down, so your team and your customers can say which answers worked.
- Who can rate: any staff member who can see the ticket (dashboard), and the ticket's customers: its creator and its participants (portal, and the Discord DM of the reply). No permission beyond ticket access is needed, and the feature is available on every plan.
- What can be rated: AI replies that were sent to the customer. Pending drafts, internal notes, deleted messages and the package questions ("Which script is your message about?") show no rating. A reply corrected by staff can still be rated. Ratings stay possible after the ticket is closed.
- One vote per person per reply: clicking the other thumb switches the vote, clicking the selected thumb removes it. The portal and the Discord DM share the same vote.
- After a thumbs down, an optional What went wrong? window opens: pick reasons (Incorrect information, Doesn't answer the question, Incomplete, Hard to understand, Other) and/or write a comment (up to 1,000 characters). Send attaches them to the vote; Skip, or closing the window, keeps the thumbs down without details. Switching to a thumbs up discards the reasons and comment.
- Customers only see their own vote. Staff also see, on each AI reply, how many people found it helpful or not, and the customer's own verdict with its reasons.
- Statistics: members with the View AI settings and usage permission find these statistics on the Ratings tab of the AI page. It shows the helpful rate over 7, 30 or 90 days and how it moved since the previous period, the share of AI answers that received a vote, and the helpful rate for staff and customers. It then lists why answers were downvoted and breaks the helpful rate down by where the answer came from (auto-response, Ask AI,
/ai, customer request), the AI's confidence, the channel of the vote and staff corrections. Last comes the list of downvoted answers, newest first, with a link to each ticket. Without View all tickets, this list only shows answers on tickets assigned to you, while the statistics above still cover the whole project. Votes on deleted messages are not counted.
Schedule and vacation periods
The AI schedule describes when your team is working. The AI answers when your team is not:
| Configuration | AI behavior |
|---|---|
| No working hours configured | AI responds 24/7 |
| Current time inside working hours | AI stays silent (your team is on duty) |
| Current time outside working hours | AI responds |
| "Respond during working hours" enabled | AI responds 24/7, schedule ignored |
| Active vacation period | AI responds 24/7, schedule ignored |
Details worth knowing:
- All times are interpreted in UTC.
- Overnight time slots (for example 22:00 to 06:00) are supported.
- Vacation periods are date ranges; while one is active, the AI covers everything regardless of the weekly schedule. You can show customers a banner during offline hours and vacations (see Portal customization).
Monthly response limits
Auto-responses and Ask AI requests share a monthly quota tied to the project owner's plan:
| Plan | AI responses per month |
|---|---|
| Free | 50 |
| Plus | 200 |
| Team | 2,000 |
| Enterprise | Unlimited |
What counts: every auto-response, every Ask AI draft (even if later rejected), and every customer-requested reply.
What does not count: changes asked on a pending draft, message correction, message translation, Teach AI extraction, web imports, and GitHub issue generation.
When the quota is exhausted:
- Auto-responses are silently skipped; staff see a notice on the ticket, the customer sees nothing.
- Ask AI returns an error inviting an upgrade.
For paid plans the quota follows your Stripe billing period. On the Free plan it renews monthly, anchored to the project's creation day.
Customizing the assistant
- Name: shown as the author of every AI message (1 to 50 characters, default "AI Assistant").
- Avatar: displayed next to AI messages. Three options: upload an image file (JPG, PNG, GIF or WebP, 5 MB max), pick an icon with a background color, or provide an HTTPS image URL. When none is set, the project logo is used as a fallback.
- Custom instructions (Team plan and higher): up to 1,000 characters appended to the AI's system prompt to fine-tune tone and behavior. If the project owner's plan drops below Team, stored instructions are kept but no longer applied.
AI-generated messages delivered by Discord DM always carry a short disclaimer telling the customer the reply was written by an AI.
AI message correction
On the Team plan and higher, staff can polish a drafted reply before sending: the AI fixes grammar, spelling, and tone in the message's original language, and keeps its Markdown formatting and mentions.
- The wand icon in the reply box corrects the whole draft.
- Rephrase, in the toolbar that appears over a text selection, corrects only the selected passage. It is also available when editing one of your own messages. The toast's Undo restores the whole draft.
Using it requires the Send messages permission, and a member who only sees tickets assigned to them can only use it on those tickets. Corrections do not count toward the monthly response quota and are limited to 5 requests per 5 minutes per user, shared with the knowledge base text correction.