OpsIQ Documentation

Build, operate, and extend OpsIQ.

This is the complete documentation for OpsIQ. Use it to set up the product, run support, configure AI, manage your CRM, install the widget, connect sites, build connectors, call the REST API, receive webhooks, package marketplace apps, and operate self-hosted deployments. Every feature is covered with detailed examples so you can operate OpsIQ without contacting support.

Customer guideAdmin guideDeveloper guideCRM referenceConnector SDKREST APISelf-hosted
Start here

What OpsIQ does for your business

OpsIQ is a complete AI-first business operating platform. It replaces your analytics, live chat, helpdesk, CRM, SEO toolkit, integration middleware, and developer platform with a single unified admin where every tool shares the same customer context. Instead of stitching together 8-12 separate SaaS products, you install OpsIQ once and operate everything from one screen.

The platform
OpsIQ unified platformA central AI brain connected to live chat, CRM, tickets, Site Intelligence, promotions and analytics.Live chatPromotionsAI CRMSite IntelTicketsAnalyticsOpsIQAI BRAIN1ONE WORKSPACEEvery tool in one admin2SHARED BRAINOne customer context3ANYWHERECloud or self-hosted
OpsIQ is one platform with one shared customer context — every tool feeds, and is powered by, the same AI brain.

Everything OpsIQ does — in detail

Website analytics and visitor intelligence

Real-time visitor tracking

Every page load, click, scroll, and navigation event is captured in real time. See who is on your site right now, what pages they are viewing, how long they spend, and where they came from — all without third-party cookies.

Visitor log and sessions

Full history of every visitor with device, browser, operating system, country, city, referrer, UTM parameters, landing page, and identity resolution. Sessions group page views into journeys so you can see the entire path a visitor takes.

Session replay

Timeline-style playback of captured visitor sessions. See exactly what users did — mouse movements, clicks, scrolls, page transitions, and form interactions. Use it to diagnose UX issues, understand drop-off points, and verify conversion flows.

Live feed

A real-time stream of visitor activity as it happens. See page views, chat starts, form submissions, and intent signals updating every few seconds. Filter by country, device, or referrer to focus on specific traffic segments.

Top pages

Pages ranked by visits, engagement time, bounce rate, conversions, and support activity. Identify your highest-performing content and pages that need improvement.

Geo intelligence

Country, city, and region breakdowns with maps. Device and browser distribution, traffic source analysis, search engine referrer tracking, and market penetration insights.

Intent funnel

Track visitor intent signals — pricing page visits, repeated returns, documentation browsing patterns, and support interactions — to identify visitors who are likely to buy, churn, or need help.

A/B experiments

Run split tests on your website directly from OpsIQ. Create variants, set traffic allocation, define conversion goals, and measure statistical significance. No external testing tool needed.

JavaScript error tracking

Capture client-side JavaScript errors from your website automatically. See error messages, stack traces, affected browsers, frequency counts, and which pages trigger them. Debug frontend issues without separate error monitoring.

Events log

Every tracked event — page views, custom events, chat interactions, form submissions, purchases — in a searchable, filterable log with full metadata.

Sales and conversions

Track orders, revenue, refunds, subscription renewals, and attribute conversions to traffic sources, campaigns, and visitor journeys. Revenue dashboards with period comparison and trend analysis.

Leads

High-intent visitors identified by behavior patterns. Score leads based on page visits, time on site, return frequency, support interactions, and custom signals. Feed leads directly into the CRM pipeline.

Site Intelligence (SEO and content analysis)

Site crawls

Automated crawling of your entire website to discover pages, detect broken links, find missing meta tags, check image alt text, validate canonical URLs, and map your site structure. Schedule crawls to run daily, weekly, or on demand.

Technical SEO audit

Comprehensive technical analysis: page speed scores, mobile responsiveness, Core Web Vitals, SSL certificate status, redirect chains, duplicate content detection, crawl depth analysis, and structured data validation.

Content audit

Evaluate every page for content quality, word count, readability score, keyword density, heading structure, internal/external link ratio, and freshness. Identify thin content, duplicate pages, and content gaps.

AI-powered search

Semantic search across your entire site content. Ask natural language questions about your content and get AI-synthesized answers with source page references.

SERP rank tracking

Monitor your search engine rankings for target keywords across Google and other engines. Track position changes over time, compare against competitors, and see which pages rank for which terms.

Keyword research

Discover keyword opportunities based on your content, competitor analysis, and search volume data. Get suggestions for new content topics, long-tail variations, and content optimization targets.

Backlink analysis

Monitor your inbound link profile. See which sites link to you, track new and lost links, analyze anchor text distribution, and identify link-building opportunities.

Local SEO grid

For businesses with physical locations: visualize your local search visibility across a geographic grid. See how your rankings vary by location, distance from your business, and search intent.

Google Business Profile sync

Connect your Google Business Profile to OpsIQ. Sync reviews, posts, Q&A, photos, and business information. Manage your GBP listing from inside OpsIQ. Respond to reviews, publish posts, and monitor insights.

Scheduled reports

Automated SEO and analytics reports generated on your schedule (daily, weekly, monthly). Reports include ranking changes, traffic trends, technical issues found, and content performance. White-label output available for agencies.

AI-powered support

Customer AI chat

AI answers customer questions on your website 24/7 using your knowledge base, connected platform data (orders, accounts, subscriptions), and custom training prompts. Supports multiple AI providers: Claude (Anthropic), GPT-4o (OpenAI), Gemini (Google), and Grok (xAI).

Admin AI assistant

An AI copilot inside your admin panel that helps you write ticket replies, draft customer communications, analyze support trends, look up customer data across connected platforms, and execute actions through the connector system.

AI knowledge grounding

The AI is grounded in your knowledge base articles, FAQ entries, product documentation, and connected platform data. It does not hallucinate — it answers from your actual business information or escalates when uncertain.

Auto-handoff to humans

When the AI cannot resolve a question, detects frustration, or the customer asks for a human, it automatically hands off to your team with full conversation context. Configurable decline/timeout auto-revert back to AI.

AI training prompts

Write separate instruction prompts for customer-facing AI and admin-facing AI. Control tone, boundaries, escalation rules, prohibited topics, and business-specific behavior. Per-workspace configuration supported.

AI history and audit

Every AI conversation is logged with full request/response details, token usage, cost tracking, provider used, and model version. Review conversations to identify training gaps and improve AI accuracy.

AI insights

Automated analysis of AI conversation patterns. See common questions, resolution rates, handoff frequency, customer satisfaction by topic, and areas where the AI needs better training.

Per-workspace AI config

Each connected site/workspace can use its own AI provider, model, temperature, token budget, and training prompts. A SaaS company can use Claude for the main product and GPT-4o for a secondary brand.

Managed AI and BYOK

Two AI modes: Managed AI (included in your plan, no API key needed) or Bring Your Own Key (use your own OpenAI/Anthropic/Google/xAI API key for full control over model selection and costs). Both are first-class — every feature works with either mode.

AI token budgets and cost controls

Set monthly token budgets, per-conversation limits, and low-balance alerts. Track spending per provider, per workspace, and per conversation. Prevent runaway costs with hard ceilings.

Tickets and helpdesk

Native ticket system

Full helpdesk with departments, priorities (low/medium/high/urgent), statuses, SLA tracking, internal notes, customer replies, file attachments, and threaded conversations. No external helpdesk needed.

AI triage and auto-reply

AI automatically triages incoming tickets by department and priority. Enable auto-reply for safe departments — the AI drafts and sends a response after a configurable delay (default: 2 minutes) so humans can intervene first.

Email ingestion

Connect a mailbox (Gmail, IMAP, or provider-specific) to automatically create tickets from inbound emails. Replies to ticket notification emails update the ticket thread.

Ticket portal embed

Embed a customer-facing ticket portal on your website. Customers can submit tickets, view their history, reply to open tickets, and check status — all branded to your design.

Ticket merging

Merge duplicate tickets into a single thread. Merged tickets show [Merged] on the subject line. All conversation history is preserved in the surviving ticket.

Return to AI

After a human agent takes over a ticket, use "Return to AI" to let the AI resume auto-reply on that ticket. Useful when the human-required portion is resolved but the customer has follow-up questions the AI can handle.

Inbox copilot

AI-assisted ticket management from the inbox view. The copilot suggests replies, summarizes conversation history, recommends priority/department assignments, and can execute actions on connected platforms.

Chat and real-time support

Chat inbox

Real-time customer chat managed from a unified inbox. See all active conversations, customer identity, conversation history, and AI suggestions. Multiple agents can collaborate on a conversation.

Proactive chat rules

Trigger chat messages based on visitor behavior: time on page, specific URL visited, scroll depth, return visit count, exit intent, or custom events. Example: show a help message after 60 seconds on the pricing page.

Chat widget

A customizable chat widget embedded on your website. Supports AI chat, live agent chat, ticket submission, knowledge base search, and visitor identity. Responsive, accessible, and brandable.

CSAT surveys

Collect customer satisfaction ratings after chat and ticket interactions. Design surveys with your own questions, rating scales, and follow-up prompts. Results feed into team performance and AI insights.

Writing AI

Separate AI writing assistant for composing email drafts, ticket replies, announcements, and customer communications. Uses its own prompt (not the chat brain) for professional business writing.

AI-First CRM

CRM Command Center

A single screen showing your entire CRM state: pipeline value, deal velocity, upcoming tasks, at-risk deals, agent activity, and AI recommendations. The CRM home page is your daily starting point.

Contacts and companies

Manage customer contacts with full profiles: name, email, phone, company, tags, lifecycle stage, conversation history, ticket history, purchase history, and custom fields. Link contacts to companies for B2B relationship management.

Deals and pipeline board

Visual Kanban-style deal board with customizable stages. Drag deals between stages, set values, assign owners, track close dates, and see pipeline value at each stage. Multiple pipelines supported.

AI deal coaching

The AI analyzes each deal and provides coaching: risk signals (gone quiet, competitor mentioned, budget concerns), next-best-action recommendations, win probability, and suggested follow-up timing.

Forecast and reports

Revenue forecasting based on pipeline data, historical close rates, and deal velocity. Reports include pipeline by stage, by owner, by source, conversion rates, average deal size, and sales cycle length.

Prospecting agent (SDR)

AI-powered prospecting that identifies potential customers from your visitor data, lead signals, and connected platform activity. Suggests outreach targets, drafts initial messages, and scores lead quality.

Follow-up sequences

Automated multi-step follow-up sequences: email, wait, email, check response, escalate. Define sequences for new leads, stalled deals, post-purchase check-ins, and re-engagement campaigns.

Lifecycle and retention

Track customer lifecycle stages (lead, prospect, customer, churned) with automated transitions. The retention agent monitors for churn signals and suggests interventions.

Data steward agent

AI agent that continuously cleans and enriches your CRM data: deduplicates contacts, fills missing fields, validates emails, standardizes company names, and flags stale records.

Build my CRM

Natural language CRM configuration: tell the AI what your sales process looks like and it builds your pipeline stages, custom fields, deal templates, and automation rules.

CRM health check

Automated audit of your CRM data quality: duplicate contacts, deals without next steps, stale pipelines, missing contact information, and data completeness scoring.

Trust Dial

Three-level autonomy control for each CRM AI agent: Autopilot (AI acts independently), Copilot (AI suggests, human approves), and Manual (AI observes only). Set the dial per agent, per action type, and per deal value threshold.

Four AI agents

The CRM runs four specialized AI agents: Steward (data quality), SDR (prospecting), Retention (churn prevention), and Analyst (reporting and insights). Each agent has its own Trust Dial setting.

Connectors and integrations

Pre-built connectors

Ready-to-use connectors for Shopify, WooCommerce, BigCommerce, Magento 2, PrestaShop, OpenCart, osCommerce, WordPress, WHMCS, Zendesk, Stripe, Amazon SES, Postmark, Resend, SendGrid, Mailgun, Gmail, IMAP, Slack, and Google Business Profile. Each connector brings platform-specific AI actions, knowledge, and data sync.

Connector Builder

Build custom connectors for any platform — no code, AI-assisted, or full code. The builder supports REST and GraphQL APIs, OAuth authorization code flow, webhook auto-registration with Stripe and simple signature schemes, pagination (offset, page, cursor, and link-header), list/error transforms, multi-action context, and marketplace packaging.

AI-assisted connector authoring

The ConnectorBuilderAI helps you build connectors: describe what you want and it suggests actions, writes request handlers, and maps API responses. Handles authentication, pagination, and error handling automatically.

OAuth flow for any connector

Generic in-app OAuth authorization flow that works with any connector. PKCE support, site-scoped state management, automatic token refresh. Connectors define their OAuth parameters and OpsIQ handles the flow.

Capability buses (platform-wide extension)

Connectors don't just add platform actions — they can power core features through capability "buses". A connector declares a capability (calendar, enrichment, esign in CRM; local_listing, rank_data in Site Intelligence; web_analytics in Analytics; payment_provider in Payments; email_sync in Mailbox; video_meeting in Comms) and implements its small method set; OpsIQ discovers it via CapabilityRegistry and wires it into the UI, the Customer 360 timeline, and the AI actions. Several connectors can offer the same capability with no lock-in. See connectors/PLATFORM_CONNECTORS.md.

Pre-installed vs marketplace tier

Connectors live in one of two tiers. Pre-installed connectors (connectors/) are registry-active out of the box — kept lean to just the keyless reference and the most-used provider per capability (e.g. Google Calendar, Gmail, Google Business Profile). Marketplace connectors (marketplace_connectors/) are discoverable but inert until installed — e.g. Microsoft 365 Calendar, Outlook, DocuSign, Stripe, GA4, SerpApi, Zoom. Every bridge surfaces a marketplace list so the UI and the AI can prompt "install from the marketplace" (notify-to-install) when a capability has no ready provider — never a broken button.

Connector marketplace

Publish your connectors to the OpsIQ marketplace. Package connectors with profile.json, knowledge.json, workflow_recipes.json, and signed archives. Marketplace supports free and paid connectors with multi-source billing.

Connector signing

All connectors are cryptographically signed for integrity verification. Signing is checked at install time. Use the resign_all_connectors tool to re-sign after updates.

SmartLookup

Declarative fuzzy-matching system for connector actions. Define lookup rules and OpsIQ matches user queries to platform entities using fuzzyScore and smartRank algorithms. Example: find_country("germ") matches Germany with 88.9% confidence.

Action contracts

Connectors declare actions with typed parameters, authentication requirements, pagination rules, and response transforms. Over 1,200 HTTP actions across all connectors, all executable through the unified ActionExecutor.

Connector recipes

Pre-built workflow recipes that combine multiple connector actions into common business workflows. Example: "When a new order comes in on Shopify, create a ticket, update the CRM, and send a Slack notification."

Knowledge sync

Connectors declare knowledge topics that sync to the AI knowledge base. Platform-specific help articles, setup guides, and troubleshooting steps are automatically available to the AI without manual knowledge entry.

Developer platform

REST API

Full API for visitors, events, tickets, contacts, settings, and connector operations. API key authentication, rate limiting, and JSON request/response format. OpenAPI specification available.

Webhooks

Outbound webhooks for all major events: orders, invoices, subscriptions, tickets, chats, leads, user registrations, and cart abandonment. Async delivery via job queue, exponential backoff retry, SSRF protection, and auto-disable after 15 consecutive failures.

Webhook signing

Every outbound webhook is signed with HMAC-SHA256. Verify signatures on your receiving end to ensure webhook authenticity. Stable event_id for idempotent processing.

Widget SDK

JavaScript SDK for the tracking widget with identity resolution, custom event tracking, programmatic chat control, and page-specific configuration. Install recipes for React, Vue, Next.js, WordPress, Shopify, and static HTML.

Plugins and SDKs

Server-side SDKs and plugins for common frameworks. WordPress plugin, WHMCS module, and generic PHP/Node.js integration libraries.

Events API

Push custom events into OpsIQ from your backend: purchases, signups, feature usage, errors, or any business event. Events appear in the visitor timeline and feed into analytics and AI context.

Triggers cookbook

Build automated workflows triggered by events: new ticket, chat started, visitor identified, deal stage changed, or custom event. Triggers execute connector actions, send webhooks, update records, or notify your team.

API builder

Visual API and webhook builder inside the admin. Configure endpoints, test requests, inspect responses, and debug integrations without leaving OpsIQ.

Team and administration

Role-based access control

Three roles: Owner (full access, billing, danger zone), Full Admin (all operations except billing and danger zone), and Agent (only assigned departments, no settings access). All sensitive pages are hard-gated by role.

Team performance dashboard

Owner and Full Admin-only dashboard showing resolution times, workload distribution, handle depth, channel breakdown, trend analysis, SLA compliance, CSAT by agent, reopen rates, team rollups, and busiest hours. Updated in real time.

Admin presence and online tracking

Real-time who-is-online widget in the admin navigation. Heartbeat-based presence detection (60-second ping, 300-second extend, auto-prune after 120 days). See which admins are currently active and on which pages.

Per-workspace settings

Each connected site (workspace) can have its own AI configuration, connector settings, ticket departments, branding, and operational rules. Global defaults cascade to workspaces that do not override them.

Multi-site management

Manage multiple websites from one OpsIQ admin. Each site has its own tracking snippet, visitor data, and configuration. Switch between sites from the admin navigation.

Email template system

Registry-driven email templates for all automated communications: ticket notifications, chat transcripts, welcome emails, password resets, and system alerts. Edit HTML templates with live preview, variable chips ({{customer_name}}, {{ticket_id}}), and global layout control.

Import and export

Import contacts, tickets, and knowledge articles from CSV/JSON. Export visitor data, analytics reports, and CRM records. Data portability for migration between systems.

Security, compliance, and operations

Enterprise SSO

OIDC (OpenID Connect) single sign-on with full runtime: discovery, authorize, callback, JWKS signature verification, userinfo, domain allow-listing, JIT provisioning, and status guards. SAML configuration support.

GDPR and data compliance

Built-in DSAR (Data Subject Access Request) handling: export and delete customer data across all systems. Contact-level data erasure covering sessions, tickets, chats, CRM records, and email logs. Consent management and retention policies.

IP blocking and brute-force protection

Block specific IPs or ranges from accessing your site or admin. Automatic lockout after configurable failed login attempts. Failed login log with IP, timestamp, and user agent.

HSTS and security headers

HTTP Strict Transport Security, Permissions-Policy headers, and secure cookie configuration. Self-hosted deployments can add CSP headers through server configuration.

Outbound webhook hardening

SSRF guard blocks webhooks to private/metadata IP ranges. Async delivery prevents slow endpoints from blocking your application. Auto-disable after 15 consecutive failures prevents resource waste on dead endpoints.

Workspace isolation

Strict data isolation between workspaces. Visitors, tickets, chats, CRM records, and AI conversations are scoped to their workspace. Cross-workspace data leaks are prevented at the query layer.

Billing cycle management

Support for monthly, quarterly, semi-annual, yearly, biennial, and lifetime billing cycles. Currency normalization for multi-currency gateways. FX conversion on payment receipt for accurate revenue reporting.

Cron and scheduled automation

Built-in cron system for scheduled tasks: report generation, data cleanup, subscription renewals, AI training updates, connector syncs, and webhook retries. Health diagnostics with warning indicators.

Data retention policies

Configure how long visitor sessions, chat transcripts, AI conversation history, and event logs are retained. Automatic cleanup of aged data to manage storage and comply with retention policies.

Diagnostics and health

System health dashboard showing cron status, database connectivity, AI provider status, connector health, webhook delivery rates, and storage usage. Warnings for configuration issues and performance bottlenecks.

Who OpsIQ is for

E-commerce stores

Stores

Track every visitor from landing to purchase. Let AI answer "Where is my order?" using live Shopify/WooCommerce/BigCommerce data. Manage support tickets with AI auto-reply. Run a deal pipeline for wholesale and B2B leads. Attribute revenue to traffic sources and campaigns. Monitor cart abandonment with recovery workflows.

SaaS and software companies

SaaS

Monitor trial signups and feature adoption with session replay. Track which documentation pages convert. Automate support with AI grounded in your API docs. Manage subscription revenue and expansion deals in the CRM. Connect your billing platform (Stripe, WHMCS) for real-time MRR tracking. Use the CRM lifecycle agent to detect and prevent churn.

Agencies and freelancers

Agency

Offer white-label analytics and support portals to clients. Track leads across multiple client sites from one admin. Use the CRM pipeline to manage prospects and project leads. Build custom connectors for client platforms using the Connector Builder. Generate branded SEO reports with Site Intelligence. Resell marketplace connectors as value-add services.

Hosting and infrastructure

Hosting

Deep WHMCS integration with 80+ AI actions for order lookup, service management, DNS, and provisioning. Auto-reply to common hosting questions using knowledge base articles. Track server status page engagement. Manage technical support tickets with AI triage. Use the billing cycle ladder for monthly through lifetime hosting plans.

Support-heavy businesses

Support

Deflect 40-70% of repetitive questions with AI chat grounded in your knowledge base. Route tickets to the right department with AI triage. Track team performance with resolution times, SLA compliance, and CSAT by agent. Use the writing AI for professional reply drafting. Monitor support trends with AI insights.

Marketing and SEO teams

Marketing

Full Site Intelligence suite: crawls, technical SEO audits, content analysis, SERP rank tracking, keyword research, backlink monitoring, and local SEO grid. Google Business Profile management. Scheduled white-label reports for clients. A/B testing built into the tracking widget. Campaign attribution across all channels.

Solo founders and small teams

Startups

Start with just tracking and chat — free to add. Then add tickets when you get support volume. Turn on the CRM when you start selling. Connect platforms as you adopt them. OpsIQ scales from one person doing everything to a 50-person operations team with RBAC, departments, and per-agent performance tracking.

Enterprise and multi-brand

Enterprise

Enterprise SSO with OIDC for centralized authentication. Multi-workspace isolation for separate brands or divisions. Per-workspace AI configuration with different providers and models. Custom connector development with marketplace distribution. Audit trails, GDPR compliance tools, and data retention policies.

What OpsIQ replaces

Google Analytics + Hotjar + Plausible

Full website analytics with visitor tracking, session replay, page rankings, geo intelligence, intent funnels, conversion attribution, events, A/B experiments, and JS error tracking — all privacy-friendly, all in one platform.

Intercom + Drift + Tidio

AI-powered customer chat with knowledge grounding, multi-provider AI support, auto-handoff to humans, proactive chat rules, conversation history, CSAT surveys, and ticket creation from chat.

Zendesk + Freshdesk + Help Scout

Native ticket system with departments, priorities, SLA, AI triage, auto-reply with configurable delay, email ingestion, ticket embed, ticket merging, inbox copilot, and Return to AI capability.

HubSpot + Pipedrive + Salesforce

AI-first CRM with four specialized AI agents (Steward, SDR, Retention, Analyst), Trust Dial autonomy control, pipeline board, deal coaching, forecasting, sequences, lifecycle management, and natural language CRM configuration.

Ahrefs + SEMrush + Moz

Site Intelligence with automated crawls, technical SEO audits, content analysis, AI search, SERP rank tracking, keyword research, backlink analysis, local SEO grid, and scheduled white-label reports.

Zapier + Make + custom middleware

Connector SDK with 25+ pre-built connectors, Connector Builder (no-code/AI-assisted/full-code), OAuth flow, webhook auto-registration, 1,200+ executable actions, SmartLookup, marketplace, and signed packages.

Google Business Profile manager

Full GBP connector: review management, post publishing, Q&A management, photo uploads, business info sync, insights tracking, and AI-powered review responses — all from inside OpsIQ.

Separate email template tools

Registry-driven email templates with visual editor, live preview, variable chips, global layout control, and per-event customization for all automated communications.

Team management dashboards

Built-in team performance: resolution times, workload, SLA compliance, CSAT by agent, reopen rates, busiest hours, real-time presence tracking, and per-department breakdowns.

GDPR compliance tools

Native DSAR handling, data erasure across all systems, consent management, retention policies, and audit trails — built into the platform, not bolted on.

Two editions

Cloud edition

Hosted by OpsIQ. Sign up, connect your website, and start using immediately. Updates, infrastructure, managed AI, and backups are handled for you. Ideal for teams that want zero server management.

Self-hosted module

Install OpsIQ on your own server for full control over data, branding, updates, and integrations. Requires PHP 8.1+, MySQL 5.7+, HTTPS, and cron. Supports WHMCS integration as an addon module. Full data sovereignty.

Recommended reading order

1
Quick start

Follow the 30-minute setup guide to get tracking, chat, and basic AI working on your website.

2
Dashboard and analytics

Learn how to read your visitor data, set up session replay, identify leads, and understand traffic patterns.

3
Site Intelligence

Run your first SEO crawl, check your technical health, and set up SERP rank tracking for your target keywords.

4
Tickets and support

Set up departments, configure auto-reply with AI, connect email ingestion, and train your AI to handle common questions.

5
CRM

Organize contacts, build your pipeline, configure the AI agents, set Trust Dial levels, and let AI coach your deals.

6
Connectors and developer tools

Connect your e-commerce/billing platform, build custom connectors, set up webhooks, and integrate via the REST API.

💡
New to OpsIQ? Start with the Quick Start guide below. You can have tracking and basic AI chat running in under 30 minutes.
Start here

Quick start in 30 minutes

Follow these steps in order to get OpsIQ running. Each step builds on the previous one. By the end, you will have visitor tracking, AI chat, and basic ticket support.

Setup
Quick start checklistA guided setup checklist showing widget install, platform connect, AI training, team invite and go-live, with a 60 percent progress bar.Get startedsetupInstall the OpsIQ widgetDONEConnect a platform (WHMCS, Shopify...)DONETrain your AI on your contentDONEInvite your teamCheck and go liveSetup progress3 of 5 — 60%1STEP 1Install the widget2STEP 2Connect & train AI3STEP 3Invite & go live
The 30-minute path: install the widget, connect a platform, train your AI, invite the team, then go live.

The 30-minute setup

1
Activate your license

Enter your license key in the OpsIQ admin. If you are on the cloud edition, this is done automatically when you sign up. Self-hosted users: go to Settings, enter your license key, and click Activate. You should see a green "Active" badge.

2
Set your business identity

Go to Settings and fill in your business name, industry, timezone, default currency, and support hours. This information is used by the AI when answering customer questions and by analytics for timezone-aware reports.

3
Choose an AI provider

Go to AI Configuration and select your provider. Options: Claude (Anthropic), GPT-4o (OpenAI), Gemini (Google), or Grok (xAI). Enter your API key if using your own key, or use Managed AI if available on your plan. Click "Test connection" to verify.

4
Install the tracking widget

Go to Connected Sites, copy the tracking snippet, and paste it before the closing </body> tag on your website. Visit your site in a private browser, then check the Live Feed in OpsIQ — you should see yourself as a visitor within 15 seconds.

5
Connect your platform

If you use Shopify, WooCommerce, WHMCS, or another supported platform, go to Connectors, find your platform, enter credentials, and click Test Connection. This gives the AI access to order data, customer profiles, and support context.

6
Invite your team

Go to Team, click Invite, enter their email and role (Owner, Full Admin, or Agent). Agents can only access departments you assign them to. Owners and Full Admins see everything.

The fastest possible path (5 minutes)

Step 1: Install widget

Copy the snippet from Connected Sites and paste it on your website. This gives you tracking immediately.

Step 2: Enable AI

Go to AI Configuration, pick a provider, enter your key, and save. AI chat is now active on your website.

Done

You now have visitor tracking and AI chat. You can add tickets, CRM, and connectors later.

Day 2: Make it useful

Add knowledge

Go to Knowledge Base and add 5-10 articles about your most common questions. The AI uses these to answer customers accurately.

Create departments

Go to Tickets and create at least 2 departments (e.g., "Sales" and "Support"). Assign team members to each.

Write your AI prompt

Go to AI Training and write a Customer AI prompt that describes your business, tone, and escalation rules.

Test a conversation

Open your website in a private browser and chat with the AI as a customer. Check that answers are accurate and tone is right.

Week 1: Build your operations

Connect email

Set up a mailbox (Gmail, IMAP, or a provider connector) so customer emails automatically create tickets.

Set up auto-reply

Enable ticket auto-reply for safe departments. Set a 2-minute delay so humans can intervene first.

Review analytics

Check Dashboard daily. Look at visitor count, bounce rate, top pages, and sales if tracking is connected.

Start your CRM

Open AI CRM and let OpsIQ import contacts from your connected platforms. Review the pipeline board.

Month 1: Optimize

Review AI history

Check AI History weekly. Look for wrong answers, missed questions, and opportunities to add knowledge.

Add proactive rules

Create a rule: if a visitor is on the pricing page for 60+ seconds, show a chat message asking if they need help.

Build a connector

If you use a platform that does not have a built-in connector, use the Connector Builder to create one.

Set up webhooks

Connect OpsIQ to your internal tools using outbound webhooks for ticket, chat, and sales events.

Can I skip the AI and just use tracking?+

Yes. The AI provider is optional. OpsIQ works as a pure analytics and ticketing platform without AI. You can enable AI later when you are ready.

Can I skip connectors and add them later?+

Yes. Connectors enrich the AI with platform-specific data, but OpsIQ works without them. Start with tracking and chat, then connect platforms when needed.

What if I do not have a website yet?+

You can still use OpsIQ for tickets, CRM, and team collaboration. The tracking widget is optional. Add it when your website is ready.

How do I know if the widget is installed correctly?+

Visit your website in a private/incognito browser. Then check OpsIQ Live Feed. You should see your visit appear within 15 seconds. If not, check: (1) is the snippet pasted correctly, (2) is the site key correct, (3) are ad blockers or CSP headers blocking the script.

Start here

Complete product map

OpsIQ is not one feature. It is an operator admin, a website widget, an AI support layer, a ticket/helpdesk system, a full CRM with four AI agents, a Site Intelligence suite, a connector platform with marketplace, and a developer surface. Here is every component it contains.

Operator admin

Dashboard, live feed, visitor log, sessions, session replay, top pages, geo intelligence, intent funnel, events log, A/B experiments, JS error tracking, sales and conversions, leads, AI CRM (command center, contacts, companies, deals, pipeline board, deal coaching, forecast, prospecting, sequences, lifecycle, data steward, Build my CRM, CRM config, CRM health, CRM API), tickets, chat inbox, proactive rules, CSAT surveys, email drafts, mailboxes, AI configuration, AI training, AI history, AI insights, knowledge base, connectors, Connector Builder, marketplace, connected sites, team management, team performance, settings, diagnostics, and license.

Customer-facing surfaces

Website tracking widget (analytics beacon + chat + ticket embed + knowledge base search), client AI chat, ticket submission portal, visitor identity token handling, file uploads, CSAT survey widget, and customer-facing help center.

AI-First CRM

Command center, contacts, companies, deals, pipeline board with drag-and-drop, AI deal coaching (risk signals, next-best-action, win probability), revenue forecasting, prospecting agent (SDR), automated follow-up sequences, lifecycle and retention management, data steward agent (dedup, enrich, validate), Build my CRM (natural language setup), CRM configuration, CRM health check, Trust Dial (Autopilot/Copilot/Manual per agent), four specialized agents (Steward, SDR, Retention, Analyst), and CRM API with webhooks.

Site Intelligence suite

Automated site crawls, technical SEO audit (speed, mobile, Core Web Vitals, SSL, redirects, structured data), content audit (word count, readability, keyword density, heading structure), AI-powered semantic search, SERP rank tracking across engines, keyword research with opportunity scoring, backlink analysis and monitoring, local SEO grid visualization, Google Business Profile sync (reviews, posts, Q&A, photos, insights), scheduled reports (daily/weekly/monthly), and white-label PDF output for agencies.

AI and automation

Customer AI chat (multi-provider: Claude, GPT-4o, Gemini, Grok), admin AI assistant, AI knowledge grounding, auto-handoff with configurable revert, per-workspace AI configuration, managed AI and BYOK modes, token budgets and cost controls, AI history audit trail, AI insights analysis, ticket AI triage, ticket auto-reply with delay, writing AI (separate prompt), and admin inbox copilot.

Connectors and integrations

25+ pre-built connectors (Shopify, WooCommerce, BigCommerce, Magento 2, PrestaShop, OpenCart, osCommerce, WordPress, WHMCS, Zendesk, Stripe, Amazon SES, Postmark, Resend, SendGrid, Mailgun, Gmail, IMAP, Slack, Google Business Profile), Connector Builder (no-code/AI-assisted/full-code), generic OAuth flow with PKCE, connector marketplace with paid distribution, connector signing and verification, SmartLookup fuzzy matching, 1,200+ executable HTTP actions, knowledge sync, and workflow recipes.

Developer platform

REST API (visitors, events, tickets, contacts, settings, connectors), OpenAPI spec, API key management, outbound webhooks (async, signed, retried, SSRF-guarded, auto-disable), Events API for custom event ingestion, widget SDK with identity resolution, triggers cookbook, action contracts, connector SDK, marketplace packaging, server-side SDKs (PHP, Node.js), WordPress plugin, and WHMCS module.

Settings and operations

Business identity, AI configuration per workspace, tracking settings, security (HSTS, Permissions-Policy, IP blocking, brute-force protection), RBAC (Owner/Full Admin/Agent), team management and invitations, team performance dashboard, admin presence tracking, email template system (registry-driven, visual editor, variable chips), survey designer, domain knowledge, ticket embed configuration, branding, data retention policies, billing cycle management (monthly through lifetime), currency normalization, import/export, diagnostics, cron automation, and danger zone.

Security and compliance

Enterprise SSO (OIDC with JWKS verification, JIT provisioning), SAML configuration, GDPR/DSAR handling (export and delete across all systems), data erasure per contact, consent management, workspace isolation (strict query-layer scoping), audit trails, failed login tracking, IP blocking, outbound webhook SSRF guard, and data retention policies.

Provider bridge

Managed AI proxied through OpsIQ provider URL, Site Intelligence provider calls, license validation, health reports, PDF rendering, and data exports — all routed through the configured provider endpoint, not direct vendor API calls from your server.

Every admin page

Dashboard

Core

Daily command center: traffic overview, live visitor count, sales summary, support queue depth, AI activity alerts, and quick-action shortcuts.

Live feed

Analytics

Real-time visitor stream: page views, chat starts, form submissions, and intent signals updating every few seconds with country, device, and referrer filters.

Visitor log

Analytics

Complete visit records: device, browser, OS, country, city, referrer, UTM params, landing page, identity, and full page-view history.

Sessions

Analytics

Journey-grouped view: page flow, time on page, scroll depth, conversion path, and exit page for each visitor session.

Session replay

Analytics

Timeline playback of captured events: mouse movement, clicks, scrolls, page transitions, and form interactions for UX diagnosis.

Top pages

Analytics

Page performance ranking: visits, engagement time, bounce rate, conversions, support interactions, and trend direction.

Geo intelligence

Analytics

Geographic reports: country/city breakdown with maps, device distribution, browser share, traffic sources, and market penetration.

Intent funnel

Analytics

