Wolfatek TENANT ADMIN
Mailboxes
🧪 Autonomy test lead
An address you own. Its mail runs the real pipeline — classification, deals, the chain — as a genuine prospect, but every deal is badged TEST, kept out of your numbers, and every alert prefixed [TEST]. Never test on a live client.
Email Display name Connector Status
Loading…
Departments
NameTypeStatus
Loading…
Users
Name Email Role Status
Loading…
Access Permissions
Grant a capability to a role, a department, or one specific person — without changing their role. This controls what shows up in the /home dashboard tabs immediately, no restart needed. A role already gets everything its tier normally does; use this to give someone more than their role alone would, or a whole department a shared capability.
WhoTypeCapability
Loading…
Data Scope (advanced)
How much data someone can SEE within a capability they have — their own records only, their whole department's, or the entire tenant. Directors/admins always see everything; this is for narrowing staff/managers below that. Leave unset to keep today's behaviour (tenant-wide).
WhoTypeCan see
Loading…
Spam & Threat Protection

Define explicit, enterprise-grade rules for what constitutes noise, spam, or phishing within this tenant. The engine evaluates these directives before applying global baseline heuristics.

💬 Website Chat
Put Crystal on your own website so visitors can talk to her — the same Crystal who handles your email and WhatsApp, with the same customer-safe limits. She answers from your website, your pricelist and your stock, never your costs or margins, and she says she is an AI.
Comma-separated. The chat only works on these addresses — if this is empty the chat will not appear anywhere, which is deliberate: it stops an unfinished setup becoming an open, billable endpoint for the whole internet. Include both the www and non-www forms.
After this she asks for their details and hands to a person.
Every visitor who gives details becomes a contact in your CRM.
Abuse brake. Each conversation costs AI time.
Your install code
Paste this once into your website, just before the closing </body> tag. WordPress: Appearance → Theme File Editor → footer.php, or any "header & footer scripts" plugin, or a Custom HTML block. Nothing else to install.
No install code generated yet.
Generating again replaces the old code — any site still using the previous one stops working. Use that if the code ends up somewhere it should not be.
🌐 Website Knowledge
Crystal reads your own website so she can answer "what do you offer?" and hand customers a real page link. She syncs once a day; the URL is worked out from your letterhead, your branding domain, or your staff email domain — you only fill the override in if it is somewhere else.
What she carries into every conversation
The compacted briefing, rebuilt on each sync. This is injected into every chat, email and WhatsApp turn — the full pages below are only read when she needs the detail.
Cached pages
PageURLSizeSynced
Integrations & API Keys
WhatsApp (Meta Cloud API)
This tenant's own number/WABA/token. Secrets show masked — leave a masked field unchanged to keep it.
SMS (MyMobileAPI — fallback channel)
Payfast (your own merchant)
Each tenant uses its own Payfast account; secrets are never shown back — leave blank to keep the current value.
🗳 Election Instances
Each row points at one election platform instance's /api/voter-lookup.php. When a student messages this tenant's WhatsApp number, the roll is checked first: if their number is on it and they haven't voted, they get their voting link straight back with no AI involved. If the number isn't recognised, Crystal asks for a student number and can only tell them the masked mobile registered for it — never a full number, never an OTP. Someone whose vote is already cast gets nothing, and the attempt is recorded. Deactivate a row to switch all of that off instantly — no restart, no deploy.
Setting up an instance Always matches this release.
  1. Upload the file to the election instance as <instance>/api/voter-lookup.php.
  2. Create <instance>/includes/lookup_config.phpoutside the web root, never inside /api/. Generate it here so both ends carry the same secret and nobody has to invent or retype one:
    If PHP ever serves source as plaintext, a key in an included file outside the web root does not go with it.
  3. Add the instance below. Base URL is the full path to the file (https://…/api/voter-lookup.php), API key is the same secret, and Election ID is that instance's own elections.id — not ours.
  4. Press Test before anything else. It uses an unmatchable student number, so it never touches a real voter and is safe on election morning. Test is the only thing that catches a wrong otp_source column — get that wrong and lookups do not fail, they quietly return no OTP in front of a student.
  5. Install the updater once goes in the same folder as voter-lookup.php (<instance>/api/update-lookup.php). After that you never upload the lookup endpoint by hand again: open https://<instance>/api/update-lookup.php, paste the same API key, press Update now, and it pulls the current version straight from here. It checksums and syntax-checks before replacing anything, keeps the previous file, and has a Roll back button — if an update would break, nothing changes. There is an Upload & replace option on the same page for when the election server cannot reach us.
  6. Running two elections at once? Add both. Every lookup fans out across all active rows — a missing instance is not a missing feature, it tells that election's students they are not on the roll.
NameKeyElection IDLookup cap Last checkActive
Tenant Settings
General
Days back the daily digest reports on. Leave blank to use the global platform default.
Popup/mobile reminder lead time for meetings Crystal schedules. Leave blank to use the global platform default. Users can override this individually in their profile.
Exchange / EWS
Default server for EWS mailboxes in this tenant.
Microsoft 365
Your Microsoft 365 directory (tenant) ID.
Branding
✉️ What Crystal may do on email
On an email thread she can always reply to whoever wrote in. Sending to someone else — "email Robert about the book-in fee" — is different, and used to be blocked outright: she would draft it and, worse, sometimes say she had sent it. With this on, an instruction from a staff address is treated as the authority it is. A customer emailing in can never trigger a send either way, and issuing invoices, paying suppliers or raising POs stay blocked on email regardless.
🎙️ Crystal's voice
Turn this off for an audience that needs an answer it can search, re-read and forward — a large public-facing line, for example, where a spoken reply is slower to act on and impossible to scan. Off also removes the tools entirely, so she will not offer voice and then fail; escalations that would have spoken become a push instead. This is tenant-wide and takes effect on her next message — no restart.
🧠 Crystal's brain
Leave on Platform default unless this tenant's work genuinely differs. Pick Lite for a channel handling a lot of short, well-defined requests — it answers noticeably faster and costs a fraction. Pick Pro where she is doing quoting, document work or correspondence that has to be right first time. Applies to every channel for this tenant and takes effect on her next message — no restart.
🧹 Reset Crystal's history
Wipes what Crystal remembers for this tenant only. Irreversible. Useful between rounds of testing — clearing the election lookups also resets "already sent" and the roll-lookup throttle, so the next message counts as a genuine first contact.
Loading current counts…
✨ Crystal's Identity
What she calls herself with your team and your customers — used in every reply she writes, her email signature, and the chat and voice-call screens. Select her user account profile and primary operational mailbox above. Saves take effect on her next reply — nothing restarts.
🤖 AI Intelligence Context
This text is injected into every Gemini prompt so it understands your business context. Be specific about who is a customer vs. a supplier to eliminate false positive lead classifications.
↺ Re-Analysis
Re-analysis re-runs Gemini on every stored email using the current business description and department context — no mail is re-fetched from Exchange. Run this after saving a new business description to reclassify existing records. Records without a stored body are skipped automatically.
Re-classifies every email this tenant has stored. May take several minutes for large inboxes.

Brand Backgrounds

Upload images your staff can select as their dashboard background. JPG, PNG and WebP supported — max 8 MB each.

Upload New Background
🧾 Invoice & Quote Letterhead
All settings below drive the generated PDFs for your tenant.
Company identity
Colours
Logos & badges
Offices
Directors (one per line)
Banking details
Quote terms & numbering
🏷 Pricelists
Upload pricelist (Excel .xlsx)
The supplier label is stored as the item's brand. Re-uploading updates existing items by brand + SKU. Zero-priced rows are skipped. A summary appears after upload.
BrandSKUItemPriceCur
Loading…
💰 Quoting Rules
Write your pricing rules — in plain English
Say what you add and to what, any minimum margin, how you round, and what happens to everything you haven't specifically mentioned. If anything is unclear we'll ask rather than guess — nothing goes live until you've seen worked examples and approved them.
Rules currently pricing your quotes
#RuleApplies toPriceLimits
Loading…
Test a price
This is the exact calculation Crystal runs — what you see here is what a customer would be told.
Version history
VersionStatusRulesUpdated
🛠 Services & Prices
ServicePriceUnitStatus
Loading…
What have we charged before?
Searches your real invoicing history — the same search Crystal runs before she answers a pricing question.
🙈 What Crystal Ignores
Crystal reads everything that arrives at a mailbox you've switched her on for, and decides herself what to do with it — answer it, ask you first, or let the person know it's been seen and hand it to someone. These rules are the only thing that makes her say nothing at all.

The Our own mailboxes rule is a safety rule, not a preference: our system emails these same mailboxes (daily digests, alerts about new clients), and every reply she sent would arrive as new mail for her to reply to. Removing it starts a loop that doesn't stop.
RuleWhyIgnored On
Loading…
The kinds of mail she recognises
This is her vocabulary for sorting what arrives. When mail keeps turning up that doesn't fit any of these, she'll propose a new one — you confirm it before she starts using it. She never confirms her own.
Kind of mailWhat it meansWhere from
Loading…
🙋 She's Asking
Crystal can change her own settings in the safe direction on her own — ignoring a newsletter, taking work off her own plate, telling one more person about something. Anything that gives her more reach comes here first, unless you asked for it yourself in conversation. This is also the record of everything she has changed.
What she wantsWhyAsked by Kind
Loading…
🔔 Alert Defaults
The channels a new person is reached on for each kind of alert. Everyone can change their own in My Account → Alerts, and what you set here does not touch anyone who already has. Switching an event off stops it for the whole organisation. The in-app 🔔 feed always keeps the record either way.
Loading…
📣 Who She Reports To
By default Crystal reports to the owner of the mailbox the email arrived at — set on each mailbox, so nobody has to keep a list up to date. Add a rule below only where that isn't right: send supplier accounts to whoever does the books, complaints to whoever owns them.

Without any rules she falls back to every admin and director, which is fine for three people and a broadcast for twenty-five.
An email always goes out, so there's a record and nothing is lost. WhatsApp/SMS is kept for the things where someone is already waiting on us: a reply that failed to send, a crash, a payment waiting on a signature, or her asking whether to take a lead.
WhenTellNote On
Loading…
Try it
Nothing is sent — this just answers "if that happened now, who would hear about it?"
Mailbox owners — the default
MailboxReports to
🤝 Sales Autonomy
This is the chain a sale runs through, in order. For each step choose how far Crystal may go: Off — a person does it. Propose — she prepares it and a person approves. Auto — she does it herself. Everything starts Off; turn a step on once you've watched her do it on Propose for a while. Releasing money can never be automatic.
#StepWhat Crystal would doHow far she may go
Loading…
Supplier capabilities
Whether we collect or let the supplier deliver. If they deliver free and still meet what the customer was told, that saves dispatching the driver — but only a profile you've confirmed is used to make that call automatically.
SupplierDeliversLeadCut-offConfirmed
📄 Document Templates
Templates
Editor
Merge Fields
📑 Generated Quotes
Quote #CustomerTotalSourceCreated
Loading…
📞 Crystal Usage
UserChannelsSessionsMessages First usedLast used
Loading…