FAQ

Expand each item for a short explanation and a step-by-step how-to guide for that feature.

What is an AI support widget?

An AI support widget is a floating chat button on your website that lets visitors ask questions. The widget uses AI to answer instantly from your knowledge base. When the AI cannot help or the visitor asks for a person, the conversation becomes a ticket for your team with full context. OperatorOne is one example: one script tag, AI replies, and human handoff in one dashboard.

How does AI human handoff work?

When a visitor requests a human, or the AI hits an escalation trigger, or an agent takes over, the conversation is converted into a support ticket. The full thread—every message from the visitor and the AI—is preserved. Your team sees everything in one place and replies with full context. No starting from scratch, no broken threads.

Booking handovers – Calendly, Acuity, and more

Connect Calendly, Acuity Scheduling, Square Appointments, Microsoft Bookings, and other booking platforms. When a visitor asks to book, schedule a call, or make an appointment, the AI includes the right booking link in its reply. Add multiple integrations per site (e.g. sales calls, support demos). The AI directs visitors to the correct link so they can pick a time without leaving the chat.

How to use

1. In Support Admin, go to Bookings.
2. Click Add booking integration. Select the widget site, enter a name (e.g. Sales calls, Demo booking), choose the platform (Calendly, Acuity, etc.), and paste your booking page URL.
3. Save. The AI is automatically instructed to include these links when visitors ask to book, schedule, or make an appointment.
4. Add more integrations as needed—each site can have multiple booking links for different purposes.
5. When a visitor says they want to book a call or schedule a meeting, the AI will include the appropriate link in its reply.

---

How to find your booking link for each platform:

• Calendly: Click your profile dropdown (top right) → My Link. Or go to Event Types and click the three dots on an event type → Copy link. Your link looks like calendly.com/yourusername or calendly.com/yourusername/event-type.

• Acuity: Go to Scheduling Page → Link. Find your General Scheduling Page link and click Copy. For a specific service, use the dropdown to select it, then Copy. Do not add "www." to the link.

• Square Appointments: Go to Square Dashboard → Appointments → Online Booking to find your shareable URL. Or in the Appointments app: More → Online Booking → Square Online website → Share.

• Microsoft Bookings: Sign in at microsoft365.com → Bookings. Open the booking page you want, then click the copy button next to the booking page heading to copy the link.

• Zoho Bookings: In your Zoho Bookings dashboard, go to Booking Pages. Each booking page has a unique URL you can copy and share.

• Fresha: Go to Online booking → Link builder. Create a link (e.g. Link to services) and click Create link, then copy. Your profile must be listed on the Fresha marketplace first.

• Custom / other: Paste the full URL of any booking or scheduling form page (e.g. from Typeform, Google Forms, or your own website).
Is OperatorOne GDPR compliant?

OperatorOne is designed to support GDPR-aware workflows. You control where data lives, retention, and access. You can export and delete customer data. Configure PII controls, use your own SMTP and hosting, and define retention policies. We do not sell or share your data with third parties for marketing. See our Security page for details.

Can I embed support on multiple sites?

Yes. OperatorOne supports multi-site helpdesk management. Each site has its own widget snippet (site key and allowed domains). You can run one widget per brand, client, or domain. The dashboard filters tickets by site. Plan limits on the number of sites apply depending on your subscription.

Is OperatorOne an Intercom alternative?

Yes. OperatorOne is a lightweight Intercom alternative focused on AI support and human handoff. No product tours or marketing automation—just an embedded support widget, tickets, knowledge base, and one dashboard. Pricing is based on conversations and sites, not per seat. See our Intercom comparison page for a full breakdown.

How do I add a CNAME to point my domain to OperatorOne?

You can use your own domain (e.g. support.yourcompany.com) for your support site instead of the default subdomain we assign. To do that, you add a CNAME record in your DNS that points your domain to your OperatorOne support URL (e.g. yoursubdomain.operatorone.co.uk). Once DNS has propagated, visitors can reach your support widget at your custom domain.

How to use

1. Note your OperatorOne support URL. When you sign up, you choose a subdomain (e.g. acme). Your support URL is then: https://yoursubdomain.operatorone.co.uk (replace yoursubdomain with yours, and the domain with the one shown in your account).

2. Log in to your domain’s DNS provider (e.g. your registrar, Cloudflare, GoDaddy, Namecheap). Find the DNS or DNS management section.