Behavioral intent tracking: pricing visits, return frequency, doc browsing, support interactions, and custom signals with conversion probability.

Events log

Analytics

Searchable event history: page views, custom events, chats, purchases, form submissions with full metadata and filtering.

A/B experiments

Analytics

Split testing: create variants, allocate traffic, define goals, measure significance, and declare winners — all from inside OpsIQ.

JS errors

Analytics

Frontend error capture: messages, stack traces, affected browsers, frequency, affected pages, and trend tracking.

Sales

Sales

Revenue dashboard: orders, renewals, refunds, attribution by source, campaign performance, period comparison, and trend analysis.

Leads

Sales

Lead management: scoring, source attribution, CRM status, contact details, behavioral signals, and pipeline routing.

AI CRM

CRM

Full CRM: command center, contacts, companies, deals, pipeline board, coaching, forecast, prospecting, sequences, lifecycle, data steward, and health.

Tickets

Support

Support inbox: departments, priorities, SLA tracking, AI triage, auto-reply, internal notes, file attachments, merging, and status management.

Chat inbox

Support

Live conversations: AI and human chat, handoff, collaboration, conversation history, customer identity, and CSAT collection.

Email drafts

Support

Email management: inbound mail to tickets, AI-assisted reply composition, template selection, and mailbox configuration.

AI config

AI

Provider setup: select Claude/GPT-4o/Gemini/Grok, enter API key or enable managed AI, set model, temperature, and token budgets per workspace.

AI training

AI

Prompt authoring: customer-facing and admin-facing prompts, escalation rules, tone guidelines, prohibited topics, and boundary configuration.

AI history

AI

Conversation audit: full request/response logs, token usage, cost per conversation, provider, model version, and resolution outcome.

AI insights

AI

Pattern analysis: common questions, resolution rates, handoff frequency, satisfaction by topic, and training gap identification.

Knowledge base

AI

AI training content: articles, FAQ entries, product docs, connector knowledge, and custom entries. Semantic and keyword search for AI grounding.

Connectors

Integrations

Integration hub: installed connectors, health status, action inventory, credential management, marketplace browser, and Connector Builder.

Connected sites

Settings

Site management: tracking snippet, site key, widget configuration, domain settings, and per-site workspace isolation.

Team

Settings

User management: invite members, assign roles (Owner/Full Admin/Agent), set department access, and manage permissions.

Team performance

Settings

Ops metrics: resolution times, workload, SLA compliance, CSAT by agent, reopen rates, busiest hours, and trend analysis.

Settings

Settings

Configuration: business identity, AI setup, tracking, security, branding, retention, email templates, billing, import/export, diagnostics, and danger zone.

License

Settings

Plan management: license status, plan features, usage metrics, renewal date, and upgrade/downgrade options.

Analytics

The Dashboard

The Dashboard is your daily command center. It shows traffic, sales, support load, AI activity, and conversion indicators in one view. Open it every morning to understand what happened overnight and what needs attention today.

Dashboard
Overview dashboardThe Overview screen led by an OpsIQ Intelligence AI panel (with Daily brief, Smart alerts, Forecast), KPI widget tiles and a seven-day traffic widget, plus a Reset layout control.OverviewworkspaceOPSIQ INTELLIGENCEPick an analysis and OpsIQ writes itDaily briefSmart alertsForecastReset layoutVISITORS TODAY2,481+12%REVENUE₦9,840k+5%OPEN TICKETS143 SLATraffic — last 7 days1AI-FIRSTOpsIQ Intelligence panel2WIDGETSKPI tiles you arrange3YOURSReset layout anytime
The real Overview screen: the OpsIQ Intelligence panel up top — pick an analysis and it writes it — above the KPI widgets you arrange yourself.

Dashboard cards explained

Live visitors

The number of people on your website right now. This updates every 15 seconds (configurable). A visitor is "active" if they loaded a page within the active threshold (default: 90 seconds).

Unique visitors

How many different people visited your website in the selected date range. OpsIQ identifies visitors by a combination of browser fingerprint, cookies, and (if available) authenticated identity.

New vs returning

New visitors are seeing your site for the first time. Returning visitors have been seen before. A high returning ratio means your content brings people back. A very low returning ratio might mean you are not retaining interest.

Bounce rate

The percentage of visitors who left after viewing only one page. A bounce rate above 70% on landing pages usually means the page is not meeting visitor expectations — wrong content, slow load, or poor mobile experience.

Average time on page

How long visitors spend on each page on average. Very short times (under 10 seconds) on content pages suggest the content is not engaging. Very long times on checkout pages might indicate confusion.

Threats blocked

IP addresses that OpsIQ identified as potentially malicious based on threat scoring, brute force attempts, or manual blocks. Click to see the blocked IPs list.

Sales today / this week / this month

Revenue from connected sales sources (Shopify, WooCommerce, Stripe, etc.). If sales show zero, check that your platform connector is connected and syncing.

Trend chart

A line graph showing visitor count over the selected date range. Look for patterns: traffic spikes (campaigns, press mentions), dips (weekends, holidays), and sustained trends.

Top sources

Where your visitors come from: direct, Google, social media, email campaigns, referral sites. Use this to understand which marketing channels are working.

Top browsers

Chrome, Safari, Firefox, Edge, and others. If a browser has unusually high bounce rate, you might have a CSS or JavaScript compatibility issue.

Hourly heatmap

A grid showing visitor activity by hour of day and day of week. Use this to decide when to schedule support shifts, when to send announcements, and when to run promotions.

Recent visitors

The last few visitors with country, page, device, and source. Useful for quick spot-checks during campaigns.

Using the date range filter

Click the date picker at the top right of the Dashboard. Presets: Today, Yesterday, Last 7 days, Last 30 days, This month, Last month, Custom range. All dashboard cards and charts update when you change the range. The date range is in your configured timezone (set in Settings).

Worked examples

Bounce rate spike investigation

Scenario:
Your bounce rate jumped from 45% to 78% this week. What happened?
What to do:

Check: (1) Did a specific landing page change? Go to Top Pages and sort by bounce rate. (2) Did a campaign send traffic to the wrong page? Check Top Sources for new referrers. (3) Did the site break on mobile? Check browser breakdown for mobile bounce rate. (4) Is it bot traffic? Check the Threats counter and visitor details for suspicious patterns.

Zero visitors on dashboard

Scenario:
The dashboard shows 0 live visitors even though your website is getting traffic.
What to do:

Check: (1) Is the tracking widget installed? View your website source code and search for the OpsIQ script. (2) Is the site key correct? Compare the data-site-key in the script with the key in Connected Sites. (3) Is a CDN or cache serving a stale page without the script? Clear your CDN cache. (4) Is an ad blocker or CSP header blocking the script? Check the browser console for blocked requests.

Reading the hourly heatmap

Scenario:
Your heatmap shows heavy activity between 10am-2pm on weekdays but nothing on weekends.
What to do:

This is a B2B traffic pattern. Your visitors are working professionals browsing during business hours. Implications: (1) Schedule support staff for weekday business hours. (2) Send email campaigns Tuesday-Thursday morning. (3) Weekend maintenance windows are safe. (4) Consider offering live chat only during peak hours.

Traffic spike from unknown source

Scenario:
You see a sudden spike of 500 visitors in one hour from an unknown referrer.
What to do:

Go to Visitors and filter by the time window. Check: (1) Are they real visitors or bots? Look at session duration, pages viewed, and browser diversity. (2) If real, what page are they landing on? (3) Check the referrer URL — someone might have linked to you from Reddit, Hacker News, or a popular blog. (4) If it is bot traffic, check Threats and consider blocking the IP range.

Why does my visitor count differ from Google Analytics?+

OpsIQ counts visitors differently. It uses browser fingerprinting and cookies, while GA uses a different cookie model. Bot filtering, ad blocker rates, and script loading order can also cause differences. A 10-20% variance is normal.

Can I embed the dashboard in another tool?+

The dashboard is designed for the OpsIQ admin. For external reporting, use the REST API to pull analytics data and display it in your own dashboard or BI tool.

What does the "threats" counter mean?+

It counts IP addresses that OpsIQ has flagged or blocked based on threat scoring, repeated failed logins, or manual blocks. Click the counter to see details and manage blocks.

Analytics

Visitor log

The Visitor Log shows every visit to your tracked websites. Each row is one page load from one visitor. Use it to investigate individual visitor behavior, find campaign traffic, and diagnose tracking issues.

Visitor log
Visitor logA visitor table with a filter bar (date, search IP/email/city, source, device) and columns for IP/email, location, source, device and time, with a flagged threat row.Visitor logyoursite.com7 daysSearch IP, email, city…Source ▾Device ▾IP / EMAILLOCATIONSOURCEDEVICEWHEN[email protected]US · New YorkgoogleDesktop2m41.62.10.4UK · LondondirectMobile6m[email protected]DE · Berlinutm:adsMobile14m203.0.113.9NG · LagosreferralDesktopthreat1–25 of 3,402Session →1FILTERDate · search · source · device2REAL COLUMNSIP/email · location · device · threat3DRILL INOpen the full session
The real Visitor Log: filter by date, search and device, then read every visit by IP/email, location, source, device and time — threats flagged in red.

What each row shows

IP address

The visitor's IP address. Anonymized if IP anonymization is enabled in Settings. Click to see all visits from this IP.

Country and city

Detected from the IP address using GeoIP data. Requires MaxMind GeoLite2 database or Cloudflare geo headers. Shows "Unknown" if GeoIP is not configured.

Page URL

The page the visitor loaded. Click to see the full URL. Long URLs are truncated in the table view.

Referrer

Where the visitor came from before landing on your site. "Direct" means no referrer (bookmarks, typed URLs, some app links).

Device and browser

The visitor's device type (desktop, mobile, tablet) and browser (Chrome, Safari, Firefox, etc.). Parsed from the User-Agent header.

Date and time

When the page was loaded, in your configured timezone.

Customer identity

If the visitor is identified (via identity token or login), their name or email appears. Otherwise shows as anonymous.

Filters

Date range

Filter visits to a specific time period. Default: last 7 days.

Search

Search by IP address, page URL, referrer, country, or customer email.

Source

Filter by traffic source: Direct, Organic, Social, Referral, Paid, Email.

Device

Filter by Desktop, Mobile, or Tablet.

New only

Show only first-time visitors who have never been seen before.

Worked examples

Find visitors from a specific campaign

Scenario:
You launched a Google Ads campaign with UTM parameter utm_source=google&utm_medium=cpc&utm_campaign=summer-sale. How do you find those visitors?
What to do:

In the Visitor Log, use the Search field and type "summer-sale". The search checks referrer URLs and page URLs, so UTM parameters will match. You can also filter by Source = Paid to narrow down further.

Find a customer who reported a problem

Scenario:
A customer emailed saying "your checkout page was broken yesterday around 3pm." How do you find their session?
What to do:

Search by their email address in the Visitor Log. If they were logged in, their identity will appear. Set the date range to yesterday. Look for visits to checkout pages around 3pm. Click their session to see the full page flow and any JavaScript errors.

Detect a loop hitter or scraper

Scenario:
You notice an IP address has 500+ visits in one hour, all to the same page.
What to do:

This is likely a bot, scraper, or broken script. Go to the Visitor Log and search by that IP. Check: (1) Are all visits to the same page? (2) Is the user agent a known bot? (3) Is the session duration always 0 seconds? If confirmed as a bot, go to Security and block the IP.

Visitor log vs Sessions vs Live feed

Visitor log

Raw page loads. One row per page view. Best for: investigating specific pages, finding traffic from specific sources, diagnosing tracking issues.

Sessions

Groups page views into journeys. One row per visit session. Best for: understanding user flow, measuring session duration, identifying conversion paths.

Live feed

Real-time activity. Shows visitors currently on your site. Best for: monitoring campaigns in progress, spotting high-intent visitors, watching support opportunities.

Why do I see my own visits in the log?+

OpsIQ tracks all visits by default. To exclude your own traffic, add your IP address to the excluded IPs list in Settings > Tracking.

Why does a visitor show "Unknown" country?+

GeoIP lookup requires either Cloudflare geo headers (automatic if using Cloudflare) or a MaxMind GeoLite2 database file. Check Settings > GeoIP Path to ensure the database file exists and is readable.

How long is visitor data kept?+

Visitor data is kept for the retention period configured in Settings (default: 90 days). After that, old records are automatically cleaned up by the cron retention job.

Analytics

Sessions

Sessions group multiple page views from the same person into a single journey. While the Visitor Log shows individual page loads, Sessions show you how people move through your website from landing to exit.

Sessions
SessionsThe Session Log table with IP, country, device, source, duration and pages columns, and a flagged threat row.Sessionsyoursite.comCountry (NG)Session LogIP(S)COUNTRYDEVICESOURCEDURATIONPAGES41.62.10.4UKDesktopgoogle3m 12s6102.89.6.2NGMobiledirect1m 05s388.21.4.9DEDesktoputm:ads7m 48s11203.0.113.9USMobilereferral0m 42s21SESSION LOGGrouped journeys2COLUMNSCountry · device · source · duration3THREATRisky sessions flagged
The real Session Log: every visitor journey as a row — IP, country, device, source, duration and pages — with risky sessions flagged in red.

How sessions work

A session starts when a visitor loads their first page. It continues as they navigate to more pages. A session ends when the visitor is inactive for the session timeout period (default: 30 minutes) or closes their browser. The same person returning after the timeout creates a new session.

What each session shows

First page

The landing page — where the visitor entered your site. This tells you which content is attracting people.

Last page

The exit page — where the visitor left. If the exit page is often the pricing page, visitors might be comparing you with competitors.

Page count

How many pages the visitor viewed in this session. More pages usually means more engagement, but it can also mean the visitor is lost.

Duration

Total time from first page load to last activity. Sessions with 0 seconds are bounces (single page view, no further interaction).

Source

The traffic source for this session (Direct, Google, social, referral, etc.).

Country

Detected country from the visitor's IP address.

Bounce

Whether the visitor left after viewing only one page. Bounced sessions have a red indicator.

Conversion

Whether the visitor completed a tracked conversion event (purchase, signup, form submission) during this session.

Filters

Search

Search by IP, email, page URL, or referrer within sessions.

Type

Filter by New visitors (first session ever) or Returning visitors.

Source

Filter by traffic source.

Country

Filter by country to see sessions from a specific region.

Threats/Bounced

Filter to show only bounced sessions or sessions flagged as threats.

Worked examples

Profile a high-value customer

Scenario:
A customer just made a large purchase. You want to understand their journey before buying.
What to do:

Search for their email in Sessions. Look at all their sessions: (1) How many times did they visit before buying? (2) Which pages did they view? (3) Did they use chat or open a ticket? (4) What was the total time from first visit to purchase? This tells you the typical buying journey for high-value customers.

Detect login from a new location

Scenario:
A customer usually logs in from Nigeria but you see a session from Russia.
What to do:

Search for the customer email in Sessions. Compare the country of recent sessions. If a session suddenly appears from an unusual country, it could be legitimate travel or a compromised account. Check: (1) Was there a failed login attempt before the successful one? (2) Did the IP change within the same session? Flag it for review if suspicious.

What is the difference between a session and a visitor?+

A visitor is a person (or browser). A session is one visit from that person. The same visitor can have many sessions over time. Sessions expire after the timeout period.

How does OpsIQ identify returning visitors?+

OpsIQ uses a combination of cookies, browser fingerprinting, and authenticated identity tokens. If a visitor clears their cookies and is not logged in, they will appear as a new visitor.

Analytics

Live feed

The Live Feed shows visitors currently on your website in real time. It updates automatically every 15 seconds (configurable). Use it during campaigns, product launches, and busy support periods to see what is happening right now.

Live feed
Live feedA real-time activity stream showing a live online-visitor count and a feed of recent visitor actions by country.Live feedyoursite.com37visitors online nowLive activitynowUS · viewing /pricing2sUK · started a chat5sDE · added to cart9sCA · completed signup1RIGHT NOWSee who is on-site2AUTO-REFRESHUpdates every 15s3ACTJump into a live chat
See who is on your site this second and what they are doing — refreshing automatically every 15 seconds.

How it works

The Live Feed polls your server at the configured refresh interval. Each row shows a visitor currently on your site: their current page, country, device, source, session duration, and page count. Green highlights indicate new activity since the last refresh. Click any visitor row to see their full session details.

Settings

Refresh interval

How often the live feed updates. Default: 15 seconds. Lower values (5-10s) give faster updates but use more server resources. Higher values (30-60s) are easier on the server but less real-time.

Active threshold

How long a visitor is considered "active" after their last page load. Default: 90 seconds. If a visitor loads a page and then reads it for 2 minutes without clicking, they disappear from the live feed after the threshold.

Pause button

Click Pause to stop auto-refresh. Useful when you want to read details without the list updating. Click Resume to restart.

Worked examples

Spot a hot lead during a campaign

Scenario:
You are running a product launch. A visitor just viewed your homepage, then features, then pricing, and is now on the checkout page.
What to do:

This is high-intent behavior. In the Live Feed: (1) Click the visitor to see their session. (2) If they start a chat, the AI will have their full journey context. (3) If they leave without buying, they become a lead in the Leads page. (4) Consider creating a proactive rule to show a chat message when visitors reach checkout.

Too many visitors from the same IP

Scenario:
You see 20 visitors from the same IP address, all on different pages.
What to do:

This could be: (1) An office with shared internet — check if the visits look like real humans (different pages, reasonable session durations). (2) A bot or scraper — check if sessions are very short (0-1 seconds) or hitting pages systematically. (3) A load test — if you are running automated tests, exclude the IP from tracking.

Why does the live feed show 0 visitors when my site has traffic?+

Check: (1) Is the widget script installed on your site? (2) Is the site key correct? (3) Has the active threshold passed? (4) Are visitors using aggressive ad blockers that block the tracking script?

Can I filter the live feed by country or device?+

The live feed shows all active visitors. For filtered views, use the Visitor Log or Sessions pages with their filter options. The live feed is intentionally simple for real-time monitoring.

Analytics

Top pages

Top Pages shows which pages on your website get the most traffic. It ranks pages by visits, engagement, conversions, and support activity. Use it to identify your best content, find underperforming pages, and discover pages that generate support questions.

Top pages
Top pagesA ranked list of the most-visited pages with horizontal visit bars and counts.Top pagesyoursite.comMost-visited pages/pricing3,402/2,910/docs1,740/blog/seo-guide980/signup6401RANKEDMost-visited pages2SIGNALSVisits & conversions3FINDPages that drive tickets
Your pages ranked by traffic and engagement, so you can spot top content and pages that generate support.

What each page shows

Page URL

The full URL path. Similar pages (e.g., product variants) are grouped if grouping is enabled.

Views

Total number of times this page was loaded in the selected date range.

Unique visitors

How many different people viewed this page (a person viewing the same page twice counts as 1 unique).

Bounce rate

Percentage of visitors who left your site after viewing only this page. High bounce on landing pages = problem. High bounce on "thank you" pages = normal.

Average time

How long visitors spend on this page on average. Very short = not reading. Very long on a form page = confusion.

Chat starts

How many chat conversations were started from this page. High chat starts on a product page means the product description might be unclear.

Support tickets

How many support tickets were created by visitors who were on this page. High ticket count = potential UX or content problem.

Worked examples

Find pages that drive support questions

Scenario:
Your support team keeps getting questions about shipping. Which page is failing?
What to do:

Sort Top Pages by "Support tickets" or "Chat starts" descending. Look for product or shipping pages with high counts. The page with the most support questions probably has unclear information. Fix the page content and monitor whether support questions decrease.

Find pages with high exit rate

Scenario:
You want to know where people leave your site most often.
What to do:

Sort by bounce rate descending. Ignore pages that are naturally exit points (thank you pages, confirmation pages). Focus on pages that should keep visitors engaged: product pages, pricing, features. These need better calls-to-action or clearer content.

Why does a page show 0 views even though I know it gets traffic?+

Check: (1) Is the tracking widget installed on that specific page? Single-page apps might not fire page views on route changes. (2) Is the page excluded in tracking settings? (3) Is a CDN serving a cached version without the tracking script?

Analytics

Geo intelligence

Geo Intelligence shows where your visitors come from by country, city, device, and source. Use it to understand your geographic markets, decide on language support, plan regional marketing, and detect suspicious traffic patterns.

Geo
Geo intelligenceA map of visitor locations beside a per-country bar ranking.Geo intelligenceyoursite.comVisitors by locationUSUKDECANG1MARKETSCountry, city, device2PLANLanguage & regions3WATCHSpot odd traffic
Where your visitors come from — by country, city and device — to size markets and spot unusual traffic.

What you see

Top countries bar chart

The top countries ranked by visitor count. Click a country to drill down to city-level data.

Country doughnut

Visual breakdown of traffic by country. Hover for percentages.

Full country table

Every country with visitors in the selected period, showing visitor count, session count, bounce rate, and conversion rate.

City drill-down

Click a country to see which cities within that country have the most visitors.

How GeoIP detection works

OpsIQ detects visitor location in two ways: (1) Cloudflare geo headers — if your site is behind Cloudflare, country detection is automatic and accurate. (2) MaxMind GeoLite2 database — download the free database and configure the path in Settings. City-level detection requires the GeoLite2-City database, not just the Country database.

VPN and proxy traffic

Visitors using VPNs will appear to come from the VPN server's location, not their real location. This is by design — OpsIQ cannot and should not try to bypass VPNs. If you see unusual country patterns, consider that 10-20% of visitors may be using VPNs.

Worked examples

Unexpected country traffic

Scenario:
You run a US-only business but 30% of traffic is from India.
What to do:

Check: (1) Are these real visitors? Look at session duration and pages viewed. Very short sessions with high bounce = likely bots. (2) Are they finding you through Google? Check the referrer. (3) Could they be potential customers in a new market? If the traffic is genuine and engaged, consider adding India-specific pricing or content.

Deciding on language support

Scenario:
You want to know if you should translate your site into Spanish.
What to do:

Look at the Geo Intelligence page. If Spanish-speaking countries (Spain, Mexico, Colombia, Argentina, etc.) together represent more than 10% of your traffic with low bounce rates, translation is worth considering. Also check: do visitors from these countries convert at similar rates to your primary market?

Regional support shift planning

Scenario:
You need to decide support team hours for different time zones.
What to do:

Use the hourly heatmap (on Dashboard) combined with Geo Intelligence. If 40% of your traffic is from Europe and 35% from the US, you need coverage for both time zones. The heatmap shows exactly when each region is most active.

Country with visits but no orders

Scenario:
Germany shows 500 visitors this month but zero sales.
What to do:

Investigate: (1) Are they bouncing on the pricing page? Maybe your pricing is not competitive for that market. (2) Do you ship to Germany? Check if your shipping page mentions Germany. (3) Is your checkout available in EUR? Currency mismatch causes abandoned checkouts. (4) Are these visitors from a single source that might be low-intent traffic?

Why does a visitor show "Unknown" country?+

GeoIP is not configured. Either set up Cloudflare (which adds geo headers automatically) or download the MaxMind GeoLite2 database and set the file path in Settings > GeoIP Path.

Can I block traffic from specific countries?+

OpsIQ does not block by country. Use your web server or Cloudflare firewall rules for country-based blocking. OpsIQ focuses on visibility, not access control at the network level.

Analytics

Intent funnel

The Intent Funnel classifies visitor sessions by what they seem to be trying to do: browse, research, compare, buy, get support, or leave. Use it to understand the balance of intent on your site and identify where visitors drop off.

Intent funnel
Intent funnelA funnel from Browse to Research to Compare to Buy with counts, plus support and leaving chips.Intent funnelyoursite.comBrowse — 8,200Research — 4,100Compare — 1,650Buy — 520Support 6%Leaving 11%1CLASSIFYWhat visitors want2STAGESBrowse to buy3FIXFind the drop-off
Sessions classified by intent — browse, research, compare, buy — so you can see exactly where people drop off.

Intent categories

Browsing

Visitors casually looking around. Short sessions, few pages, no specific goal detected.

Researching

Visitors reading product/feature pages, docs, or blog content. Longer time on page, multiple content pages.

Comparing

Visitors viewing pricing, plan comparison, or feature tables. Often returning visitors.

Buying

Visitors on checkout, cart, or signup pages. High intent — these are your conversion opportunities.

Support-seeking

Visitors on help pages, contact pages, or starting chat. They need assistance.

Bouncing

Visitors who left after one page. Low engagement.

How to read the funnel

Interpreting your funnel

Scenario:
1,000 visitors viewed Pricing. 270 opened chat. 92 started checkout. 64 paid. 18 opened support tickets.
What to do:

Pricing page is strong enough to create intent. Chat is important in the buying path — 27% of pricing visitors engage with chat before buying. Support tickets after checkout may indicate activation or payment confusion. Action: (1) Ensure AI chat answers pricing questions well. (2) Investigate the 18 post-checkout support tickets for common issues.

Time filters

Use the date range filter to compare intent patterns across periods. For example, compare Black Friday week to a normal week — you should see a spike in "Buying" intent and possibly "Support-seeking" if your promotions created confusion.

How does OpsIQ classify intent?+

OpsIQ looks at page URLs, session behavior, and time patterns. Pricing pages signal comparison intent. Checkout pages signal buying intent. Help/contact pages signal support intent. The classification is heuristic-based, not AI-driven.

Can I customize the intent categories?+

Not currently. The categories are built-in based on common web behavior patterns. Custom intent classification is on the roadmap.

Analytics

Session replay

Session Replay lets you watch a timeline of what a visitor did on your site: which elements they clicked, how they scrolled, where they hovered, and what they typed (with sensitive fields masked). Use it to diagnose UX problems, verify bug reports, and understand customer confusion.

Session replay
Session replayA replay player showing a page viewport with a cursor, a session info panel, and a timeline scrubber.Session replayyoursite.comBuy nowSESSIONDuration 3m 12s14 clicksUS · DesktopChrome 1241WATCHClicks, scroll, type2MASKEDSensitive fields hidden3DIAGNOSEVerify bug reports
Replay exactly what a visitor did — clicks, scrolls, typing (sensitive fields masked) — on a timeline scrubber.

Finding the right session

From the Sessions page, look for sessions with reported issues, high page counts with no conversion, or sessions from customers who filed support tickets. Click the replay icon to open the timeline view.

What replay shows

Timeline

A horizontal bar showing events over time. Click anywhere on the timeline to jump to that moment.

Page navigation

Each page load appears as a segment on the timeline. You can see the exact path the visitor took.

Clicks

Click events are shown as dots on the timeline and as highlights on the page reconstruction.

Scrolling

Scroll depth is tracked so you can see how far down the visitor read.

Form interaction

Field focus and typing events are recorded. Text input in password and sensitive fields is masked by default.

Privacy and masking

Session replay masks sensitive form fields by default. Password fields, credit card inputs, and fields marked with data-opsiq-mask are never recorded. You can configure additional masking rules in Settings > Tracking. If your compliance policy requires it, you can disable replay entirely.

Diagnosing a broken checkout

Scenario:
A customer says "I tried to buy but the button did nothing."
What to do:

Find their session in the Sessions page (search by email). Open the replay. Watch the checkout page segment. Look for: (1) Did they click the right button? (2) Did a JavaScript error occur? (Check the JS Errors page for that time.) (3) Did the page reload or show an error message? (4) Was a required field empty? The replay shows exactly what happened.

How much storage does session replay use?+

Replay data grows with traffic volume. Use retention settings to automatically clean up old replay data. For high-traffic sites, consider a shorter replay retention period (e.g., 30 days) to manage storage.

Can visitors opt out of replay?+

If "Respect Do Not Track" is enabled in Settings, visitors with DNT headers are not recorded. You can also exclude specific pages from replay in the tracking settings.

Analytics

Events log

The Events Log shows every event that OpsIQ has recorded: page views, clicks, chat starts, ticket creations, sales, and custom events. Use it to debug integrations, verify webhook delivery, and understand the sequence of actions.

Events log
Events logA chronological event log with colour-coded type badges: pageview, chat, sale, webhook and custom.Events logyoursite.compageviewUS · /pricing12:04:01chat.startUK · widget opened12:04:09sale₦58,800 · order #104212:05:22webhookpayment.succeeded12:05:23customdemo_booked12:06:101EVERYTHINGEvery recorded event2DEBUGVerify webhook delivery3ORDERSee the exact sequence
A timeline of everything OpsIQ records — pageviews, chats, sales, webhooks, custom events — for debugging and audit.

Built-in events (automatic)

pageview

Fired every time a tracked page loads. Includes URL, title, referrer, and timestamp.

chat.started

Fired when a visitor opens the chat widget and sends their first message.

chat.message

Fired for each message in a chat conversation (both visitor and AI/agent).

ticket.created

Fired when a new support ticket is created (from chat, email, widget, or admin).

ticket.replied

Fired when a reply is added to a ticket.

order.completed

Fired when a purchase is completed through a connected platform.

form.submitted

Fired when a tracked form is submitted (if form tracking is enabled).

identify

Fired when a visitor is identified via an identity token.

security.login_failed

Fired when a login attempt fails.

Custom events

You can send custom events from your website or server to OpsIQ. Custom events are useful for tracking actions specific to your business: button clicks, feature usage, video plays, downloads, etc.

JavaScript — custom event from browser
// Send a custom event from the browser
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "plan_selected", {
  plan: "pro",
  billing: "annual",
  value: 99
}]);
PHP — record a contact activity from your server
// Record a server-side activity for a contact (PHP)
$ch = curl_init("https://your-opsiq-domain.com/api/v1.php");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer opq_your_key",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "action" => "crm.activities.record",
        "site_key" => "site_abc123",
        "email" => "[email protected]",
        "event" => "subscription.upgraded",
        "value" => 50,
        "currency" => "USD",
    ]),
]);
$response = curl_exec($ch);
curl_close($ch);

Filtering events

Event type

Filter by specific event names: pageview, chat.started, ticket.created, etc.

Date range

Show events from a specific time period.

Search

Search event data by keyword (URL, email, event property values).

How long are events kept?+

Events follow the retention policy set in Settings. Default: 90 days. High-value events (purchases, security events) can be configured with longer retention.

Can I use events in A/B experiments?+

Yes. When creating an experiment, you choose a conversion event. Any built-in or custom event can be used as the conversion goal.

Analytics

A/B experiments

Experiments let you test two versions of a page or feature and measure which one performs better. OpsIQ tracks impressions, conversions, and statistical significance.

A/B experiments
A/B experimentsTwo variant cards comparing conversion rates, with a winner badge and significance on the leading variant.A/B experimentsyoursite.comVariant A4.2%conversion · 1,020 viewsVariant BWINNER6.8%conversion · 1,005 views+62% lift · 96% significant1TESTTwo variants head-to-head2MEASUREConversions & significance3DECIDEDeclare a winner
Run two variants, watch conversions and statistical significance, and declare the winner.

How experiments work

1
Create an experiment

Give it a name, define your primary metric (conversion event), and set the variants (control and test).

2
Run it

OpsIQ randomly assigns visitors to variants and tracks their behavior. Do not change the experiment while it is running.

3
Read the results

After enough data is collected, check confidence level. 95% confidence means you can be 95% sure the difference is real, not random chance.

Experiment states

Draft

Created but not yet started. You can still edit variants and metrics.

Running

Actively assigning visitors to variants. Do not edit while running.

Completed

Reached statistical significance or was manually stopped. Results are final.

Archived

Results have been reviewed and the experiment is no longer needed in the active list.

Best practices

Define your metric before launch

Decide what you are measuring before starting. Choosing a metric after seeing results introduces bias.

Exclude internal traffic

Add your team's IP addresses to the exclusion list so staff visits do not skew results.

Run long enough

Do not stop an experiment after 100 visitors. You need hundreds or thousands of visitors per variant for reliable results.

Test one change at a time

If you change the headline AND the button color, you will not know which change caused the improvement.

Record your decision

After the experiment ends, note which variant won and why you chose to implement it.

How many visitors do I need for a valid experiment?+

It depends on the baseline conversion rate and the effect size you want to detect. As a rule of thumb: at least 500 visitors per variant for a 20% effect size. For smaller effects, you need thousands.

Can I run multiple experiments at the same time?+

Yes, but be careful. If two experiments affect the same page, their results may interact. It is safer to run experiments on different pages or features simultaneously.

Analytics

JavaScript errors

JavaScript Errors collects client-side errors from your website visitors. A broken button, a failed API call, or a missing resource shows up here. Use it to find and fix bugs that affect real customers.

JS errors
JavaScript errorsA list of captured front-end errors with severity dots, source file, browser and occurrence counts.JavaScript errorsyoursite.comRecent errorsTypeError: cannot read x of undefinedcheckout.js:42 · Chrome×214404 loading /assets/app.cssindex · Safari×88Uncaught (in promise) NetworkErrorapi.js:17 · Firefox×51Deprecation warning: unload eventvendor.js · Edge×331CAPTUREClient-side errors2IMPACTCounts & browsers3FIXSquash real bugs
Real visitors hitting broken code surface here — message, source, browser and how often — so you can fix what matters.

What each error shows

Error message

The JavaScript error text (e.g., "TypeError: Cannot read properties of undefined").

Page URL

Which page the error occurred on.

Browser and device

Which browser and device type saw the error. Some errors are browser-specific.

Stack trace

The code location where the error occurred. Click to expand the full stack trace.

First seen

When this error first appeared.

Last seen

When this error most recently occurred.

Count

How many times this error has been recorded.

Affected sessions

How many different visitor sessions experienced this error.

Prioritizing errors

Not all JavaScript errors need immediate attention. Prioritize by: (1) errors on critical pages (checkout, signup, login), (2) errors with high session counts, (3) errors that appeared recently (possible regression from a code change), (4) errors on your own code (not third-party scripts).

Fixing a broken checkout button

Scenario:
The JS Errors page shows "TypeError: Cannot read properties of undefined (reading submit)" on /checkout, affecting 45 sessions this week.
What to do:

This means 45 real customers could not complete checkout. Steps: (1) Open the page in the same browser/device combination. (2) Open browser console and reproduce the error. (3) Check the stack trace to find the exact line of code. (4) Fix the bug, deploy, and monitor the error count going to zero.

Does OpsIQ capture errors from third-party scripts?+

Yes, OpsIQ captures all JavaScript errors on the page, including errors from analytics scripts, chat widgets, and ad scripts. Filter by URL in the stack trace to focus on your own code.

How do I exclude known harmless errors?+

You cannot suppress specific errors in OpsIQ, but you can filter the list by page URL or error message. Fix or ignore errors from browser extensions (they often show as errors from unknown sources).

Sales

Sales and conversions

Sales tracking connects your store or billing platform to OpsIQ so you can see revenue alongside visitor behavior. Every purchase is attributed to a visitor journey so you know which pages, campaigns, and channels drive revenue.

