Guidance-first AI reply drafts for FreeScout. The module lays an AI-generated draft into a sidebar panel; the human always edits and sends — there is no auto-send, no auto-refund, no auto-cancel.
- Standalone (BYOK): the module calls your LLM directly (Anthropic Claude or OpenAI) with your own API key. No commerce data — only the cleaned ticket text, an optional inserted knowledge base, and your guidance.
- Connected (optional): if you run Flowkom and enable AI data access there, the module routes to Flowkom's
/api/freescout/ai-draft, which grounds the draft with order/shipping status and returns only the finished text. Flowkom uses its own key.
Two independent switches, both OFF by default:
| Switch | Lives in | Effect |
|---|---|---|
S1 "KI-Antworten" (aiassist.enabled) |
this module | Whether the button renders / any LLM is called. Holds the standalone BYOK key. |
| S2 "KI-Datenzugriff" | Flowkom (per workspace) | Whether /ai-draft grounds + drafts. UI-toggle, never SQL. |
At links_policy = block (forced for eBay/Amazon) the server strips, in order: markdown [text](url) → text, HTML <a>…</a> → inner text, bare http(s):// / www. URLs, and bare emails / mailto:. This closes the most common off-platform-contact leak. It is not a full compliance guarantee — phone numbers, obfuscated forms (hxxp, "example dot com") and leftover fragments remain the human reviewer's job.
1. Download the right file. On the latest release download the asset
AiAssist.zip(under Assets). Do NOT use the green Code ▸ Download ZIP button or Source code (zip) — those give you a folder namedfreescout-ai-assist-main/freescout-ai-assist-x.y.z, which is the wrong name and will not load.2. The folder in
Modules/must be named exactlyAiAssist. FreeScout resolves the classModules\AiAssist\Providers\…to the pathModules/AiAssist/…. If your folder is named anything else, rename it toAiAssist. A wrong name (or an incomplete upload) makes FreeScout throwClass "Modules\AiAssist\Providers\AiAssistServiceProvider" not foundon every request — see Recovery.
Recommended — extract on the server (avoids incomplete FTP transfers):
- Download
AiAssist.zip(the release asset). - Upload the ZIP to your server and extract it server-side — via your hosting control panel's file manager (all-inkl/KAS, Plesk, cPanel all have "Extract") or over SSH (
unzip AiAssist.zip -d /path/to/freescout/Modules/). The result must be exactlyModules/AiAssist/(containingmodule.json,Providers/,Services/, …). Server-side extraction guarantees every one of the ~22 files arrives — plain FTP of many small files can silently drop some. - In FreeScout open Manage → Modules, find AiAssist, and click Activate. If your install uses config caching, click Clear Cache (Manage → System → Tools) first.
If you can only use FTP: unzip AiAssist.zip locally first, then upload the entire AiAssist/ folder into Modules/. Afterwards, before activating, verify on the server that the folder is named AiAssist and these exist and are non-empty:
Modules/AiAssist/module.jsonModules/AiAssist/Providers/AiAssistServiceProvider.phpModules/AiAssist/Services/(10.phpfiles) andModules/AiAssist/Http/Controllers/AiAssistController.php
Once installed, FreeScout's one-click update tracks new releases automatically via module.json.
Symptom: after activating, the helpdesk shows "Whoops / Application error" or a 500 on every page. storage/logs/laravel-YYYY-MM-DD.log shows Class "Modules\AiAssist\Providers\AiAssistServiceProvider" not found.
Cause: the module folder is missing / mis-named / incompletely uploaded, so the provider class can't be loaded — but FreeScout was already told to boot it.
Recovery — delete these THREE things, then reload; the helpdesk is immediately back. (The admin UI is unreachable while it's down, so do this over FTP or your file manager.)
Modules/AiAssist/and any wrongly-named copy such asModules/freescout-ai-assist-main/— the module folder.bootstrap/cache/ai_assist_module.php— FreeScout's cached pointer to the module's provider.- The contents of
storage/framework/cache/data/(delete the files/subfolders inside, keep thedatafolder itself) — this is FreeScout's cached module list. If you skip this, FreeScout re-createsbootstrap/cache/ai_assist_module.phpfrom the cached list on the next request and the 500 comes right back.
⚠️ Deleting only the folder — or only the folder +ai_assist_module.php— is not enough: FreeScout regenerates the cached pointer from the module-list cache instorage/framework/cache/data/. Clear all three and it stays fixed.
Then re-install cleanly per the Install steps (right file, right folder name, server-side extraction).
- DPA / ZDR are installer duties. Before enabling, sign a Data Processing Agreement (DPA) with your LLM provider and enable Zero Data Retention. The module gates every LLM call behind
aiassist.dpa_acknowledged. - EU–US transfer basis: direct endpoints
api.anthropic.com/api.openai.com(US) in v0. Compliance basis = DPA + ZDR + SCC / EU-US Data Privacy Framework — document your own basis. EU-endpoint providers (Bedrock/Vertex/OpenAI-EU) are a later provider class, not v0. safe_passwordhonesty: the provider key field is masked in the UI and kept on empty submit; it is NOT encrypted at rest. The key lives in your self-hosted FreeScout DB. DB-at-rest encryption is your responsibility.- Internal notes never reach the LLM.
MailCleaneris a display aid, not a PII control — it is not claimed as one.
| Mode | Sent to the LLM | NOT sent |
|---|---|---|
| Standalone | cleaned ticket text, inserted KB, instructions | address, phone, email, payment data, SKU, tracking number, internal notes |
| Connected | + order/shipping status, product title + qty, channel, salutation | (same as above) |
MIT.