3. Add a new CNAME record:
• Name / Host: the subdomain you want to use (e.g. support if you want support.yourcompany.com, or leave blank for the root in some panels).
• Target / Points to / Value: your OperatorOne support hostname only, without https:// (e.g. yoursubdomain.operatorone.co.uk). Do not include a trailing dot unless your provider requires it.
• TTL: 300 or 3600 is fine; leave default if unsure.

4. Save the record. DNS can take from a few minutes up to 48 hours to propagate.

5. Once propagation is complete, open https://your-custom-domain.com (e.g. https://support.yourcompany.com) in a browser. You should see your OperatorOne support site. Add this custom domain in your OperatorOne account (signup step 2 or in your account settings) so we can associate it with your support instance.

If it doesn’t work: double-check the CNAME target is exactly your support hostname (no https://, no path). Ensure you didn’t create an A record by mistake; CNAME is required. Some root domains (e.g. yourcompany.com) don’t support CNAME; use a subdomain like support.yourcompany.com instead.
Embeddable widget

Add support to any website with a single script tag. The widget shows a floating button that opens a chat panel. Visitors can start a conversation without leaving your site. You control which domains can embed the widget (CORS) and can run multiple widget "sites" (e.g. one per brand).

How to use

1. In Support Admin, go to Integration (or Sites).
2. Create or select a widget site and set its name, site key, and allowed domains (the exact domains that may load the widget, e.g. yoursite.com).
3. Copy the widget code snippet (one script tag with data-support-base and data-site-key).
4. Paste it into your website just before the closing </body> tag.
5. The floating button will appear on your site; visitors can click it to open the chat and start a conversation.
Conversations (tickets)

Every chat is a ticket with a status: open, pending, or closed. The admin dashboard lists all conversations with filters by status, widget site, department, and search. Agents see the full thread and can reply, change status, assign, and set priority or due dates.

How to use

1. Log in to Support Admin and open the Tickets (or Dashboard) page.
2. Use the filters at the top: status (open/pending/closed), site, department, or search by email, name, or message text.
3. Click a row to open the ticket and see the full thread.
4. Type your reply in the message box and click Send. Use the status dropdown to set open, pending, or closed, and optionally set assignment, priority, due date, or department.
5. All messages (visitor, agent, and AI) appear in order in the thread.
Assignment & workload

Assign conversations to specific agents. Use quick views for "Unassigned", "Mine", "Past due", or "High priority" so nothing slips through. Past-due and due-soon are based on a configurable response-time or manual due date.

How to use

1. On the Tickets list, use the view tabs or filters: All, Unassigned, Mine, Past due, or High priority.
2. Open a ticket and use the "Assigned to" dropdown to assign it to an agent (or leave unassigned).
3. "Mine" shows only tickets assigned to you; "Unassigned" shows tickets no one has taken.
4. Set "Response time (hours)" in Admin → Settings so that tickets with no reply within that time appear as past due.
5. Optionally set a due date on individual tickets for SLA tracking.
Departments

Organise tickets by department (e.g. Sales, Technical). Filter the ticket list by department and assign conversations to a department when replying or editing the ticket.

How to use

1. Go to Admin → Departments.
2. Add departments (e.g. Sales, Technical Support) and save.
3. On the Tickets list, use the department filter to see only tickets in a given department.
4. When viewing a ticket, use the Department dropdown to assign or change the department for that conversation.
5. Departments help route work and report by area.
Priority & due dates

Set priority (low, medium, high) and an optional due date on each ticket. Combined with a configured "response time" in Settings, the dashboard highlights past-due and due-soon conversations so you can meet SLAs.

How to use

1. Open a ticket and find the Priority and Due date fields (usually near assignment and status).
2. Set Priority to Low, Medium, or High.
3. Set Due date to a calendar date if the ticket has an SLA or deadline.
4. In Admin → Settings, set "Response time (hours)" so tickets with no first reply within that time are treated as past due.
5. Use the "Past due" and "High priority" views on the Tickets list to focus on urgent work.
AI reply suggestions

When replying to a ticket, the admin can request an AI-suggested reply. The suggestion is based on the conversation and your knowledge base, using an OpenAI-compatible API. You can edit the suggestion before sending.

How to use

1. Ensure AI is configured in Admin → AI Agent (API base URL, API key, model) and optionally add Knowledge base entries.
2. Open a ticket and scroll to the reply box.
3. Click the "AI suggest" or "Suggest reply" button (if available in your admin UI).
4. Wait for the AI to generate a suggestion based on the thread and KB; it appears in the reply box or a preview area.
5. Edit the suggestion as needed, then send the reply as usual.
AI auto-reply

Optionally enable automatic AI replies to visitor messages. The AI uses your knowledge base and system prompt so common questions get instant answers. You can limit what the AI is allowed to ask (e.g. never ask for passwords) and use escalation triggers.

How to use

1. In Admin → AI Agent, set your API base URL, API key, and model, and write a system prompt that describes how the AI should respond.
2. Add Knowledge base articles so the AI can use them in answers.
3. Turn on "AI auto-reply" (or "Auto-reply") in the AI Agent or Settings page.
4. Optionally set safety options (e.g. never ask for passwords) and escalation triggers so the AI hands off to a human when needed.
5. New visitor messages will receive an AI reply automatically; agents can still reply and take over the conversation.
AI Agent configuration

Configure the AI agent: system prompt, model choice, and safety options (e.g. never ask for sensitive data, PII rules). Optionally request custom fields from the visitor (customer ID, phone, account number, order ID). Test the connection from Settings.

How to use

1. Go to Admin → AI Agent (admin-only in most setups).
2. Enter your OpenAI-compatible API base URL and API key, and choose a model (e.g. gpt-4o-mini).
3. Write the system prompt that defines the AI's role and tone.
4. Set safety options: e.g. never ask for sensitive data, PII rules, and escalation trigger phrases.
5. Optionally enable request fields (customer ID, phone, account number, order ID) so the widget can send them with messages. Use "Test AI connection" to verify the setup.
Knowledge base

Create articles that the AI uses for context and suggestions. Add entries from the Knowledge base admin page or from conversations. Entries are matched to the user's message so relevant help is included in AI replies and agent suggestions.

How to use

1. Go to Admin → Knowledge base.
2. Add a new entry: give it a title and content (plain text or simple formatting). Save.
3. The AI and "suggest reply" feature use these entries: they search for relevant articles based on the visitor's message and include them in the context.
4. You can also add or link KB entries from a ticket (if your admin supports "add to KB" from a conversation).
5. Keep titles and content clear and up to date so the AI gives accurate answers.
File attachments

Visitors can attach files when sending a message in the widget; agents can attach files when replying in the admin. Attachments are stored securely and shown in the conversation thread.

How to use

1. In the widget: when the visitor types a message, they can use the attachment or paperclip button (if shown) to select a file before sending.
2. In the admin: open a ticket and use the attachment option in or near the reply box to attach a file to your reply.
3. Attachments appear in the thread with the message; visitors and agents can download them.
4. File types and size limits depend on your server and support app configuration; check Admin → Settings or your host if uploads fail.
Email notifications

Notify admins when a new ticket is created and notify the visitor when an agent (or AI) replies. Use the built-in mail() or configure SMTP in Settings for reliable delivery.

How to use

1. Go to Admin → Settings.
2. Enable "Notify admins on new ticket" and/or "Notify visitor on reply" as needed.
3. For reliable delivery, configure SMTP: enable SMTP, then set host, port, encryption, username, password, and from address.
4. Save settings. New tickets will trigger admin notifications, and replies will trigger visitor notifications, using SMTP when configured or the server's mail() otherwise.
5. If emails don't arrive, check spam folders and SMTP credentials; some hosts require "Less secure app" or app passwords.
Multi-tenant widget sites

Run multiple widget "sites" (e.g. one per brand or domain), each with its own site key and allowed domains. CORS and rate limits are applied per site. Widget code is unique per site so you can embed different instances on different domains.

How to use

1. In Support Admin, go to Integration (or Sites).
2. Create a new site: enter a name, a unique site key (e.g. brand-a), and allowed domains (e.g. branda.com, www.branda.com). Save.
3. Copy the widget code for that site (it will include the site key). Embed it only on the domains you listed.
4. Create another site for another brand or domain with a different site key and allowed domains.
5. Each site has its own conversations and its own rate limits; CORS ensures only your allowed domains can load the widget.
Admin users & access

Add staff accounts so multiple agents can log in. Some areas (e.g. AI Agent, Settings, Integration) can be restricted to admins. Each agent can have a profile and default avatar.

How to use

1. Go to Admin → Users (or similar).
2. Add a user: enter email and password (or send an invite if your app supports it). Set role to Agent or Admin.
3. Admins can access AI Agent, Settings, Integration, and user management; agents typically see only Tickets, Knowledge base, and their profile.
4. Each user can log in and work on assigned tickets; use Admin → Profile (or Settings) to set name and avatar.
5. Remove or deactivate users when they leave so they can no longer access the admin.
Widget themes & branding

Choose a theme (Blue, Purple, Green, Teal, Orange, Red, Slate) for the widget. Upload a company logo and pick a default avatar for agents so the chat matches your brand.

How to use

1. Go to Admin → Settings.
2. Under "Widget appearance" or "Messenger theme", select a theme (Blue, Purple, Green, Teal, Orange, Red, Slate). Save.
3. Upload a company logo if the option is available (e.g. under "Company logo" or "Branding"); it may appear in the widget header or admin.
4. Choose a default avatar for agents so agent replies show a consistent image when no custom avatar is set.
5. The widget will reflect the new theme and branding on the next load; visitors may need to refresh the page.
Installable admin (PWA)

The support admin can be installed as a Progressive Web App on desktop or mobile. Agents get a dedicated app icon and can work offline with cached assets.

How to use

1. Open the Support Admin in a supported browser (e.g. Chrome, Edge, Safari).
2. Look for an "Install" prompt in the address bar or browser menu (e.g. "Install Support Admin" or an install icon).
3. Click Install; the app is added to your home screen or applications.
4. Open the admin from the new icon for an app-like experience; some pages may work offline with cached content.
5. Updates are applied when you reload the app while online.
Control API (optional)

For central monitoring, enable the Control API with a secret key. A separate control site can call the status endpoint to get ticket counts, AI usage, user-agent stats, and limits (users/sites) without exposing your admin.

How to use

1. In the support install, open includes/config.php (or the configured config file) and set control_api_key to a long random secret (e.g. generated with openssl rand -hex 32).
2. On the control/monitoring site, configure the support API URL (your support site base URL) and the same control_api_key.
3. The control site can call GET your-support-url/api/control_status.php with the key in the Authorization header (Bearer <key>) or X-API-Key.
4. The response includes ok, online, ticket counts, AI usage (24h and 7d), user-agent stats, and users/sites counts and limits.
5. Do not expose the control API key in the widget or to customers; use it only from a trusted server or admin tool.
Agent activity

See who's been active: sessions, IP, OS, location, and hours logged in over a chosen period. Helps with auditing and understanding support coverage.

How to use

1. Go to Admin → Agent activity (or Activity).
2. Select a date range or period (e.g. last 7 days) and optionally filter by user.
3. View the list or chart of sessions: login time, IP address, device/OS, and location if available.
4. Use the data to see who was active when, and total hours or sessions per agent.
5. Helps with shift planning, auditing, and ensuring coverage during business hours.
Ticket notes & audit

Add internal notes to a ticket (visible only to staff) and view an audit log of changes (assignment, status, priority, due date) with who made the change and when.

How to use

1. Open a ticket and find the "Notes" or "Internal notes" section.
2. Add a note: type your comment and save. Notes are visible only to staff, not to the visitor.
3. Use notes for handoff info, internal context, or follow-up reminders.
4. Open the "Audit" or "History" section (if available) to see a log of changes: who assigned the ticket, who changed status or priority or due date, and when.
5. Audit helps with accountability and debugging workflow issues.
Auto-close after AI

When AI auto-reply is enabled, you can automatically close conversations after the AI has replied and no follow-up is received within a set number of minutes. Reduces clutter for resolved queries.

How to use

1. Enable AI auto-reply in Admin → AI Agent (or Settings).
2. In Admin → Settings, find "Auto-close after AI" or "Close conversation after AI reply".
3. Set the delay in minutes (e.g. 60): if the visitor does not send another message within that time after an AI reply, the conversation is automatically closed.
4. Save settings. New conversations that get an AI reply and no follow-up will close after the delay.
5. Visitors can still start a new conversation later; this only closes the current thread to keep the ticket list tidy.
Security & rate limiting

CSRF and XSS protections, CORS allowlists, and configurable rate limits on widget and API requests. Optional login rate limiting by IP. Passwords are hashed; config files are protected.

How to use

1. CORS: in each widget site's allowed domains, list every origin that may embed the widget (e.g. yoursite.com, www.yoursite.com). Only those origins can load the widget.
2. Rate limits: in Admin → Settings (or config), adjust rate limit level or per-site limits to avoid abuse while allowing normal traffic.
3. Login rate limiting: in includes/config.php set login_rate_limit to a number (e.g. 5) to limit failed login attempts per IP; helps prevent brute force.
4. Keep includes/config.php outside the web root or protected by .htaccess so the API key and secrets are not downloadable.
5. Use HTTPS in production; the app uses CSRF tokens and escaped output to reduce XSS and CSRF risks.