Sales
SalesThe Sales screen: a revenue total with an All-time period control, a search, and a Recent Purchases table (date, customer, platform, amount, source).Salesyoursite.comREVENUE₦50,616,000+18%All time ▾Search email, IP, Order ID…Recent PurchasesDATECUSTOMERPLATFORMAMOUNTSOURCEJun 3[email protected]Shopify₦58,800googleJun 3[email protected]WooCommerce₦154,800directJun 2[email protected]Stripe₦576,000ads1REVENUEOrders & renewals2RECENT PURCHASESDate · customer · amount3ATTRIBUTEDTo the traffic source
The real Sales screen — revenue up top, then Recent Purchases (date, customer, platform, amount), each attributed to its traffic source.

Sales dashboard

Today's sales

Revenue from orders completed today. Refreshes with each new order event from your connected platform.

This week / this month / total

Revenue aggregated over the period. Refunds are subtracted from these totals.

Trend chart

Line graph showing daily revenue over the selected date range. Look for spikes (promotions, campaigns) and dips (issues, seasonal).

Top converting sources

Which traffic sources lead to the most purchases. "Direct" buyers often bookmarked your site. "Google" buyers found you through search.

Recent purchases

The latest orders with customer email, amount, currency, and items purchased.

Platform setup guides

Shopify

Go to Connectors > Shopify. Create a custom app in your Shopify admin (Settings > Apps and sales channels > Develop apps). Grant scopes: read_orders, read_customers, read_products. Copy the Admin API access token. In OpsIQ, enter your store domain (e.g., your-store.myshopify.com) and the access token. Click Test Connection. If successful, enable webhook sync for real-time order notifications.

WooCommerce

Go to Connectors > WooCommerce. In your WordPress admin, go to WooCommerce > Settings > Advanced > REST API. Create a key with Read/Write permission. Copy the consumer key and consumer secret. In OpsIQ, enter your site URL, consumer key, and consumer secret. Click Test Connection.

BigCommerce

Go to Connectors > BigCommerce. In your BigCommerce admin, go to Advanced Settings > API Accounts. Create a V2/V3 API Account with read scope for Orders, Customers, and Products. Copy the access token, client ID, and API path. Enter them in OpsIQ and test.

Magento 2

Go to Connectors > Magento. In your Magento admin, go to System > Integrations. Create a new integration with API resource access to Sales, Customers, and Catalog. Activate the integration and copy the access token. Enter it in OpsIQ with your Magento base URL.

PrestaShop

Go to Connectors > PrestaShop. In your PrestaShop admin, go to Advanced Parameters > Webservice. Enable the webservice and create a new key. Grant access to orders, customers, and products. Copy the key and enter it in OpsIQ with your store URL.

OpenCart

Go to Connectors > OpenCart. Generate API credentials from your OpenCart admin panel. Enter the API URL, username, and key in OpsIQ. The connector uses OpenCart's REST API for order and customer data.

osCommerce

Go to Connectors > osCommerce. Configure database access or API credentials as documented in the connector settings. osCommerce integration typically requires direct database access or a custom API module.

Stripe

Go to Connectors > Stripe. Copy your Stripe restricted API key from the Stripe Dashboard (Developers > API keys). The key needs read access to Customers, Charges, Invoices, and Subscriptions. Enter it in OpsIQ. Configure webhook endpoint for real-time events.

Paystack

Go to Connectors > Paystack. Copy your Paystack secret key from the Paystack Dashboard. Enter it in OpsIQ. Configure webhook URL for transaction notifications.

Custom / other platforms

Use the REST API or webhooks to send sales events from any platform. Send order.completed events with customer email, amount, currency, and items. See the Events API section for the payload format.

Understanding your sales funnel

Top converting sources

Shows which channels bring paying customers. If Google brings 1000 visitors and 50 sales, that is a 5% conversion rate. If email brings 200 visitors and 30 sales, that is 15% — email is more effective per visitor.

Refunds

Refunded orders are tracked separately. They reduce your net revenue totals. If refund rates are high from a specific source, the traffic might be low quality.

Currency handling

OpsIQ stores the original transaction currency and amount. Multi-currency businesses see revenue in each currency. Normalized reporting uses the configured exchange rate.

Worked examples

100 visitors, zero sales

Scenario:
Your pricing page gets 100 visitors per day but zero conversions.
What to do:

Investigate: (1) Use Session Replay on pricing page visitors. Watch how they interact with the pricing table. (2) Check Top Pages for the pricing page bounce rate and time-on-page. (3) Check Chat conversations from pricing page visitors — what questions do they ask? (4) Compare your pricing page to competitors. (5) Try an A/B experiment with different pricing layouts.

Attribution for a marketing campaign

Scenario:
You sent an email campaign with UTM tags. How do you measure its revenue impact?
What to do:

Go to Sales and filter by source. Search for the campaign UTM parameter. You will see: (1) How many visitors came from the email. (2) How many converted to sales. (3) Total revenue attributed to the campaign. (4) Compare to the same period before the campaign.

Why does Sales show zero even though my store has orders?+

Check: (1) Is the platform connector connected and healthy? Go to Connectors and check the status. (2) Is webhook sync enabled? If using polling, is the cron job running? (3) Does the connector have the right API scopes? For Shopify, you need read_orders.

How does OpsIQ attribute a sale to a visitor?+

When an order comes in via the connector, OpsIQ matches the customer email to a known visitor. If the visitor was tracked before the purchase, the sale is attributed to their visitor journey, including the traffic source, landing page, and session history.

Can I manually add sales?+

You can send sales events via the REST API or webhooks from any system. The event format is documented in the Events API section.

Sales

Leads

Leads are visitors or customers who show buying or support intent. OpsIQ automatically detects leads based on behavior: pricing page visits, return visits, chat interactions, checkout starts, and high engagement. Use the Leads page to prioritize follow-up and feed your CRM pipeline.

Leads
LeadsThe Leads screen: a searchable table with IP/email, location, device, source and time-on-site columns, and top source and country.Leadsyoursite.comSearch IP, city, country…Top source: google · Top country: USIP / EMAILLOCATIONDEVICESOURCETIME41.62.10.4UK · LondonMobilegoogle4m 12s[email protected]US · New YorkDesktopdirect7m 02s[email protected]DE · BerlinMobileutm:ads5m 40s203.0.113.9CA · TorontoDesktopgoogle3m 28s1DETECTEDHigh-intent visitors2TOPLead sources & countries3ENRICHEDIP, location, device, time
The real Leads screen — high-intent visitors as a searchable table (IP/email, location, device, source, time on site) with top sources and countries.

What makes a lead

Pricing page visits

Visitors who view your pricing or plans page are actively considering a purchase.

Return visits

Visitors who come back multiple times are engaged but not yet converted.

Chat interactions

Visitors who start a chat are actively seeking help — either pre-purchase or post-purchase.

Checkout starts

Visitors who reach the checkout page but do not complete the purchase.

Form submissions

Visitors who submit a contact form, demo request, or signup form.

High page engagement

Visitors who view many pages with long session duration are deeply researching.

Lead detail panel

Click any lead to see their full profile:

Identity

Name, email, company if known. Anonymous leads show IP and location.

Sessions

All sessions from this lead with page flow, duration, and source.

Pages viewed

Every page they visited, ordered by recency.

Source

How they found you: organic, paid, social, referral, direct.

Lead score

A 0-100 score based on behavior intensity, recency, and page intent.

CRM status

Whether this lead has been added to the CRM as a contact or deal.

Sales tip

AI-generated suggestion on what to do next (e.g., "Visited pricing 3 times — consider proactive outreach").

High-value lead badge

Leads with a score above 80 get a "High Value" badge. These are your hottest prospects. Prioritize them for outreach, proactive chat, or CRM pipeline entry.

Worked examples

Working a hot lead

Scenario:
A lead viewed your pricing page 3 times in 2 days, started a chat asking about enterprise plans, but has not purchased.
What to do:

This is a high-intent lead. Steps: (1) Check their lead detail for company and role information. (2) Review the chat transcript for specific needs and objections. (3) Create a deal in the CRM with the information gathered. (4) Assign a follow-up task for a sales team member. (5) If they return to the pricing page, the proactive chat rule can trigger a personalized message.

Converting anonymous leads to CRM contacts

Scenario:
You have 50 anonymous leads with high scores but no email addresses.
What to do:

Options: (1) Create a proactive rule that offers a discount or resource download in exchange for email on high-intent pages. (2) Use the chat widget to ask for email when anonymous visitors start a conversation. (3) Add an identity token to your login/signup pages so returning visitors are automatically identified.

How is the lead score calculated?+

The score considers: recency of visits (recent = higher), frequency of visits (more = higher), pages viewed (pricing/checkout = higher), session duration (longer = higher), chat interactions (engaged = higher), and return visits (multiple sessions = higher).

Can I customize lead scoring rules?+

Yes. In CRM Configuration, you can add lead-scoring rules that boost the score based on specific keywords, events, sources, or page patterns.

CRM

Your CRM — start here

OpsIQ ships a full AI-first CRM that captures customer truth, cleans data, scores leads, coaches deals, forecasts revenue, and acts — with website intelligence, support, tickets, products and payments as one live graph. Every AI action is sourced, explainable, reversible and approval-controlled.

AI CRM
AI CRM overviewA Trust Dial set to Copilot beside four AI agent cards: Steward, Prospector, Retention and Analyst.AI CRMworkspaceTrust DialManualCopilotAutopilotHow much the AI does on its ownDSStewardDedupe, enrich,validate dataSDRProspectorFind & scorenew businessRTRetentionSpot churn,drive renewalsANAnalystForecast &explain numbers1AI-FIRSTFour specialist agents2YOU DECIDETrust Dial autonomy3TRUSTEDSourced & reversible
An AI-first CRM run by four specialist agents — and a Trust Dial that decides how much they do on their own.

CRM pages overview

AI CRM (Command Center)

Start here

Your daily home screen: revenue pulse, what AI found, what it did, approval queue, next moves, agent health, and ROI.

Contacts

Core

People and companies in your CRM. Search, filter, score, and manage profiles.

Pipeline

Core

Visual deal board with drag-and-drop stages, win probability, and AI coaching.

Forecast and Reports

Core

Board-grade forecasting: committed, likely, best case, with confidence intervals and accuracy tracking.

Lifecycle

Core

Where every customer stands: active, at risk, expansion ready, renewal due, or churning.

Build my CRM

Config

Describe your CRM setup in plain English. OpsIQ generates a reversible plan and applies it on approval.

CRM Health

Ops

Self-check page: schema, agents, routes, AI actions, and live data counts.

How OpsIQ keeps you safe

Ask before acting

AI proposals go to the approval queue. You approve, edit, or reject each one. Nothing happens without your say.

Never overwrite

When AI suggests a change, it shows the current value and the proposed value. Human-entered data has provenance protection.

Everything is reversible

Every AI action is recorded in the journal. You can undo any change with one click.

Explainable

Every AI recommendation shows its reasoning and the data sources it used. No black box.

Brand new? Start here

1
Open AI CRM

Click AI CRM in the left navigation. The Command Center shows your current state.

2
Check CRM Health

Open CRM Health to verify the schema, agents, and routes are ready.

3
Import contacts

If a connector is active (Shopify, WHMCS, etc.), contacts are imported automatically. Otherwise, import via CSV or create manually.

4
Create a pipeline

Go to Pipeline and create your first pipeline with stages (e.g., Lead, Qualified, Proposal, Negotiation, Won, Lost).

5
Add your first deal

Create a deal from a contact, set the amount and stage, and let the Deal Coach guide you.

Do I need to use the CRM?+

No. The CRM is optional. OpsIQ works perfectly as a tracking + support + AI platform without the CRM. Enable it when you are ready to manage sales and customer relationships.

Can the CRM work without connectors?+

Yes. You can create contacts and deals manually. Connectors enrich the CRM with platform data (orders, subscriptions, tickets) but are not required.

What is the Trust Layer?+

The Trust Layer is the safety system that controls what the AI can do. Copilot mode (default): AI proposes, human approves. Autopilot mode (opt-in): AI acts automatically on low-risk, reversible operations.

CRM

The AI CRM home screen

The Command Center is your daily briefing. Open it every morning to see what happened, what needs attention, and what to do next.

Command Center
CRM Command CenterThe CRM home with Forecast/Win-rate/Pipeline toggles, a weighted-forecast KPI, and an AI proposal queue with Approve and Dismiss on each row.CRM Command CenterworkspaceForecastWin ratePipelineFORECAST · THIS Q₦88,800k87%AI proposals · approve queueCreate deal · Acme ₦28,800kfrom a chat with the buyerApproveDismissMove Nimbus → Proposalpositive reply detectedApproveDismissLog task · follow up Peakno activity in 7 daysApproveDismiss1TOGGLEForecast · Win rate · Pipeline2AI PROPOSESDeals, stages, tasks3YOU DECIDEApprove or Dismiss
The real Command Center: switch between Forecast, Win rate and Pipeline, and work the AI proposal queue — approve or dismiss the deals, stage moves and tasks it suggests.

What the Command Center shows

Today's numbers

Pipeline value, deals won/lost, new leads, active deals, and revenue trend — a snapshot of your current state.

What OpsIQ found

AI-discovered insights: stalled deals, at-risk accounts, new opportunities, data quality issues, and market signals.

What OpsIQ did

Actions the AI has taken (in Autopilot) or proposed (in Copilot): stage advances, score updates, contact enrichment, and task creation.

Needs approval

Queue of AI proposals waiting for your decision. Each shows the proposed action, reasoning, and evidence. Approve, edit, or reject.

Next moves

AI-ranked list of the 10 most important things to do today: follow up on a hot deal, check an at-risk account, research a new lead, etc.

Helper status

Health of AI agents: Capture, Data Steward, Deal Intelligence, Deal Coach, SDR, Retention. Green = running, amber = needs attention, red = error.

Results

ROI tracking: deals influenced by AI, time saved, accuracy of predictions, and comparison to manual CRM work.

Morning briefing workflow

1
Read today's numbers

Check pipeline health and revenue trend. Are you on track this month?

2
Clear the approval queue

Review each AI proposal. Approve safe actions, edit where needed, reject bad suggestions.

3
Check what OpsIQ found

Read AI insights. Are any deals at risk? Are there new opportunities?

4
Work the next moves list

Start with the top priority. The AI has ranked these by urgency and potential impact.

Catching up after time off

Scenario:
You were away for a week. What happened while you were gone?
What to do:

Open the Command Center and check: (1) "What OpsIQ did" shows all AI actions during your absence. (2) "Needs approval" shows proposals waiting for your review. (3) "What OpsIQ found" highlights urgent items. (4) Set the dashboard date range to your absence period to see the trend.

CRM

Contacts, companies and deals

The CRM organizes your business relationships into four objects: Contacts (people), Companies (organizations), Deals (revenue opportunities), and Tasks (follow-up actions).

CRM objects
CRM objectsA Contact record linked to Company, Deal and Task objects in a connected graph.CRM objectsworkspaceContactperson · email · phoneCompanyaccountsDealrevenue opportunityTaskfollow-up action1OBJECTSContacts, companies, deals2LINKEDOne connected graph3TASKSFollow-ups attached
Four core objects — contacts, companies, deals and tasks — linked into one connected customer graph.

Contacts

What is a contact

A person in your CRM. They might be a customer, a prospect, a partner, or a lead. Contacts have an email, name, company, tags, lifecycle stage, and hotness score.

Finding contacts

Use the search bar to find by name, email, company, or tags. Use filters: lifecycle stage, lead score, source, country, last activity date, assigned owner.

Contact profile

Click a contact to see their full profile: personal info, company, deals, activities, tickets, chats, website visits, lead score, and AI insights.

Hotness score

A 0-100 score calculated from behavior signals: website visits, email engagement, chat interactions, purchase history, and recency. Higher = hotter.

Companies

What is a company

An organization that one or more contacts belong to. Companies have a name, domain, industry, size, and health score.

Contact-company linking

Contacts are linked to companies by email domain or manual assignment. One company can have many contacts.

Deals

What is a deal

A revenue opportunity. Deals have a title, amount, pipeline, stage, win probability, close date, assigned owner, and associated contacts/company.

Win probability

A percentage chance of winning the deal. Set manually or calculated by AI based on your historical win data. Drives the weighted forecast.

Deal health

Green (healthy), amber (at risk), or red (stalled). Based on activity recency, stage duration, and engagement signals.

Tasks

What is a task

A follow-up action assigned to a person. Tasks have a title, due date, priority, type (call, email, meeting, other), and linked contact/deal.

AI-generated tasks

The AI creates tasks automatically when it detects something needs attention: follow up on a stalled deal, respond to an at-risk account, research a new lead.

Finding hot leads

Scenario:
You want to see all high-score contacts in the UK who have not been contacted recently.
What to do:

Go to Contacts. Filter by: Lead score > 80, Country = United Kingdom, Last activity > 7 days ago. Sort by lead score descending. These are your hottest neglected leads — prioritize outreach.

Creating a deal from a contact

Scenario:
A contact just expressed interest in your enterprise plan during a chat.
What to do:

Open the contact profile. Click "Create deal." Enter the deal title (e.g., "Acme Corp - Enterprise Plan"), amount, pipeline, and stage (e.g., "Qualified"). Set the close date and assign it to yourself. The Deal Coach will begin tracking this opportunity.

CRM

The pipeline (your deal board)

The Pipeline is a visual board where deals move through stages from left to right. Drag and drop cards to advance deals. Each card shows the deal amount, win probability, and health status.

Pipeline
CRM pipelineThe pipeline screen with Open-deals, Open-value, Weighted-forecast and Attributed-deals stats, a New-deal button, an AI Approve queue, and the Lead/Qualified/Won board.PipelineworkspaceOpen deals23Open value₦153,600kWeighted forecast₦88,800kAttributed deals12+ New dealApprove queue2 to reviewLEADVolt Inc₦4,800kLume₦7,200kQUALIFIEDNimbus₦36,000kPeak₦10,800kWONOrbit₦57,600k1LIVE STATSOpen value & weighted forecast2AI QUEUEApprove proposed deals3BOARDDrag deals by stage
The real pipeline screen: live stats (open value, weighted forecast), an AI Approve queue for proposed deals, and the drag-and-drop board.

Using the pipeline board

1
View your deals

The pipeline shows all active deals as cards arranged in columns (stages). Each column header shows the total value of deals in that stage.

2
Drag to advance

Drag a card to the next stage. The win probability and counts update instantly. If the move fails (validation error), the card snaps back to its original position.

3
Check card badges

Green badge = healthy (recent activity, on track). Amber = at risk (slowing down, needs attention). Red = stalled (no activity for too long).

4
Click for details

Click a card to open the deal detail panel with contacts, activities, Deal Coach brief, and quick actions.

The approval queue

AI proposals appear in the approval queue at the top of the pipeline page. Each proposal shows what the AI wants to do, why, and the evidence. You can:

Approve

Accept the proposal as-is. The action runs through the Trust Layer and is recorded in the journal.

Edit

Modify the proposal before approving. For example, change the suggested stage or adjust the amount.

Reject

Decline the proposal. The AI learns from rejections to make better suggestions in the future.

Win probability explained

Win probability can be set manually or calculated by AI. When AI calculates it, it uses a model trained on your own closed deals (won and lost). If you don't have enough historical data, the AI uses the stage default probability. The probability drives the weighted forecast: a ₦12,000,000 deal at 30% probability contributes ₦3,600,000 to the "likely" forecast.

Moving a deal to Won

Scenario:
A customer signed the contract and paid.
What to do:

Drag the deal card to the "Won" stage. OpsIQ will: (1) Mark the deal as closed-won. (2) Update the forecast. (3) Add a "Won" activity to the timeline. (4) If configured, trigger a webhook event (crm.deal.won). (5) Update the contact lifecycle stage to "Customer."

Spotting stuck deals

Scenario:
You want to find deals that have been in the same stage for too long.
What to do:

Look for red (stalled) badges on the pipeline board. These deals have had no activity for longer than the configured rotting threshold (set in CRM Configuration > Pipelines). Click each stalled deal to see the Deal Coach's recommendation for reactivation.

Can I have multiple pipelines?+

Yes. Go to CRM Configuration > Pipelines to create additional pipelines. Common use cases: separate pipelines for new business vs. renewals, or for different products/services.

What happens when I drag a deal to "Lost"?+

The deal is marked as closed-lost. You will be asked for a loss reason. The deal is removed from the active board but can be found in the closed deals filter. The contact remains in the CRM.

CRM

Deal coaching

The Deal Coach analyzes each deal and gives you a brief with health status, risk signals, key people, a qualification checklist, meeting prep, and suggested next actions. Everything is sourced — the coach shows which ticket, chat, or activity each claim comes from.

Deal coach
Deal coachA deal card listing AI-detected risk signals with evidence sources, beside an AI recommendation and a draft-email button.Deal coachworkspaceAcme Corp — ₦28,800,000Stage: Proposal · 60% winRISK SIGNALSNo reply in 10 daysChampion went quietCompetitor mentioned in chatSources: ticket #482 · chat 6/12 · email threadAI recommendsRe-engage the economicbuyer with an ROI recapand a 7-day close plan.Draft the email1SIGNALSWhy a deal may slip2SOURCEDEvery claim cites evidence3ACTIONOne-click next step
The coach flags why a deal might slip — each signal cites its source — and hands you the next move to take.

What the coach tells you

Health explanation

Why the deal is healthy, at risk, or stalled. Specific signals: days in stage, last contact date, activity frequency, competitor mentions, objection patterns.

Signals

Categorized into: objections raised, competitor mentions, pricing discussions, support risk indicators, renewal/expansion signals. Each signal links to its source (chat transcript, ticket, email, activity).

Champion and blocker map

Who is helping the deal (champion) and who is resisting (blocker). Based on interaction analysis and contact roles.

Qualification checklist

MEDDICC or BANT checklist (configurable) showing which qualification criteria are met and which are missing. Grade: A, B, C, D, or F.

Meeting prep

Before a scheduled meeting, the coach generates a brief: agenda, key points to cover, questions to ask, risks to address, and materials to prepare.

Reply and call plans

Suggested next message or call script based on the current deal state and recent interactions.

Evidence timeline

Every claim the coach makes links to a source: a ticket number, chat transcript ID, activity date, or website visit.

How to use the coach

1
Read the brief

Open any deal and scroll to the Deal Coach section. Read the health status and key signals.

2
Close qualification gaps

Check the qualification checklist. If "Economic Buyer" is missing, plan to identify and engage the budget holder.

3
Act on suggestions

The coach suggests concrete next actions. Click to create a task, draft an email, or schedule a meeting — all routed through the approval queue.

Preparing for a big meeting

Scenario:
You have a meeting with a prospect tomorrow about a $50,000 deal.
What to do:

Open the deal and read the Meeting Prep section. It shows: (1) Key talking points based on recent interactions. (2) Objections they raised in chat last week. (3) Competitor they mentioned in a support ticket. (4) Questions to ask about their timeline. (5) Risk factors to address proactively. Use this brief to prepare a focused, evidence-based agenda.

Understanding why a deal is at risk

Scenario:
The pipeline shows a red badge on a deal you thought was going well.
What to do:

Click the deal and read the Deal Coach health explanation. It might say: "This deal has been in Proposal stage for 22 days (threshold: 14). Last contact was 11 days ago. The primary contact opened a support ticket about data migration concerns 5 days ago (ticket #T-892). Suggestion: address the migration concern and schedule a follow-up call." Now you know exactly what to fix.

CRM

Forecast and reports

Board-grade forecasting with a defensible range, deal-level change explanations, and accuracy tracking so you can prove and explain your numbers.

Forecast
ForecastA quarterly forecast number with Commit, Best-case and Pipeline bands and an accuracy note.ForecastworkspaceFORECAST · THIS QUARTER₦374,400k87% to goalCommitBest casePipelineAI-weighted by deal health and history · accuracy tracked over time1CATEGORIESCommit to pipeline2AI-WEIGHTEDBy deal health3PROVABLEAccuracy tracked
Commit, best-case and pipeline at a glance — AI-weighted by deal health, with accuracy tracked so you can defend it.

Forecast categories

Committed

Deals with 80% or higher win probability. These are your most likely wins. This should be your minimum expected revenue.

AI-weighted likely

All open deals weighted by their AI-calculated win probability. This is the most realistic prediction of what you will close.

Best case

All open deals at full value. This is the maximum possible revenue if everything goes perfectly (it rarely does).

Confidence interval

An 80% probability band showing the realistic range. Example: "You will likely close between ₦54,000,000 and ₦86,400,000 this quarter."

What changed and why

The forecast includes week-over-week change attribution. When your forecast drops by ₦18,000,000, the report explains exactly which deals caused the change: "Deal A slipped to next quarter (₦9,600,000), Deal B lost (₦6,000,000), Deal C reduced in value (₦2,400,000)."

Accuracy tracking

Forecast MAPE

Mean Absolute Percentage Error — how far off your forecasts have been historically. Lower is better. A MAPE of 15% means your forecasts are typically within 15% of actual results.

Win probability calibration

Brier score measuring how well win probabilities match actual outcomes. If deals at 70% probability actually win 70% of the time, calibration is good.

Weekly snapshots

OpsIQ captures a snapshot of your forecast each week (via cron). Over time, you can see how your forecast accuracy improves.

Rollups and warnings

Per-stage conversion

How many deals move from each stage to the next. If 80% pass from Qualified to Proposal but only 20% go from Proposal to Negotiation, your proposals might need work.

Per-source win rate

Which lead sources produce the most wins. Invest more in high-win-rate sources.

Per-owner performance

How each sales team member is performing: deals won, pipeline value, average deal size, win rate.

Warnings

Sandbagging (unrealistically low probabilities), overcommitting (unrealistically high), and committed-at-risk (high-probability deals showing stall signals).

Understanding a forecast drop

Scenario:
Your quarterly forecast dropped from $180,000 to $155,000 since last week.
What to do:

Open the Forecast page and check "What changed." The report shows: "Acme Corp deal (₦18,000,000) moved to Lost — competitor chosen. Beta Inc deal (₦9,600,000) close date pushed to next quarter. New deal with Gamma LLC (₦3,600,000) added this week." The net change is -₦24,000,000 + ₦3,600,000 = -₦20,400,000, explaining the drop from ₦216M to ₦195.6M (with the remaining ₦9.6M explained by probability adjustments on other deals).

CRM

Finding new business

The Prospecting Agent helps you find and research potential customers. Describe your ideal customer, add target companies, and let the AI research, score, and draft first-touch outreach.

Prospecting
ProspectingA list of AI-found prospect companies with fit notes, scores and a draft-outreach button each.ProspectingworkspaceProspects found by the SDR agentNorthwind LtdSaaS · 50 staff · hiring support88Draft outreachCobalt MfgManufacturing · 200 staff74Draft outreachMesa RetaileCommerce · 30 staff69Draft outreachVega HealthHealthcare · 80 staff63Draft outreach1FINDAI sources target accounts2SCOREFit & intent ranked3DRAFTFirst-touch written for you
The SDR agent finds target companies, scores them on fit, and drafts the first-touch outreach for your review.

One-time setup

1
Describe your ideal customer

Go to CRM Configuration > Prospecting. Describe your ideal customer profile (ICP): target industries, company sizes, job titles, geographic focus, product-match terms, and minimum fit score. Example: "B2B SaaS companies with 50-500 employees in the US/UK, selling developer tools, with a VP of Sales or Head of Growth as the primary contact."

2
Add target companies

Enter company domains or names you want to research. You can also let the AI suggest companies based on your ICP.

3
Review research results

The AI enriches each company with available data: size, industry, tech stack, recent news, and fit score with explanation.

4
Approve outreach

For good-fit companies, the AI drafts a personalized first-touch message. Review and approve in the queue.

Fit scoring

Each prospect gets a 0-100 fit score based on five factors:

ICP fit

How well the company matches your ideal customer profile (industry, size, location).

Urgency signals

Is there evidence they need your product now? Job postings, tech changes, complaints about competitors.

Budget proxy

Company size, funding stage, and revenue indicators suggest budget availability.

Product match

How relevant your product is to their business based on industry and technology.

Support fit

Whether you can effectively serve this customer (timezone, language, complexity).

Researching a target company

Scenario:
You want to evaluate whether acme.com is worth pursuing.
What to do:

Add acme.com to the prospecting list. The AI returns: Fit score 78/100 (good fit). Reasons: B2B SaaS, 120 employees, US-based, recently hired a VP of Sales (urgency signal), uses competitor X (product match). Buying signals: visited your pricing page twice last month (from website tracking). Best contact: [email protected] (VP of Sales). Drafted opener references their recent hiring and pricing page visits.

CRM

Automatic follow-up sequences

Sequences automate multi-step follow-up: a mix of email, wait, task, call, and webhook steps that run automatically after you approve the initial send.

Sequences
Follow-up sequencesA horizontal sequence flow: Email, wait three days, Email, then a task, with reply detection.Follow-up sequencesworkspaceAfter you approve the first send →EmailIntroWait3 daysEmailFollow-upTaskCallSteps can be email, wait, task or webhook — a reply auto-stops the sequence.1AUTOMATEMulti-step follow-up2STEPSEmail · wait · task · webhook3YOU APPROVEFirst send is gated
Automated multi-step follow-up — email, wait, email, task — that you approve first and a reply stops automatically.

How sequences work

1
Create a sequence

Define the steps: email, wait 3 days, email, wait 5 days, task (call if no reply), email. Each email step has a template you can customize.

2
Enroll contacts

Add contacts to the sequence. The AI may also propose enrollment from prospecting results.

3
Automatic execution

Steps run automatically on schedule. If a contact replies at any point, the sequence pauses automatically.

4
Track results

See open rates, reply rates, conversion rates, and unsubscribes per step. Use this to optimize your sequence.

Reply understanding

When a contact replies, the AI classifies the reply:

Positive

Interested, wants to talk. Sequence pauses, task created for follow-up.

Objection

Has concerns but not rejecting. Sequence pauses, task created with objection details.

Unsubscribe

Wants to stop receiving messages. Contact is suppressed permanently.

Not now

Interested but timing is wrong. Sequence pauses, snooze task created.

Wrong person

Not the right contact. Sequence stops, contact flagged for review.

Support

A support question, not a sales response. Sequence pauses, ticket created.

Anti-spam protections

Opt-out handling

Unsubscribe requests are honored immediately and the contact is suppressed from all future sequences.

Daily send cap

Workspace-level daily limit (default: 1,000 emails). Prevents mass sends that trigger spam filters.

Per-contact limit

Maximum 1 message per contact per day. Prevents overwhelming individual people.

Over-cap handling

Steps that exceed the daily cap are deferred to the next day. They are never dropped or skipped.

What happens if a contact opens a support ticket during a sequence?+

The sequence pauses automatically. Support takes priority over outreach. The sequence can be manually resumed after the support issue is resolved.

Can I A/B test sequence steps?+

Not directly within sequences, but you can create two sequences with different messaging and compare their results.

CRM

Keeping and growing customers

Lifecycle management helps you protect existing revenue. Each account gets a churn risk score, a health score, an expansion score, and a recommended success playbook.

Lifecycle
Lifecycle boardA customer-lifecycle board — Onboarding, Active, At-risk, Renewal — with health bars on each account card.LifecycleworkspaceONBOARDINGAcmehealth 40ACTIVEGlobexhealth 88Initechhealth 76AT-RISKSoylenthealth 28RENEWALUmbrarenews in 12dexpansion +₦9,600k1STAGESOnboarding to renewal2SCOREDHealth & expansion3PLAYBOOKRecommended next move
Customers move through onboarding, active, at-risk and renewal — each scored for health and expansion with a playbook.

The lifecycle board

Stage map

Visual board showing where every account stands: Lead, Prospect, Opportunity, Customer, Expansion, Renewal, At Risk, Churned.

At-risk accounts

Accounts flagged with high churn risk. Each shows the top driver (support spike, inactivity, payment failure) and a recommended save play.

Expansion opportunities

Accounts that show signals of readiness to buy more: high usage, feature requests, plan inquiries.

Renewals due

Accounts with upcoming renewal dates. Sorted by risk level and revenue value.

How OpsIQ detects churn risk

Churn risk is calculated from multiple signals fused together:

CRM signals

Deal health, inactivity, recent losses, declining engagement.

Support signals

Open ticket count, ticket volume spikes, negative sentiment, escalations.

Product engagement

Login frequency, feature usage, page visits, API calls.

Billing signals

Failed payments, overdue invoices, downgrade requests, cancellation page visits.

Playbooks

Save play

For at-risk accounts: reach out proactively, address the concern, offer support, escalate if needed.

Renewal play

For upcoming renewals: confirm satisfaction, review usage, present value, offer incentive if appropriate.

Expansion play

For ready-to-grow accounts: present upgrade options, share success stories, demonstrate ROI.

Adoption play

For underutilizing accounts: offer training, share best practices, enable features they are not using.

Spotting churn before it happens

Scenario:
A customer who normally logs in daily has not logged in for 2 weeks, and they opened 3 support tickets this month.
What to do:

The Lifecycle board flags this account as "At Risk" with drivers: inactivity (14 days since last login) and support spike (3x normal ticket volume). Recommended play: proactive outreach call to understand what is happening. Is there a product issue? Are they evaluating competitors? Early intervention can save the account.

CRM

Keeping your data clean

The Data Steward agent automatically finds and fixes data quality issues: duplicates, missing fields, inconsistencies, and stale records.

Data steward
Data stewardA list of data-quality issues — duplicate, missing, stale, format — each with a one-click fix action.Data stewardworkspaceData issues the Steward agent foundDuplicate[email protected] and [email protected]MergeMissing12 contacts have no companyEnrichStale38 deals untouched for 90+ daysReviewFormatphone numbers in 4 formatsFix all1CATCHESDupes, gaps, stale2EXPLAINSWhy it flagged each3FIXESOn your approval
The Steward agent keeps your CRM clean — finding duplicates, gaps, stale records and bad formats, fixing on approval.

What it catches

Duplicate contacts

Multiple records for the same person (e.g., [email protected] and [email protected]). The steward proposes merging them.

Missing data

Contacts without email, deals without amounts, companies without domains. Suggests filling from available sources.

Unlinked records

Deals without associated contacts, contacts without companies. Proposes linking based on email domain and context.

Inconsistencies

A deal in "Won" stage with 20% probability, a contact marked "Customer" with no deals, a company with mismatched industry.

Wrong stages

Deals that have been in the same stage for too long or contacts whose lifecycle stage does not match their activity.

How to use

1
Open the steward list

Go to CRM and find the Data Steward section (or open it from CRM Health).

2
Approve safe fixes

Green items are safe: clear duplicates, obvious missing data. Approve these in bulk.

3
Review the rest

Amber items need your judgment: possible duplicates with slight differences, proposed stage changes, company linking. Review each one.

Cleaning duplicate contacts

Scenario:
The steward found "John Smith ([email protected])" and "J. Smith ([email protected])" — same email, different display names.
What to do:

The steward proposes merging: keep the record with more activity, merge the other record's deals and activities. Review the proposal, adjust the surviving display name if needed, and approve. Both records' history is preserved in the merged contact.

CRM

Build my CRM

Build My CRM lets you describe your CRM setup in plain English. OpsIQ generates a validated, reversible plan and applies it on approval. No coding, no manual configuration clicking.

Build my CRM
Build my CRMA natural-language description on the left producing a generated CRM plan of stages, fields and segments on the right.Build my CRMworkspaceDescribe your businessWe are a web design agencyselling monthly retainers andone-off projects to smallbusinesses.Build my CRMGenerated planStages: Lead → RetainerDeal types: retainer, projectField: monthly valueSegments: SMB, agencySequence: onboardingApprove & apply1DESCRIBEPlain English in2AI PLANSStages, fields, segments3APPROVEApplied — no coding
Describe your business in plain English; OpsIQ drafts the whole CRM — stages, fields, segments — and applies it on approval.

How it works

1
Describe what you want

Type a plain-English description of your CRM setup. Example: "Create a renewal pipeline with stages: Upcoming, Contacted, Negotiating, Renewed, Lost. Score leads higher when they view pricing twice."

2
Review the plan

OpsIQ shows a preview of what it will create: pipeline, stages, stage probabilities, scoring rules, lifecycle rules. Review each item.

3
Apply

Click Apply to execute the plan. Every change is recorded as a bundle you can undo in one click.

4
Roll back if needed

If something is not right, click Undo to revert the entire bundle. Your CRM returns to its previous state.

What you can build

Pipelines and stages

Create named pipelines with custom stages, default probabilities, and rotting thresholds.

Scoring rules

Boost lead scores based on behavior: "Score higher when they view pricing," "Score lower when they visit careers page."

Lifecycle rules

Automatically advance lifecycle stages: "Move to SQL when they request a demo," "Move to Customer when deal is won."

Custom fields

Add fields to contacts, deals, or companies: text, number, date, select, checkbox, URL, email.

Qualification checklist

Define the MEDDICC or BANT checklist the Deal Coach grades against.

Setting up a renewal pipeline

Scenario:
You manage SaaS subscriptions and need a pipeline for renewals.
What to do:

Type: "Create a renewal pipeline. Stages: 90 Days Out (10%), 60 Days Out (25%), Contacted (40%), Negotiating (60%), Renewed (100%), Churned (0%). Set the rotting threshold to 14 days." OpsIQ generates the plan, you review it, and click Apply. The pipeline appears on your Pipeline page immediately.

What if I describe something that is not possible?+

The builder only generates actions it knows how to validate. If you ask for something outside its capabilities (e.g., "Integrate with my custom API"), it will reject the request and explain what it can do instead.

Can I undo changes?+

Yes. Every Build My CRM action is captured as a reversible bundle. Go to CRM Health > Change History to see all bundles and undo any of them.

CRM

Setting up your CRM your way

Manual CRM configuration for teams that prefer clicking over typing. All settings that Build My CRM can create are also available as traditional form fields.

Pipelines and stages

Create, rename, reorder, and delete pipelines and stages. Set default win probability per stage. Set the rotting threshold (days without activity before a deal is marked "stalled").

Custom fields

Add fields to deals, contacts, or companies. Field types: text, number, date, select (dropdown with predefined options), checkbox, URL, email. Custom fields appear on the object profile and in filters.

Qualification checklist

Define the checklist the Deal Coach uses to evaluate deals. Choose MEDDICC, BANT, or a custom set of criteria. Each item can be marked required or optional.

Lifecycle stage rules

Define automatic stage transitions: when a contact meets a condition (views pricing, submits a form, makes a purchase), their lifecycle stage advances automatically.

Lead-scoring rules

Boost or reduce lead scores based on behavior. Examples: "Viewed pricing page = +15 points," "Downloaded whitepaper = +10 points," "Visited careers page = -5 points." Minimum count can be set (e.g., "must view pricing at least 2 times").

Saved views

Create named filter+sort combinations for contacts, deals, or companies. Share views with your team. Set a default view per object type.

Adding a lead scoring rule

Scenario:
You want contacts who view your pricing page twice or more to get a higher score.
What to do:

Go to CRM Configuration > Lead Scoring Rules. Click Add Rule. Set: Event = "pageview", URL contains = "/pricing", Minimum count = 2, Score boost = +20. Save. The next time the scorer runs, contacts matching this rule will get +20 to their lead score.

CRM

CRM Health check-up

CRM Health is a self-diagnostic page that verifies your CRM is set up correctly and running smoothly.

Health check
CRM Health checkA health score ring at 92 beside a checklist of passing and warning configuration checks.CRM Health checkworkspace92HEALTHYPipeline stages configuredConnector linked & importingAI agents enabled!No active follow-up sequence!12 contacts missing company1AUDITVerifies your setup2FLAGSWhat is missing3SCOREOne overall number
A one-page CRM audit: an overall health score plus a checklist of what is set up right and what still needs attention.

What it checks

Schema

Database tables exist and have the correct columns. If a migration was missed, CRM Health will flag it.

AI agents

All CRM agents (Capture, Data Steward, Deal Intelligence, etc.) are registered and healthy. Green = running, amber = needs attention, red = error.

Routes

CRM API routes and AJAX endpoints are registered and callable.

AI actions

The CRM action catalog is registered in the Action Registry. If actions are missing, CRM Health self-heals by re-registering them.

Live data counts

Total contacts, companies, deals, tasks, activities, and events. Useful for verifying imports and ongoing data capture.

After setup check

After first-time CRM setup, open CRM Health and verify all checks are green. If any are amber or red, click the item for a diagnostic explanation and suggested fix.

How often should I check CRM Health?+

Check after initial setup, after major updates, and whenever CRM behavior seems wrong. CRM Health self-heals many issues (like missing action registrations) just by opening the page.

CRM

CRM connections for developers

The CRM exposes a complete public REST API and outbound webhooks so it fits any stack without manual exports.

API endpoints

Authentication

API key (Authorization: Bearer opq_...) with scope crm.read or crm.write. POST to /api/v1.php with action and site_key.

Contacts

crm.contacts.list (search + filter), crm.contacts.detail (by ID), crm.contacts.upsert (create or update), crm.contacts.save.

Deals

crm.deals.list, crm.deals.detail, crm.deals.create, crm.deals.update, crm.deals.advance (all through the Trust Layer).

Activities

crm.activities.list (timeline for a contact/deal), crm.activities.record (log a new activity).

Events

crm.events.list (durable change feed with since_id cursor), crm.events.catalog (list available event types).

Create a deal via API
POST /api/v1.php
Authorization: Bearer opq_live_xxx
Content-Type: application/json

{
  "action": "crm.deals.create",
  "site_key": "<workspace>",
  "title": "Acme renewal",
  "amount": 12000,
  "pipeline_id": 1,
  "stage_id": 2
}

Webhook events

crm.contact.created

Fired when a new contact is added to the CRM.

crm.deal.stage_changed

Fired when a deal moves to a different stage.

crm.deal.won

Fired when a deal is closed as won.

crm.deal.lost

Fired when a deal is closed as lost.

crm.task.created

Fired when a new task is created (manual or AI-generated).

crm.outreach.reply

Fired when a prospect replies to a sequence email.

crm.agent.proposal_created

Fired when an AI agent creates a proposal for the approval queue.

All webhook events are HMAC-signed and retried on failure. Subscribe a URL in Settings > Webhooks, or poll crm.events.list with since_id for a durable change feed.

Syncing CRM contacts to Google Sheets

Scenario:
You want every new CRM contact to appear in a Google Sheet for your marketing team.
What to do:

Set up a webhook subscriber for crm.contact.created. Point it to a Google Apps Script web app or a Zapier webhook URL. The payload includes the contact name, email, company, lead score, and source. Your script appends a row to the Google Sheet for each new contact.

Support

Tickets

Tickets are your formal support channel. They have departments, priorities, SLA targets, attachments, internal notes, and full conversation threading. Tickets can arrive from the admin, customer portal, email ingestion, chat escalation, or API.

Tickets
Ticket detailA ticket with a meta sidebar (priority, department, SLA, status), the conversation thread, and AI draft and refund actions.TicketworkspaceT-12345PriorityHighDepartmentBillingSLA3h 12m leftStatusOpenI was charged twice for mysubscription on June 3.AIConfirmed the duplicatecharge — refund processing.AI draft replyRefund1THREADEDFull conversation + notes2SLA & ROUTINGPriority, dept, timers3AI DRAFTReply written for you
Every ticket carries its priority, department, SLA timer and full thread — and the AI can draft the reply for you.

How a ticket flows

1
Ticket arrives

A customer sends a message via email, chat escalation, ticket embed, or the admin creates one. The ticket gets a unique ID (e.g., T-12345).

2
Triage

AI reads the subject and body, assigns priority (Low/Normal/High/Urgent), suggests a department, and detects sentiment. This happens automatically if triage is enabled.

3
Reply

An agent opens the ticket, reads the context (customer profile, platform data from connectors, previous tickets), and writes a reply. AI can draft the reply, and the agent edits before sending.

4
Close

When the issue is resolved, the agent closes the ticket. The customer is notified. If the customer replies after closing, the ticket reopens automatically.

Per-ticket actions

Change department

Move the ticket to a different department (e.g., from General to Billing). Useful when the initial routing was wrong.

Assign to agent

Assign the ticket to a specific team member. The assigned agent sees the ticket in their "My tickets" view.

Add internal note

Write a note visible only to staff. Use for: investigation findings, refund reasons, engineering context, previous commitments. Internal notes never appear to customers.

Merge tickets

Combine duplicate tickets from the same customer. The merged ticket subject gets a [MERGED] tag. All messages from both tickets are preserved in the surviving ticket.

Canned response

Insert a pre-written reply template. Variables like {{customer_name}} and {{ticket_id}} are automatically replaced.

AI rewrite

Let AI improve your draft reply: adjust tone, shorten/lengthen, fix grammar, or translate. You review the result before sending.

Change priority

Set to Low, Normal, High, or Urgent. Priority affects SLA timers and sort order.

Change status

Set to Open, Pending, Waiting on Customer, Resolved, or Closed.

Worked example: handling an unhappy customer

Customer email: "I was charged twice for my subscription"

Scenario:
Subject: Double charge on my account
Body: Hi, I just checked my bank statement and I see two charges of $49.99 from your company dated June 3. I only have one subscription. Can you please refund the duplicate charge? This is really frustrating.
What to do:

Step 1: AI triage assigns Priority: High, Department: Billing, Sentiment: Frustrated. Step 2: Agent opens the ticket. The connector panel shows the customer's Stripe charges — confirmed two charges on June 3. Step 3: Agent adds an internal note: "Confirmed duplicate charge in Stripe. Transaction IDs: ch_xxx and ch_yyy." Step 4: Agent drafts a reply: "Hi [Name], I can see the duplicate charge and I'm processing a refund for the second transaction right now. You should see ₦59,988 back in your account within 3-5 business days. I'm sorry for the inconvenience." Step 5: Agent triggers the refund action through the Stripe connector (with confirmation). Step 6: Agent sends the reply and sets status to Resolved.

Departments

Create departments in Settings > Tickets > Departments. Common departments: General, Billing, Technical, Sales, Abuse, Onboarding. Each department can have different auto-reply rules, AI knowledge, and team assignments.

Canned responses

Create reusable reply templates in Settings > Tickets > Canned Responses. Good canned responses include:

Example canned response template
Hi {{customer_name}},

Thanks for reaching out. I checked the details and here is what I found:

{{response_details}}

If you need anything else, just reply to this ticket and I will be happy to help.

Best regards,
{{agent_name}}
{{department_signature}}

Merging tickets

When a customer sends the same question multiple times (via email and chat, or two separate emails), you can merge the duplicates. Go to the ticket, click Merge, select the other ticket to merge. The surviving ticket gets all messages from both tickets. The merged ticket's subject gets a [MERGED] tag to indicate it was combined.

Priority and SLA

Low

Non-urgent questions, feature requests, general feedback. Target first response: 24 hours.

Normal

Standard support questions. Target first response: 8 hours.

High

Impacting the customer's business. Target first response: 4 hours.

Urgent

Service down, security incident, data loss, billing error. Target first response: 1 hour.

SLA timers start when the ticket is created and pause when the status is "Waiting on Customer." If the SLA target is missed, the ticket is highlighted and optionally escalated.

Can customers see internal notes?+

Never. Internal notes are strictly staff-only. They do not appear in the customer ticket portal, email notifications, or any customer-facing surface.

What happens when a closed ticket is replied to?+

The ticket automatically reopens and returns to the active queue. The team is notified of the new reply.

Can I lock a ticket to prevent further replies?+

Yes. Use the Lock Thread option to prevent both customer and AI from adding new replies. Useful for resolved disputes or closed investigations.

Support

Ticket auto-reply and escalation

Auto-reply lets the AI respond to new tickets automatically. Escalation moves tickets to a different department when the AI detects specialized needs. Both features work across native tickets and email-created tickets.

Auto-reply
Ticket auto-replyA flow: new ticket, a two-minute delay, AI reply from knowledge and context, then sent or saved as a draft.Auto-replyworkspaceWhen a new ticket arrivesNew ticketany sourceDelay2 minAI repliesKB + contextSentor draftIf a human replies during the delay, auto-reply is cancelled. Intent can escalate to another department first.1DELAYHumans get first chance2AI REPLIESFrom KB + context3OR ESCALATERoute by intent
New tickets get a short delay (so humans can jump in), then an AI reply from your knowledge — sent or queued as a draft.

How auto-reply works

1
Ticket appears

A new ticket is created from any source (email, chat, portal, API).

2
Schedule reply

OpsIQ waits for the configured delay (default: 2 minutes). This gives human agents a chance to respond first.

3
First reply wins

If a human agent replies during the delay, auto-reply is cancelled. If not, the AI generates a reply.

4
Generate and send

The AI reads the ticket, checks knowledge base, connector context, and customer history, then writes a reply. The reply is sent (or queued as a draft for review, depending on settings).

How escalation works

1
Configure departments

Set which departments can receive escalations (e.g., Billing can be escalated from General, Technical can be escalated from General).

2
Classify the ticket

Before auto-replying, the AI classifies the ticket intent: billing, technical, refund, abuse, etc.

3
Move if needed

If the ticket intent matches an escalation department, the ticket is moved. An internal note explains why.

4
Generate in new voice

The reply is generated using the destination department's knowledge and AI training.

Settings reference

Auto-reply enabled

Master switch. Turn on to enable AI auto-reply for tickets.

Allowed departments

Which departments can receive auto-replies. Start with low-risk departments (General, Sales) before enabling billing.

Delay

How long to wait before the AI replies (in seconds). Default: 120 seconds (2 minutes). Set to 0 for instant replies.

Delay schedule

Optionally set different delays for business hours vs. after hours.

Stop on admin reply

If a human agent replies first, cancel the auto-reply. Default: on.

Escalation enabled

Enable automatic department routing based on ticket intent.

Escalation departments

Which departments tickets can be escalated to.

Escalation status

What status to set when escalating (e.g., Open, Pending).

Escalation note

Whether to add an internal note explaining the escalation reason.

Email-created tickets

Tickets created from email (via mailbox polling or MX-piped delivery) follow the same auto-reply and escalation rules. The AI reply is sent as an email response to the customer. Email drafts go to the drafts queue for review if configured.

Will the AI auto-reply to billing questions?+

Only if you enable auto-reply for the Billing department. We recommend starting with auto-reply off for billing and enabling it only after you have trained the AI with comprehensive billing knowledge and tested thoroughly.

What if the AI gives a wrong answer?+

If a customer replies saying the answer was wrong, a human agent should intervene. Review AI History to understand why the AI gave the wrong answer, then update the knowledge base or AI training to prevent it from happening again.

Can I review auto-replies before they are sent?+

Yes. Set the delivery mode to "Draft" instead of "Auto-send." Auto-reply drafts will appear in the Drafts queue for human review before sending.

Support

Ticket portal embed

The ticket portal embed lets you add a ticket management interface to any website. Customers can view their tickets, create new ones, and reply — all without entering the OpsIQ admin.

How it works
Ticket portal embedA support portal embedded in a website showing a customer their own tickets and a new-ticket button.yoursite.com/supportSupport centerNew ticketYOUR TICKETS#1042 · Refund questionOpen#1038 · Setup helpResolved#1031 · Invoice copyPending1EMBEDAdd to any site2SELF-SERVECustomers see their tickets3NO LOGINIdentity handled securely
Ticket portal embed

Three embed flavors

Inline embed

Renders the ticket portal inside a div on your page. The portal takes the full width of its container.

Floating widget

Shows a floating button that opens the ticket portal in a panel. Similar to a chat widget.

Authenticated

Requires a signed identity token. Customers see only their own tickets.

Installation

Ticket embed snippet
<script src="https://your-opsiq-domain.com/widget.php"
  data-site-key="site_abc123"
  data-mode="tickets"
  data-identity-token="SERVER_GENERATED_TOKEN"
  async></script>

Identity token generation

For authenticated mode, your server must generate a signed identity token. This token tells OpsIQ who the customer is so they see only their own tickets.

PHP — generate identity token
<?php
// Generate identity token (PHP)
$site_secret = "opsiq_whsec_your_secret";
$payload = json_encode([
    "site_key" => "site_abc123",
    "customer" => [
        "id" => "cust_1001",
        "email" => "[email protected]",
        "name" => "Ada Lovelace",
    ],
    "iat" => time(),
    "exp" => time() + 900, // 15 minutes
]);
$token = base64_encode($payload) . "." . hash_hmac("sha256", $payload, $site_secret);
// Pass $token to the frontend
WHMCS hook — identity token
// WHMCS hook — auto-generate identity token
add_hook("ClientAreaPage", 1, function($vars) {
    if (!isset($vars["loggedinuser"])) return;
    $payload = json_encode([
        "site_key" => "site_abc123",
        "customer" => [
            "id" => $vars["loggedinuser"]["id"],
            "email" => $vars["loggedinuser"]["email"],
            "name" => $vars["loggedinuser"]["firstname"]." ".$vars["loggedinuser"]["lastname"],
        ],
        "iat" => time(),
        "exp" => time() + 900,
    ]);
    $token = base64_encode($payload).".".hash_hmac("sha256", $payload, "opsiq_whsec_xxx");
    // Inject into page
});
Node.js — generate identity token
// Node.js / Express — generate identity token
const crypto = require("crypto");

function generateOpsIQToken(customer) {
    const payload = JSON.stringify({
        site_key: "site_abc123",
        customer: {
            id: customer.id,
            email: customer.email,
            name: customer.name,
        },
        iat: Math.floor(Date.now() / 1000),
        exp: Math.floor(Date.now() / 1000) + 900,
    });
    const sig = crypto.createHmac("sha256", "opsiq_whsec_xxx")
        .update(payload).digest("hex");
    return Buffer.from(payload).toString("base64") + "." + sig;
}

Widget features

Ticket list

Searchable, status-filtered list. An "Awaiting you" highlight flags tickets the team has answered.

Threaded conversation

Full conversation view with rich text, attachments, and timestamps.

Draft autosaving

Customer draft replies are auto-saved so they do not lose work if they navigate away.

Live polling

The widget polls for new replies every ~12 seconds.

Resolve / reopen

Customers can resolve or reopen their own tickets with one click.

Internal staff notes are NEVER shown to customers in the ticket embed. This is a hard security boundary.
Support

Chat inbox

The Chat Inbox is where your team manages live customer conversations. It shows active chats, assigned conversations, AI-handled chats, and archived history.

Chat inbox
Chat inboxA three-pane agent chat inbox: conversation list, the live conversation with an AI draft chip, and a visitor/CRM context panel.Chat inboxworkspaceJDJanewhere is my orderMOMensahbilling questionRTRitaAI handledWhere is my order?Shipped today — UPSAI draft readyReply…VISITORJane DoeUS · Chrome3 past ordersLTV ₦576,000CRMStage: Customer1UNIFIEDEvery live chat2CONTEXTVisitor + CRM panel3AI ASSISTDraft & rewrite
One inbox for every live chat — conversation list, the thread with AI draft on tap, and full visitor + CRM context.

Managing conversations

Active chats

Conversations currently in progress. Green dot = customer is typing or recently active.

AI-handled

Conversations where the AI is responding. You can take over at any time by clicking "Join."

Assigned to me

Conversations assigned to you specifically.

Waiting

Conversations where the customer is waiting for a response.

Archive

Completed conversations. Searchable by keyword, date, and customer.

Handoff from AI to human

When you take over a conversation from the AI, follow these three rules:

1
Greet personally

Introduce yourself by name. "Hi, this is Sarah from the support team."

2
Reference context

Show you read the conversation. "I can see you asked about your order status."

3
Set expectations

Tell the customer what happens next. "I am looking into this now and will have an answer for you in a few minutes."

Switching AI on/off per conversation

Use the AI toggle at the top of each conversation. When AI is on, the AI generates responses. When off, only human agents can reply. The AI remembers the conversation context even when turned off and back on.

Away mode / out of hours

Configure business hours in Settings. Outside business hours, the AI can: (1) Continue responding to customers, (2) Show an "away" message and create a ticket for follow-up, or (3) Disable chat completely and show the ticket form. Choose the behavior that fits your support model.

Handling tough conversations

1
Stay calm

Do not match the customer's emotional intensity. Acknowledge their frustration without being defensive.

2
Collect facts

Before responding, gather the relevant information: order details, account status, previous tickets.

3
Escalate early

If the situation involves refunds, legal threats, abuse, or security, escalate to a senior team member rather than trying to handle it alone.

Can I have team chat (agent to agent)?+

Yes. Use internal notes within a conversation to communicate with other agents. These notes are never visible to the customer.

What happens when I close a chat?+

The conversation moves to the Archive. If the customer sends a new message later, a new conversation is created.

Support

Real chat conversations

These examples show how a well-trained Customer AI should handle common scenarios. Use them to test your AI training and identify gaps.

10 conversation examples

1. Returning customer asking about order

Scenario:
Customer: Hi, I placed an order 3 days ago and haven't received any shipping notification yet. Order #ORD-5523.
What to do:

The AI should: (1) Look up order #ORD-5523 through the connector. (2) Report the current status and tracking info if available. (3) If the order is delayed, acknowledge the delay and provide an estimated timeline. (4) Do NOT invent a shipping status if the connector does not have one.

2. Prospect asking about pricing

Scenario:
Customer: How much does your Pro plan cost? Do you offer annual billing?
What to do:

The AI should: (1) Answer from the knowledge base with current pricing. (2) Explain the difference between monthly and annual billing. (3) If the answer is not in the knowledge base, say so and offer to connect them with sales. (4) Do NOT invent pricing that is not in the knowledge base.

3. Angry customer demanding refund

Scenario:
Customer: This is ridiculous! Your product does not work and I want my money back NOW.
What to do:

The AI should: (1) Acknowledge the frustration calmly. (2) Ask for the order number or account email. (3) Explain the refund process. (4) Create a support ticket or escalate to a human agent. (5) Do NOT promise a refund — that requires human approval.

4. Double billing edge case

Scenario:
Customer: I was charged twice this month. My bank shows two charges of $29.99.
What to do:

The AI should: (1) Acknowledge the concern. (2) Collect the relevant details (email, dates of charges). (3) Explain that billing issues require human review. (4) Create a Billing department ticket with the details. (5) Set priority to High.

5. Multi-language customer

Scenario:
Customer: Bonjour, je voudrais savoir si vous livrez en France?
What to do:

The AI should: (1) Respond in the customer's language if that language is supported. (2) Answer the question about delivery to France from the knowledge base. (3) If the language is not supported, respond in the default language and mention which languages are available.

6. After-hours conversation

Scenario:
Customer: Hello, is anyone there? I need help with my account.
What to do:

The AI should: (1) If configured for after-hours AI, respond and assist. (2) If after-hours creates tickets, say: "Our team is currently offline. I have created a support ticket for you and someone will follow up during business hours." (3) Provide the ticket number.

7. Pre-purchase comparison shopper

Scenario:
Customer: How does your product compare to [Competitor X]?
What to do:

The AI should: (1) Describe your product's strengths factually. (2) Do NOT badmouth the competitor. (3) If there is a comparison page in the knowledge base, link to it. (4) If the customer asks about features you do not have, be honest.

8. Customer wants a recommendation

Scenario:
Customer: I run a small online store with about 100 orders per month. Which plan is right for me?
What to do:

The AI should: (1) Ask clarifying questions if needed (e.g., what features matter most). (2) Recommend a plan based on the knowledge base. (3) Explain why that plan fits their needs. (4) Mention that they can start with a smaller plan and upgrade later.

9. Customer trying to get an unauthorized discount

Scenario:
Customer: I saw online that you give 50% discounts. Can I have one?
What to do:

The AI should: (1) Politely explain current promotions if any exist. (2) Do NOT create or promise discounts that are not in the knowledge base. (3) If the customer persists, offer to connect them with the sales team.

10. Customer needs help with a feature

Scenario:
Customer: How do I export my data? I can't find the export button.
What to do:

The AI should: (1) Provide step-by-step instructions from the knowledge base. (2) Include the exact page path and button location. (3) If the feature requires a specific plan, mention that. (4) If the feature does not exist, be honest and suggest alternatives.

Support

Email mailboxes and drafts

OpsIQ can connect to email mailboxes to automatically create tickets from incoming email and send replies as email. It also provides AI-drafted replies for human review.

Email
Email to ticketAn IMAP mailbox on the left feeding incoming emails into a threaded ticket with an AI-drafted reply on the right.Emailworkspace[email protected] · IMAPRefund request[email protected]Cannot log in[email protected]Invoice copy[email protected]Ticket #1042from email · BillingI would like a refund for theduplicate charge…AI draftReview & send reply1INGESTIMAP & forwarding in2TO TICKETSThreaded automatically3AI DRAFTSReplies for review
Pull email in over IMAP (or forwarding), turn each into a threaded ticket, and let the AI draft the reply for review.

Connecting a mailbox

Protocol

IMAP (most providers), Gmail API (Google Workspace), or Microsoft Graph (Outlook 365).

Settings needed

Host, port, encryption (SSL/TLS), username, password or app password, folder (usually INBOX).

Department mapping

Map the mailbox to a ticket department. Emails to [email protected] create tickets in the "Support" department.

Gmail setup (step by step)

1
Enable 2-Step Verification

Go to Google Account > Security > 2-Step Verification and enable it.

2
Create an App Password

Go to Google Account > Security > App Passwords. Select "Mail" and "Other (OpsIQ)". Copy the 16-character password.

3
Enter in OpsIQ

Go to Email > Mailboxes > Add. Set host: imap.gmail.com, port: 993, encryption: SSL, username: [email protected], password: the app password.

4
Test

Click Test Connection. If successful, OpsIQ will start polling for new emails at the configured interval.

Outlook 365 setup

1
Check IMAP is enabled

In Outlook settings > Mail > Sync email, ensure IMAP is enabled.

2
Use app password or modern auth

If MFA is enabled, create an app password. Otherwise, use your regular password.

3
Enter in OpsIQ

Host: outlook.office365.com, port: 993, encryption: SSL, username: [email protected].

cPanel webmail setup

1
Find IMAP settings

In cPanel > Email Accounts, click your email account for IMAP settings.

2
Enter in OpsIQ

Host: usually mail.yourdomain.com or your server hostname, port: 993 (SSL) or 143 (STARTTLS), username: full email address.

AI email drafts

When auto-reply is set to "Draft" mode, the AI generates reply drafts that appear in the Drafts queue. You can:

Review

Read the draft and check for accuracy.

Edit

Modify the text, tone, or content before sending.

Send

Approve the draft and send it as an email reply.

Discard

Delete the draft if it is not appropriate.

Auto-send

If confidence is high enough and auto-send is enabled, drafts are sent automatically after a configurable delay.

Why are emails not being converted to tickets?+

Check: (1) Is the mailbox connected and healthy? Look for green status in Email > Mailboxes. (2) Is the cron job running? Email polling requires cron. (3) Is the email being filtered or moved to a folder other than INBOX?

Can I use multiple mailboxes?+

Yes. Each mailbox can be mapped to a different department. [email protected] goes to Support, [email protected] goes to Billing.

AI

Set up your AI

AI Configuration is where you choose your AI provider, model, and cost controls. OpsIQ supports multiple providers: Claude (Anthropic), GPT-4o (OpenAI), Gemini (Google), and Grok (xAI). You can use your own API key (BYOK) or Managed AI if available on your plan.

Set up AI
AI configurationAn AI settings panel: a Managed-AI / BYOK provider toggle, a model selector, and a monthly token-budget meter.AI configurationworkspaceAI configurationProviderManaged AIYour key (BYOK)Modelclaude · balancedMonthly AI budget62%1TWO MODESManaged AI or BYOK2PICK A MODELSpeed vs depth3BUDGETSToken caps & cost control
Choose Managed AI or your own key, pick a model for speed vs depth, and cap monthly spend with a token budget.

Choosing a provider

Claude (Anthropic)

Strong reasoning, careful with facts, good at following complex instructions. Models: claude-sonnet-4-20250514, claude-3.5-sonnet. Best for: support conversations, technical questions, detailed analysis.

GPT-4o (OpenAI)

Fast, creative, good general knowledge. Models: gpt-4o, gpt-4o-mini. Best for: quick responses, creative writing, broad knowledge questions.

Gemini (Google)

Good at factual questions, multi-language support. Models: gemini-2.0-flash, gemini-1.5-pro. Best for: multi-language support, factual lookups.

Grok (xAI)

Fast, concise responses. Models: grok-3-mini-fast. Best for: quick answers, casual tone.

BYOK vs Managed AI

BYOK (Bring Your Own Key)

You provide your own API key from the provider. You pay the provider directly. Full control over model selection and usage.

Managed AI

AI is provided as part of your OpsIQ plan. No API key needed. Usage is metered against your plan's AI credit balance.

Step-by-step setup

1
Go to AI Configuration

In the OpsIQ admin, navigate to Settings > AI Configuration.

2
Select provider

Choose your AI provider from the dropdown.

3
Enter API key

If using BYOK, enter your API key. For Managed AI, this is handled automatically.

4
Choose model

Select the specific model to use. Smaller models are faster and cheaper. Larger models give better quality answers.

5
Test connection

Click "Test connection" to verify the API key and model are working. A green checkmark means success.

6
Save

Click Save to activate your AI configuration.

Cost controls

Monthly budget

Set a maximum monthly spend on AI tokens. When the budget is reached, AI features gracefully degrade (shorter responses, no auto-reply) rather than stopping entirely.

Per-conversation token limit

Maximum tokens per single conversation. Prevents runaway conversations from consuming excessive credits.

Low balance alert

When your AI credit balance drops below the threshold (default: 50,000 tokens), a warning appears in the admin. Set this in AI Configuration.

Per-workspace configuration

AI configuration is per-workspace. If you manage multiple sites, each workspace can use a different provider, model, and budget. The workspace inherits global defaults unless overridden. To configure per workspace: switch to the workspace, then go to AI Configuration and save settings there.

Getting API keys

Anthropic (Claude)

Go to console.anthropic.com > API Keys > Create Key. Copy the key starting with "sk-ant-".

OpenAI (GPT)

Go to platform.openai.com > API Keys > Create new secret key. Copy the key starting with "sk-".

Google (Gemini)

Go to aistudio.google.com > Get API Key. Create a key for your project. Copy the key.

xAI (Grok)

Go to console.x.ai > API Keys. Create and copy your key.

Testing your AI setup

Scenario:
After entering your API key, click "Test connection." You should see a green checkmark and a sample response from the AI.
What to do:

If the test fails: (1) Check that the API key is correct (no extra spaces). (2) Check that your account has billing set up with the provider. (3) Check that the model name is valid. (4) If using Managed AI, verify your license is active.

Which provider is best?+

There is no single best provider. Claude is excellent for support conversations. GPT-4o is fast and versatile. Gemini handles multiple languages well. Try each one and see which produces the best results for your specific use case.

Can I switch providers later?+

Yes. Change the provider and API key at any time. Existing conversation history is preserved. The AI will use the new provider for all future conversations.

What happens when I run out of credits?+

The AI degrades gracefully: responses become shorter, auto-reply pauses, and the admin shows a low-balance warning. Core tracking, tickets, and CRM continue working without AI.

AI

Smarter & cheaper customer chat

A set of opt-in controls that make your customer chat either smarter (it reasons across a customer's account like a human agent) or cheaper (it sends the AI less, or answers in fewer steps). Every control is off by default and independent — turning one on never changes any other behaviour. Most live under Settings > Client Chat > Behaviour; a few are on Set up your AI and Train your AI.

Smarter Answers (agent mode)

A normal chatbot answers one question from one lookup. With Agent mode on, the assistant can make several read-only account checks in a single turn and cross-reference them — e.g. "do I have open tickets, and is my balance enough for my next renewal?" is answered in one reply with the maths done. It only engages for verified customers on account or refund questions; everything else runs the normal single-answer path.

Agent mode

Up to a few read-only lookups per turn, cross-referenced before answering. Turn on when you have a connected platform (WHMCS, Shopify, Stripe, Zendesk, etc.). Off = today's single-lookup behaviour, unchanged.

Thinking depth for agent answers

How hard the model reasons on complex turns (low/medium/high). Start on Low; most support questions are handled well there.

Agent model

Pins a stronger model just for complex agent turns, so everyday chat stays on a light, cheap model and only the hard turns pay for depth. Blank = your normal customer-chat model.

Plan ahead — one-pass answers (beta)

A tiny planning step decides which lookups to pull and whether the knowledge base is needed, then answers in ONE main call instead of several steps. A sub-toggle under Agent mode — it cannot be enabled unless Agent mode is on. Same answer quality, fewer calls on multi-part questions.

Conversation & understanding

Long-conversation memory (beta)

Keeps a short running summary of older messages (names, ticket/invoice numbers, amounts, decisions) so the assistant stays consistent across very long chats without resending the whole transcript. Best for support-heavy, long threads; pairs with Agent mode.

Typo tolerance

Reads small typos ("my open ticketts", "unpaid invocies") as the intended words so the right information is found instead of missed. Works with every connected platform. Off by default; useful for mobile-heavy chat.

Lean account context

Only attaches the customer's account snapshot when the question is actually about their account (balance, invoices, tickets, services), skipping it on general questions. Cuts cost with no quality loss — the assistant can still fetch the account live when a turn needs it.

Cost saving

Skip knowledge search for greetings (beta)

"Hi", "thanks" and "ok" don't trigger a knowledge-base search — those replies never use it. Any message with real content still searches as normal.

Longest reply allowed (tokens)

Caps how long a single reply can be. Reply length is the most expensive part of a call, so a sensible cap (around 500 for support) is the single most effective chat cost control. Only lowers your global limit, never raises it.

On Set up your AI

Thinking depth (customer & admin chat)

How much the model thinks before answering (minimal to high). Keep customer chat on minimal/low for speed; reserve higher settings for analysis and the admin copilot.

Per-AI model (per job)

Every AI surface — live chat, ticket drafts, summaries, analysis, admin copilot, promotions, Site Intelligence and more — can run on its own model. Light where speed matters, strong where quality matters. Blank on a surface = provider default for that job.

Admin chat cost controls

The admin copilot can keep a bounded working memory and load only the tools a question needs (lean tools) instead of every tool every turn.

On Train your AI

Compress instructions

Your instructions are sent on every turn, so their length is a recurring cost. The Compress button rewrites a slot to say the same thing in fewer words. It refuses the rewrite if it would drop any {variable} or rule, and reports what it protected — so it never silently changes meaning.

"What's already in the brain" (ℹ️)

Shows what OpsIQ already knows about your business per slot, so you can delete anything you were repeating in your own instructions.

💡
Where does the money go? For short support chat the input (instructions + account data + history, sent each turn) usually costs more than the short reply — caching and lean context help most there. For long generated content the output dominates — the reply-length cap and a lower thinking depth pay off there. See Set up your AI to keep prompt caching on, which makes the big repeated part of each turn cheap.
Do these change how the chat already answers?+

No. Every control is off by default and independent. Turning one on only adds its behaviour; turning it off returns the chat to exactly how it worked before.

What order should I turn them on?+

Run everyday chat on a light model and pin a stronger Agent model. Then, if you have a connected platform, enable Agent mode, then Plan ahead, then Long-conversation memory. Then lean context, skip-KB-for-greetings, and a reply cap. Finally compress your instructions. Watch a few real chats after each change.

The Admin Agent kit: web search, runbooks, missions, file transfer

The Admin AI chat is a working engineer, not just a question box. It can research fixes on the web, keep a library of your operating procedures, patrol your servers on a schedule, and move files. Most of this is driven by asking for it in chat; the one thing you configure up front is which web search provider it uses, on the Set up your AI page.

Web search

Built in

The agent searches the web for docs, error messages and current information while it works. Out of the box this uses DuckDuckGo, which needs no key and no setup.

Runbooks

In chat

A saved library of your procedures ("how we do X here"). The agent writes one down after nailing a tricky job and follows it next time, so the know-how survives the end of the chat.

Missions

Scheduled

Scheduled read-only patrols. "Every morning, check disk space and the error logs and tell me." Findings arrive on your admin bell.

File transfer

In chat

Ask for a log file and get a private download link, or have one file copied from one connected server to another. Both capped at 5 MB.

Admin Agent web search (on Set up your AI)

Search provider

What the agent web search uses. The default is DuckDuckGo: keyless, free, works on every install. Brave Search, Tavily and Serper.dev (Google results) usually return better results but each needs an API key from that provider. If a keyed provider fails for any reason (bad key, quota used up, network trouble), that search falls back to DuckDuckGo automatically, so search never goes dark.

Search API key

The key for your chosen provider, only needed for Brave, Tavily or Serper. Once saved it is masked and never shown on the page again; paste a new one to replace it. A keyed provider becomes active only when both the provider and its key are saved.

Runbooks

When the agent has just worked through a job you will want done the same way again, say "save that as a runbook called nightly-cleanup". From then on it sees the runbook by name in every session, and when you ask for the job by name (or describe it) it pulls up the steps and follows them. You can ask it to list, update or delete runbooks any time.

💡
A runbook is guidance, not a free pass. When the agent follows one, every step that would change a server still goes through your current permission mode and shows the usual approval cards. A runbook can never bypass an approval.

Missions

A mission is a recurring job the agent runs on its own: hourly, daily at a set hour, or weekly on a set day. Missions are read-only by design. They can read servers, data and the web, but they can never change anything; they investigate and report. When a mission finishes, the findings land as a notification on your admin bell. Say "run the morning patrol now" to trigger one on demand, or ask the agent to list, pause or remove missions.

⚠️
Missions run off the OpsIQ cron, so it needs to be set up (see Cron and automation). A one-off "run it now" from the chat works even between cron runs on most servers.

Moving files

Ask for a file ("get me today's error log from the web server") and the agent stages it and replies with a private download link. The link only works for signed-in admins and expires after about a day. Files are capped at 5 MB; for anything bigger, ask the agent to compress or trim it on the server first.

The agent can also copy a single file between two connected servers, again up to 5 MB. The write on the destination is treated like any other change it makes: in ask mode you get an approval card first, the existing file is backed up, and the copy is reversible. For safety, the file content is re-read from the source at the moment the copy is applied, not taken from the chat.

AI

Train your AI

AI Training is where you teach OpsIQ how to behave. You write prompts that define personality, boundaries, knowledge focus, and escalation rules. Think of it as writing a training manual for a new support agent.

Train AI
Train your AIAn AI instructions editor with Customer/Admin tabs and plain-English tone, always and never rules.Train your AIworkspaceCustomer AIAdmin AIToneFriendly, concise, never pushy.AlwaysOffer a human handoff for billing disputes.NeverPromise a refund without checking the account.1TWO MANUALSCustomer & admin AI2PLAIN ENGLISHTone, always, never3GROUNDEDPlus your knowledge base
Train the AI like a new hire — Customer and Admin manuals written in plain English (tone, always, never), grounded in your KB.

Two training areas

Customer AI prompt

Controls how the AI talks to your customers in the chat widget. This is the most important prompt to get right.

Admin AI prompt

Controls how the AI assists your admin team in the operator dashboard. This handles internal queries and action execution.

Writing a great customer AI prompt

Your customer AI prompt should cover these areas:

1
Identity

Who is the AI? Give it a name, role, and personality. Example: "You are Luna, a friendly and knowledgeable customer support assistant for Acme Store."

2
Tone and style

How should it communicate? Example: "Be professional but warm. Use simple language. Avoid jargon. Keep responses concise (2-3 paragraphs max)."

3
Knowledge boundaries

What should it know and not know? Example: "You know about our products, pricing, shipping, and return policy. You do NOT know about competitor products or internal company decisions."

4
Escalation rules

When should it hand off to a human? Example: "Escalate to a human agent when: the customer asks for a refund, mentions legal action, reports a security issue, or asks the same question three times."

5
Things to never do

Hard boundaries. Example: "Never promise refunds. Never share internal pricing formulas. Never make up product features that do not exist. Never give medical, legal, or financial advice."

Example prompts

Example customer AI prompt — online store
You are Aria, a friendly customer support assistant for TechGear.

PERSONALITY:
- Warm and professional
- Concise (2-3 paragraphs max per response)
- Use simple language, no jargon
- If unsure, say so honestly

KNOWLEDGE:
- Our products: laptops, accessories, software subscriptions
- Pricing: as listed in the knowledge base
- Shipping: free over $50, 3-5 business days standard, 1-2 days express ($12)
- Returns: 30-day money-back guarantee, must be in original condition

ESCALATION (hand off to human):
- Refund requests over $100
- Account security concerns
- Legal threats or complaints
- Customer explicitly asks for a human

NEVER DO:
- Promise specific delivery dates (say "estimated")
- Share discount codes not in the knowledge base
- Make up product specifications
- Give financial or legal advice
Example customer AI prompt — hosting company
You are Atlas, an AI assistant for CloudHost web hosting.

TONE: Technical but accessible. Assume the customer has basic web knowledge.

KNOWLEDGE:
- Shared hosting, VPS, dedicated servers
- cPanel, DNS, SSL, email configuration
- WordPress, Joomla, Drupal installation
- Common error codes and troubleshooting

ESCALATION:
- Server outages affecting multiple customers
- Data loss or security breach reports
- Billing disputes over $50
- Complex migration requests

BOUNDARIES:
- Do NOT access customer servers or databases
- Do NOT change DNS records or passwords
- Always recommend the customer makes changes themselves
- For code issues, suggest steps but clarify you cannot debug their application

Refining your prompt over time

1
Launch with basics

Start with identity, tone, and key boundaries. Do not try to cover everything on day one.

2
Review AI History weekly

Read conversations where the AI gave wrong or suboptimal answers.

3
Update the prompt

Add specific rules for recurring issues. Example: if the AI keeps promising refunds, add "Never promise a refund — say you will escalate to the billing team."

4
Add knowledge

If the AI cannot answer a question, add the answer to the Knowledge Base rather than trying to fit everything in the prompt.

⚠️
Keep your prompt under 2,000 words. Overly long prompts can confuse the AI and increase token costs. Put detailed information in the Knowledge Base instead.
What is the difference between the prompt and the knowledge base?+

The prompt defines personality, boundaries, and rules. The knowledge base provides factual information (product details, pricing, policies). The AI reads both, but the prompt shapes behavior while the KB provides answers.

Can I have different prompts for different departments?+

The prompt is per-workspace. If you need different AI behavior for different departments, use the knowledge base to provide department-specific information and mention the department context in your prompt.

AI

AI history

AI History shows every conversation the AI has had with customers and admins. Use it to audit AI performance, find wrong answers, and identify training gaps.

AI history
AI historyA log of AI turns with type badges, the question and answer, response time and outcome.AI historyworkspaceEvery AI turn, recordedchatQ: where is my order?A: shipped today — UPS tracking…0.9sansweredticketDraft reply for T-12345refund acknowledgement drafted1.4sdraftedadminSummarize this week's tickets12-line summary returned2.1sdonechatQ: cancel my planhanded off to a human0.7sescalated1EVERY TURNPrompt, reply, action2SEARCHABLEFilter & export3OWNER-ONLYFull audit trail
Every AI turn — chat, ticket draft, admin action — logged with the exact prompt, reply, duration and outcome.

What each conversation shows

Date and time

When the conversation happened.

Customer identity

Name and email if known, otherwise IP and country.

Channel

Chat widget, ticket auto-reply, email draft, or admin AI.

Messages

Full transcript of the conversation: customer messages and AI responses.

Token usage

How many tokens the conversation consumed. High token usage may indicate the AI is giving overly verbose answers or the conversation went in circles.

Actions taken

Any actions the AI executed during the conversation (looked up order, created ticket, etc.).

Rating

If CSAT is enabled, the customer's satisfaction rating for this conversation.

Finding problems

Search by keyword

Search for specific topics to see how the AI handles them. Example: search for "refund" to check if the AI is following your refund policy.

Filter by rating

Show only low-rated conversations to focus on dissatisfied customers.

Filter by channel

Show only ticket auto-replies to audit automated responses separately from chat.

Sort by token usage

High-token conversations may indicate problems: the AI rambling, going in circles, or failing to answer the question.

Weekly audit routine

1
Check low-rated conversations

Read the full transcript. What went wrong? Was it a knowledge gap, a tone issue, or a wrong answer?

2
Check high-token conversations

These might indicate confusion. Was the AI repeating itself? Did it fail to understand the question?

3
Update training

For knowledge gaps, add articles to the Knowledge Base. For behavior issues, update the AI prompt. For recurring wrong answers, add explicit correction rules.

Finding knowledge gaps

Scenario:
You search AI History for "installation" and find 15 conversations where the AI said "I do not have specific installation instructions for this product."
What to do:

This means your Knowledge Base is missing installation guides. Create knowledge base articles for each product's installation steps. After adding them, test by asking the AI installation questions.

AI

AI insights

AI Insights automatically analyzes conversation patterns and surfaces actionable findings: common questions, satisfaction trends, knowledge gaps, and escalation patterns.

AI insights
AI insights (Intelligence Hub)The Intelligence Hub: an AI Today's Brief, Smart Alerts, a Score-a-Lead / Analyse-a-Page tool, and a 14-Day Traffic Pattern chart.AI insightsworkspaceTODAY'S BRIEFTraffic up 12%; 3 hot leads; 2 deals need follow-up.Smart AlertsCheckout errors spikedBounce up on /pricingNew hot lead from USRevenue ahead of last weekScore a Lead / Analyse a PageIP or URL…Run14-Day Traffic Pattern1TODAY'S BRIEFAI writes the morning summary2SMART ALERTSAnomalies surfaced3ON DEMANDScore a lead · analyse a page
The real Intelligence Hub: an AI-written Today's Brief, Smart Alerts for anomalies, on-demand lead scoring and page analysis, and the 14-day traffic pattern.

What insights show

Top questions

The most frequently asked questions. If "How do I reset my password?" is #1, your knowledge base needs a prominent password reset guide.

Satisfaction trends

CSAT scores over time. Is AI satisfaction improving or declining? Sudden drops may indicate a knowledge base change that broke something.

Resolution rate

What percentage of conversations does the AI resolve without human intervention? A rate above 70% is good. Below 50% means the AI needs more training.

Escalation reasons

Why conversations get handed off to humans. Common reasons: customer requested human, AI could not answer, sensitive topic, billing issue.

Knowledge gaps

Topics where the AI frequently says "I don't know" or gives low-confidence answers.

Average conversation length

How many messages per conversation. Very long conversations (10+ messages) might indicate the AI is not understanding the question.

Using insights to improve

Scenario:
AI Insights shows that 23% of escalations are "Customer asked about warranty" and the AI could not answer.
What to do:

This is a clear knowledge gap. Steps: (1) Write a comprehensive warranty article in the Knowledge Base covering all warranty terms, claim process, and exclusions. (2) Update the AI prompt to reference warranty information. (3) Monitor AI Insights next week to see if warranty escalations decrease.

AI

Admin AI playbook

The Admin AI (Ask OpsIQ) helps your team manage OpsIQ from within the admin dashboard. You can ask it to look up data, explain features, summarize tickets, and execute platform actions.

Admin AI
Admin AI playbookThe Ask-OpsIQ command box with an AI-proposed platform action card showing parameters and confirm/cancel.Ask OpsIQworkspaceAsk OpsIQSuspend the service for overdue account #4821AIProposed action: suspend_serviceaccount: #4821 (overdue ₦144,000)platform: WHMCS · reversible · auditedConfirmCancel1ASK ANYTHINGPlain-English commands2PROPOSE FIRSTAction shown before it runs3YOU CONFIRMScoped & audited
Tell the admin AI what you want in plain English; it proposes the exact action — scoped, reversible, audited — and waits for your confirm.

What the admin AI can do

Look up data

Ask: "Show me all tickets from [email protected]" or "What is the status of order #ORD-5523?"

Summarize

Ask: "Summarize the last 10 tickets" or "What are the top support issues this week?"

Explain features

Ask: "How do I set up auto-reply?" or "What does the bounce rate card mean?"

Execute actions

Ask: "Create a ticket for [email protected] about billing" or "Close ticket T-12345"

Platform queries

Ask: "How many visitors did we get yesterday?" or "What is our revenue this month?"

Example conversations

Looking up a customer

Scenario:
Admin asks: "Find customer [email protected] and show me their recent activity"
What to do:

The AI looks up the customer across all connected data sources: visitor sessions, tickets, chat conversations, orders, and CRM contacts. It returns a summary of recent activity with links to each item.

Getting a daily summary

Scenario:
Admin asks: "What happened today?"
What to do:

The AI summarizes: "Today you had 245 visitors (up 12%), 8 new tickets (3 resolved by AI), 2 new orders totaling ₦237,600, and 1 chat escalation about a shipping delay."

Executing an action

Scenario:
Admin asks: "Change ticket T-5523 priority to Urgent"
What to do:

The AI confirms: "I will change ticket T-5523 priority from Normal to Urgent. This will affect the SLA timer. Confirm?" You confirm, and the action is executed.

💡
The Admin AI only executes actions that are registered in the Action Registry. It cannot invent actions or access systems outside OpsIQ.
AI

Customer AI scenarios

This section covers common customer-facing AI scenarios with expected behavior and training tips.

Customer AI
Customer AI scenariosA library of customer questions paired with the expected AI behavior and an outcome tag for each.Customer AI scenariosworkspaceScenario library — expected AI behavior"Where is my order?"Look up the order via connector, give trackingResolve"I want a refund"Acknowledge, never promise — hand to a humanHandoff"Is the service down?"Check status, report current stateStatus"Cancel my account"Confirm intent, then route to a humanConfirm1SCENARIOSCommon questions2EXPECTEDHow AI should answer3TESTFind training gaps
A library of real customer questions and exactly how the AI should handle each — to test your training and find gaps.

Scenario library

Order status inquiry

Scenario:
Customer: "Where is my order #12345?"
What to do:

Expected AI behavior: (1) Look up the order through the platform connector. (2) Report current status (processing, shipped, delivered). (3) Include tracking number if available. (4) If the order is delayed, acknowledge and provide estimated timeline. (5) Never invent tracking information.

Password reset request

Scenario:
Customer: "I forgot my password and cannot log in"
What to do:

Expected AI behavior: (1) Provide the password reset steps from the knowledge base. (2) Include the reset link or page path. (3) Mention that the reset email may take a few minutes. (4) Suggest checking spam folder. (5) If the customer still cannot reset, escalate to a human.

Feature request

Scenario:
Customer: "Can you add dark mode to the mobile app?"
What to do:

Expected AI behavior: (1) Thank them for the suggestion. (2) Explain how feature requests are handled (logged, reviewed, prioritized). (3) Do NOT promise the feature will be built. (4) If a similar feature exists, mention it.

Billing dispute

Scenario:
Customer: "I was charged but my service is not working"
What to do:

Expected AI behavior: (1) Acknowledge the frustration. (2) Check the service status if possible. (3) Escalate to the billing department with all details. (4) Do NOT promise a refund. (5) Set ticket priority to High.

Off-topic question

Scenario:
Customer: "What is the weather like in London today?"
What to do:

Expected AI behavior: (1) Politely redirect. "I am your [Company] support assistant and can help with questions about our products and services. For weather information, try a weather service." (2) Ask if they have a product question.

How do I test customer AI behavior?+

Open your website in a private/incognito browser and chat with the AI as a customer. Try common questions, edge cases, and adversarial scenarios. Check that the AI follows your prompt rules and uses knowledge base content correctly.

AI

AI knowledge base

The Knowledge Base is a library of articles that the AI uses to answer questions. When a customer asks something, the AI searches the knowledge base for relevant articles and uses them to generate an accurate, grounded response.

Knowledge base
Knowledge baseSources feeding into a knowledge store, then an AI generating a grounded, cited answer.Knowledge baseworkspaceSourcesWebsite crawlHelp articlesFAQsImported docsKnowledgesemantic + keywordAIGrounded answerwith a cited source."Refunds take 3–5business days."1INGESTCrawl, FAQ, import2RETRIEVESemantic + keyword3GROUNDEDAnswers from your content
Crawl your site and import docs into the knowledge base; the AI retrieves the right pieces and answers, grounded and cited.

How it works

1
Customer asks a question

"What is your return policy?"

2
AI searches the knowledge base

OpsIQ finds the "Return Policy" article by matching keywords and semantic meaning.

3
AI generates a response

The AI reads the article and writes a natural-language answer based on the article content.

4
Customer gets an accurate answer

The response is grounded in your actual policy, not the AI's general training data.

Creating good articles

One topic per article

Write a separate article for each topic: return policy, shipping rates, account setup, password reset. Do not combine unrelated topics.

Write like a FAQ

Start with the question customers ask, then provide the answer. This helps the AI match questions to articles.

Be specific

"Returns must be initiated within 30 days of delivery" is better than "We have a return policy."

Include edge cases

What about international returns? What about digital products? What about items bought on sale? Cover the exceptions.

Keep it current

Review articles quarterly. Delete outdated information. Update pricing, policies, and procedures when they change.

Starter articles you should write

Shipping and delivery

Shipping costs, delivery times, tracking, international shipping, and handling delays.

Returns and refunds

Return window, conditions, process, refund timeline, and exceptions.

Account management

Password reset, email change, account deletion, and data export.

Pricing and billing

Plan descriptions, billing cycle, payment methods, invoices, and currency.

Product guides

How to use each product or feature. Step-by-step instructions with screenshots.

Troubleshooting

Common problems and solutions. Error messages and their fixes.

Contact information

Business hours, support channels, response times, and escalation paths.

Legal and compliance

Privacy policy summary, terms of service summary, GDPR data requests.

Connector knowledge

Each connector can contribute knowledge to the AI. When a connector is enabled, its built-in knowledge articles (product catalog, common questions, platform-specific troubleshooting) are automatically available to the AI. You can toggle connector knowledge on or off per connector in the Connector settings.

Token budget

The knowledge base has a configurable token ceiling (default: 32,000 tokens) that controls how much knowledge context is sent to the AI per conversation. If your knowledge base is very large, the AI selects the most relevant articles within this budget. Increase the ceiling if the AI is not finding relevant articles; decrease it if you want to reduce token costs.

How many articles should I have?+

Start with 5-10 articles covering your most common questions. Add more as you identify gaps through AI History and AI Insights. Most businesses need 20-50 articles for comprehensive coverage.

Can I import articles from another system?+

Currently, articles are created manually in OpsIQ. You can copy-paste content from existing FAQs, help centers, or documents.

What format should articles be in?+

Plain text works best. The AI understands natural language better than structured HTML or markdown. Write as you would explain to a customer.

Support

Help center

Your Help Center is a self-serve help site built from the articles you publish. Customers can read and search it on its own public page, and right inside the chat widget, so they can find answers on their own before they ever open a conversation. Everything in it comes from your knowledge base, so the same content that grounds your AI also powers your public help.

Where your customers see it

Its own public page

A clean, searchable help site at <code>/help.php</code>. Customers browse by category, search, and open any article. You can give it your own name and style.

Inside the chat widget

A help link in the chat widget so customers can search your articles without leaving the chat. If they still need a person, they are one tap away from starting a conversation.

Turn it on

1
Open the Help Center page

Go to <code>Config, then Help Center</code> in your admin and switch on <strong>Enable public Help Center</strong>.

2
Give it a name and a look

Set the Help Center name, which shows in the header and the browser tab, and pick a visual style. You can turn the top navigation off for a clean page with no menu.

3
Publish some articles

Nothing shows until you publish articles to it. The next part covers how.

Publish articles to the Help Center

Articles live in your knowledge base. An article appears in the Help Center once it is published and marked public. There are a few ways to do this:

Publish one article

Open the article, mark it published, and turn on the option to show it in the Help Center.

Publish everything at once

Use the <strong>Publish All</strong> button to push your whole published set to the Help Center in one click, instead of doing them one at a time.

Turn FAQs into articles

Already have FAQs? Use <strong>Publish all to Help</strong> to turn them into help articles so they sit alongside everything else.

Organize with AI

A tidy help center is easy to browse and easier to search. The Organize with AI button does the tidying for you. In one click it reads your published articles, sorts them into sensible categories, and adds tags. It creates a category when it needs one, reuses a category that already fits, and skips anything you have already organized, so you can run it again any time you add new articles.

💡
Categories give customers a way to browse, and tags sharpen search on both the public page and in the widget. You can rename or move things afterwards. The AI gives you a strong starting point, not a setup you are stuck with.

The Help Center inside your chat widget

You can show the Help Center right inside the chat widget so people search answers before they message you. In your chat widget settings, choose where the help link appears:

In the header

A small help icon at the top of the widget.

At the bottom

A text link under the message box, for example "Browse help center". You can change the wording.

Both places

Show it in the header and at the bottom for the most visibility.

The help link has its own color control under the widget Appearance settings. Leave it on None to match your launcher color, or pick a Solid color or a Gradient. The whole help experience follows your widget theme, so it always looks like part of your brand.

See which articles are working

Every article shows a Was this helpful? prompt. Each yes or no is counted per article, so you can see at a glance which articles answer questions well and which ones need a rewrite. Repeated votes from the same visitor are ignored, so the counts stay honest.

Text and labels

You can change the headings and labels on the Help Center to match your voice. Leave any field blank and it falls back to a sensible default, so you only edit the wording you actually want to change.

The Help Center shares one library with your AI. Every article you publish here is the same content the AI uses to answer chats and tickets, so improving one improves the other.

Common questions

Do I need to write separate content for the Help Center?+

No. It is built from the same knowledge base articles the AI already uses. Publish an article once and it can serve both.

Can I keep some articles internal?+

Yes. Only articles you publish and mark public appear in the Help Center. Anything unpublished stays out of it.

Will customers still be able to reach a person?+

Yes. The widget help link sits a tap away from starting a conversation, so self-serve never traps anyone.

Growth & SEO

Site Intelligence (SEO suite)

Site Intelligence is OpsIQ's built-in SEO and search-visibility suite. It crawls your site like a search engine, tracks where you rank, researches keywords, watches backlinks and competitors, scans your local map presence, checks page speed, and turns it all into customer-ready reports — with an AI analyst that explains what to fix and can draft the fixes. It is a premium feature; when enabled it appears as Site Intelligence in the sidebar. Every domain's data stays separate — crawls, rankings and reports never mix between domains.

Site Intelligence
Site Intelligence dashboardAn SEO dashboard showing a site-health score, keyword rank tracking and a traffic trend.Site Intelligenceyoursite.com86SITE HEALTH3 critical issuesKeyword rank trackingai helpdesk#3live chat saas#7crm for agencies#12Organic clicks1CRAWLFinds technical issues2TRACKRanks, keywords, backlinks3AI ANALYSTExplains and drafts fixes
The Site Intelligence overview: a site-health score from the latest crawl, live keyword rank tracking, an organic-clicks trend, and the three-step loop — crawl, track, let the AI draft the fixes.

Run a crawl — start here

A crawl is OpsIQ visiting your pages the way a search engine would, to find technical issues: broken links, missing titles, thin content, slow pages, indexing problems.

1
Start the crawl

On the Overview, click to start a crawl. OpsIQ queues it and works through your pages in the background; a status indicator shows progress.

2
Read the reports

When it finishes, open the issues and the page list. Each issue is grouped by severity so you tackle the biggest wins first.

3
Let the AI help

The AI analyst produces a plain-language brief of what is wrong and why it matters — and can generate suggested fixes you review before applying.

What Site Intelligence tracks

Crawls & site health

Scans your pages for technical SEO issues and lists every page with its problems. Re-run any time, or schedule it.

Rank tracking

Add the keywords you care about; OpsIQ checks where your site ranks and tracks movement over time.

Keyword research

Discover new keyword ideas to target, with the AI keyword coach to help prioritise.

Backlinks

See who links to you, refresh the list, and disavow links you do not want associated with your site.

Competitors

Add competitor domains and compare your visibility against theirs, with an AI competitor analysis.

Local (map) grid

Scan local-listing visibility across a geographic grid to see where you show up on the map, plus Google Business Profile tools.

Page speed

Run page-speed checks so you can fix slow pages that hurt rankings and conversions.

AI content

Generate content briefs and drafts aimed at the keywords you are targeting.

Reports

Build printable, customer-ready reports of everything above.

Connect Google for accurate data

Two Google connectors turn estimates into real numbers:

Google Search Console

Search

Pull the exact queries, clicks and impressions Google reports for your site, map your property, and surface ranking opportunities straight from Google's own data.

Google Analytics 4

Traffic

Bring your traffic and engagement data alongside your SEO data, so reports show visibility and behaviour together.

Scheduled refreshes & white-label reports

You do not have to run everything by hand. Scheduled refreshes re-run crawls, rank checks, keyword checks, backlink refreshes, local-grid scans and report generation on a cadence (daily or weekly depending on plan and volume). These run through the OpsIQ cron — see the Cron and automation section. Generated reports export as printable, customer-ready documents: agencies send each client a regular SEO update, and because every domain's data is separate, each client only ever sees their own.

Some Site Intelligence features call external data providers and AI through OpsIQ's configured provider — they work out of the box when the suite is enabled for your plan. If a refresh does not run, confirm the OpsIQ cron is running (see Cron and automation).
Do I need to add anything to my site for SEO tracking?+

Crawls, rank tracking, keyword research and backlinks work without touching your site. For traffic and exact search data, connect Google Search Console and GA4.

Can I track more than one domain?+

Yes. Add each domain separately; their crawls, rankings and reports stay fully isolated from one another.

How often should I crawl?+

Weekly is plenty for most sites; crawl on demand after a big content or structure change. Set a schedule so you never forget.

Growth & SEO

Auto-Implement (SEO Agent)

Auto-Implement is the part of Site Intelligence that actually applies the fixes the crawl and AI analyst recommend, instead of only advising you. The agent works strictly from what Site Intelligence already found — it can never invent a change — and walks each fix through the same safe loop: a dry-run preview, your per-step approval, the live write, an automatic snapshot, and a re-crawl that proves the open-issue count went down. It is a Managed-AI-only feature; it appears as the Auto-Implement (rocket) action inside the Site Intelligence section, and it is off until you turn it on.

Auto-Implement
Auto-Implement SEO agentA flow showing recommended SEO fixes moving through preview, approval and a live write, with a prove-it re-crawl.Auto-Implementyoursite.comRecommended fixesAdd missing <title>approvedFix robots.txtapprovedSubmit sitemap.xmlreviewDRY-RUN PREVIEW (DIFF)+ <title>AI Helpdesk - OpsIQ</title>+ <meta name=description ...>- <title>Home</title>ApproveSkipPROVE IT - RE-CRAWLOpen issues 124Snapshot saved1PREVIEWDry-run diff of each fix2APPROVE & WRITESSH or hosted API3PROVE & ROLLBACKRe-crawl + snapshot
How a session runs: the agent lists the fixes Site Intelligence already recommended, shows a dry-run diff of each one, applies the ones you approve over SSH or a hosted API, snapshots before every write, and re-crawls to prove the open-issue count dropped.

What it can change

The agent only ever applies fixes that Site Intelligence (or the AI analyst) already recommended for that domain. Across the supported platforms that covers:

Server config

sitemap.xml, robots.txt, and redirect, canonical and header rules in .htaccess (Apache / LiteSpeed) or the nginx config.

Redirect chains

Collapses a multi-hop redirect chain down to a single hop straight to the final URL, inside the same managed .htaccess block, so speed and link value stop leaking through the extra hops.

Page <head>

Missing or weak page titles, meta descriptions, canonical tags and structured-data (schema) blocks.

WordPress SEO

Yoast, Rank Math and SEOPress titles & meta, and image alt text, applied through WP-CLI on the SSH path or the REST API on the hosted path.

WordPress structured data

Adds JSON-LD (schema) to pages that are missing it. On the SSH path a small managed helper (a must-use plugin) prints the markup so it works with or without an SEO plugin; on the hosted path your SEO plugin carries it.

Internal links

Adds one relevant internal link inside existing WordPress content to rescue orphan pages and connect related posts. One link per page, never inside a heading, an existing link or a shortcode, and always approved by you first.

Thin-page content rewrites

Drafts full replacement content for thin pages (turned on by a crawl option, see below). Every draft is reviewed and approved by you before anything publishes, and the old content is kept so it can be restored.

Page cache (WordPress)

Turns on W3 Total Cache page caching when the crawl finds speed problems and that plugin is installed, so pages serve faster.

Shopify SEO

Product and collection SEO titles & descriptions, page and blog-article SEO, plus 301 redirects, through the Shopify Admin API.

Webflow SEO

Per-page SEO title and meta description through the Webflow Data API v2.

Prepare the fixes automatically (two crawl options)

The Site Intelligence Configure panel for a domain (its crawl settings) has two options that decide how much the agent lines up for you ahead of time. Both are off by default and both use AI credit, so you switch them on only when you want that work done for you.

Auto-prepare AI fixes after each crawl

Every crawl also writes the concrete fix content (titles, meta descriptions, alt text, schema, redirects) for what it found, so the fixes are ready to review and apply the moment the crawl finishes instead of being generated later on demand. Uses AI credit on each crawl.

AI content rewrites (thin pages)

The agent may draft full replacement content for thin pages. Nothing is ever published on its own: each draft appears as a change you review side by side and approve or reject, the previous content is kept so it is reversible, and it is limited to a few pages per pass. Uses AI credit per draft.

💡
Both options only prepare and draft work. Every change still goes through the same per-step approval, snapshot and rollback as any other fix, so turning them on never puts anything live by itself.

Two ways it connects

SSH / SFTP path

Self-managed

For sites on your own server, the agent connects over SSH/SFTP using credentials you store, edits the server config and page files directly, and runs WP-CLI for WordPress. Best when you have shell access and want full control of files.

Hosted-API path (no SSH)

No shell

For platforms that do not allow SSH, the agent works entirely through an official API connector — WordPress (REST + Application Passwords), Webflow (Data API v2) and Shopify (Admin API). Nothing is installed on the host.

💡
Wix and Squarespace have no public SEO-write API, so on those platforms Auto-Implement runs in advisory mode: it shows you the exact change to make (the precise title, meta or setting) for you to apply by hand. Everything else is read-only and safe.

Turn on the connectors

The agent reaches each platform through a connector:

Built in

Shopify and WordPress connectors ship with OpsIQ — just enable them under Connectors and add the store / site credentials.

From the Marketplace

Webflow, Wix and Squarespace install from Connectors → Marketplace, then connect the same way.

How a session runs

1
Pick the fixes

Open Auto-Implement (rocket) from the Site Intelligence section. It lists the issues Site Intelligence already found that it can fix on this domain.

2
Preview each change

For every fix the agent shows a dry-run diff — exactly what it will write — before anything touches the live site.

3
Approve step by step

You approve (or skip) each change individually. Nothing is applied without your explicit go-ahead on that step.

4
It writes, then snapshots

On approval the agent makes the live change over SSH or the hosted API and saves a snapshot first, so any change can be rolled back.

5
Prove it, live

As it applies each change the agent immediately re-checks that exact page and shows a per-step “fixed live” verdict, so you watch each fix land on the live page as it happens. At the end it re-crawls the whole site and confirms the open-issue count dropped.

Safety & billing

SEO-only

The agent can only do what Site Intelligence recommended for that domain — it cannot make arbitrary changes to your site or server.

Per-step approval

Every write is previewed as a diff and applied only after you approve that specific step.

Snapshot & rollback

A snapshot is saved before each write, so any change can be reverted.

Live per-step proof

Each changed page is re-checked the instant it is written and gets a “fixed live” verdict, so a fix is confirmed against the live page right away, not only in the closing re-crawl.

Content is never auto-published

Internal links and thin-page content rewrites are higher-impact, so they are always shown to you for approval and are never applied automatically, whatever mode you run.

Managed-AI only

Auto-Implement runs on Managed AI; it is blocked when a workspace is using its own (BYOK) keys.

Billing

AI tokens bill normally as you use them, plus one flat per-use fee per Auto-Implement session — both drawn from the same Managed-AI credit.

Auto-Implement is off by default. Enable it on the AI configuration page (Auto-Implement card) and make sure the connector for your platform is connected first.
Does it change anything without asking?+

No. Every change is previewed as a dry-run diff and applied only after you approve that exact step. A snapshot is saved before each write so you can roll back.

Do I need SSH access?+

Not on WordPress, Shopify or Webflow — those work through their official APIs with no shell access. SSH is only one of the two paths, used when you want the agent to edit server config and files directly on your own server.

How do I know it worked?+

After applying the approved fixes the agent re-crawls the site and shows the open-issue count before and after, so you can confirm the fixes reduced the issues.

Will it rewrite or publish page content on its own?+

No. AI content rewrites are off until you turn them on in the crawl options, they are limited to a few thin pages per pass, and every draft is shown to you for side-by-side approval before anything publishes. The previous content is kept, so a rewrite can always be reverted.

Can I use it with my own AI keys?+

No. Auto-Implement is Managed-AI only and is blocked under BYOK. It bills AI tokens normally plus one flat per-use fee per session, from the same Managed-AI credit.

Growth & SEO

Promotion Studio

The Promotion Studio turns your website into a conversion engine. Design pop-ups, banners, slide-ins, top/bottom bars, full-screen takeovers, inline blocks and even country-based redirects — then show the right message to the right visitor at the right moment. Everything is delivered through the OpsIQ widget already on your site, so there is nothing extra to install. You design and save campaigns any time; they only show once you Publish them and the studio is switched on for your workspace.

Promotion Studio
Promotion Studio designerA visual campaign designer with a blocks palette, a pop-up on the canvas, and a targeting panel.Promotion Studio - DesignerBLOCKSxWelcome, {first_name}!Get 15% off your first orderSAVE15Claim my couponTARGETINGCountryUS, CATriggerExit-intentA/B split50 / 50Publish1DESIGNDrag blocks onto canvas2TARGETCountry, page, audience3MEASUREA/B winner + AI insight
The visual designer: a blocks palette on the left, your campaign on the canvas (here a personalised coupon pop-up using a {first_name} token), and the targeting + publish panel on the right.

The big picture

Campaign

What

One promotion — a pop-up, banner, bar, slide-in, full-screen, inline block or geo-redirect. Each has a goal: sales, lead, sign-up, chat, survey, announcement.

Design & versions

How

You build the look in the visual editor. Every save creates a new version, so you can always roll back — nothing is ever lost.

Targeting

Who

Who sees it: country, page, device, traffic source, returning vs new, schedule, and — with a connector — your logged-in customers.

Triggers

When

When it appears: instantly, on delay, on scroll, on exit-intent, when idle, on a click, after N pages, or from chat / ticket activity.

Analytics

Results

Live impressions, click-through, conversions, a drop-off funnel, country / page / device splits, A/B winners and an AI insight.

Launch your first promotion in 5 steps

1
Start from a template or blank

Open Promotion Studio and click New campaign, or pick a ready-made design from the Templates gallery. A draft opens in the designer.

2
Design it

Drag in blocks — headings, text, buttons, images, badges, stats, countdowns, forms, coupons, videos, ratings, spin-wheels. Style colours, gradients and 3D effects with the sliders. Preview Desktop / Tablet / Mobile, and use Free move to place anything anywhere.

3
Personalise it

Type tokens like {first_name}, {country} or {company} into any text. At show-time they become the visitor's real values.

4
Target & trigger

Choose who sees it (country, page, device, audience) and when it fires (delay, scroll, exit-intent). Leave a rule blank to mean everyone.

5
Check, then publish

Click Check for a quick pre-launch scan, then Publish. It goes live within seconds and starts collecting analytics.

Blocks you can build

Content

Core

Heading, paragraph, list, quote, image, icon, badge, stat, divider and spacer — the building blocks of any message.

Call to action

Core

Buttons with real actions: open a link, start a chat, create a ticket, copy a coupon, or jump to a page.

Urgency & capture

Premium

Countdown timers, forms (email / phone / text), coupon reveals and video embeds.

Gamified & feedback

Premium

Spin-to-win wheels, scratch cards, NPS / star ratings and multi-step funnels.

Layout & effects

Premium

Columns, progress bars, social share, social proof tickers, yes/no two-step, quizzes, and 3D effects — tilt, glow, parallax, glassmorphism.

Personalisation tokens

Type any of these in headings, paragraphs, buttons, badges, stats, lists or quotes. They are replaced with the visitor's live details the moment the promotion shows (always cleaned for safety):

Available tokens
From the visit:   {country} {city} {device} {page_path} {utm_source} {referrer}
From your CRM:    {first_name} {last_name} {email} {company} {segment} {lifecycle_stage}
From a connector: {balance_due} {unpaid_invoices}   (logged-in customers only)

Targeting reference

Country & location

Show only in (or hide from) chosen countries, cities or timezones via GeoIP. Great for region-specific offers or a geo-redirect.

Pages & URLs

Limit to certain pages using equals / starts-with / contains / regex, and exclude pages too.

Device

Desktop, tablet or mobile — e.g. a slim bar on mobile, a modal on desktop.

Visitor type

New, returning, known (in your CRM) or anonymous; CRM segments, lifecycle stage, lead score or browser language.

Traffic source

By UTM (utm_source, utm_campaign) or referring site — e.g. only visitors from a specific ad.

Schedule & frequency

Start / end dates, time-of-day windows, and how often a person can see it (per session, per day, after they close / click / convert).

A/B traffic split

Show to a percentage of visitors and run variants head-to-head; the same person always sees the same variant.

Audiences (logged-in)

With a connector enabled, target by live account state — e.g. customers with unpaid invoices, or active subscribers.

Triggers

Pick how the promotion appears: Immediately, after a delay, on scroll depth, on exit-intent, when idle, on a click of an element, after a number of pages viewed, on form-abandon, or from chat / ticket activity. Developers can fire one from their own code with window.OpsIQPromo.fire('event').

Target logged-in customers (connectors)

This is what makes OpsIQ promotions special: connect a platform like WHMCS (or any connector that supports audiences) and the studio can target visitors by their live account state.

1
Enable an audience connector

Under Connectors, enable one that exposes audience facts (WHMCS does out of the box). Customers are recognised securely when logged into that platform — OpsIQ never trusts a typed-in email.

2
Add an audience rule

In the campaign's Targeting > Audience, require logged-in and add rules like unpaid invoices >= 1, subscription is past-due, or account credit > 0.

3
Personalise with their data

Use tokens such as {first_name} or {balance_due}. A "You have an overdue invoice" reminder writes itself.

Audience targeting is fail-safe: if the connector cannot confirm a fact (or the visitor is not logged in), the promotion simply does not show — so a billing-targeted offer never reaches the wrong person. Building your own connector? See "Promotion audience targeting" below.

Connected commerce (the studio superpower)

Product cards from your store

Live data

A Product block pulls real items — name, price, sale price, image, link — straight from WHMCS, WooCommerce, Shopify or your OpsIQ billing. Tick "Keep fresh" and the card updates its price from the platform every hour while published.

Store-provisioned coupons

Coupons

A coupon block can create the real discount code in your store the moment you publish, so the code a visitor reveals always works at checkout.

Order-truth revenue

Attribution

Real orders from your platforms are matched back to campaigns hourly — by coupon code used or by the lead's email — so the revenue you see is from actual sales, not estimates.

Real social proof

Trust

The social-proof ticker can lead with genuine recent orders ("Ada ordered Starter Plan · 2h ago") — first name and item only, never emails or amounts.

Experiments & journeys

A/B variants & auto-winner

Split traffic across design variants; let the studio promote the statistical winner automatically, or hand traffic to the bandit optimiser which shifts visitors toward what converts as evidence comes in.

Holdout uplift

Reserve a slice of visitors who see nothing, so you can prove the campaign itself causes the lift.

Segment variants

Different content per audience on the SAME campaign — mobile visitors, big carts, returning customers — each segment gets its own version.

Trigger experiments

Variants can also test WHEN to appear: immediate vs delayed vs exit-intent, measured head-to-head.

Journeys (chaining)

Target by what someone did with another campaign — "saw campaign A but didn't convert" — to build multi-step promotion sequences.

Teasers

A small pill visitors can reopen after closing the campaign, so a closed pop-up is never gone for good.

Know what happened

Click heatmap

Designer

In the designer, toggle the heatmap to paint real visitor clicks over every block of your design.

Step funnel

Funnels

Multi-step campaigns show exactly where people drop off, screen by screen.

Compare campaigns

Studio

Put up to four campaigns side by side — impressions, clicks, conversions — best value highlighted.

Weekly story & digest

AI

Every Monday a digest lands in your notifications; the 📖 Weekly story button writes a plain-language summary with next steps whenever you want one.

Working comfortably

AI copilot & ideas

Chat with the design copilot to edit the canvas ("make the headline urgent, add a countdown"), get campaign ideas from your own traffic data, translate a campaign per country, or auto-fix a low design score.

Brand Kit import

One command reads your website and proposes your real brand colours and fonts; save and every picker leads with them.

Multi-screen funnels

Steps blocks get true per-screen editing — tabs for each screen, add or reorder screens, and the preview follows along.

Named versions & presence

Name important versions ("Launch candidate"), restore any of them, and see a warning when a teammate is editing the same campaign.

Device strip & rulers

See desktop, tablet and mobile side by side in one view; toggle pixel rulers for precise placement.

Hosted page & channels

Every campaign can also be a standalone hosted page for bios and QR codes, an email drip sequence for captured leads, or a one-click web-push draft.

Enterprise safety

Publish freeze windows (change-freeze periods), an emergency pause-all switch, approvals, audit trail and version rollback.

Do I need to add code to my site?+

No. Promotions are delivered by the same OpsIQ widget you already installed. Design, publish, done.

Will visitors see the same pop-up over and over?+

No — set frequency caps (per session / per day, or stop after someone closes, clicks or converts). Sensible defaults are applied.

Who can publish?+

Publishing, pausing, archiving and rolling back are limited to workspace owners and full administrators. Any team member can create and design drafts.

Growth & SEO

Proactive messages

Proactive Messages reach out automatically the moment a visitor's behaviour matches a rule — before they ask. You build each as a rule with three parts: what should happen, when it should fire, and how often. Everything is delivered through the OpsIQ widget already on your site.

Proactive
Proactive messagesA proactive-rule composer in three parts: choose an action (chat, banner, tour, push, email), add conditions, and set a frequency cooldown.Proactive Messagesworkspace1 · ActionChat messageBannerTourPushEmail2 · Conditionspage = /pricingtime on page > 20sreturning3 · FrequencyOnce per sessionStatus1ACTIONChat, banner, email, push…2CONDITIONSPage, time, score, returning3FREQUENCYCooldown per visitor
Every proactive rule is three choices: what happens (chat, banner, tour, push, email, webhook), when (conditions), and how often (cooldown).

The three parts of a rule

1
What should happen (action)

Show a chat bubble or on-page banner, start a Guided Tour, send a web push or email, assign to a department, or fire a webhook. Tokens like {{visitor_name}} and {{page_title}} become real values.

2
When it should fire (conditions)

Narrow who triggers it: page/URL, time on page, scroll depth, lead score, returning vs new, idle. With no conditions, the rule fires for every visitor — add at least one to target it. Conditions combine with AND.

3
How often (frequency)

Set a cooldown so the same person is not pestered — e.g. once per session or once per day. Each rule has an on/off status.

⚠️
The workspace toggle "Run time/idle rules hourly" lets server-side actions (email, push, webhook, assign) fire on a schedule for known contacts who are not currently on the page — so you can "email idle hot leads" automatically. It needs the OpsIQ cron running. Leave it off if you only want live on-page nudges.
Will it fire for everyone?+

Only if you add no conditions. Add at least one condition (page, lead score, returning…) to target the right visitors.

How do these relate to flows and tours?+

They work together: a proactive rule can start a Guided Tour, and a Chatbot Flow can be triggered by a proactive rule. Start with a single chat-message rule, then layer the others on.

Growth & SEO

Chatbot flows

Chatbot Flows script branching conversations inside your chat widget — greetings, keyword answers, guided paths — with no code. A flow is a set of connected steps (nodes): you ask a question, the visitor picks an option, and the flow sends them down the matching branch. Only Active flows run on your site.

How it works
Chatbot flowsA flow canvas: a greeting node branches into three option buttons, each leading to a next step — look up order, or hand off to a human.GreetingHi! How can I help?Track my orderBilling questionTalk to a humanLook up order→ Human agentTriggers: Greeting · Keyword · Manual · After-details · On-chat-end
Chatbot flows

Flow vs the AI — when to use which

Use a flow

When the path is predictable and you want it identical every time — booking steps, a returns wizard, a "which plan?" chooser, collecting an email before handoff. Flows never improvise.

Use the AI

When questions are open-ended — "does this work with my setup?". The Customer Chat AI answers from your trained knowledge. A flow can hand off to the AI (or a human) at any step.

Triggers

Greeting

Runs as the opening message when a visitor first opens the chat.

Keyword

Runs when the visitor types a word you listed (e.g. refund, pricing, cancel).

After details / After delay

Starts once contact details are shared, or a set time into the conversation.

On chat end / Proactive

Runs as the chat wraps up (e.g. a rating), or is started by a Proactive Message rule.

Build one in four steps

1
Create the flow

Click New Flow, name it, pick a trigger type (and keywords if Keyword), save. It starts switched off.

2
Open the canvas

Click Edit Canvas — the visual builder where you add steps (messages, questions with buttons, branches) and connect them.

3
Add branches and a hand-off

For each choice, draw a branch to the next step. End paths by resolving, handing to the AI, or transferring to a human.

4
Enable it

Click Enable. The flow goes live in your widget immediately. Disable any time without losing the design.

Do flows replace the AI?+

No — they run side by side. Use flows for predictable paths and the AI for open-ended questions; a flow can always hand off to either.

Growth & SEO

Guided tours

Guided Tours are step-by-step walkthroughs that point at parts of your page with speech bubbles and a spotlight, guiding a visitor through onboarding or a new feature. They are fully themed and built in a visual designer with a live preview. A tour runs only when it is marked Active.

How it works
Guided toursA dimmed page with a spotlight ring around an Add-deal button and a themed speech bubble reading Step 1 of 4 with a Next button.+ Add dealSTEP 1 OF 4Create your first dealClick here to add a deal to your pipeline.Next →
Guided tours

How a tour is built

Steps

Each step targets an element and shows a bubble with your text. Add as many stops as the walkthrough needs and order them.

Presets & theme

Start from a preset or design your own bubble — colours, gradients, spotlight — with a live preview on the right.

Trigger

Optionally link a Proactive Rule so the tour auto-starts when that rule fires (e.g. a returning visitor's first dashboard visit).

Active toggle

A tour is eligible to run only while Active is ticked. Untick to take it down without deleting it.

Build one in four steps

1
New tour

Click New Guided Tour, name it, and optionally link a Proactive Rule so it starts automatically.

2
Add steps

Add each stop: choose the element it points to and write the bubble text. Reorder until the path flows.

3
Design it

Pick a preset or style the bubble yourself. The live preview shows exactly what visitors see.

4
Activate

Tick Active and save. The tour can now run — on its own trigger, or started by a Proactive Message rule.

How do tours start?+

On their own trigger, or via a Proactive Message rule's "Guided tour" action — so you decide which visitors see which tour and when.

Growth & SEO

Conversion goals

Conversion Goals turn an activity you care about — an inbound webhook event, a chat message, a ticket resolution — into a recorded conversion with full attribution. When the activity fires, OpsIQ logs a conversion against the contact and ties it back to the campaigns, segments and sources that led there.

How it works
Conversion goalsA goal flow: a payment.succeeded webhook event becomes a recorded "purchase" conversion worth ₦58,800, attributed to its source and campaign, with quick-start preset chips above.Quick startStripe purchaseDemo bookedNewsletter signuppayment.succeededinbound webhookConversion"purchase" · ₦58,800Attributedsource · campaign
Conversion goals

Define a goal in three steps

1
Pick the trigger activity

Click New conversion goal. Choose the activity type that counts as a conversion, or use a Quick-start preset — Stripe purchase, Demo booked, Newsletter signup or Subscription started.

2
Name it and set a value

Give the conversion a name (purchase, demo_booked, signup) and optionally a fixed value and an attribution window.

3
Save

Save and enable. From then on, whenever the activity fires, OpsIQ records a conversion against the contact with attribution to the preceding touches.

Goals are already wired into inbound webhooks: any goal whose trigger matches an inbound event's type fires automatically the moment the event lands. Use the Inbound Webhooks page to connect Stripe, Calendly or any system that can POST JSON.
What can be a conversion?+

Any recorded activity — an inbound webhook event (payment.succeeded), a chat email capture, a ticket resolution — anything on the contact timeline.

Analytics

Custom dashboards

Custom Dashboards let you build your own view of the metrics that matter, instead of relying only on the standard Overview. Add the widgets you want, drag and resize them into the layout you like, save it, and share it with your team.

Custom dashboards
Custom dashboardsA dashboard builder with KPI and chart widget tiles, a dashed drop zone, and an Add-widget button.Custom DashboardsworkspaceMy dashboard+ Add widgetVISITORS2,481REVENUE₦9,840kTRAFFICDrag a widget hereTOP PAGES/pricing/docs/signup1ADD WIDGETSPick metrics & charts2ARRANGEDrag & resize3SHAREWith your team
Build your own board: add KPI, chart and list widgets, drag and resize them into the layout you want, then share it with the team.

Build one in three steps

1
Add widgets

Click Add Widget and pick the metric or chart you want to track. Repeat for everything you want on the board.

2
Arrange the layout

Drag widgets to reposition and drag their edges to resize. KPIs across the top, charts below — whatever reads best.

3
Save & share

Save the dashboard and share it with your team so everyone watches the same numbers.

Keep separate boards for separate jobs — a "daily glance" board with live counts, and a "monthly review" board with trend charts — so each stays focused.
Growth & SEO

Outreach campaigns

Outreach is OpsIQ's 1:1 and bulk email engine: compose a personalised message or run a campaign to a CRM segment, with reply detection, send-time control, open/click tracking, a tracking pixel and one-click unsubscribe. It is consent-gated and CAN-SPAM / CASL compliant.

Outreach
Outreach campaignsThe Outreach screen with Composer/Campaigns/Templates/Replies tabs and a campaign table showing sent, open-rate and reply-rate.OutreachworkspaceCampaignsComposerTemplatesRepliesCAMPAIGNSENTOPENREPLYJune newsletter1,20048%7%Trial follow-up34062%14%Win-back82039%5%Reply detection auto-stops follow-ups · one-click unsubscribe on every send11:1 & BULKCompose or campaign2TRACKEDOpens, clicks, replies3COMPLIANTUnsubscribe built in
The Outreach engine: send 1:1 or run campaigns to a segment, track opens and replies, and stay compliant with built-in unsubscribe and reply detection.

The four tabs

Composer

Write a personalised 1:1 email with {tokens} from the contact and CRM.

Campaigns

Send to a CRM segment, scheduled or now, with caps and send-time control.

Templates

Reusable message templates for repeated outreach.

Replies

Reply detection records responses and auto-stops follow-ups to anyone who replied.

How a campaign runs

1
Pick an audience

Choose a CRM segment (or upload a list). Suppression and consent are applied automatically.

2
Compose

Write the message with personalisation tokens; preview against a real contact.

3
Schedule & send

Send now or at the best time. A tracking pixel records opens; clicks and replies are attributed.

Outreach is consent- and suppression-gated, includes a one-click unsubscribe on every send, and follows CAN-SPAM / CASL — replies automatically stop further follow-ups.
Analytics

Scheduled reports

Scheduled Reports email a chosen metric set to chosen recipients on a schedule — daily, weekly or monthly — as a printable, white-label PDF. Set it once and the report lands in inboxes automatically through the OpsIQ cron.

Scheduled reports
Scheduled reportsThe scheduled-reports screen: a table of reports with their schedule, recipients and last-sent time, plus a Save-report button.Scheduled ReportsworkspaceScheduled reports+ Save reportREPORTSCHEDULERECIPIENTSLAST SENTWeekly trafficMon 9:00[email protected]2d agoSEO client reportMonthly[email protected]Jun 1Sales summaryDaily[email protected]todayDelivered as a white-label PDF via the OpsIQ cron1AUTOMATEDDaily · weekly · monthly2WHITE-LABELPDF to clients3RECIPIENTSEmailed on schedule
Set a report once — metric set, range, schedule, recipients — and OpsIQ emails a white-label PDF automatically on your cadence.

Set up a report

1
Choose what to send

Pick the metric set (traffic, SEO, sales, support…) and a date range.

2
Set schedule & recipients

Daily, weekly or monthly, at a time you choose, to one or more email recipients.

3
Save

Save and enable. The report generates and emails itself on schedule — no manual step.

💡
Scheduled reports run through the OpsIQ cron — if a report does not arrive, confirm the cron is running (see Cron and automation).
Privacy

Privacy & compliance

The Privacy & Compliance page is the single place to show an auditor you handle personal data responsibly: the consent ledger, the admin access log, your data residency and retention policy, and a ready-to-print DPA — in one tabbed view. Only full administrators can open it.

Privacy & compliance
Privacy & complianceThe Privacy & Compliance screen: tabs for Consent ledger, Access log, Residency and DPA, with a consent ledger table of grants and revokes by channel.Privacy & ComplianceworkspaceConsent ledgerAccess logResidencyDPACONTACTCHANNELACTIONDATE[email protected]emailGrantedJun 12[email protected]pushRevokedJun 10[email protected]marketingGrantedJun 9Searchable proof of every consent grant and revoke, by channel1CONSENT LEDGERProof of every grant2ACCESS LOGWho touched data3DPAPrintable template
One auditor-ready screen: a searchable consent ledger (grants/revokes by channel), an access log of who touched data, residency/retention settings, and a printable DPA.

The four tabs

Consent ledger

A searchable record of every consent grant and revoke — by contact, channel (email, push, SMS, in-widget), action, source and date. Your proof a contact agreed (or withdrew).

Access log

Who on your team viewed, edited, exported, erased or messaged a contact's data — with the admin, contact, action, stated reason and IP. Exactly what a regulator asks for.

Residency & retention

Declare where this workspace's data lives, set how many days activity rows are kept (0 = forever), and record your data controller and DPO.

DPA template

A printable Data Processing Addendum that fills in your controller, address, DPO, residency and retention. Print or save as PDF.

Privacy & Compliance pairs with the Cookie consent studio (which collects consent) and the Export page (which produces the data copy for a DSAR). See also Cron and automation for the nightly retention cleanup.
Connectors

Connect your platforms

Connectors link OpsIQ to external platforms: e-commerce stores, billing systems, payment processors, email providers, and custom APIs. Once connected, the AI can look up orders, customer data, subscriptions, and more — and take actions with your approval.

How it works
Connectors hubOpsIQ core connected to WHMCS, Shopify, Stripe, WooCommerce, SendGrid and Google Business Profile, each showing a connected status.WHMCSShopifyStripeWooCommerceSendGridGoogle BPOpsIQCORE1PLUG IN25+ pre-built connectors2AI CONTEXTReal platform data3ACTIONSDone with your approval
Connectors

Pre-installed connectors

WHMCS

Billing

Web hosting billing: clients, services, tickets, invoices, domains, servers.

Shopify

E-commerce

E-commerce: orders, customers, products, inventory, payments, webhooks, GDPR.

WooCommerce

E-commerce

WordPress e-commerce: orders, customers, products, coupons, shipping.

Stripe

Payments

Payments: charges, customers, invoices, subscriptions, payouts, disputes.

Paystack

Payments

African payments: transactions, customers, plans, subscriptions.

BigCommerce

E-commerce

E-commerce: orders, customers, products, categories, brands.

Magento 2

E-commerce

E-commerce: orders, customers, products, categories, inventory.

PrestaShop

E-commerce

E-commerce: orders, customers, products, cart rules, carriers.

OpenCart

E-commerce

E-commerce: orders, customers, products, categories.

osCommerce

E-commerce

Legacy e-commerce: orders, customers, products.

Zendesk

Support

Helpdesk: tickets, users, organizations, comments.

Google Business Profile

Marketing

Local business: reviews, posts, Q&A, insights. Uses OAuth.

Amazon SES

Email

Email delivery: send transactional emails via Amazon SES.

Postmark

Email

Email delivery: send transactional emails via Postmark.

Resend

Email

Email delivery: send transactional emails via Resend.

SendGrid

Email

Email delivery: send emails and manage templates via SendGrid.

Mailgun

Email

Email delivery: send emails via Mailgun.

Installing a connector

1
Go to Connectors

Navigate to Connectors in the admin sidebar.

2
Find the connector

Browse the list or search. Connectors are grouped by category.

3
Enable it

Click the connector and toggle Enable.

4
Enter credentials

Fill in the required fields: API key, URL, tokens, etc. Each connector has specific requirements documented in its settings panel.

5
Test connection

Click "Test Connection." A green result means the connector can reach the external platform. A red result shows the error.

6
Configure features

Choose which features to enable: knowledge sync, webhook sync, AI actions. Not all connectors support all features.

What connectors give you

AI context

The AI can look up customer data, orders, subscriptions, and more through the connector. When a customer chats, the AI has real platform data to reference.

AI context (connector authors)

Your connector's ContextProvider feeds the ticket-AI a read-only account summary of the ticket owner. Resolve the customer by <code>customer_id</code> when known; otherwise — on ticket auto-replies, where the ctx flag <code>customer_trust_email</code> is true — look the account up by <code>customer_email</code> (the verified ticket sender). Remote platforms expose a <code>/context/customer-by-email</code> endpoint and the connector calls it. This is what makes the AI quote a real balance/invoice instead of saying “please log in.” Honour the operator's data-class toggles (<code>customer_sections</code>, <code>customer_allow_credit</code>) and stay strictly read-only — never emit secrets.

Customer directory (connector authors)

Your connector's IdentityProvider feeds three universal ticket lookups: <code>lookupCustomerById()</code> (customer card), <code>lookupCustomerServices()</code> (product/service table), and <code>listCustomers($query,$limit)</code> — the "Search customer or type email" picker on the native Compose-New-Ticket form. Return rows of <code>{id, external_id, name, email, company, phone, platform, platform_label}</code>. <strong>Remote rule:</strong> if your customers live in another database or service, fetch them over your platform's API inside these methods — never read the other system's tables directly (in the OpsIQ DB they're empty placeholders, which is why a local read returns an empty picker). Gate the remote path on your configured API URL; keep a local read only as a same-DB fallback.

Email-piped tickets — detection & routing (connector authors)

When inbound email becomes a native ticket, OpsIQ detects the sender by calling <code>lookupCustomerById(0, ['email'=>$sender])</code> across every connector; the first match "owns" the customer and its <code>platform</code> slug is stamped on the <code>ticket.created</code> event as <code>_pipe_owner_platform</code> (empty = guest). So a WHMCS-customer email opens a ticket in WHMCS (WHMCS numbering, mirrored as one), while an unknown sender stays a native guest. <strong>If your connector mirrors native tickets onto its own platform</strong>, your <code>ticket.created</code> handler must gate on this: <code>if (array_key_exists('_pipe_owner_platform',$payload) && $payload['_pipe_owner_platform'] !== '<your-slug>') return;</code> — the key is absent on non-piped (chat/manual/AI) tickets, so those mirror as before. Per-department control lives under Team & Departments → Open tickets via email (Anyone / Customers only / Off).

Actions

The AI can perform actions through the connector: create tickets, update orders, cancel subscriptions — all with your approval through the Trust Layer.

Knowledge

Connectors contribute platform-specific knowledge articles to the AI. Shopify connector adds e-commerce troubleshooting; WHMCS connector adds hosting knowledge.

Webhooks

Some connectors register webhooks with the external platform for real-time event notifications (new orders, ticket updates, etc.).

Sales tracking

E-commerce connectors feed revenue data into the Sales dashboard for attribution and analytics.

💡
Connectors are workspace-scoped. Each workspace can have different connectors enabled with different credentials. A WHMCS workspace uses the WHMCS connector; a Shopify workspace uses the Shopify connector.
Can I use multiple connectors at once?+

Yes. You can have Shopify for orders and Stripe for payments in the same workspace. The AI merges data from all enabled connectors.

What if my platform is not listed?+

Use the Connector Builder to create a custom connector for any platform with a REST API. Or check the Marketplace for community-built connectors.

Do connectors work with self-hosted OpsIQ?+

Yes. Connectors work identically in both cloud and self-hosted editions.

Connectors

How AI actions work

Every connector declares a set of actions: things the AI can do through the external platform. Actions are the bridge between "the AI says" and "the AI does."

AI actions
How AI actions workA customer request mapped to a delete-type action card, then a checklist: permission checked, you confirm, API called.How AI actions workworkspace"Cancel my subscription"customerAIcancel_subscriptiondeleteconfirm requiredparams: subscription_id (from context)ACTION TYPESreadwritedeletePermission & role checkedYou confirm the actionAPI called · result reported1DECLAREDEach connector lists actions2GATEDPermission + confirm3THEN RUNAPI call, result back
A request becomes a declared action — typed read/write/delete — that is permission-checked, confirmed, then executed and reported.

The action lifecycle

1
Customer asks for something

"Cancel my subscription." The AI identifies this requires the "cancel_subscription" action.

2
AI checks permissions

Is this action allowed? Is it enabled? Does the current user have the right role?

3
AI gathers parameters

The action needs a subscription ID. The AI looks it up from the customer context or asks the customer.

4
Confirmation

For destructive or high-impact actions, the AI asks for confirmation before executing.

5
Execution

The action calls the external platform API.

6
Result

The AI reports the result to the customer.

Action types

Read actions

Look up data without changing anything. Examples: list_orders, get_customer. Safe, no confirmation needed.

Write actions

Create or modify data. Examples: create_ticket, update_order. May require confirmation.

Delete actions

Remove data. Examples: cancel_subscription. Always require confirmation.

HTTP actions

Declared in actions.json — generic API calls defined declaratively.

Capability tags

Optional per-action "capability" field in actions.json — a connector-neutral class tag (e.g. "tickets" for a ticket read/lookup, "ticket_create" for opening a ticket). OpsIQ gates the whole class uniformly across every connector: ticket reads drop out of the AI when the operator turns off AI Ticket Awareness, and ticket creation is reserved for OpsIQ's own composer (so a connector's create tool can't duplicate it). Declare it and your connector conforms — OpsIQ never needs to know your action names. The Connector Builder exposes it as a Capability dropdown per action.

Code actions

Implemented in PHP in the connector class. Full control over logic.

Example action definition
{
  "lookup_order": {
    "label": "Look up an order",
    "description": "Find an order by ID or email",
    "method": "GET",
    "endpoint": "/admin/api/2024-01/orders.json",
    "params": {
      "order_id": { "type": "string", "label": "Order ID" },
      "email":    { "type": "email",  "label": "Customer email" }
    }
  }
}
Connectors

Build a connector

The Connector Builder lets you create a complete connector for any platform with a REST API. No coding required for basic connectors.

Build a connector
Connector BuilderA no-code connector form: name, OAuth auth type, base URL, an action mapping, a passing test and a package button.Connector BuilderworkspaceConnector BuilderNameMy PlatformAuthOAuth 2.0 (PKCE)Base URLhttps://api.example.com/v2ActionGET/customers → list_customersTest passedPackage connector1NO-CODEName, auth, base URL2ANY APIKey, Bearer, Basic, OAuth3PACKAGEactions.json + knowledge.json
Point the builder at any REST API — set auth, base URL and actions, test it, and package a shippable connector. No code needed.

Connector Builder wizard

1
Name and describe

Give your connector a name, slug, description, and category.

2
Set authentication

Choose: API key (header or query), Bearer token, Basic auth, or OAuth 2.0 (with PKCE).

3
Define the base URL

The root URL for all API calls. Example: https://api.example.com/v2

4
Add actions

Define actions with: name, HTTP method, endpoint path, parameters, and response mapping.

5
Add knowledge

Write knowledge base articles specific to this platform.

6
Test

Enter test credentials and run each action to verify it works.

7
Package

Generate the connector package: actions.json, knowledge.json, profile.json, and optionally PHP code.

Authentication types

API key

A static key sent in a header or query parameter. Simplest method.

Bearer token

Token sent in the Authorization header. Common for modern APIs.

Basic auth

Username and password encoded in the Authorization header.

OAuth 2.0

Full authorization code flow with PKCE. OpsIQ handles redirect, exchange, and refresh via OAuthHelper.

Pagination styles

Offset

Uses offset and limit parameters. Example: ?offset=100&limit=50.

Page

Uses page number. Example: ?page=3&per_page=50.

Cursor

Uses a cursor token from the previous response.

Link header

Uses the Link response header with rel="next".

Advanced: custom PHP code

Custom connector PHP example
<?php
namespace OpsIQ\Connectors\MyPlatform;

use OpsIQ\Connectors\AbstractConnector;

class MyPlatformConnector extends AbstractConnector
{
    public function identifier(): string { return "myplatform"; }
    public function label(): string     { return "My Platform"; }

    public function testConnection(): array
    {
        $resp = $this->http("GET", "/me");
        return $resp["ok"]
            ? ["status" => "ok", "message" => "Connected"]
            : ["status" => "error", "message" => $resp["error"]];
    }

    protected function runAction(string $action, array $params): array
    {
        return match ($action) {
            "list_customers" => $this->http("GET", "/customers", [
                "query" => ["page" => $params["page"] ?? 1],
            ]),
            default => ["error" => "Unknown action: $action"],
        };
    }
}

Mirror tickets into the native ticket system

When your platform owns a ticket, mirror it into OpsIQ via OpsIQ\Tickets\TicketService::create() (and addReply() for follow-ups). Emit and subscribe to the universal ticket events in your connector's subscribers() method — ticket.created, ticket.replied, ticket.updated, ticket.deleted. Auto-reply, escalation, SLA and CSAT all hook the same events, so you inherit them with no extra code.

Push attachments correctly

Hand an attachments array to create()/addReply(). Each item carries the file in one of three shapes:

content_b64

Base64 of the RAW file bytes — use for files behind auth (most inbound cases). OpsIQ decodes and re-hosts it under /opsiq/uploads/ via the universal AttachmentIngest. The most portable shape.

url / source_url

A public https URL (e.g. a Zendesk content_url). Must be https; passes an SSRF / allowlist check before it is stored.

stored_path

A path under /opsiq/uploads/ you already wrote (what the native composer uploader produces).

Items also accept filename, mime_type and size_bytes. Caps: 12 MB/file, ~24 MB total, 10 files per call. Most platform read APIs return attachment filenames only (not bytes), so the reliable inbound pattern is: read the bytes where your code already runs — inside the platform, or from the webhook payload — base64 them, and ship them as content_b64 on the event.

Outbound (OpsIQ → your platform). When an agent attaches a file, the ticket.replied payload gives you the reply's files as stored_path items under /opsiq/uploads/. Read them and push in your platform's own format — and check the platform docs, the encoding matters: WHMCS wants base64_encode(json_encode([[name,data]])) (JSON, not serialize); Zendesk uploads raw bytes to /uploads.json for a token then sets comment.uploads; Gmail sends a multipart/mixed RFC-822 message base64url-encoded in raw; Amazon SES inbound attachments need the S3 receive action (the SNS path caps at 150 KB).

Remote platforms: API + webhook, never another app's tables

If your platform is a separate app or database (a hosted SaaS, a remote WHMCS, a different DB on the same server), never write its tables directly — a cross-database write lands on whatever connection is active and silently misses the real rows. Always: outbound = call the platform's signed REST API (replies, status, department, deletes); inbound = the platform POSTs a signed webhook, your handleWebhook() verifies it and fires the matching ticket.* event. To stop a mirror loop, tag what you push with an origin marker (e.g. mirror_origin:'opsiq'); the platform echoes it on the webhook and your inbound handler skips its own echoes. Check OpsIQEvents::isMirroredEvent() at the top of every handler.

Mirror status, priority & department

A reply moves status automatically — an agent reply → answered, a customer reply → customer_reply; mirror that the same way. For explicit changes subscribe to ticket.updated and read payload['changes'] (e.g. {status:'closed'}).

Status: OpsIQ's canonical set is open, customer_reply, answered, in_progress, pending, closed. Keep a small two-way map to your platform's vocabulary, and make sure your column actually accepts the values you write (an ENUM missing a value gets silently dropped to empty by some databases). Department: the OpsIQ department id is meaningless on your side — never send it. Send the descriptor (name / email / slug from opsiq_departments) and resolve it against your own departments by email → name → slug, so “Billing Department” lands in your Billing department instead of general. Trigger on both ticket.escalated and a department_id change in ticket.updated.

💡
Status / priority / subject / department / delete mirroring is gated by per-connector toggles (mirror_status_changes, mirror_priority_changes, mirror_subject_changes, mirror_department_changes, mirror_deletes) read through the shared OpsIQ\Connectors\MirrorOptions helper. Embed that block in your settings.json and every ticket-mirror connector reads the toggles identically.

Link a ticket to a product / service

If the customer chose a specific product when opening the ticket, stamp a hint so the agent sees a focused service card (with a one-click "view other products" modal for the rest). Pass any of these to create():

related_service_id

Preferred — the service id exactly as it appears in your IdentityProvider::lookupCustomerServices() list (each service's id). Unambiguous match.

related_service_label

A platform service-code, e.g. WHMCS S396 (service 396) / D11 (domain 11). OpsIQ decomposes the optional type-letter + id and matches your service list, with a type guard so a domain code never matches a product of the same id. Expose a matching ref on each service for an exact match.

related_domain

A domain name; matched as a substring against each service's detail / domain.

💡
Build the attachment items once and let OpsIQ\Tickets\AttachmentIngest re-host content_b64 / pass URLs through — never write platform-specific re-hosting in core. Reference: src/Tickets/AttachmentIngest.php and persistAttachments() in opsiq/includes/TicketService.php.
⚠️
Action keys must be 3-80 characters, lowercase, letters/numbers/underscores. After adding new AJAX routes, run php tools/gen_route_registry.php.
Connectors

Connector recipes

Step-by-step recipes for common connector setups.

Recipes
Connector recipeA Shopify setup recipe as a checklist: create app, grant scopes, paste token and test, enable webhooks, place a test order.Connector recipeShopifyRecipe · Shopify with webhooksCreate a custom app in Shopify adminGrant scopes: read_orders, read_customers…Paste store domain + token, click TestEnable Webhook sync (orders auto-register)Place a test order → appears in Sales in 30s1STEP BY STEPCopy-paste recipes2REAL PLATFORMSShopify · WHMCS · Stripe · GBP3VERIFYTest order shows in 30s
Each recipe is a checklist you follow top to bottom — here, Shopify with real-time order webhooks, verified by a test order.

Recipe: Shopify with real-time webhooks

Scenario:
Goal: Connect Shopify with automatic order sync and GDPR compliance.
What to do:

1. Create a custom app in Shopify admin (Settings > Apps > Develop apps). 2. Grant scopes: read_orders, read_customers, read_products, write_customers. 3. Copy the Admin API access token. 4. In OpsIQ Connectors > Shopify, enter store domain and token. 5. Click Test Connection. 6. Enable Webhook sync — OpsIQ registers order/customer webhooks automatically. 7. GDPR webhooks register automatically (data_request, customers/redact, shop/redact). 8. Verify: place a test order, check it appears in OpsIQ Sales within 30 seconds.

Recipe: WHMCS integration

Scenario:
Goal: Connect WHMCS so AI can look up clients, services, tickets, and invoices.
What to do:

1. In WHMCS admin, Setup > Staff Management > Manage API Credentials. Create a key. 2. In OpsIQ Connectors > WHMCS, enter URL, API identifier, and secret. 3. Click Test Connection. 4. Install the WHMCS module addon for ticket relay. 5. Verify: ask the admin AI "Find client [email protected]" — WHMCS data should appear.

Recipe: Stripe payments

Scenario:
Goal: Track Stripe payments and let AI look up transactions.
What to do:

1. In Stripe Dashboard > Developers > API keys, create a restricted key (read: Customers, Charges, Invoices, Subscriptions). 2. In OpsIQ Connectors > Stripe, enter the restricted key. 3. Test Connection. 4. Add webhook endpoint in Stripe: https://your-domain.com/connectors.php?slug=stripe 5. Select events: charge.succeeded, invoice.paid, customer.subscription.updated. 6. Copy the webhook signing secret to OpsIQ. 7. Verify: make a test payment, check it in OpsIQ Sales.

Recipe: Google Business Profile

Scenario:
Goal: Connect GBP for review management, posts, and insights.
What to do:

1. Create a Google Cloud project, enable Business Profile API. 2. Create OAuth 2.0 credentials (Web application). 3. Set redirect URI: https://your-domain.com/connectors.php?slug=google_business_profile 4. In OpsIQ, enter Client ID and Client Secret. 5. Click Authorize, sign in, grant access. 6. Select your business location. 7. Verify: reviews, posts, and insights should appear.

Connectors

Extend the CRM & Site Intelligence

OpsIQ subsystems are open for extension. A connector can plug a new capability into the CRM or Site Intelligence with no changes to OpsIQ core, via the platform capability registry (\OpsIQ\Platform\CapabilityRegistry). Declare the capability, implement its small method set, ship the connector — OpsIQ discovers it and wires it into the UI, the Customer 360 timeline and the install prompts.

Extend CRM & SI
Platform capabilitiesA connector on the left feeding capability buses — CRM, Site Intelligence, Analytics — discovered by the CapabilityRegistry.Platform capabilitiesworkspaceYour connectordeclares capabilitiesCRMcalendar · enrichment · esign · payments · mailboxSite Intelligencelocal_listing · rank_dataAnalyticsweb_analytics — report & ingestCapabilityRegistrydiscovers it & wires the UI + timeline1DECLARECapabilities, not core edits2PLUG INCRM · SI · Analytics buses3AUTO-WIREDUI, timeline, prompts
A connector declares capabilities (calendar, enrichment, rank data, analytics…) and OpsIQ auto-wires them into CRM and Site Intelligence — no core changes.

Declare capabilities

Declarative (settings.json)

Add a <code><domain>_capabilities</code> array — best for no-code/marketplace connectors. Domains: <code>crm</code>, <code>site_intelligence</code>.

In code (connector.php)

Implement <code>crmCapabilities()</code> / <code>siCapabilities()</code> returning the same descriptors.

Declare a CRM calendar provider (settings.json)

Scenario:
Goal: make a calendar connector appear in the CRM Schedule-meeting panel.
What to do:

"crm_capabilities": [ { "type": "calendar", "label": "Calendar (Acme)", "actions": ["createEvent","listEvents","freeBusy"], "requires_auth": true } ]

Declare a Site Intelligence provider (settings.json)

Scenario:
Goal: feed local-listing data into Site Intelligence.
What to do:

"site_intelligence_capabilities": [ { "type": "local_listing", "actions": ["listLocations","listReviews","getInsights"], "requires_auth": true } ]

Capability buses and their method surface

crm / calendar

<code>createEvent($settings,$params)</code> → {success,event_id,html_link,meet_link}; <code>listEvents</code>; <code>freeBusy</code>. Driven by \OpsIQ\CRM\CalendarBridge.

crm / enrichment

<code>enrich($settings,$params)</code> → {success,traits}. Driven by \OpsIQ\CRM\EnrichmentBridge (also runs automatically on company create when a provider is connected).

crm / esign

<code>sendForSignature($settings,$params)</code> → {success,envelope_id,sign_url}. Driven by \OpsIQ\CRM\EsignBridge.

site_intelligence / local_listing

<code>listLocations</code>, <code>listReviews</code>, <code>getInsights</code>. Ships via the Google Business Profile connector.

site_intelligence / rank_data

<code>keywordRanks($settings,$params)</code> → {success,ranks}. Driven by \OpsIQ\SiteIntelligence\RankDataBridge. Ships: SerpApi connector.

analytics / web_analytics

<code>report($settings,$params)</code> (sync/export) + <code>ingest($settings,$events)</code> (import). Driven by \OpsIQ\Analytics\WebAnalyticsBridge. Ships: Google Analytics (GA4) connector — Data API for reports, Measurement Protocol for import. Analytics is open for connectors like CRM + Site Intelligence (domain <code>analytics</code> / <code>analytics_capabilities</code>).

payments / payment_provider

<code>listPayments</code>, <code>customerPayments</code>, <code>createPaymentLink</code>. Driven by \OpsIQ\Payments\PaymentsBridge — show a customer's payments on the CRM timeline + send a payment link on a deal. Ships: Stripe Payments connector. Domain <code>payments</code> / <code>payments_capabilities</code>.

mailbox / email_sync

<code>listMessages</code> + <code>sendMessage</code>. Driven by \OpsIQ\Mailbox\MailboxBridge — a customer's emails on the Customer 360 timeline + send email from a deal. Ships: Gmail + Outlook/Microsoft 365 connectors. Domain <code>mailbox</code> / <code>mailbox_capabilities</code>.

Shared OAuth app + ONE redirect

All Google connectors share ONE app via \OpsIQ\OAuth\SharedGoogleApp — set <code>google_oauth_client_id</code>/<code>_secret</code> once and Calendar, Analytics, Business Profile + Gmail all work (the per-connector "(optional)" fields are overrides). They also share ONE redirect URI — <code><site>/connectors.php?oauth=callback</code> (no per-connector slug) — because Google exposes no API to add redirect URIs to an app; OpsIQ recovers the connector from the signed OAuth <code>state</code> nonce. Register that single URI once and every Google connector (present + future) authorizes with no further Console setup. Return <code>SharedGoogleApp::resolve(...)</code>’s <code>redirect_uri</code> from your <code>oauthParams()</code>; never hard-code a per-slug redirect. Microsoft connectors do the same via \OpsIQ\OAuth\SharedMicrosoftApp (<code>microsoft_oauth_*</code>).

Import buttons are capability-gated

The <strong>Import</strong> (historical backfill) and <strong>Import customers</strong> buttons show ONLY for connectors that actually implement them — detected by reflection, so there is no flag to declare. Override <code>backfill()</code> or <code>backfillChunk()</code> to earn the Import button; override <code>listCustomers()</code> (return {email, first_name, …} pages) to earn Import customers. Inherit the <code>AbstractConnector</code> no-op and the button stays hidden, so the UI never offers an import a connector cannot perform.

AI across buses

The CRM agent proposes and books meetings off deal signals (\OpsIQ\CRM\MeetingProposer → CalendarBridge), and auto-enriches new accounts — the “AI operates the CRM” loop, executed across connector buses.

Client-chat ticket lookup (fetchTicket())

Two-tier, no core changes

When a visitor references a ticket number in the client chat ("what's the status of T-000123?"), OpsIQ resolves it in two tiers. <strong>Tier 1</strong> reads the universal native store <code>opsiq_tickets</code> — every connector with <code>inbound_ticket</code> mirrors its tickets there, so synced tickets just work for ALL connectors with zero per-connector code. <strong>Tier 2</strong> is a live fallback for OLD tickets that were never mirrored: core calls an OPTIONAL <code>fetchTicket()</code> on each enabled connector that implements it. It is <strong>duck-typed</strong> (discovered by <code>method_exists()</code>, like <code>contextProviders()</code>/<code>audienceCatalog()</code>), so the signed <code>ConnectorInterface</code> is untouched and connectors that don't need it (email/chat sources that create tickets natively) simply omit it.

⚠️
Ownership is mandatory and yours to enforce. <code>fetchTicket()</code> receives the VERIFIED visitor identity in <code>$ctx</code> (<code>client_id</code> + <code>client_email</code> — the same verified identity the client chat AI uses). Resolve the platform customer from that identity and query ONLY that customer's tickets, then re-check ownership on the detail record. Return <code>null</code> on any miss, mismatch, or error — never another customer's data. A return of <code>null</code> degrades gracefully to "couldn't find that ticket".
connector.php — the fetchTicket() contract (reference: connectors/whmcs, zendesk, opsiq_saas)
<?php
// connector.php — OPTIONAL universal client-chat ticket resolver (Tier 2).
// Only add it if your platform keeps its OWN ticket store that may hold tickets
// not yet mirrored into opsiq_tickets. Return the normalised array below, or null.
//
// $ref      = ['mode' => 'id'|'tid', 'value' => string]  (from extract_ticket_ref)
// $ctx      = ['client_id' => int, 'client_email' => string]  (VERIFIED visitor)
// $settings = your connector settings
public function fetchTicket(array $ref, array $ctx, array $settings): ?array
{
    try {
        $email = trim((string)($ctx['client_email'] ?? ''));
        $cid   = (int)($ctx['client_id'] ?? 0);
        if ($cid <= 0 && $email === '') return null;            // no verified identity → refuse

        // 1) Resolve THIS visitor on your platform (by verified email/id).
        // 2) List ONLY their tickets and match $ref against the ticket number/id.
        // 3) Re-confirm ownership on the detail record before returning.
        //    On any miss/mismatch/error → return null (never leak).

        return [
            'tid'        => 'T-000123',     // the customer-facing reference
            'id'         => 123,            // your internal id
            'status'     => 'open',
            'subject'    => '…',
            'department' => 'Billing',     // '' if your platform has none
            'priority'   => 'high',
            'opened_at'  => '2026-06-29 10:00:00',
            'last_reply' => '2026-06-29 12:00:00',
            'message'    => 'opening message text',
            'replies'    => [               // oldest → newest; opening message may be first
                ['who' => 'You',   'date' => '…', 'message' => '…'],
                ['who' => 'Staff', 'date' => '…', 'message' => '…'],
            ],
        ];
    } catch (\Throwable $e) {
        error_log('[yourslug][fetchTicket] ' . $e->getMessage());
        return null;                                             // graceful degrade
    }
}

How the platform uses it

Discovery

<code>CapabilityRegistry::providers($domain,$type)</code> lists providers with installed/enabled/ready status (filesystem-based; DB only for the enabled flag).

Selection

<code>CapabilityRegistry::active($domain,$type)</code> returns the first ready provider with its loaded connector and settings — bridges call this instead of hardcoding slugs.

Notify-to-install

Where a feature needs a capability that is not connected yet, the UI shows a one-click Connect/Install prompt — never a dead control.

Full guide

See <code>connectors/PLATFORM_CONNECTORS.md</code> (CRM + Site Intelligence) and <code>connectors/CRM_CONNECTORS.md</code> in the package.

Connectors

Customer self-service lookups & refunds (build your connector for customer chat)

Signed-in customers can ask the customer chat AI about their OWN account — "my balance", "my orders", "did support answer my ticket" — and, if the business enables it, request refunds. All of it is powered by YOUR connector's declarations: no OpsIQ core changes, no platform hardcoding. The AI calls your lookups as native tools (it cannot invent one), identity is locked server-side to the verified customer, and results are automatically trimmed for the AI.

Declare a customer lookup

In your <code>actions.json</code>, a read-only action becomes customer-callable with ALL THREE: <code>"scope":"client"</code>, <code>"requires_confirmation":false</code>, <code>"is_destructive":false</code>. ⚠️ The value <code>customer</code> is NOT valid for scope — use <code>client</code> or <code>both</code>.

The identity rule (mandatory)

Name your identity parameter from the standard set — <code>client_id</code>, <code>customer_id</code>, <code>client_identifier</code>, <code>customer_identifier</code>, <code>account_id</code>, <code>email</code>, <code>customer_email</code>. OpsIQ locks and auto-fills it from the platform-verified signed-in customer; the AI never sees or chooses identity. A non-standard name fails closed (denied, never leaked).

What must stay admin-only

Anything not scoped by that identity: fetch-by-bare-id (<code>order_id</code>/<code>ticket_id</code> alone), store-wide lists, free-text searches. Those are cross-customer leaks on any platform — keep them <code>"scope":"admin"</code>.

Refunds — what your connector provides

Two raw operations, policy-free: (1) a payment-verification read filterable by identity AND a transaction reference (your API must AND the filters), e.g. <code>whmcs_get_transactions</code>; (2) a refund execute action (<code>scope:"admin"</code>, <code>requires_confirmation:true</code>, <code>is_destructive:true</code> — never customer-exposed), e.g. <code>whmcs_refund_order</code>. The business picks both keys in Settings → Client Chat; OpsIQ re-verifies the payment server-side, applies the business's policy box (amount cap, age window, monthly limit), issues inside the box, and files a review ticket for everything else.

No-code builder

The Connector Builder's action editor has the same controls: set "Who can use it" to Signed-in customers, leave both write checkboxes off, and use a standard identity parameter name.

Reference implementations

The "Customer Self-Service" entries in <code>connectors/whmcs/actions.json</code>, <code>woocommerce/actions.json</code>, <code>oscommerce/actions.json</code>; full contract in <code>connectors/README.md</code> §8.1–8.2 and <code>ConnectorInterface::registerActions()</code>.

Connectors

Promotion audience targeting (promo_audience)

Let the Promotion Studio target campaigns by LIVE client and billing state from YOUR platform — "has an unpaid invoice", "order pending", "subscription cancelled". Any connector (pre-installed, marketplace, or one you build yourself) joins by implementing two small methods. No OpsIQ core changes, no platform hardcoding: your connector appears as a platform in the studio Targeting tab with its own dropdown of facts, and several connectors can be enabled side by side.

Promo audience
Promotion audience targetingA verified identity passed to a connector audienceFlags call producing facts that drive a targeting rule, with a fail-closed note.Promotion audience targetingworkspaceLogged-inverified identityaudienceFlags()your connectorFACTSunpaid_invoices = 2RULEunpaid_invoices ≥ 1Campaign showsFails closed: unknown client or any error → the campaign stays hidden.1TWO METHODSaudienceCatalog + Flags2LIVE STATEUnpaid, pending, status3FAIL-SAFENever shows to wrong person
Your connector answers live billing facts for the logged-in visitor; the studio targets on them — and fails closed so a billing offer never reaches the wrong person.

How it works

1
Declare your facts

Implement audienceCatalog() on your connector class. It returns a label and the list of keys your platform can answer. Each key shows up in the studio dropdown under your platform name.

2
Answer for one client

Implement audienceFlags(array $identity). OpsIQ calls it at delivery time with the VERIFIED logged-in visitor identity (from the widget identity token — the same identity the client chat AI uses). Return a flat key => value map.

3
Done

Enable the connector. The Promotion Studio Targeting tab grows a "Client & billing" section listing your platform; admins build rules like "unpaid_invoices >= 1"; every fact also becomes a personalization variable such as {unpaid_invoices}.

connector.php — the complete promo_audience contract
public function audienceCatalog(): array
{
    return ['label' => 'My Billing Platform', 'keys' => [
        ['key' => 'unpaid_invoices', 'label' => 'Unpaid invoices (count)', 'type' => 'number'],
        ['key' => 'pending_orders',  'label' => 'Pending orders (count)',  'type' => 'number'],
        ['key' => 'client_status',   'label' => 'Client status',           'type' => 'text'],
    ]];
}

public function audienceFlags(array $identity): array
{
    // $identity = verified token payload: ['email' => ..., 'id' => ..., 'name' => ...]
    $email = strtolower(trim((string)($identity['email'] ?? '')));
    if ($email === '') return [];
    $client = $this->api('GetClient', ['email' => $email]); // your platform call
    if (!$client) return []; // unknown client -> return [] (fails CLOSED)
    return [
        'unpaid_invoices' => (int)$client['unpaid_count'],
        'pending_orders'  => (int)$client['pending_orders'],
        'client_status'   => (string)$client['status'],
    ];
}

Contract rules

Advertise the capability

Add <code>'promo_audience'</code> to your connector's <code>capabilities()</code> array so the platform and marketplace list it as audience-capable (discovery also works from method presence, but declaring it is the clean signal). The pre-installed <code>connectors/whmcs</code> connector is the full reference implementation.

Key naming

Lowercase snake_case, 2-60 chars, matching ^[a-z0-9_]+$. Types: number, text, bool. Undeclared keys returned by audienceFlags() are still usable in rules, but declare everything you support so admins can see it.

Identity is verified

The $identity array comes from the signed widget identity token issued by the customer site at login — never from client-supplied fields. If your platform cannot resolve the identity, return an empty array.

Fail closed — always

On ANY error (API down, client not found, timeout) return []. A rule whose fact is missing makes the campaign NOT show. A billing-targeted popup must never reach the wrong person; OpsIQ enforces this in the rule matcher too.

Performance

audienceFlags() is called at most once per connector per page view, and ONLY when a published campaign actually uses your platform's rules. Anonymous visitors cost you zero calls. Keep it to 1-2 API calls; OpsIQ memoizes within the request.

Operators provided for free

Admins combine your keys with =, !=, >, >=, <, <=, contains, is set, is empty — you only supply values.

Personalization tokens

Every fact doubles as a variable in campaign copy: {unpaid_invoices}, {client_status}, plus the built-ins {first_name} and {client_email}. Values are sanitized before rendering.

No-code marketplace connectors

Automatic facts

Declarative (JSON-only) marketplace connectors get promo_audience for FREE: if your connector declares customers/users, invoices, orders or subscriptions resources, OpsIQ derives customer_status, unpaid_invoices, amount_due, pending_orders, active_subscriptions and subscription_status from your existing search actions. No code at all.

Custom catalog (settings.json)

Add an audience_capabilities object — {"label": "My Platform", "keys": [{"key": "open_carts", "label": "Open carts", "type": "number"}]} — to control exactly which facts (and labels) appear in the studio dropdown.

Testing your provider

1
Enable the connector

Connectors > your connector > Enable. Then open any campaign's Targeting tab — your platform must appear under "Client & billing (connectors)".

2
Build a rule

Add: Your platform · a key · >= · 1 and set "Logged-in clients only". Save and publish.

3
Verify both directions

Log in to your platform as a client who matches the rule (popup must show) and as one who does not (popup must stay hidden). Logged-out visitors never match logged-in rules.

Fire a campaign from your own code (custom trigger)

Why

Beyond the built-in triggers (delay, scroll, exit-intent, idle, click, pages-viewed, chat / ticket activity), you can fire a campaign from anywhere in your site or connector front-end — after a successful checkout step, when a cart is abandoned, when your SPA changes route, etc.

How

Set the campaign trigger to <strong>Custom</strong> with an event name (e.g. <code>checkout_failed</code>), then call the global hook from your page:

your site / connector front-end JS
// Any campaign whose Custom trigger event matches will be evaluated
// (it still respects targeting, frequency caps and audience rules).
window.OpsIQPromo && window.OpsIQPromo.fire('checkout_failed');
💡
Firing an event never bypasses targeting or frequency — it only releases the “when”. The campaign still has to pass every rule (geo, audience, consent, caps) before it shows.
The full how-to-use guide (designing, blocks, analytics, A/B, publishing) lives in the in-app Help Center under <strong>Engage → Promotion Studio</strong>. The capability here is discovered automatically from any ENABLED connector in connectors/ or marketplace_connectors/ — there is nothing to register. Ship the two methods, and the studio does the rest.
Connectors

Connector marketplace

The Marketplace lets you discover, install, and publish connectors built by the community.

Marketplace
Connector marketplaceA searchable grid of community connector cards with categories, install buttons and star ratings.Connector marketplaceworkspaceSearch connectors…CalendlySchedulingInstall★ 4.8HubSpotCRMInstall★ 4.6MailchimpEmailInstall★ 4.7QuickBooksAccountingInstall★ 4.5TwilioSMSInstall★ 4.9NotionDocsInstall★ 4.41DISCOVERCommunity connectors2INSTALLOne click3PUBLISHSign & submit yours
Browse community connectors, install in one click, or sign and publish your own — pre-installed and marketplace tiers both searchable.

Finding and installing connectors

1
Browse

Go to Connectors > Marketplace. Search by name, category, or platform.

2
Review

Check the description, supported actions, and ratings.

3
Install

Click Install. The connector package downloads and installs to marketplace_connectors/.

4
Configure

Enable it in Connectors, enter API credentials, and test.

Publishing a connector

1
Build and test

Use the Connector Builder. Verify all actions work.

2
Package

Generate profile.json, actions.json, knowledge.json, and PHP files.

3
Sign

Run php tools/resign_all_connectors.php to sign the package.

4
Submit

Upload through the marketplace submission flow for review.

Two connector tiers

Pre-installed (connectors/)

Ship with OpsIQ. Maintained by the OpsIQ team.

Marketplace (marketplace_connectors/)

Installed from marketplace. Can be declarative or custom PHP.

💡
Always check BOTH directories when looking for a connector. Stripe is pre-installed — searching only marketplace would miss it.
Developer

API and webhook builder

The API and Webhook Builder lets you create custom API endpoints and webhook listeners inside OpsIQ without writing raw PHP.

API builder
API and webhook builderA builder choosing a trigger type (inbound webhook, schedule, event, manual) that feeds into a configurable action.API & webhook builderworkspaceTRIGGERInbound webhookSchedule (cron)OpsIQ eventManualActionMap incoming fields →create ticket / notify / call APISave endpoint1TRIGGERSWebhook · schedule · event · manual2NO RAW PHPBuilt in the UI3ACTIONMap fields, then run
Build endpoints without raw PHP: pick a trigger — inbound webhook, schedule, event or manual — then map fields to an action.

Triggers

Inbound webhook

An external system sends HTTP POST to your OpsIQ webhook URL.

Schedule

Run on a schedule: hourly, daily, weekly, or custom cron expression.

Event

Run when a specific OpsIQ event fires: ticket.created, chat.started, etc.

Manual

Run manually from the admin interface.

Actions

Send webhook

Send HTTP POST to an external URL with a custom payload.

Create ticket

Create a support ticket with specified department, subject, and message.

Send email

Send an email with a custom template.

Update record

Update a customer, ticket, or CRM record.

Run connector action

Execute a connector action.

Developer

Triggers cookbook

Ready-to-use trigger-action recipes for common automations.

How it works
Triggers cookbookA recipe flow: an uptime.down webhook passes a production filter, then fans out to create an urgent ticket and notify Slack.uptime.downmonitor webhookif prodfilterCreate urgent ticketNotify Slack #ops
Triggers cookbook

Auto-create ticket from monitoring

Scenario:
Monitoring system sends POST when server goes down.
What to do:

Trigger: Inbound webhook Condition: payload.status = "down" Action: Create ticket — Dept: Technical, Subject: "Server {{payload.hostname}} down", Priority: Urgent

Slack notification on big orders

Scenario:
Slack message every time a customer places an order over $100.
What to do:

Trigger: Event (order.completed) Condition: order.amount > 100 Action: Send webhook to Slack incoming webhook URL with order details

Weekly digest email

Scenario:
Summary email to management every Monday at 9am.
What to do:

Trigger: Schedule (Monday 09:00) Action: Send email with last week's stats pulled from the REST API

Escalate stale tickets

Scenario:
If a ticket has no reply for 24 hours, assign to team lead.
What to do:

Trigger: Schedule (every hour) Condition: ticket.status = "Open" AND ticket.last_reply_age > 86400 Action: Assign to team-lead, add internal note

Developer

Building your first action

This walkthrough creates a simple connector action from scratch.

Building actions
Building an actionAn action-definition form: name lookup_order, a GET request to /orders/{id}, a typed id parameter, and a passing 200 test.New actionworkspaceNew actionNamelookup_orderRequestGET/orders/{id}Paramsid · string200 · order found1DEFINEName, method, endpoint2PARAMSTyped inputs3TESTLive 200 result
Build one action from scratch — name it, set the method and endpoint, declare typed params, and test it to a live 200.
1
Plan the action

Example: "lookup_product" — look up a product by name, return price, stock, and description.

2
Define in actions.json

Add the action definition:

actions.json — lookup_product
{
  "lookup_product": {
    "label": "Look up a product",
    "description": "Find a product by name",
    "method": "GET",
    "endpoint": "/api/products/search",
    "params": {
      "name": { "type": "string", "label": "Product name", "required": true }
    },
    "response_mapping": {
      "id": "$.data.id",
      "name": "$.data.name",
      "price": "$.data.price",
      "stock": "$.data.stock_quantity"
    }
  }
}
3
Test with dry-run

In connector settings, use dry-run to test with sample data.

4
Verify AI usage

Ask admin AI: "Look up product Widget Pro." The AI should find and execute the action.

⚠️
After adding actions, regenerate the route registry: php tools/gen_route_registry.php
Developer

Webhooks

Webhooks let external systems notify OpsIQ when something happens (inbound), and let OpsIQ notify external systems when something happens internally (outbound).

Webhooks
Outbound webhooksThe outbound webhooks screen: an endpoints table with name, subscribed events, recent delivery status dots, and a Send-test button.Outbound webhooksworkspaceEndpoints+ Save endpointNAMEEVENTSDELIVERIESSlack #sales-alertshttps://hooks.slack.com/…lead.created, saleTestCRM mirrorhttps://api.acme.com/hookcontact.*, ticket.createdTestZapierhttps://hooks.zapier.com/…chat.startedTest1ENDPOINTSName, events, URL2SIGNEDHMAC + auto-retried3SEND TESTVerify deliveries
The real outbound-webhooks screen: each endpoint with its events, recent delivery health, and a one-click Send test — signed and retried.

Outbound webhooks

Subscribing

Go to Settings > Webhooks. Add an endpoint URL and select events to receive.

Events

ticket.created, ticket.replied, chat.started, chat.message, order.completed, crm.deal.stage_changed, crm.contact.created, etc.

Retry

Failed deliveries retry with exponential backoff. After 15 consecutive failures, the endpoint is auto-disabled.

Signing

Every request includes an HMAC signature in X-OpsIQ-Signature. Always verify.

SSRF protection

OpsIQ will not send to private/internal IPs (127.x, 10.x, 172.16.x, 192.168.x, 169.254.169.254).

Async delivery

Webhooks are delivered via the job queue, not blocking OpsIQ operations.

Stable event ID

Each event has a unique event_id that stays the same across retries for deduplication.

Verifying webhook signatures

PHP — verify webhook signature
<?php
$payload   = file_get_contents("php://input");
$signature = $_SERVER["HTTP_X_OPSIQ_SIGNATURE"] ?? "";
$secret    = "opsiq_whsec_your_secret";

$expected = hash_hmac("sha256", $payload, $secret);
if (!hash_equals($expected, $signature)) {
    http_response_code(401);
    exit(json_encode(["error" => "Invalid signature"]));
}

$event = json_decode($payload, true);
// Process the event...
http_response_code(200);
echo json_encode(["received" => true]);
Node.js — verify webhook signature
const crypto = require("crypto");

app.post("/opsiq-webhook", (req, res) => {
    const payload  = JSON.stringify(req.body);
    const sig      = req.headers["x-opsiq-signature"];
    const expected = crypto.createHmac("sha256", "opsiq_whsec_xxx")
        .update(payload).digest("hex");

    if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig || "")))
        return res.status(401).json({ error: "Invalid signature" });

    console.log("Webhook:", req.body);
    res.json({ received: true });
});
How do I test webhooks locally?+

Use ngrok to expose your local server. Set the webhook endpoint to your ngrok URL.

What if my endpoint is temporarily down?+

OpsIQ retries with exponential backoff. If your endpoint recovers within the retry window, no events are lost.

Developer

API keys

API keys authenticate requests to the OpsIQ REST API. Each key has scoped permissions.

API keys
API keysThe API keys screen: an issue panel with access level and scope chips, beside a list of existing masked keys with revoke buttons.API keysworkspaceIssue a keyAccessRead onlyRestrictedScopescontacts.readtickets.readevents.writeIssue keyYour keysZapier integrationsk_live_••••4f2aRevokeMobile appsk_live_••••91c7RevokeAnalytics exportsk_live_••••2db0Revoke1SCOPEDRead-only or restricted2PER-ACTIONPick exact scopes3REVOCABLERotate anytime
The real API keys screen: issue a scoped, read-only or restricted key by picking exact scopes — and revoke any key anytime.

Creating an API key

1
Go to Settings > API Keys

Navigate to API key management.

2
Click Create Key

Give it a descriptive name.

3
Select scopes

Choose permissions: analytics.read, tickets.read, tickets.write, crm.read, crm.write, etc.

4
Copy the key

Shown once. Starts with "opq_". Store it securely.

🚫
Never share API keys in public code, client-side JavaScript, or version control. Use environment variables.
Developer

Connect your website

The OpsIQ widget is a JavaScript snippet you add to your website for tracking, AI chat, ticket creation, and customer identification.

How it works
Connect your websiteA one-line script tag on the left and, on the right, a web page with the OpsIQ chat bubble appearing in the corner.<!-- paste before </body> --><script src="https://cdn.opsiq.io/w.js" data-site="ws_8a2f" async></script>
Connect your website

Basic installation

Basic widget snippet
<script src="https://your-opsiq-domain.com/widget.php"
  data-site-key="site_abc123"
  async></script>

Paste before the closing </body> tag. The script loads asynchronously and does not block page rendering.

Configuration attributes

data-site-key

Required. Your site key from Connected Sites.

data-mode

Optional. "chat" (default), "tickets", or "both".

data-position

Optional. "bottom-right" (default) or "bottom-left".

data-color

Optional. Primary color hex code.

data-greeting

Optional. Initial greeting message.

data-language

Optional. UI language: "en", "es", "fr", "de", "pt", "ar", etc.

data-identity-token

Optional. Server-generated signed identity token.

SPA support

Manual SPA route tracking
// Manually notify OpsIQ of a route change (for custom routers)
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["pageview", {
  url: window.location.href,
  title: document.title,
}]);

CSP rules

CSP rules for widget
script-src 'self' https://your-opsiq-domain.com;
connect-src 'self' https://your-opsiq-domain.com;
frame-src https://your-opsiq-domain.com;
Does the widget slow my website?+

No. Under 15 KB gzipped, loads async after page content.

Can I customize the appearance?+

Use data-color for primary color. Contact support for CSS override options.

Developer

Widget install recipes

Platform-specific installation guides.

How it works
Widget install recipesPlatform install cards for WordPress, Shopify and Google Tag Manager, each saying where to add the widget.WPWordPressInstall the plugin, enteryour site key, save.ShopShopifyPaste the snippet intotheme.liquid before /body.GTMTag ManagerCustom HTML tag, all pages.
Install recipes

WordPress

Scenario:
Add to all pages of a WordPress site.
What to do:

Option 1: Edit theme footer.php, paste snippet before </body>. Option 2: Use "Insert Headers and Footers" plugin > Scripts in Footer. Option 3: Use a child theme footer.php to survive theme updates.

Shopify

Scenario:
Add to your Shopify store.
What to do:

Online Store > Themes > Edit Code > Layout > theme.liquid. Paste before </body>. Save.

React / Next.js

Scenario:
Add to a React or Next.js app.
What to do:

In Next.js, use next/script in app/layout.tsx: import Script from "next/script"; <Script src="https://your-opsiq.com/widget.php" data-site-key="site_abc" strategy="lazyOnload" />

WHMCS

Scenario:
Add to your WHMCS client area.
What to do:

Setup > General Settings > Other > Global Footer Content. Paste the snippet. Or edit your template footer.tpl.

Google Tag Manager

Scenario:
Add via GTM.
What to do:

Create Custom HTML tag, paste snippet. Trigger: All Pages. Publish.

Developer

Visitor identity

Identity connects anonymous visitors to known customers. When identified, OpsIQ links browsing history, chats, and tickets to the customer profile.

How it works
Visitor identityA flow: a user logs in on your site, you issue a signed identity token, and OpsIQ unifies their sessions, chats and tickets into one profile.User logs inon your siteSigned tokenidentity_token (HMAC)One profilesessions+ chats+ tickets
Visitor identity

Dynamic identify call

Dynamic identity push
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["identify", {
  email: "[email protected]",
  name: "Jane Smith",
  customer_id: "cust_1001",
  plan: "pro",
  company: "Acme Inc",
}]);

Server-signed identity token (recommended)

PHP — generate identity token
<?php
$secret  = "opsiq_whsec_your_secret";
$payload = json_encode([
    "site_key" => "site_abc123",
    "customer" => [
        "id"    => $user->id,
        "email" => $user->email,
        "name"  => $user->name,
    ],
    "iat" => time(),
    "exp" => time() + 900,
]);
$token = base64_encode($payload) . "." . hash_hmac("sha256", $payload, $secret);
🚫
Always generate identity tokens on the server, never in client-side JavaScript.
What if a visitor clears cookies?+

They become anonymous until they log in again. OpsIQ links the new anonymous record when re-identified.

Developer

Plugins and SDKs

OpsIQ provides SDK packages and plugins for common platforms.

How it works
Plugins and SDKsFour packages: PHP SDK, Node.js SDK, WordPress plugin and WHMCS module, each with its install command.PHPPHP SDKcomposer require opsiq/sdkJSNode.js SDKnpm i @opsiq/sdkWPWordPress pluginOne-click install & connectWHWHMCS moduleAddon for billing + ticket relay
Plugins & SDKs
PHP SDK

Composer package: identity token generation, action API helpers, webhook signature verification.

JavaScript SDK

Browser-side: tracking, identity, custom events, chat control.

WordPress plugin

Widget injection, identity from WP user sessions, WooCommerce sync.

WHMCS module

Full integration: widget, ticket relay, identity, admin AI.

Shopify theme extension

App embed with automatic customer identity.

PHP SDK quick start

PHP SDK example
composer require opsiq/sdk

use OpsIQ\SDK\Identity;
$token = Identity::createToken(
    siteKey: "site_abc123",
    secret:  "opsiq_whsec_your_secret",
    customer: ["id" => "cust_1001", "email" => "[email protected]", "name" => "Jane"]
);

// Call any catalog action over the action API
$ch = curl_init("https://your-opsiq.com/api/v1.php");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer opq_your_key",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "action" => "crm.contacts.list",
        "status" => "lead",
        "limit"  => 25,
    ]),
]);
$contacts = json_decode(curl_exec($ch), true);
Developer

REST API

The OpsIQ REST API lets you programmatically access all platform features.

How it works
REST APIA terminal showing a curl request to the contacts endpoint with a Bearer key and a JSON response with cursor pagination.$ curl https://api.opsiq.io/v1/contacts \-H "Authorization: Bearer sk_live_…"200 OK{ "data": [{ "id": "c_18", "email": "[email protected]","score": 92, "status": "lead" },… more contacts …], "has_more": true, "next_cursor": "c_42" }
REST API

Request format

API request format
POST https://your-opsiq-domain.com/api/v1.php
Authorization: Bearer opq_your_api_key
Content-Type: application/json

{
  "action": "endpoint.name",
  "site_key": "site_abc123"
}

Common actions

The API is action-based: send an action name in the body. POST {"action":"meta.actions"} (no key required) for the authoritative, per-install list of every action and the scope it needs.

crm.contacts.list

List CRM contacts (scope crm.read). Params: q, status, source, tag, lead score, limit.

crm.contacts.upsert

Resolve-or-create a contact (scope crm.write). Params: email plus fields, tags, notes.

crm.deals.list

List CRM deals (scope crm.read). Params: status, stage_id, company_id, owner_admin_id, pipeline_id, limit.

crm.activities.record

Record a lifecycle/business activity for a contact (scope crm.write). Params: email or contact_id, event, value, currency.

crm.conversions.record

Record a conversion (scope crm.write). Params: contact_id or email, conversion_type, value, currency.

crm.events.list

Poll the CRM event stream (scope crm.read). Params: limit.

tickets.open

Open a support ticket (scope admin). Params: customer_email, customer_name, subject, body, priority.

tickets.bulk

Run a bulk queue operation (scope admin). Params: operation, ids.

💡
Ticket reading and replying are operator-UI, admin-scope actions; there is no public ticket-list or ticket-reply action. Use tickets.open to create and tickets.bulk for queue operations, or sync tickets through a connector. The live catalog from meta.actions is always authoritative.

Rate limits

Per-key limit

A configurable hourly limit per API key (default 1000 requests per hour). Set it per key under Settings, API Keys.

When exceeded

The request is rejected with HTTP 401 and error "Invalid, expired, or rate-limited API key." No 429 status and no Retry-After header are sent. The limit resets at the top of the next clock hour.

Pre-auth brute-force guard

Repeated failed-auth attempts from one IP are throttled separately (default 30 failures per 300 seconds). Valid keys never trip this.

Best practice

Stay under your hourly limit and back off after a 401 caused by rate limiting; retry on the next hourly window.

Is there an OpenAPI/Swagger spec?+

Yes. The machine-readable OpenAPI 3.0 document is at /api/v1/openapi.php (import it into Postman, Insomnia, Stoplight, or a code generator). Human-readable developer docs are at /api/docs/.

Developer

Events API

Send custom events from your server or website to OpsIQ for analytics, experiments, CRM triggers, and webhook conditions.

How it works
Events APIA track() call sending a custom demo_booked event into OpsIQ, which feeds conversion goals, segments and triggers.OpsIQ.track("demo_booked", {value: 0, plan: "pro"});Conversion goalsSegmentsTriggers & webhooksBrowser (OpsIQ.track) or server-side POST /v1/events
Events API

Browser-side events

Browser event tracking
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "button_clicked", {
  button: "signup",
  page: "/pricing",
  variant: "green"
}]);

Server-side events

Server-side, record activities and conversions against a contact through the action API. Use crm.activities.record for lifecycle/business activity and crm.conversions.record for conversions. There is no events.send action; the inbound CRM event receiver lives at /v1/inbound.php?t=<token> for third-party systems that push events in.

Server-side activity (action API)
POST /api/v1.php
Authorization: Bearer opq_your_key
Content-Type: application/json

{
  "action": "crm.activities.record",
  "site_key": "site_abc123",
  "email": "[email protected]",
  "event": "subscription.upgraded",
  "value": 50,
  "currency": "USD"
}

Naming convention

Dot notation

"order.completed" not "orderCompleted".

Past tense

"button.clicked" not "button.click".

Be specific

"pricing.plan_selected" not "user_action".

Developer

How data flows through OpsIQ

Understanding the data flow helps you debug integrations and optimize performance.

How it works
How data flowsData flows from the widget and beacon into OpsIQ core (CDP, identity graph, AI brain, analytics, CRM) then out via webhooks and the REST API.Widget& beaconOpsIQ coreCDP · identity graphAI brainanalytics · CRMWebhooks outREST API
Data flow

Inbound data flow

1
Widget beacon

The JavaScript widget sends page views, clicks, and chat messages to /beacon.php.

2
Event ingestion

Events stored in opsiq_events with site_key, event type, customer, and properties.

3
Session assembly

Session builder groups page views into sessions (via cron).

4
Identity resolution

When identified, anonymous records are linked to the customer profile.

5
Connector sync

Connectors pull data from external platforms and store in the connector cache.

6
AI context

AI assembles context from: visitor history, customer profile, connector data, KB, and prompt.

Outbound data flow

1
Event fires

Internal event fires (ticket.created, chat.message, order.completed).

2
Job queue

Event placed in the async job queue.

3
Webhook dispatch

Dispatcher signs and sends to all subscribed endpoints.

4
Retry on failure

Failed deliveries retried with exponential backoff.

Settings

Settings reference

Settings control how OpsIQ behaves across tracking, AI, tickets, security, and branding.

Settings
SettingsThe settings screen: a left nav (General, Branding, Notifications, Security, Danger zone) and toggle rows for AI auto-reply, tracking, CSAT and data retention.SettingsworkspaceGeneralBrandingNotificationsSecurityDanger zoneAI auto-replyTrack visitorsCSAT surveyData retention365 days1PER-WORKSPACEEvery option scoped2TOGGLESTurn features on/off3AI CONFIGInherited, overridable
The real Settings screen: a tabbed nav with simple toggle rows — AI auto-reply, visitor tracking, CSAT, retention — all scoped per workspace.

General settings

Business name

Your company name. Used in AI responses, emails, and widget header.

Industry

Your business industry. Helps the AI understand context.

Timezone

All analytics and timestamps use this timezone.

Default currency

Currency for revenue reporting.

Support hours

Business hours for auto-reply scheduling and SLA timers.

Tracking settings

Session timeout

Inactivity time before a session ends. Default: 30 minutes.

Active threshold

How long a visitor is "live" after last page load. Default: 90 seconds.

IP anonymization

Replace last IP octet with 0 for GDPR compliance.

Do Not Track

Respect DNT browser headers.

Excluded IPs

IP addresses to skip in tracking. Add your team IPs.

Excluded pages

URL patterns to skip. Example: /admin/*

Data retention

How long to keep visitor data. Default: 90 days.

Branding settings

Logo

Appears in admin header, emails, and widget.

Primary color

Accent color throughout the admin UI and widget.

Favicon

Browser tab icon for your OpsIQ admin.

Settings

Managing your team

Invite team members and assign roles to control who can access what.

Team
Team & departmentsThe team screen: a table of admins with contact, role badge (Owner, Full Admin, Agent) and the departments each can access.Team & departmentsworkspaceTeam & departments+ Save admin userCONTACTROLEDEPARTMENTSAO[email protected]Ada OwusuOwnerAllKM[email protected]Kojo MensahFull AdminAllRT[email protected]Rita TettehAgentBillingSB[email protected]AgentSupport1TEAMInvite & manage admins2ROLESOwner · Full Admin · Agent3SCOPEDPer-department access
The real team screen: every admin with their contact, role and the departments they can reach — agents scoped, owners full.

Roles

Owner

Full access including license, billing, and danger zone. One per installation.

Full Admin

Full access except license and danger zone. Can manage admins.

Agent

Limited to assigned departments. Tickets, chats, and analytics only.

Inviting team members

1
Go to Team

Navigate to Team in the sidebar.

2
Click Invite

Enter the team member's email.

3
Set role

Choose Owner, Full Admin, or Agent.

4
Assign departments

For Agents, select accessible departments.

5
Send invite

They receive an email with a setup link.

Settings

Team performance

How your support team is performing. Only accessible to Owners and Full Admins.

Team performance
Team performanceThe team-performance screen: agents ranked by a composite score bar, CSAT and a reward balance with a Pay button per row.Team performanceworkspaceTeam performanceAGENTSCORECSATBALANCERTRita Tetteh4.8₦50,400PaySBSam Boateng4.5₦33,600PayKMKojo Mensah4.2₦18,000PayAOAda Owusu4.9₦61,200Pay1SCOREDComposite performance2CSAT & LOADRatings + volume3REWARDSPay agent balances
The real team-performance screen: each agent scored on volume and CSAT, with a reward balance you can pay out per row.

Metrics

Resolution time

Average time from ticket creation to resolution per agent.

First response time

Average time to first staff reply. Most important SLA metric.

Handle depth

Average number of replies needed to resolve a ticket.

Workload

Open ticket count per agent right now.

Channel distribution

Breakdown of chat vs. tickets vs. email per agent.

CSAT breakdown

Customer satisfaction scores per agent vs. team average.

Trend comparison

Current period vs. previous period comparison.

Busiest hours

When each agent handles the most tickets. Use for shift planning.

Who is online

OpsIQ tracks admin online status via a 60-second heartbeat. Admins not seen in 5 minutes are offline. The status widget appears in the admin navigation.

Settings

Your sites (workspaces)

Sites (workspaces) let you manage multiple websites from one OpsIQ installation. Each has its own tracking, AI, connectors, and team access.

Sites
Your sitesThe sites screen: a list of workspaces, each with its domain, type, connector, status badge and an Open button, plus Add-new-site.Your sitesworkspaceYour sites+ Add new siteSshop.acme.comeCommerce · Shopify connectorActiveOpenHhost.acme.comHosting · WHMCS connectorActiveOpenBblog.acme.comContent · no connectorSetupOpen1MULTI-SITEOne workspace per site2ISOLATEDData never mixes3PER-SITEOwn settings & connectors
The real Sites screen: each site is its own isolated workspace — own domain, connector and settings — added and opened from one list.

Creating a site

1
Go to Connected Sites

Navigate to Connected Sites.

2
Add a new site

Enter name, domain, and description.

3
Copy the site key

Each site gets a unique key (site_xxx) for the widget snippet.

4
Configure independently

Each site has its own AI, connectors, and settings.

How many sites can I have?+

Depends on your license plan. Check your license details.

Settings

License and plan

Your OpsIQ license controls features, site limits, and AI credit balance.

License
License CenterThe OpsIQ License Center: plan, an Active status badge, the masked license key, an AI-credit meter, and a Force-remote-check button.License CenterworkspaceOpsIQ License CenterPlanBusinessStatusActiveKeyOPSIQ-••••-••••-2F9CAI credits₦81,600 leftForce remote check1PLAN & STATUSActive, at a glance2KEYHMAC-cached locally3CREDITSAI balance & limits
The real License Center: your plan and active status, the masked key, your AI-credit balance, and a one-click force re-verify.
License key

Enter in Settings > License. Validated against the OpsIQ license server.

Plan

Determines feature availability and limits.

Site limit

Maximum number of workspaces.

AI credits

If using Managed AI, your credit balance is shown here.

Expiration

Renew before expiration to avoid service interruption.

What happens when my license expires?+

Tracking, tickets, and CRM continue. AI features pause until renewal. Data is preserved.

Settings

Security and access

OpsIQ includes multiple security layers to protect your admin, data, and API access.

How it works
Security and accessA security shield beside enabled controls: two-factor, OIDC SSO, SCIM 2.0, OAuth2 PKCE, CSRF/CSP, IP firewall, rate limits and a secrets vault.Two-factor (TOTP)OIDC SSOSCIM 2.0OAuth2 PKCECSRF + CSPIP firewallRate limitsSecrets vault
Security

Security features

Admin authentication

Email/password with optional 2FA.

Login lockout

Temporary lock after too many failed attempts.

IP blocking

Block IPs or CIDR ranges from accessing tracked sites.

Threat scoring

Behavior-based threat scores. High-threat visitors can be auto-blocked.

HTTPS enforcement

Required for all connections. HTTP redirects to HTTPS.

HSTS headers

Strict-Transport-Security prevents downgrade attacks.

CSRF protection

All admin forms include CSRF tokens.

XSS protection

All user input is escaped. CSP headers restrict script execution.

SSRF protection

Outbound webhooks block private/internal IP addresses.

Recommended setup

1
Enable 2FA

For all admin accounts.

2
Strong passwords

Minimum 12 characters, mixed.

3
Review accounts

Remove access for former team members.

4
Monitor failed logins

Check weekly for suspicious patterns.

5
Keep updated

Apply updates promptly for security patches.

Settings

Roles and permissions

Role-Based Access Control lets you control what each team member can do.

Roles & permissions
Roles and permissionsA role-by-capability matrix: Owner has everything; Full Admin lacks billing and danger zone; Agent has only scoped tickets.Roles & permissionsworkspaceSETTINGSBILLINGDANGERTICKETSOwnerFull AdminAgentscoped13 ROLESOwner · Full Admin · Agent2GRANULARPer-page + per-department3DEFAULT-DENYForgotten routes blocked
The role matrix at a glance: Owner gets everything, Full Admin everything but billing and danger zone, Agent only their scoped tickets.

Default roles

Owner

Everything including license, danger zone, and installation management.

Full Admin

Everything except license and danger zone. Can manage team.

Agent

Respond to assigned-department tickets and chats, view analytics. No settings, team, or security access.

Can I create custom roles?+

Not currently. Three built-in roles plus department assignment gives granular control.

Settings

Blocked IPs

Manage IP addresses blocked from accessing your tracked sites.

Blocked IPs
Blocked IPsThe blocked-IPs screen: a block-an-IP/CIDR form beside a Blocked Addresses table with each entry, date, reason and an Unblock button.Blocked IPsworkspaceBlock an IP / CIDR203.0.113.0/24Reason (optional)BlockBlocked addresses203.0.113.9Jun 12 · brute forceUnblock45.12.0.0/16Jun 10 · spamUnblock102.89.6.2Jun 9 · abuseUnblock1BLOCKIP or CIDR range2LISTWho & when, with reason3UNBLOCKOne click
The real Blocked IPs screen: block a single IP or a CIDR range, and manage the list — each with its date, reason and one-click unblock.

How to block

1
Go to Security > Blocked IPs

2
Add an IP or CIDR range

Example: 203.0.113.42 or 203.0.113.0/24

3
Add a reason

Document why: spam, abuse, scraping, etc.

Will blocking affect legitimate users?+

If customers share a corporate IP or VPN, blocking that IP blocks everyone on it. Use narrow blocks.

Settings

Failed logins

All unsuccessful login attempts to your OpsIQ admin.

Failed logins
Failed loginsThe failed-logins screen: a table of accounts/IPs with failure counts, time of last attempt, and a Block button per row.Failed loginsworkspaceFailed login attemptsACCOUNT / IPFAILEDLASTACTION[email protected] · 41.62.10.472m agoBlock[email protected] · 102.89.6.2318m agoBlockunknown · 45.12.9.71226m agoBlock[email protected] · 88.21.4.921h agoBlock1WATCHFailed login attempts2COUNTSPer account / IP3ACTBlock from the row
The real Failed logins screen: every account/IP with its failure count and last attempt — block a brute-force source straight from the row.

What each entry shows

Date/time

When the attempt happened.

Email

Email address used.

IP address

Source of the attempt.

Country

Geographic location.

Reason

Wrong password, locked, or not found.

Warning signs

Many attempts, same email

Password guessing. Ensure 2FA is enabled.

Many attempts, different emails

Automated attack. Block the source IP.

Unusual countries

If your team is local, foreign attempts are likely attacks.

Settings

AI security analyst

An opt-in analyst layer over the Security pages: verdicts, incident briefs, a daily digest, a weekly posture check, Ask Security, and 0-token block policies. It never runs in the visitor request path.

Every Security page records what happened, but reading it still takes judgment. The AI security analyst adds that judgment in place, and it is built to spend almost nothing: it never sits in the beacon or login path, deterministic rules settle the obvious cases with no AI call, verdicts are cached, and the analyst's best output is a deterministic rule that then enforces forever at zero tokens. Turn features on in Settings → Security; all default off.

What it adds

Verdict chips + Explain

Blocked IPs and Failed Logins rows show a benign / suspicious / hostile chip with a confidence score. Explain opens the reasoning, the facts used, and one-click Block / Release actions. Cached 24h, so re-viewing an IP is free.

Incident briefs

Related events cluster into one incident (login wave, URL scan, auto-block burst) with a plain-English timeline and one recommended next step. Ongoing attacks fold into the same incident.

Daily digest

One recap per day: yesterday versus your baseline, blocks, incidents, and the single thing to do. Quiet days send a deterministic all-clear at zero tokens.

Weekly posture check

A Monday hardening checklist (2FA gaps, lockout threshold versus real attack volume, alerts off) with a severity, effort and exact fix per item.

Ask Security

A question box on the Security Overview that answers from your live security state. Deep server questions are handed to the admin engineer chat rather than guessed.

Policy proposals + autopilot

The analyst proposes concrete block rules as Approve / Dismiss cards; approved rules enforce at zero tokens with a live hit counter. Optional autopilot approves only the safest rules automatically.

Settings

AI security analyst (security_ai_enabled)

Master switch — enables verdict chips, Explain, and Ask Security. Only ambiguous IPs reach the model, batched into one call.

Incident briefs (security_ai_incidents)

Clusters events into incidents and writes each new story. Runs on the existing hourly security cron.

Daily digest (security_ai_digest)

One security recap per day on the bell and the Overview. Quiet days cost nothing.

Weekly posture check (security_ai_posture)

Monday hardening checklist on the Overview. The checklist is fully deterministic.

Policy autopilot (security_ai_autopilot)

Lets the analyst activate its safest proposals unattended: reversible time-limited blocks only, single IPs or ranges no wider than /24, never shared/mobile/private, capped 10 per hour, always audited and undoable.

💡
Every call is tagged security_ai with its own monthly cap in AI Config → Cost Guardrails (default 300k tokens). If the cap is hit, features degrade to deterministic reads — blocking, lockouts and alerts never depend on this budget. The analyst can never delete data, change settings, touch the audit ledger, or make a permanent ban.
Operations

Cron and automation

OpsIQ uses cron jobs to run scheduled tasks: email polling, session assembly, analytics, retention, AI queue, CRM scoring, and connector syncing.

How it works
Cron and automationA single crontab line running cron.php that fans out to jobs: SLA checks, retention purge, connector sync, scheduled reports, proactive rules and the AI worker, each with its cadence.* * * * * php /path/opsiq/cron.php# add once to crontab — fans out to every jobSLA breach checks1mRetention purgedailyConnector sync15mScheduled reportsdailyProactive idle ruleshourlyAI reply workerlive
Cron

Required cron entry

Crontab entry
* * * * * php /path/to/opsiq/cron.php >> /var/log/opsiq-cron.log 2>&1

Runs every minute. OpsIQ internally manages which tasks to run and how often.

What cron does

Email polling

Checks mailboxes for new emails. Every 1-5 minutes.

Session assembly

Groups page views into sessions. Every 5 minutes.

Analytics aggregation

Calculates dashboard rollups. Every 15 minutes.

Retention cleanup

Deletes old data past retention period. Daily.

AI queue

Processes auto-reply drafts and AI tasks. Every minute.

CRM scoring

Updates lead scores and deal health. Every 15 minutes.

CRM forecast snapshot

Weekly forecast data capture.

Connector sync

Polls connected platforms. Every 5-15 minutes.

Admin presence pruning

Cleans stale presence records.

Verifying cron

1
Check the log

Look at /var/log/opsiq-cron.log for recent entries.

2
Check diagnostics

Settings > Diagnostics shows "Last cron run." Should be within 5 minutes.

3
Run manually

Test with: php /path/to/opsiq/cron.php

🚫
If cron is not running, email polling, auto-reply, session assembly, analytics, retention, and CRM scoring all stop.
Operations

Cloud hosting

On OpsIQ Cloud we run the infrastructure for you — no servers, updates or backups to manage. You sign up, a workspace is provisioned in seconds, you connect your site, and you are live. Each order gets its own isolated workspace, and a customer who owns several can switch between them. It is the same product as self-hosted; only the operations move to us.

How it works
Cloud hostingA cloud onboarding flow: sign up, a workspace is provisioned instantly, connect your site, and you are live — with managed infra and updates.Sign uppick a planWorkspace readyinstant · isolatedConnect sitepaste the snippetManaged infra · automatic updates · backups · one workspace per order
Cloud

What Cloud handles for you

Infrastructure

Servers, scaling, TLS, storage and uptime are managed by OpsIQ. There is nothing to provision.

Updates

New features and security fixes roll out automatically — you are always on the current version.

Backups

Your data is backed up for you; you can still export everything at any time from the Export page.

Multi-workspace

Each order is its own isolated workspace (data never mixes). A customer who owns several sees a workspace selector at login.

Getting started on Cloud

1
Sign up

Choose a plan and create your account. Your workspace is provisioned automatically within seconds.

2
Apply recommended settings

New workspaces ship with best-practice defaults (AI auto-reply, tracking, CSAT, retention). Use the onboarding quick-start to apply them in one click.

3
Connect your site

Paste the widget snippet (or install the WordPress plugin) and connect any platforms. You are live.

💡
Cloud and self-hosted run the identical product — you can migrate either direction at any time. Choose Cloud to remove infra worry, or self-hosted for total control (see Self-hosting).
Operations

Self-hosting OpsIQ

OpsIQ self-hosted runs on your own server for full control over data, branding, and integrations.

How it works
Self-hostingA server box (PHP 8.4, MySQL 8, HTTPS) beside the install steps: upload files, run installer, activate license, add cron.Your serverPHP 8.4+MySQL 8HTTPS1Upload the OpsIQ files2Run the installer, enter DB3Activate your license keyAdd the cron entry — done
Self-hosting

Requirements

PHP

8.1+. Extensions: curl, json, mbstring, openssl, pdo_mysql, gd.

MySQL / MariaDB

MySQL 8.0+ or MariaDB 10.6+. InnoDB required.

Web server

Apache 2.4+ with mod_rewrite, or Nginx.

HTTPS

Required. Use Let's Encrypt or any SSL provider.

Cron

System cron running every minute.

Memory

Minimum 512 MB PHP memory_limit. Recommended: 1 GB.

Disk

Minimum 1 GB. Additional depends on data volume.

Installation

1
Upload files

Upload OpsIQ to your web server document root.

2
Create database

Create a MySQL database and user with all privileges.

3
Configure

Edit config with database credentials, URL, and license key.

4
Run setup

Visit the URL. Setup wizard creates tables and initial admin.

5
Set up cron

Add cron entry to run every minute.

6
Verify HTTPS

Ensure HTTPS is working. HTTP should redirect.

Updating

1
Backup

mysqldump + file backup before updating.

2
Upload new files

Overwrite existing files. Config is preserved.

3
Run migrations

Visit admin. Migrations run automatically.

4
Verify

Check features, cron, and error log.

🚫
Never delete .schema_cache.json unless instructed. A stale cache makes tables appear missing (sites/tickets vanish). Delete only to force a rebuild.
Operations

Production guide

Checklist and best practices for running OpsIQ in production.

Production guide
Production guideA go-live checklist: custom domain and SSL, AI trained, connectors and cron, backups and retention, and team roles.Go-live checklistworkspaceBefore you go liveCustom domain + SSL configuredAI trained on your contentConnectors tested · cron runningBackups scheduled · retention setTeam roles assigned & reviewed1GO-LIVEPre-launch checklist2VERIFYDomain · SSL · backups3CONFIDENTShip when it is green
A go-live checklist so nothing is missed: domain + SSL, trained AI, tested connectors and cron, backups and retention, and team roles.

Before going live

HTTPS configured

SSL installed, HTTP redirects, HSTS enabled.

Cron running

Verify via diagnostics page.

AI tested

Chat as a customer. Verify accuracy and tone.

Widget installed

On all website pages. Verify with Live Feed.

Backup configured

Automated daily database and file backups.

Error logging

PHP error log enabled and monitored.

Team invited

All members have accounts with correct roles.

Knowledge base populated

At least 5-10 articles.

Daily: Check dashboard, clear ticket queue, spot-check AI conversations.

Weekly: Review AI Insights, update KB, check team performance, review security.

Monthly: Review analytics trends, audit connectors, update AI training, verify backups.

Operations

Pre-launch checklist

Use this checklist before launching OpsIQ.

How it works
Pre-launch checklistA terminal running php tools/preflight.php with green checks for lint, PHPUnit, PHPStan, node tests and the AI eval gate, ending in PREFLIGHT PASSED.$ php tools/preflight.phpphp -l — no syntax errorsPHPUnit — 1,456 tests passedPHPStan level 5 — cleannode static tests — passedAI eval ship-gate — passedPREFLIGHT PASSED — safe to ship
Pre-launch checklist
1. Widget loads in all browsers

Chrome, Firefox, Safari, Edge.

2. Widget loads on mobile

Phone and tablet.

3. Tracking records visits

Visit in private browser, check Live Feed.

4. AI chat works

Ask 5 common questions. Verify accuracy.

5. Ticket creation works

Create via widget. Check admin Tickets.

6. Email to ticket works

Send email to mailbox. Verify ticket appears.

7. Auto-reply works

Create test ticket. Wait for AI reply.

8. Connector works

Ask AI about a test customer.

9. Identity works

Log in as customer. Verify identification.

10. Team access works

Log in as each role. Verify permissions.

11. Webhooks fire

Create ticket. Verify webhook sent.

12. Backups work

Restore to test environment. Verify data.

Developer

Web Push on third-party sites

Browser push notifications — including OpsIQ Push Campaigns — need a service worker served from the SAME ORIGIN as the page. The OpsIQ widget loads from your OpsIQ deployment, so a third-party site cannot register OpsIQ's worker directly. Host one small file on the site's own domain to enable push there. Campaigns deliver through BOTH supported methods.

How it works
Web pushAn OS-style push notification above two delivery method cards: Built-in VAPID and Pusher Beams.Your storeYour cart is waiting — 10% off todaynowBuilt-in (VAPID)No third partyHost one filePusher BeamsUse your accountHost the worker
Web push

Why this is needed

Browsers only let a page register a service worker from its own origin. The widget loads cross-origin from your OpsIQ deployment, so it cannot install the push worker on a customer site — until you host the worker on that site's origin, the widget silently skips push (no error, no subscription). You have two options below; OpsIQ Push Campaigns publish through both.

Option A — Self-hosted Web Push (VAPID, no third party)

1. Download the worker from your OpsIQ deployment: https://YOUR-OPSIQ/opsiq/opsiq-push-sw.js

2. Upload it to your web root so it is reachable at https://yoursite.com/opsiq-push-sw.js. The widget auto-detects this path on the page's own origin and registers it — no snippet change needed. (It uses a narrow scope, so it never replaces a service worker you already run.)

Optional: if you must host it at a non-standard path, point the widget at it before the snippet — it is only accepted when same-origin:

Optional — only if the file is NOT at the web root
<script>window.OpsIQ=window.OpsIQ||{};window.OpsIQ.pushSwUrl="/custom/opsiq-push-sw.js";</script>

3. In OpsIQ, generate VAPID keys (Settings → Client Chat AI → Advanced → Web Push). The widget then asks visitors for notification permission and subscribes them.

Behind a CDN/Cloudflare? Make sure /opsiq-push-sw.js returns HTTP 200 (purge the cache if it was 404 before you uploaded — a cached 404 will block registration).

Option B — Pusher Beams (managed provider)

1. In OpsIQ settings set the push provider to Pusher Beams and enter your Beams Instance ID and Secret Key.

2. Host the Beams service worker on the site's root as /service-worker.js. Copy https://YOUR-OPSIQ/opsiq/pusher-beams-service-worker.js, or merge this line into your existing root worker:

Beams worker — host at https://yoursite.com/service-worker.js
importScripts("https://js.pusher.com/beams/service-worker.js");

3. That's it. The widget auto-loads the Beams SDK and subscribes each visitor to the per-site interest opsiq-site-<your-site-key>. No other wiring needed.

How campaigns deliver

Push Campaigns publish through both methods at once: visitors on the self-hosted VAPID worker get the encrypted Web Push, and visitors subscribed via Pusher Beams get the Beams publish. Each visitor is reached through whichever they subscribed to, so you can run same-origin VAPID on some sites and cross-origin Beams on others.

HTTPS is required for service workers and Web Push (localhost is exempt for testing). The admin chat inbox already uses the same Beams interest mechanism for operator alerts.

Operations

Troubleshooting

Common issues and how to fix them.

General

Blank page+

Check PHP error logs. Causes: old PHP (need 8.1+), missing extension, DB connection failed, wrong file permissions.

Dashboard shows zeros+

Check: widget installed? Cron running? Date range correct? IP excluded?

AI

AI does not respond+

Check: provider configured? API key valid (use Test connection)? Budget exhausted? Workspace AI config correct?

AI gives wrong answers+

Check: knowledge base up to date? Prompt clear? Connector lookups returning correct data? Review conversation in AI History.

AI is slow+

Depends on: provider API speed, context size (large KB = more tokens = slower), network latency. Try a faster model.

Tracking

Widget missing+

Check: script in page source? JS errors in console? CSP blocking? Ad blocker?

Unknown country+

GeoIP not configured. Use Cloudflare (automatic) or MaxMind GeoLite2 database.

Tickets

Emails not creating tickets+

Check: mailbox connected? Cron running? App password changed? IMAP settings correct?

Auto-reply not working+

Check: enabled? Department allowed? AI configured? Cron running? Human replied first?

Connectors

Connection failed+

Check: credentials correct? Key expired? API accessible from server? Base URL correct?

Connected but no data+

Check: API key scopes? Webhook sync enabled? Cron running?

Performance

Slow pages+

Check: database performance (SHOW PROCESSLIST), PHP memory (increase to 1GB), enable opcache, reduce retention period.

Reference

Glossary

Definitions for terms used throughout OpsIQ.

Action

Something the AI can do through a connector or the platform.

Agent

A team member with limited access, or an AI agent.

BYOK

Bring Your Own Key — you provide your own AI API key.

Connector

A plugin integrating an external platform with OpsIQ.

CSAT

Customer Satisfaction score.

Deal

A revenue opportunity in the CRM.

Department

A ticket category for routing and access control.

Escalation

Moving a ticket to a different department or from AI to human.

GeoIP

Visitor location detection from IP address.

Handoff

Transferring a conversation from AI to human.

Identity token

Signed token identifying a website visitor.

Knowledge base

Articles the AI uses to answer questions.

Lead

A visitor showing buying intent.

Lead score

0-100 number indicating conversion likelihood.

Lifecycle stage

Where a customer is: Lead, Prospect, Customer, At Risk, Churned.

Managed AI

AI provided as part of your OpsIQ plan.

Pipeline

Visual board of deal stages.

RBAC

Role-Based Access Control.

Session

A series of page views within a timeout window.

Site key

Unique identifier for a tracked website.

SLA

Service Level Agreement — target response times.

Token

Unit of AI text. Roughly 4 characters = 1 token.

Trust Layer

Safety system controlling AI autonomy.

Webhook

HTTP callback for event notifications.

Widget

JavaScript code embedded on your website.

Workspace

A site with its own tracking, AI, connectors, and team. Same as "site."

Reference

Get more help

If this documentation does not answer your question:

Admin AI

Click "Ask OpsIQ" in the admin. Has access to this documentation and your platform data.

Support ticket

Include: what you tried, what happened, what you expected, and any error messages.

Email

Email support with your license key and issue description.

Tips for effective support requests

Include the page

Which admin page (URL or name).

Include the setting

Exact setting name and current value.

Include the error

Exact error message with codes.

Include the steps

What you did, step by step.

Include expected vs actual

What should happen vs what did happen.

💡
The more specific your request, the faster the answer. "It does not work" requires investigation. "Clicking Save on AI Configuration gives error code 502" gets a direct answer.