Configure, operate, secure, and troubleshoot every part of a Mitsolab workspace. This manual covers the settings involved, the correct setup order, practical examples, validation, and failure handling.
Complete Console referenceUpdated August 15, 2026
Overview
Understand what the Console controls, how it relates to the Portal, and how to establish a workspace safely.
Console and Portal are different products
ML Console is the administrative control plane. Owners and Console teammates use it to configure workspaces, channels, AI Agents, routing, integrations, permissions, billing, notifications, APIs, and webhooks.
Mitsolab Portal is the daily operations application. Human agents use its Inbox, CRM, tasks, knowledge, and approved Action Tools. A setting made in Console can change what Portal agents can see or do, but the two applications have separate sign-in surfaces and responsibilities.
Choose, create, and switch workspaces
A workspace is the security, billing, data, and configuration boundary for one organization. The workspace chooser marks workspaces as Owner or Shared; the label describes your relationship to the workspace, not a different workspace type.
Open Console and select a workspace from Choose a workspace. The workspace icon is identical for every workspace; use the name and relationship label to distinguish them.
To create another workspace, choose Create workspace, enter a clear organization name, and submit. Console enforces the account's workspace limit.
Inside Console, use the current-workspace control in the sidebar to return to the chooser. Confirm the workspace name before changing channels, keys, routing, or billing.
The workspace list does not expose owner user IDs. Console only needs the workspace ID internally and returns the user-facing relationship text Owner or Shared.
Portal activation and checkout
Portal-dependent configuration requires an active Portal subscription or eligible trial. The activation gate checks workspace requirements, displays the selected seat quantity and billing terms, sends the checkout request, and waits for the billing provider to synchronize the subscription.
Open a Portal-dependent page and review the activation card. Resolve any missing workspace requirement shown there.
Choose the number of Portal seats. Each paid seat represents one Portal user and contributes 1,000 pooled Copilot drafts per monthly allowance.
Continue to checkout. Do not close the provider window until payment succeeds or is cancelled.
Return to Console and allow the synchronization state to finish. If checkout failed, retry from the failure card; do not create another workspace to work around the state.
Navigation, theme, and account settings
The sidebar groups workspace operations, Portal configuration, and settings. Open Portal opens the operational app for the same workspace. Documentation opens this manual. The bottom theme control changes the Console color scheme.
User settings let you update display name, confirm a new email address, and change your password. Passwords must contain at least eight characters. Account or workspace deletion is a destructive workflow; review the confirmation carefully. If a deletion control is marked preview, it does not perform a production deletion.
Access model and responsibilities
Person or system
Where access is granted
Typical responsibility
Workspace owner
Workspace ownership
Subscription, destructive changes, security ownership, and final administrative control.
Console teammate
Team page
Configures agents, channels, routing, tools, notifications, and other Console settings.
Portal Human Agent
Human Agents page
Works conversations, email, CRM, tasks, and approved Portal Action Tools.
Portal Human Agent with Admin enabled
Human Agent invite or edit
Also manages the Portal workspace and Portal membership.
AI Agent or Dispatcher
AI Agent roster slot
Handles or routes customer conversations according to saved configuration.
External integration
Agent key, Action Tool credential, provider credential, or webhook secret
Performs only the API operations allowed by that credential.
One person can be both a Console teammate and a Portal Human Agent, but the memberships remain independent. When someone changes roles, update both records deliberately. Removing Portal access does not remove Console access, and removing Console access does not end an active Portal shift.
Recommended first-hour setup
Create or open the production workspace and confirm its name in the sidebar before entering credentials.
Activate the Portal subscription or trial and choose the initial seat count. Invite one test Human Agent and create the categories that routing will use.
Create an AI Agent around a real customer journey. Connect the knowledge and actions it needs to answer questions, complete multi-step work, and hand off only when human authority is required. Save setup and test the full journey in the private chat preview.
Connect one channel or email provider, route it to the test target, and exchange real inbound and outbound messages.
Configure Copilot access for the test agent, add a short workspace guidance rule, and verify that the Portal control appears only for that person.
Add Console teammates only after the workspace has an owner-controlled credential and billing process.
Configure notifications and webhooks last, after the actions that produce those alerts and events are working.
Example: production and test workspaces
A company named Northwind can keep Northwind Production for real channels and Northwind Test for provider test identities. Each workspace has separate agents, routing, keys, webhook secret, Copilot pool, and billing state. Configuration is not inherited between them.
When copying a configuration manually, replace every workspace-specific identifier and secret. A production Agent API key, webhook signing secret, address route, or channel assignment must never be reused in the test workspace.
Home and workspace analytics
Read workspace activity without confusing activity summaries with billable balances.
Workspace overview
Home summarizes message activity, AI credit consumption, audience geography, countries, and channels. Use the date controls before comparing totals: a date-range change can alter activity cards while billing balances remain tied to the billing cycle.
Message activity shows traffic over the selected period.
AI credits shows consumed or remaining agent credits.
Audience geography maps locations derived from available contact or channel information; unknown locations remain unclassified.
Country volume shows messages, conversations, and share. It displays ten rows per page and uses pagination instead of an inner scroll.
Channel volume compares connected channels. Channels are a bounded list and do not paginate.
How to investigate a traffic change
Set the intended date range and timezone first. Record them when sharing a screenshot or export.
Check Message activity to determine whether the change affects total traffic or only one subset.
Compare Channel volume. A rise isolated to Email or WhatsApp usually points to a channel campaign, incident, or routing change rather than global growth.
Open Country volume and page through results when location is relevant. Treat unknown locations as missing attribution, not a new country.
Compare AI credit consumption with message volume. Credits can rise faster than messages when more conversations use Advanced reasoning or action-heavy agents.
Open the relevant Agent or Dispatcher Insights page for the same range to identify the responsible agent, action, hour, or destination.
Example: messages rise but conversations do not
If Email messages increase from 800 to 1,600 while conversations remain near 400, the average messages per conversation doubled. Investigate replies, automated acknowledgements, reopened tickets, and repeated delivery failures before assuming customer acquisition doubled. If AI credits also doubled, inspect whether the same conversations were reassigned to an AI Agent or changed to a higher intelligence level.
AI Agents
Create specialist agents, supply reliable knowledge, inspect performance, and deploy them through supported surfaces.
Agent roster and capacity
The roster separates active slots from inactive agents. A slot can hold either an AI Agent or an AI Dispatcher. Empty slots are usable capacity; locked rows require a plan or add-on upgrade.
Choose an empty slot or Add agent and select AI Agent.
Enter a name, choose a starting role template, review the generated role, and write the opening greeting.
Create the agent, then complete its setup and knowledge before exposing it to customers.
To reactivate an inactive agent, drag it into an eligible empty active slot. To add capacity, choose Add agent slot and complete the add-on flow.
Deleting an agent is different from making it inactive. Deletion removes the configured agent after confirmation; use inactivity when you may need the configuration later.
Agent setup
Agent setup controls judgment, voice, opening behavior, and Portal email eligibility. Save changes before leaving the page; the chat preview is for validation and is not a substitute for a real channel test.
Setting
What it controls
Guidance
Name
Console, routing, and preview identity
Use a durable role name; edit with the pencil control.
Fast
1× credit reasoning mode
Best for short, low-complexity replies.
Smart
1× balanced reasoning mode
Default for most support and sales conversations.
Advanced reasoning
2× credit deep reasoning
Use for complex requests where latency and higher credit use are acceptable.
Portal email assignment
Whether teammates may assign email tickets to this agent
Enable only after its email knowledge and handoff behavior are tested.
Role template
Starting instruction structure
Choose General, Customer Support, Sales, or Custom, then edit the resulting role.
Role
How the agent behaves and answers
State duties, limits, escalation rules, tone, and prohibited commitments.
Greeting
First message in a new conversation
Keep it short and avoid promising unsupported capabilities.
The right-side chat supports New chat and lets you test the saved agent. Its fixed desktop version keeps the button at the header edge; the retractable version reserves space for its close control.
Chat logs
Chat logs list stored agent conversations. Filter by date or source, open a conversation to inspect messages and metadata, and load older rows when offered. Deleting a conversation requires confirmation and removes that stored log; it does not retract messages already delivered to an external channel.
Agent insights and reports
Select a date range, timezone, or preset and choose Generate report. The report can include message trend, channel distribution, retention, action usage, geography, peak hours, weekdays, and months. A returning user is measured across at least two distinct eight-hour activity windows. Download the HTML report when you need a portable snapshot.
Country tables use ten-row pages so wheel scrolling remains attached to the page. Channel volume does not paginate because the supported channel set is bounded.
Design agents around complete customer journeys
A Mitsolab AI Agent can combine knowledge, customer context, conversation history, and Action Tools to handle multiple related tasks from the first question through resolution. Define the outcomes it should achieve and the decisions that require human authority; do not split a connected customer journey into separate agents simply because it contains several steps.
Agent design
Can handle
Use another agent when
Customer experience agent
Product questions, plan guidance, qualification, account lookups, order updates, troubleshooting, follow-ups, and routing
A separate brand, department, language operation, permission boundary, or workflow needs independent configuration
Commerce agent
Product discovery, availability checks, order status, customer-data collection, post-purchase support, and escalation
Another business unit requires different knowledge, tools, policies, or ownership
Service agent
FAQs, guided diagnosis, account context, Action Tool execution, case updates, summaries, and human handoff
A regulated or high-authority process must be isolated from the broader service journey
Start with the fewest agents that match your actual operating model. Expand the roster when separation improves ownership, access control, reporting, routing, or customer experience.
Write a production role
The role should establish identity, objectives, source hierarchy, limits, escalation, and response style. Put frequently changing facts in knowledge rather than the role.
Role example
You are Northwind's subscription support agent.
Objectives:
- Explain current plans using Product and Dynamic Source records.
- Ask at most one clarifying question when the customer's requirement is ambiguous.
- Recommend a plan only when its documented limits satisfy the requirement.
Boundaries:
- Never invent discounts, renewal dates, account balances, or roadmap commitments.
- Do not request payment-card details in chat.
- Hand off refund decisions and contract negotiations to Billing Support.
Response style:
- Answer in the dominant meaningful language of the recent conversation.
- Lead with the direct answer, then provide the minimum supporting detail.
Test every stated boundary. A role that says “never invent discounts” is incomplete unless the test set includes a customer asking for an undocumented discount.
Choose and validate intelligence level
Level
Use it when
Test before choosing
Fast
Intent is obvious and replies mostly retrieve one fact
Short FAQ, simple status response, one-field collection
Smart
Replies combine context, policy, and normal judgment
Ambiguous plan question, several knowledge sources, routine action decision
Advanced reasoning
The request has competing constraints or a complex multi-step decision
Long exception policy, several dependent calculations, complex tool sequence
Run the same representative conversations at candidate levels. Compare factual accuracy, tool choice, latency, and credits—not writing style alone. Advanced reasoning costs 2× credits, so use it only when the measured result justifies it.
Pre-launch test matrix
Test
Expected result
Direct supported question
Answers from the intended source and does not add unsupported claims.
Paraphrased question
Finds the same answer despite different wording.
Missing fact
States the limitation or asks for needed context instead of inventing.
Conflicting sources
Uses the maintained authoritative source or escalates; conflict is then removed.
Forbidden request
Follows the role boundary and offers the approved next step.
Action should run
Selects the correct action once with valid fields.
Action must not run
Does not call an external system speculatively.
Human handoff
Routes with a concise summary and collected required fields.
Language change
Follows meaningful recent conversation language rather than a stray character or greeting.
Use Chat logs for diagnosis
Filter by date and source to reduce the conversation list, then open Chat for message order and Details for source, country, message count, start, and last activity. Search is useful for a known phrase or customer label. Load More requests the next result page; it does not broaden the current filters.
When reporting a bad answer, preserve the conversation long enough to capture the agent, timestamp, user request, answer, source, and expected behavior. Deletion is permanent for the Console log and removes the evidence needed to reproduce the issue.
Interpret Agent Insights
Message trend answers when volume changed.
Channels answers where conversations entered.
Retention distinguishes one activity window from users returning in another eight-hour window.
Action usage shows whether external operations are being selected and completed at the expected rate.
Countries reveals attributed geography, with unknown values remaining unknown.
Hours, weekdays, and months support staffing and maintenance scheduling in the selected timezone.
Generate reports with identical date and timezone settings before comparing agents. Downloaded HTML captures that generated state; regenerating later can produce different totals as delayed provider data arrives.
Agent knowledge
Give agents maintained, scoped sources instead of placing changing facts in the role prompt.
FAQs
An FAQ contains a title, up to five example questions, and one authoritative answer. Example questions help match user phrasing; they are not separate answers.
Choose Create FAQ.
Write a recognizable title and add realistic variants of the customer question.
Write the complete answer, including conditions and escalation boundaries.
Save, test from the agent chat, and use the item menu to edit or delete it later.
Notes
Notes store internal context, policies, and details the agent should remember while replying. Use one subject per note, give it a descriptive title, and revise it when policy changes. Create, edit, and delete from the item menu. Never store passwords, private API keys, or payment-card data in a note.
Products
Product records give the agent consistent commercial facts. Each record supports a title, description, price, currency, and billing period: single, daily, weekly, monthly, quarterly, or yearly. Keep variations as separate records when their price or entitlement differs.
Documents
Upload a supported document and keep the page open while Console parses and chunks it. Progress indicates ingestion, not answer quality. After processing, ask several questions whose answers occur in different parts of the file. Delete obsolete documents so the agent cannot cite conflicting versions.
Notion
Choose Connect Notion, authorize the intended Notion workspace, select pages that the integration can access, and import them. Imported pages become agent knowledge snapshots; verify them after material Notion edits. Removing an imported page stops using that source. Disconnecting removes the Console connection and requires a new OAuth authorization to import again.
Dynamic Sources
Dynamic Sources are searchable structured tables. Use them for catalogs, plans, locations, stock, eligibility, or other records that are better filtered than read as prose.
Create or name the table and define columns. Supported column types include text, integer, float, boolean, and date.
For each column, decide whether the agent may filter or sort by it. Do not expose internal-only fields to agent search.
Insert rows manually or import CSV. Match CSV headers and data types before importing.
Enable the source only after checking representative searches with column, condition, and value filters.
Use Export CSV for review or backup. Column deletion and row deletion are destructive.
The table toolbar can search rows, choose a filter column, apply conditions such as Contains, and combine values. The enabled switch controls whether the agent can use the table; it does not delete data.
Choose the correct knowledge source
Information
Best source
Reason
One common question with one approved answer
FAQ
Example phrasings improve retrieval around a single response.
Internal policy or operating context
Note
Free-form maintained context without customer-question framing.
Named offer with price and billing interval
Product
Dedicated commercial fields reduce ambiguity.
Long handbook, policy, or specification
Document
Parsing and chunking make sections independently retrievable.
Team-maintained Notion page
Notion
Imports the selected authorized page without copying it manually.
Many structured records that need filters
Dynamic Source
Typed columns support exact search, filtering, sorting, and CSV maintenance.
FAQ example and quality check
FAQ record
Title: Refund eligibility
Example questions:
- Can I get a refund?
- I was charged by mistake. What should I do?
- Is my annual plan refundable?
Answer:
Purchases are reviewed under the refund policy that applied on the payment date. Do not promise approval. Collect the invoice email and payment date, then route the request to Billing Support for a decision. Never request full card details.
Use distinct, meaningful examples. Five near-identical questions add less retrieval value than three realistic variations. The answer must stand alone because the agent can retrieve it without surrounding notes.
Note and Product examples
Note example
Note title: Delivery promise policy
Content: Agents may repeat a delivery estimate returned by the shipping provider, but must call it an estimate. Never promise an arrival date unless an approved guaranteed service is present in the order data.
Product example
Product: Growth Plan
Description: For teams that need two active AI Agent or Dispatcher slots and the plan's current included message-credit allowance.
Price: 149
Currency: USD
Period: Monthly
Do not put several plan prices in one Product description. Separate records allow the matching plan to be retrieved without bringing unrelated prices into context.
Document ingestion lifecycle
Remove draft comments, duplicated appendices, hidden credentials, and obsolete versions before upload.
Use a descriptive filename that includes the subject and effective version.
Upload and wait through parse and chunk progress. A completed progress indicator means the content was processed, not that every answer is correct.
Test a fact near the beginning, middle, and end; a table value; a negative rule; and a question the document does not answer.
When publishing a replacement, upload it, validate it, and then delete the obsolete document so the agent cannot retrieve both.
Notion authorization and refresh
The Notion authorization determines which pages Mitsolab can see. If a page is missing, first check that the integration was granted access to that page or its parent in Notion, then reconnect or reload the selection. Import only the pages needed by the agent.
After a significant page edit, verify that the imported source reflects it before relying on the new fact. Removing one imported page is narrower than disconnecting Notion; disconnect only when the workspace should no longer authorize the integration.
With filtering enabled, the agent can request active records for Jordan and sort by monthly price. It cannot query internal_margin. Import validation should reject a nonnumeric price or malformed date instead of silently treating it as text.
Resolve conflicts and training state
If two sources disagree, edit or remove the obsolete one rather than relying on prompt wording to override it. Check the Console training or data status after source changes. A “training in progress” state means testing can still hit the previous state; a failed state requires correcting or retrying the source before launch.
AI Agent actions
Let an AI Agent perform narrowly defined external operations while keeping credentials out of prompts.
Custom API
A Custom API action tells one AI Agent when and how to call an endpoint. Configure a title, a precise “when to use” description, endpoint URL, method (GET, POST, PUT, PATCH, or DELETE), secret headers, and JSON fields. Fields can be text, integer, boolean, float, array, required, or nested.
Describe the business condition that permits the call.
Use an HTTPS endpoint and the least-privileged credential possible.
Model only required inputs; give every field a clear semantic name.
Test success and validation failures using non-production data.
Save and run a chat test that should use the action and one that must not use it.
Custom Button
A Custom Button appears when the configured condition is met and sends the user to a URL. Set the appearance condition, redirect URL, button label or message, and colors, then check the live preview. The destination must be safe for end users; do not put secrets or untrusted raw values in a query string.
Zapier, Make.com, and Slack
Zapier and Make.com actions post to a platform webhook. Create the receiving workflow first, paste its webhook URL, define when the agent may call it, and map optional headers and body fields. Test in the automation platform before enabling customer traffic.
Slack uses a Slack Incoming Webhook. Configure when to notify, a concise message template, and optional username. Treat the webhook URL as a secret and rotate it from Slack if exposed.
Custom API example: check an order
Field
Configuration
Title
Check order status
When to use
Use only after the customer asks about an existing order and provides an order number.
The “when to use” rule prevents the agent from calling the endpoint for a general shipping-policy question. The endpoint must still authenticate, validate the order ID, and ensure the credential can access only the intended tenant.
Body fields, types, and nesting
Use text for identifiers even when they contain only digits; integer and float for values that must be numeric; boolean for true/false behavior; and arrays for repeated values. Required means the action cannot run without the value. A nested child belongs under its parent object rather than being sent at the top level.
Test the serialized request at the receiver. A value that visually looks correct in Console can still be wrong when a boolean is quoted as text or an array is sent as one comma-separated string.
Custom Button example
A “Track shipment” button can appear after an order number is known and redirect to https://tracking.example.com/order/NW-10482. Configure the customer-visible label, supporting message, button color, and readable text color. Test keyboard focus, mobile width, missing order IDs, and an expired tracking link.
Do not put an authorization token, internal contact ID, or unrestricted redirect destination in the URL. Prefer a short-lived, server-generated public reference.
Zapier and Make.com example
Create a Catch Hook or Custom Webhook trigger in the automation platform and copy its unique HTTPS URL.
In Console, describe the exact event that permits the agent to send it, such as an explicitly confirmed demo request.
Add the minimum body fields: customer name, business email, requested date, and source conversation reference.
Run a Console test while the automation platform is listening, then map the captured fields into the next step.
Add validation, deduplication, and error notification in the automation before enabling real conversations.
Create a dedicated Slack Incoming Webhook for the destination channel. A useful message template identifies the customer, request, urgency, and conversation link without pasting the entire transcript. Set the condition to a meaningful escalation such as “customer confirms a production outage,” not a broad keyword such as “problem.”
Slack message template
Production escalation
Customer: {{customer_name}}
Summary: {{issue_summary}}
Urgency: {{urgency}}
Conversation: {{conversation_url}}
Diagnose an agent action
Confirm the saved agent is the one running the conversation.
Check that the “when to use” description matches the user's intent and that required fields were collected.
Inspect method, final HTTPS URL, header name, JSON types, and nested structure.
Test the credential outside Console from a secure server environment.
Return a small valid JSON response and a meaningful non-2xx error; avoid HTML error pages.
After changing the action, start a new test conversation so previous tool context does not obscure the result.
Deploy an AI Agent
Choose a supported delivery surface, keep credentials private, and validate the production behavior.
Agent API
Generate an Agent API key from the agent's API page. The complete key is shown once. Copy it into a server-side secret manager, never browser code. Revoke a key immediately if it is exposed; generated clients using it will stop working.
agent_id and message identify the agent and new user input. Preserve anon_id for the same anonymous person. Supply chat_id to continue an existing conversation when available.
Web Embed
Enable the embed, select primary and text colors, set the displayed agent name, and use the live preview. Console provides a loader snippet and an iframe snippet; install one, not both.
data-agent is required. Theme, text color, display name, position, offsets, stacking order, panel dimensions, mobile breakpoint or behavior, and header selector are optional. Test cookie restrictions, CSP, mobile keyboard behavior, and overlap with your site's chat or consent controls.
Hosted chat page
Enable the page, set display name, icon, headline, input placeholder, default theme, and light/dark surface, accent, and text colors. Copy the public URL only after testing it in a private browser window. Optional password protection restricts casual access but should not be treated as user identity.
A custom-domain add-on lets the hosted page use your domain. Follow the DNS values shown in Console, wait for DNS propagation, and verify before distributing the URL. The add-on and renewal state are managed from Billing.
Agent API key lifecycle
Generate a key only when the server integration is ready to store it. The full value is displayed once.
Store it as a deployment secret such as MITSOLAB_AGENT_API_KEY; never commit it or return it to a browser.
Use separate keys for independent services when the page permits, so one service can be revoked without stopping another.
Log request correlation IDs and response status, but redact Authorization and customer message content where it is not needed.
On exposure, revoke first, generate a replacement, update the server, and run a new-conversation and continuation test.
Maintain conversation identity
Use a stable anon_id for the same anonymous visitor so abuse controls and conversation behavior do not treat every request as a new person. Preserve the returned or established chat_id for a continuing conversation. Creating a random identifier for every message discards continuity and can multiply stored chats.
Configure colors and display name in Console, then copy the generated loader or iframe—not both.
Place the loader once near the end of <body>. In a single-page application, do not inject it again on every route change.
If the launcher overlaps another fixed control, change position or offsets. Use z-index only as high as needed.
Set panel width and height for desktop and select fullscreen mobile behavior when a narrow floating panel would be unusable.
If your site has a fixed header, set the header selector so fullscreen behavior can account for it.
Test anonymous continuity, new chat, scrolling, the mobile keyboard, color contrast, Content Security Policy, and a failed network request.
For CSP, allow the exact script, frame, connection, and asset origins used by the generated snippet. Do not use a wildcard policy merely to make the widget load.
Launch a hosted chat page
Write a headline that explains the agent's purpose, not a generic welcome. The input placeholder should suggest a real request. Configure both light and dark palettes even when one is the default because visitors can arrive with different preferences.
Enable the page and open the copied URL in a signed-out private browser.
Validate icon, name, headline, composer, first greeting, and contrast in both themes.
If password protection is enabled, test incorrect and correct passwords; use it only as shared access protection, not individual identity.
For a custom domain, add exactly the DNS records shown, wait for public propagation, and use Console verification before publishing it.
Keep the original hosted URL available during DNS rollout so support can distinguish DNS failure from agent failure.
AI Dispatcher
Route new conversations to the right human category or AI specialist after collecting only the required context.
Configure routing and intake
Create an AI Dispatcher from an available agent slot and give it a customer-facing name.
Enable the Human Agent Categories that are valid routing destinations. Disabled categories cannot be selected by this dispatcher.
Enable AI handoff if the dispatcher may route to configured AI specialists.
Select required standard intake fields. Add up to five custom text fields only when the answer materially changes routing.
Write custom instructions that define routing precedence, ambiguity handling, unavailable destinations, and when to ask a follow-up question.
Save, then test every target, an ambiguous request, missing information, and a request with no valid target.
The summary panel shows enabled human targets, AI handoff state, required fields, and custom-field usage. On medium screens section descriptions move above their controls; on small screens the summary also joins the single content column. This responsive change does not alter routing behavior.
Activity and insights
Activity uses the same conversation log workflow as an AI Agent, scoped to conversations handled by the selected Dispatcher. Filter by date, source, or search text; open Chat or Details; load older results; and delete a non-email conversation only after confirmation.
Insights is also scoped to the selected Dispatcher. Choose a preset or custom date range and timezone, generate the report, review message trend, channels, retention, action usage, geography, and time distributions, and download the HTML snapshot. Use these views to confirm that routing volume and destinations match the Dispatcher's configuration.
Design routing before configuring it
Write the destination matrix first. A category should represent a team that can actually receive the conversation, and every route needs a fallback for missing or ambiguous information.
Customer intent
Required information
Destination
Fallback
New purchase
Product family and country
Sales
General Support
Existing technical issue
Product and short problem description
Technical
Support
Invoice or payment
Invoice email or reference
Billing Support
Support
Known specialist question
Specialist topic
Matching AI Agent
Human category
Enable only destinations present in the matrix. A large undifferentiated list makes routing harder to explain and test.
Standard and custom intake fields
Required standard fields use known workspace/contact fields. Custom fields are free-text questions unique to this Dispatcher, with a maximum of five. Ask only for information that changes the destination or lets the receiving team begin work.
Good field
Why
Avoid
Which product is this about?
Changes specialist destination
Tell us everything about your issue
What country is the account registered in?
Can change sales or compliance route
Full home address before it is needed
What error appears?
Gives Technical a usable summary
Upload all system logs immediately
Order questions from easy to sensitive. If the user already supplied an answer, the Dispatcher should use it rather than asking again.
Dispatcher instruction example
Routing instructions
Route by the customer's primary requested outcome.
- New purchases and plan comparisons go to Sales.
- Existing-account product failures go to Technical after collecting product and error summary.
- Billing, invoices, and payment questions go to Billing Support.
- If the request clearly matches an enabled AI specialist, use that specialist.
- If two destinations are equally likely, ask one short clarifying question.
- Never claim that a team is online or promise a response time.
- If no valid target exists, route to Support with a one-sentence summary.
Dispatcher acceptance tests
Scenario
Pass condition
Clear Sales request
Routes immediately without unrelated questions.
Clear Technical request missing product
Collects product, then routes Technical.
Ambiguous 'I need help'
Asks one useful clarification rather than guessing.
Disabled target mentioned
Uses configured fallback and does not route to the disabled category.
AI handoff off
Never selects an AI specialist even when one exists.
AI handoff on
Selects only an appropriate active AI specialist.
All five custom fields configured
Asks only fields relevant to the selected path, not all five mechanically.
Messaging channels
Connect provider-owned identities and choose where each incoming conversation is routed.
Connection and routing rules
Channel setup has two concerns: provider authorization and Mitsolab routing. A successful provider connection does not guarantee the desired owner; confirm the routing target after connecting and after replacing credentials.
Choose an AI Agent or AI Dispatcher for automated handling, or Portal — Manual Dispatching to place new work into the Portal flow without assigning it to an AI. Change routing updates future ownership without recreating the provider connection.
Disconnecting stops Mitsolab from using that connection. It does not normally delete the account, page, bot, or provider data itself. Confirm disconnect prompts and record any provider-side cleanup that remains.
WhatsApp
Choose WhatsApp and start the provider authorization flow.
Authorize the intended business portfolio and return to Console.
Refresh available phone numbers if the expected number is missing.
Connect the correct number and choose its AI Agent, Dispatcher, or supported routing target.
Send and receive a real test message before publishing the number.
Disconnecting a number removes its Mitsolab route; reconnect it explicitly if authorization is restored later.
Instagram and Messenger
Both use the Meta authorization flow. Connect Meta, load Facebook Pages, and inspect linked Instagram professional accounts. Connect Messenger for the intended Page and Instagram for the intended linked professional account independently. A Page connection does not automatically enable both products. Use Disconnect Meta only when you intend to invalidate the shared authorization.
Telegram
Create a bot with Telegram's BotFather and copy its token.
Paste the bot token into Console and choose a route.
If approval mode is enabled, review pending users and choose Allow or Reject.
Remove an approved user to require approval again, or disconnect the bot to stop the integration.
LINE
Create or open a LINE Messaging API channel and copy the Channel ID and Channel secret.
Enter both values in Console and connect.
Copy the Mitsolab webhook URL into the LINE Messaging API webhook setting and enable webhook delivery in LINE.
Choose routing and configure approval mode if needed.
Review pending identities with Allow or Reject; remove approvals or disconnect when access must end.
Use the Console change-routing control when ownership changes; do not create a duplicate LINE provider channel merely to change the target.
Prepare provider ownership and permissions
Channel
Prepare before Console
WhatsApp
Meta business access, the intended WhatsApp Business Account, and permission to manage its phone number.
Messenger
Admin or required task access to the intended Facebook Page.
Instagram
A professional Instagram account linked to the intended Facebook Page and appropriate Meta access.
Telegram
A bot created with BotFather and its current bot token.
LINE
A LINE Developers provider, Messaging API channel, Channel ID, and Channel secret.
Use organization-owned provider accounts. A connection authorized through one employee's temporary personal access is harder to recover and audit.
Example: change a channel from AI to Portal
Open Channels and identify the exact page, bot, number, or LINE channel by provider label—not icon alone.
Choose Change routing and select Portal — Manual Dispatching.
Confirm the modal. Do not disconnect the provider; disconnecting is unnecessary for a route change.
Send a new inbound test message. Existing open conversations can retain their current ownership; validate with a new conversation.
Confirm that the message reaches the expected Portal queue and that a Human Agent can reply through the same provider identity.
WhatsApp connection details
The Meta authorization can return multiple business accounts and numbers. Refresh after authorization, then select by verified name and display number. Connecting the wrong number can route production customer traffic even when the label looks similar.
Send an inbound customer message from a separate phone.
Reply from the assigned AI or Portal route.
Test a reply after the customer-service window has ended so the team understands template/window behavior.
When replacing authorization, reconnect and verify the number before removing the old path.
Messenger and Instagram details
Console lists Facebook Pages returned by Meta and, for Instagram, the linked professional account. Connect each surface independently. If Instagram is absent, verify in Meta that the Instagram professional account is linked to the Page and that the authorizing user granted the required assets.
A Meta disconnect affects the shared authorization and can stop both Messenger and Instagram connections. Use the individual Page disconnect when retiring only one channel.
Telegram approval mode
Approval mode is useful when a bot should not accept every Telegram identity automatically. A first contact appears as pending. Allow grants access; Reject declines it. Removing an approved identity returns it to a state that requires approval on a future interaction.
Test one approved and one unapproved account. If no messages arrive, verify the token is current, the bot was started by the user, and another service is not consuming the bot's webhook or updates.
LINE webhook and approval details
Enter the Channel ID and secret from the same LINE Messaging API channel.
After Console connects it, copy the displayed Mitsolab webhook URL exactly into LINE Developers.
Enable webhook use in LINE and run LINE's webhook verification where available.
Disable any conflicting provider auto-response that would send a second reply.
Set routing and approval behavior, then message the Official Account from a separate LINE identity.
A successful credential connection without the LINE-side webhook produces no inbound events. A verified webhook with the wrong Channel secret produces rejected requests.
Disconnect and credential rotation
Before disconnecting, record the provider asset and intended replacement route. Disconnect stops Mitsolab handling and removes or disables the local assignment; it does not delete the Facebook Page, WhatsApp number, Telegram bot, LINE channel, or provider business account.
For a leaked Telegram token or LINE secret, rotate at the provider, update Console, and test. For Meta, reauthorize with the correct business user and permissions. Do not assume changing a Console route rotates a provider credential.
Human Agents
Control who can work in Portal and organize people into routing categories.
Categories
Categories represent teams, queues, or responsibilities such as Sales, Support, and Technical. AI Dispatchers, email routing, Copilot permissions, and Portal workflows can refer to them, so use stable operational names.
Choose Create category, enter a unique name, and save.
Use a category's edit control to rename it after checking downstream routing.
Before deletion, move or update affected agents and routes. Deleting a category sets members that used it to no category.
Invite and manage a Portal agent
Choose Invite Human Agent and enter the person's email address.
Select a category or leave it unassigned when your workflow permits.
Enable Admin only if the person should manage the Portal workspace and members.
Send the invitation. The recipient follows the link to portal.mitsolab.com to finish the Portal account and workspace access.
Use search and filters to find an existing agent. Edit category or admin access, or remove workspace access after confirmation.
A Human Agent is a Portal operator. A Console teammate can administer Console. These are separate permissions; inviting someone to one does not silently grant the other.
Design categories that routing can use
A category should answer “which group can own this work?” Good categories are stable and mutually understandable: Sales, Billing, Technical Support. Avoid categories based on temporary campaigns, individual names, or vague seniority unless they are real queues.
Move members, replace routes, and confirm fallback behavior; affected people become uncategorized.
Move agent
Confirm new queue visibility, email permissions, Copilot rule, and shift expectations.
Invitation lifecycle
Enter the exact work email and choose the person's initial category.
Leave Admin off for ordinary operators. Admin is for people who should manage Portal membership and workspace administration.
Send the invitation and ask the recipient to use the same email when completing Portal access.
After acceptance, verify the person appears active, can start the intended shift or queue workflow, and cannot access restricted categories or tools.
If the address was wrong or the invitation should no longer be used, cancel or replace it rather than inviting several variants.
The information strip in the invite modal explains that the invitation finishes at portal.mitsolab.com. The Portal account and workspace access are completed there; the Console modal does not set a password for the recipient.
Edit, suspend, and remove access
Use Edit for category and Admin changes. After a category change, ask the agent to reload Portal so queue and Copilot capability are refreshed. Remove workspace access when the person no longer works in the workspace; confirm first because active assignments may need reassignment.
Before removing an agent, review open conversations, email tickets, tasks, category-specific Action Tools, and shift state. Console access, if the same person has it, must be removed separately from Team.
Shared email
Connect a delivery provider, verify domains, create addresses, and route received and sent mail independently.
Provider connections and domains
Email supports provider-backed connections including Resend, Mailgun, SendGrid, Amazon SES, and Postmark. The form changes by provider and may request API credentials, region, server token, signing data, or return-path information.
Choose Add account, select the provider, enter a recognizable connection label, and supply the requested provider credentials.
Save and let Console validate the credentials. Correct authentication or region errors before continuing.
Synchronize domains. For a new domain, add it at the provider and create the exact DNS records the provider returns.
Refresh verification after DNS propagation. A verified sending domain can still require a separate receiving or inbound-webhook setup.
Copy or register the Mitsolab inbound webhook where the provider requires it, then enable receiving and run the provider check.
Refreshing a connection re-reads provider state. Disconnecting removes its Mitsolab connection, synchronized domain records, addresses, and routes; it does not delete the provider account or domain itself.
Addresses and routing
The Addresses & routing tab owns exact mailbox addresses and the fallback for all other addresses. When an add or edit form is open, the page hides the header actions and address list so you can complete one route without editing the wrong row. Save or Cancel returns to the list.
Choose Add address, select a verified domain, enter the local part, and set the display name used when sending.
Choose one handler: Portal workflow, AI Agent, or AI Dispatcher.
For Portal workflow, configure who may receive conversations and who may send from the address independently: all human agents, categories, specific agents, or nobody.
For an AI Agent, choose the exclusive owning agent and configure permitted human handoff where offered.
For an AI Dispatcher, choose the dispatcher so its intake and routing rules decide the destination.
Save, then test one inbound and one outbound message. Use All other addresses to configure unmatched local parts explicitly.
Edit changes future routing. Delete removes the Mitsolab address route after confirmation; provider-side aliases or domains can remain.
Delivery events
Provider callbacks update message delivery. A provider reports bounces or spam complaints to its registered Mitsolab webhook; Mitsolab normalizes those callbacks into Email.message.bounced and Email.message.complained workspace events when you subscribe to them.
Choose and prepare an email provider
Provider
Common Console inputs
Provider-side work
Resend
API key and connection label
Domain creation, DNS verification, inbound webhook, receiving domain state.
Mailgun
API key, region, and domain details
Regional API selection, DNS, routes/webhooks, signing settings.
Create a provider credential limited to the necessary sending, domain, and event operations. The exact required fields shown in Console are authoritative because providers can change their credential model.
DNS verification procedure
Add the sending domain at the provider and synchronize it into Console.
Copy each DNS name, type, and value exactly. At DNS providers that automatically append the zone, do not duplicate the root domain.
Keep existing SPF records in mind: a domain should not publish several independent SPF TXT records. Merge according to the provider's instructions.
Wait for public DNS propagation, then refresh verification. Local browser cache does not control DNS verification.
Confirm sending verification and receiving/webhook state separately.
Address routing scenarios
Address
Handler
Receive
Send
Why
support@mail.example.com
Portal workflow
Support category
All human agents
Support owns inbound; any trained operator may reply.
sales@mail.example.com
AI Dispatcher
Dispatcher decides
According to routed workflow
Dispatcher collects country and product before routing.
plans@mail.example.com
AI Agent
Product Advisor
Assigned AI workflow
One specialist owns plan questions.
All other addresses
Portal workflow
Admin category
Nobody
Catch unexpected local parts without allowing replies from them.
Receive and Send are independent. “Nobody” for Send is valid for an inbound-only address. “All other addresses” should be intentionally restricted because catch-all traffic can include typos and abuse.
Create, edit, and delete an address safely
Open Addresses & routing and choose Add address. The list and page actions hide while the form is active.
Select a verified domain, enter the local part and display name, then choose exactly one handler.
Configure receive and send permissions or the specific AI/Dispatcher target.
Save and wait for the list to return. Send inbound mail from an external account and reply through the intended owner.
For an edit, change one dimension at a time and test a new message. Cancel returns without applying the form.
Before deletion, move open tickets and confirm whether provider-side aliases or catch-all delivery will still send mail to the deleted local part.
Understand message delivery state
Email.message.send means Mitsolab submitted or initiated the outbound send. Provider acceptance, delivery, bounce, and complaint are later states. Store and correlate the provider message ID when building an external integration.
A bounce can indicate an invalid mailbox, policy rejection, or temporary delivery failure.
A complaint means the provider reported spam feedback and should trigger suppression or review.
A ticket can be resolved, reopened by later activity, and archived; those states are separate from message delivery.
Public MX/inbound setup → provider inbound webhook/route → receiving enabled → exact or fallback address → receive permission.
Can receive but reply from wrong identity
Exact address display name and Send rule → selected mailbox/domain → provider From authorization.
Bounce/complaint event missing
Provider event webhook → provider message ID → subscribed workspace webhook event → receiver signature and response.
Portal Action Tools
Create secure, human-triggered API actions that run beside a Portal conversation.
How Action Tools work
Portal Action Tools let an authorized human agent call your HTTPS API without seeing stored credentials or leaving the conversation. The agent supplies visible inputs; Console can map hidden values from the signed-in agent or current contact; the result can be displayed back in Portal.
The examples library includes starting configurations for Slack notifications, Shopify draft orders, GitHub issues, Cal.com appointments, package tracking, and shipping-rate lookup. A template is editable configuration, not an external account connection.
Create or edit a tool
Choose Create new tool or a template. Give it an action-oriented name and explain exactly when a Portal agent should use it.
Choose GET or POST and enter the HTTPS endpoint.
Add secret request headers such as Authorization. Header values are encrypted and never shown to Portal agents.
Define variables as text, integer, float, or boolean. Set a clear label, required state, and whether the field is hidden from the agent.
For hidden or prefilled values, map from agent context (name, email, user ID) or contact context (customer name, email, phone, external ID, country, or contact ID). Leave it agent-entered only when human judgment is required.
For POST, write the JSON body and insert variable tokens at the correct types. Do not put quotes around a token that should resolve to a number or boolean.
Configure response JSON paths and labels for the values Portal should show.
Test with mock values. Verify expected success, authentication failure, validation failure, timeout, and a response missing an optional mapping.
Grant access to all categories or selected categories, save, and confirm the tool from a permitted and non-permitted Portal account.
Agent context identifies the signed-in Portal operator: name, email, or user ID. Contact context identifies the customer in the open conversation: customer name, email, phone, external ID, country, or contact ID. A mapping is convenient but must be validated by your endpoint.
Use contact ID as a stable internal lookup when your service understands it. Use external ID only when it is meaningful to the receiving system. Do not send every available field “just in case.”
Map only values the Human Agent needs for the next step. If an optional path is absent, the tool should still show the successful required result. Never map an access token or full diagnostic object into Portal.
Test success and failure behavior
Provide realistic mock values for every variable and run the built-in test.
Inspect the receiver's request to confirm headers, JSON types, and hidden mappings.
Return a valid success response and confirm every response path renders with the intended label.
Test missing required input, invalid input, 401/403, 404, validation 4xx, 5xx, malformed JSON, and timeout.
Open Portal as a permitted category and run the tool in a non-production conversation.
Open as a non-permitted agent and confirm the tool is absent, not merely disabled after opening.
Use templates correctly
A Slack template still needs your incoming webhook and message fields. Shopify needs shop-specific API access and draft-order permissions. GitHub needs repository and issue permissions. Cal.com needs the correct event type and availability inputs. Tracking and shipping templates need the selected carrier/provider credential and field mappings.
After applying a template, review every URL, header, variable, body token, response path, and category. Template defaults are examples, not proof that the external account is connected.
Copilot drafts
Allocate a pooled drafting allowance, define access, and add workspace-wide writing guidance.
Balance and analytics
Each paid Portal seat contributes 1,000 included drafts to a shared workspace pool. Any permitted human agent can consume the pool; allowances are not reserved per person. Purchased draft packs are consumed after included drafts and do not expire. Included drafts reset with the applicable billing cycle.
The page loads independently: balance and analytics can render before the human-agent permission list completes. Cards show available balance, generated today, activity over the last 30 days, failures or refunded attempts, average response time, and rate limits. The activity chart covers the recent 14 days; channel and per-agent summaries show where drafts were generated.
Enable and grant access
Turn on Copilot enabled. Turning it off hides the draft control in Portal for the workspace.
Check All human agents to allow every active Portal human agent. This disables the more specific controls below because they cannot narrow an all-agent rule.
Leave it unchecked for selected access and choose allowed categories from the vertical checkbox list.
Set optional per-agent radio overrides: Category rule, Always allow, or Block. An explicit block always takes priority.
Write optional Workspace guidance and save. Guidance is limited to 1,200 characters.
Portal checks capability when Inbox opens and keeps it for the browser session. The Copilot control is not rendered for a disabled workspace or an unauthorized agent.
What a Portal agent experiences
Open a conversation and choose the Copilot draft control beside Send.
The composer becomes an instruction field. Describe the reply you want; typing is blocked briefly while generation is in progress and the instruction is visually muted.
Copilot uses bounded recent conversation history and relevant contact context, including age and gender when available. It omits irrelevant identifiers and follows workspace guidance and safety rules.
The generated text fills the composer with a quick character-reveal animation. Edit it, verify facts and tone, then send it manually.
A failed request shows a short message asking the agent to try again later. An exhausted balance shows a credit-specific message. A failed charged attempt is refunded where indicated by analytics.
Pooled balance examples
Workspace
Included monthly pool
How it can be used
1 paid Portal seat
1,000 drafts
The one permitted agent can use the entire pool.
10 paid Portal seats
10,000 drafts
One permitted agent can use all 10,000; there is no automatic per-agent reserve.
20 seats plus 5,000 purchased drafts
20,000 included + 5,000 purchased
Included drafts are consumed first; purchased balance remains until needed under current terms.
Reducing future seat quantity changes the future included allowance according to billing state. It does not create a per-person quota. Use permissions and agent-level overrides to control access, not seat assignment.
Permission evaluation order
Workspace state
All Human Agents
Category
Override
Result
Disabled
Any
Any
Any
Hidden
Enabled
Checked
Any
Category rule
Allowed
Enabled
Checked
Any
Block
Blocked
Enabled
Unchecked
Allowed
Category rule
Allowed
Enabled
Unchecked
Not allowed
Category rule
Blocked
Enabled
Unchecked
Not allowed
Always allow
Allowed
Enabled
Unchecked
Allowed
Block
Blocked
Explicit Block has the highest priority. When All Human Agents is checked, category controls are intentionally disabled because they no longer narrow the workspace rule.
Write effective Workspace guidance
Guidance applies to every generated draft, so include durable writing conventions rather than one campaign's temporary response.
Guidance example
Keep replies warm and direct. Address customers by first name when known. Use "workspace" instead of "account." Do not promise delivery dates unless one appears in the conversation or verified order data. For billing disputes, acknowledge the concern and direct the customer to the documented review process.
Safety and factuality rules remain higher priority. Guidance cannot authorize invented facts or override access. Keep it under 1,200 characters and test it across several channels and languages.
What generation uses
The generation request uses the Human Agent's instruction, a bounded recent conversation history, and selected contact context. Recent history can include up to eight relevant messages within backend character limits. Useful contact fields such as name, country, age, and gender can be included when available; irrelevant internal identifiers are omitted.
The prompt asks for the language dominating the meaningful recent conversation. Very short noise in another script can still make language detection ambiguous; the Human Agent must review the draft before sending.
Interpret Copilot analytics
Available now separates included and purchased balances.
Generated today counts successful workspace drafts for the current reporting day.
Last 30 days includes successful use and identifies failed/refunded attempts where recorded.
Average response measures generation latency for recorded attempts, not the time a Human Agent takes to edit and send.
Draft activity displays recent daily volume.
Usage by agent reveals concentration in the shared pool.
Channels shows where generation was initiated.
A high per-agent share is not inherently abuse because the balance is intentionally pooled. Compare it with staffing, conversation volume, and permission intent.
Human Agent drafting example
For a customer asking “Can I move delivery to Friday?”, the agent can instruct: Confirm that we can request Friday delivery but make clear it is not guaranteed; ask for the order number. Copilot should produce an editable customer reply, not execute the delivery change.
The Human Agent checks the name, date, policy, language, and promised action before sending. If the draft is wrong, edit it or generate from a clearer instruction; do not assume a fluent draft is factually verified.
Notifications
Route operational and balance alerts to the right external destinations without duplicating noise.
Delivery destinations
Destination
Setup
Email
Add up to four recipient addresses and enable the destination.
Slack
Create a Slack Incoming Webhook, paste its URL, test, and enable.
Discord
Create a Discord channel webhook, paste its URL, test, and enable.
Microsoft Teams
Use a Teams Workflow or incoming-webhook URL supported by your tenant.
Custom Webhook
Enter an HTTPS endpoint and optional signing secret; verify requests at your receiver.
Each destination has its own enabled state. Configure and test the endpoint before enabling broad rules. The Console notification bell shows in-product state and links back to notification settings.
Credit and Copilot rules
AI credits and Copilot drafts each support rules for included allowance low, total available low, purchased balance low, included allowance exhausted, forecasted exhaustion within a chosen number of days based on the prior seven days, and usage spikes at 1.5×, 2×, or 3× the comparison level.
Choose thresholds that give the team time to act. A percentage threshold suits changing plan sizes; an absolute threshold suits a fixed operational buffer. Save changes before leaving when the page indicates unsaved settings.
Configure a destination safely
Create a dedicated destination: distribution email, alerts Slack/Discord channel, Teams workflow, or HTTPS receiver.
Enter the destination in its tab and save or test it before enabling high-volume rules.
Enable one low-risk rule with a testable threshold and confirm the message reaches the intended people.
Add remaining rules, avoiding several thresholds that trigger for the same condition unless escalation is intentional.
Document who responds to each alert and where they check the underlying balance or usage.
Destination-specific behavior
Email: add up to four monitored recipients. Prefer a team address over a personal mailbox for operational alerts.
Slack: create an Incoming Webhook for a dedicated channel. The URL is a secret; channel renames and archive state can affect delivery.
Discord: create a channel webhook with permission to post. Rotate the URL if it is exposed.
Microsoft Teams: use the workflow/incoming URL supported by the tenant. Test after workflow ownership or tenant policy changes.
Custom Webhook: use HTTPS, validate the optional signing mechanism, acknowledge quickly, and queue slow processing.
Choose useful thresholds
Rule
Example
Operational action
Included allowance low
20% remaining
Review expected use before the reset date.
Total available low
1,500 credits/drafts
Buy or reduce use if service must continue.
Purchased balance low
500 remaining
Replenish the non-included reserve.
Included exhausted
0 included
Confirm purchased balance or accept interruption.
Forecast exhaustion
Within 5 days
Investigate recent seven-day burn and planned campaigns.
Usage spike
2×
Check routing changes, loops, unusual traffic, or a legitimate launch.
Percentage and amount rules can overlap. If both are enabled, choose values that represent different escalation stages rather than generating duplicate alerts minutes apart.
Validate alerts without waiting for an incident
Use the destination test where available. For threshold rules, select a value that the current balance already satisfies, save, and confirm one alert; then restore the production threshold. Record the time so the test is not mistaken for a real incident.
If a notification is missing, check destination enabled state, unsaved changes, rule enabled state, current measured value, provider/workflow validity, and receiver logs in that order.
Console team
Share Console administration without confusing it with Portal agent access.
Invite and remove Console teammates
Open Team and choose Invite.
Enter the teammate's email and send the invitation.
Track pending invitations and cancel one if it was sent to the wrong address or is no longer needed.
Review workspace members periodically. Remove a member only after confirming they no longer require Console access.
Team membership grants Console access according to the product's workspace permissions. It does not automatically create a Human Agent record in Portal. Use Human Agents for Portal operational access.
Invite lifecycle and access review
Verify the person requires Console administration rather than only Portal operational access.
Send the invitation to an organization-controlled email address.
Review the pending row. Cancel it if sent incorrectly, duplicated, or no longer needed.
After acceptance, ask the teammate to confirm the workspace name before changing anything.
Review members on a schedule and remove people who changed roles or left the organization.
Before removal, transfer ownership of provider accounts, billing operations, documentation, and secrets that the person maintained. Removing Console membership does not rotate credentials they previously copied.
Example: administrator who also handles customers
Sam needs Console access to configure email and also works tickets in Portal. Invite Sam from Team for Console and from Human Agents for Portal. Assign the Support category on the Human Agent record. If Sam stops handling customers but still administers integrations, remove only the Human Agent access.
Billing
Manage Portal seats, AI plans, shared balances, add-ons, renewal changes, and billing history.
Billing areas
Portal seats shows seat quantity, active Portal users, yearly or monthly total, price per seat, renewal, and pooled Copilot balance. AI Agents shows the current AI plan, message-credit use, storage, agent slots, and renewal. Recent Activity lists billing changes and transactions with pagination.
Only authorized workspace owners should change subscriptions. Manage Billing opens the billing provider's customer portal for invoices, payment methods, and supported subscription operations.
Seats and AI plans
Review current active users and paid seats before reducing capacity.
Choose Manage seats, set the future quantity, and select users to deactivate at renewal when the new quantity is below active usage.
For AI Agents, compare included credits, storage, slots, billing interval, and current use before choosing a plan.
Confirm the checkout or scheduled change. Wait for synchronization before repeating the action.
Portal trials can offer a skip-trial or immediate activation path. AI plan cancellation and downgrade can schedule changes for renewal rather than remove service immediately; read the confirmation state.
Balances and add-ons
Extra Copilot drafts add a purchased, non-expiring workspace balance after included drafts.
Extra AI credits add non-expiring credits shown as active items with remaining amounts.
Extra Agents add AI Agent or Dispatcher slots on monthly or yearly billing.
Custom Domain enables a branded hosted chat domain and its DNS workflow.
Remove Powered by MitsoLab removes deployment branding while the add-on is active.
Auto-recharge can purchase credits when a configured threshold is reached; review its cap and payment method.
Each add-on modal displays the current live price, interval, renewal or remaining items, and confirmation action. Use those live values as authoritative. Do not rely on a price copied from documentation.
Checkout, failure, and synchronization
A checkout success does not become usable until Console receives and applies the provider result. Keep the page open through synchronization. If the provider reports failure, use the retry action once after correcting payment details. Avoid rapid repeated clicks, which can create overlapping pending operations. Billing skeletons indicate loading only and are not a zero balance.
Portal seat and Copilot calculation
Paid seats represent Portal capacity. If 12 seats are paid and 9 Portal users are active, three seats remain available under that quantity. The same 12 seats contribute 12,000 included Copilot drafts to the monthly workspace pool under the current 1,000-per-seat allowance.
When reducing to 8 seats, select which users should no longer remain active when the change takes effect. Confirm the effective date shown in checkout or the management flow; a scheduled renewal change does not immediately remove the current paid entitlement.
Compare AI plans using actual workload
Record credits used, storage, active Agent/Dispatcher slots, and days remaining in the current cycle.
Estimate the next cycle using recent Insights and known launches. Do not extrapolate from one abnormal day without investigating it.
Count required active slots, including Dispatchers. An inactive saved agent does not need an active slot until reactivated.
Compare monthly and annual cash commitment, included credits, storage, and slot limits shown live.
Choose the plan or add-on combination and review effective date, proration, renewal, and tax before confirming.
Choose a plan change or add-on
Need
Usually evaluate
Temporary message-credit spike
One-time extra AI credits before a permanent plan upgrade.
One more specialist but adequate credits
Extra Agent slot.
More included credits and slots every month
AI plan upgrade.
Copilot reserve beyond included seat pool
Purchased Copilot draft pack.
Branded public chat URL
Custom Domain add-on and DNS configuration.
Remove deployment branding
Remove Powered by Mitsolab add-on.
The live Billing modal is authoritative for price, billing interval, renewal, and active items. A yearly add-on can have a scheduled interval switch rather than an immediate replacement.
Configure auto-recharge deliberately
Choose a threshold high enough to avoid service interruption and a purchase amount large enough to avoid repeated charges during normal use. Review any monthly cap or payment safeguards shown. Monitor the first trigger and keep the billing contact informed.
Auto-recharge does not correct an unexpected usage loop. If credits fall unusually fast, disable or limit the responsible route and investigate before relying on repeated purchases.
Use Recent Activity and the billing portal
Recent Activity is the Console audit view for billing-related changes and transactions; use pagination to inspect older rows. The external billing portal is the source for invoices, payment methods, and provider-supported subscription management.
When reconciling an issue, capture workspace, action, amount, currency, event time, current subscription state, and provider transaction reference. Never send full card details to support.
Understand modal states
Confirmation summarizes the intended item, quantity, interval, and effective timing.
Checkout collects or confirms payment through the billing provider.
Synchronizing means payment may have completed but Console has not applied the provider event yet.
Failure includes a reason or retry path; correct the cause before another attempt.
Active Items lists remaining purchased credit batches or active add-on slots and renewal details.
API
Connect a server-side integration to Portal through one workspace-scoped POST endpoint. This section explains the request model, authentication, reliability rules, limits, and response contract.
How the API works
The Portal API uses one HTTPS endpoint: POST https://api.mitsolab.com/api/v1. The JSON field event selects the operation, and data contains that event's inputs. You do not send a workspace ID. The API key identifies exactly one workspace and every operation is restricted to it.
API calls run as the service account selected when the key was created. Notes, tasks, messages, email activity, and other attributable records can therefore show that service account's name. Service accounts are integration identities rather than interactive Portal users.
Create a service account and API key
In Console, choose the workspace and open API.
Create a service account with a durable integration name such as Production CRM sync. This is the identity recorded for API-authored work.
Select that service account and create an API key. Choose Full workspace access for reads and writes or Read only for read events only.
Copy the full key immediately and store it in a server-side secret manager. Mitsolab displays it once and retains only a cryptographic hash.
Send a request to api.events.list or workspace.get to verify the credential before enabling production writes.
Make the first request
Every call is a JSON POST. Authenticate with Authorization: Bearer YOUR_API_KEY. The X-API-Key header is also accepted, but using the Authorization header keeps one consistent convention.
Always POST. OPTIONS is available for browser preflight, although secret API keys should normally be used from a server.
Authorization
Yes
Bearer YOUR_API_KEY, or the key in X-API-Key.
Content-Type
Yes
application/json.
event
Yes
Exact case-sensitive event name.
data
Event-specific
A JSON object containing only the selected event's inputs.
Idempotency-Key
Writes
A unique value that makes a retried write return the original result instead of performing the operation twice.
A successful response always contains ok: true, the selected event, event-specific data, and a request_id. Retain the request ID with integration logs because it identifies the call without exposing the API key.
Request bodies are limited to 256 KB. Upload files through the signed attachment-upload events; do not place file bytes or base64 content in the API JSON body.
Pagination
List events use offset pagination. Send limit and offset inside data. A paginated response includes the returned collection, total when available, and a pagination object with limit, offset, and returned.
Use the maximum documented for the selected event. Continue while pagination.returned equals the requested limit, increasing offset by the number returned. Stop when fewer records are returned. Content-heavy lists default to 25 and allow up to 50; standard lists allow up to 100; lightweight lists allow up to 200.
Safe retries and idempotency
Send a unique Idempotency-Key header with every write. It is mandatory for messages.send, email.messages.send, and whatsapp.messages.send_template, and strongly recommended for every other create, update, link, unlink, status, assignment, and delete event.
Reuse the same key only when retrying the exact same event and data. Reusing it for different content returns 409 idempotency_conflict. A simultaneous retry can return 409 request_in_progress; wait before retrying with the same key. Generate a new UUID for the next intended operation.
Rate limits
By default, each API key may make 120 requests per minute. The workspace may make 300 requests per minute in total across all of its API keys. A request must be within both limits. Exceeding either limit returns HTTP 429 with rate_limit_exceeded.
For higher limits for enterprise, please contact us.
Design callers with bounded concurrency and exponential backoff. Do not immediately retry a large group of requests at the next minute boundary; spread queued work to avoid another burst.
Errors and status codes
Errors use one stable envelope: ok: false, an error object with code and message, and a request_id. Some errors include a safe details object.
Error response
{
"ok": false,
"error": {
"code": "invalid_parameter",
"message": "contact_id must be a positive integer"
},
"request_id": "dd083521-3922-4e50-bb2c-2b5f1ee8ccdb"
}
Updates the title, content, or tags of a knowledge entry.
Request data
Field
Type
Requirement
Meaning
entry_id
UUID
Required
Knowledge entry to update.
title
string
Optional
Replacement title.
description
string
Optional
Replacement content.
tags
array of strings
Optional
Complete replacement tag list, up to 24 tags.
Example request
knowledge.update request
curl -X POST https://api.mitsolab.com/api/v1 \
+ -H "Authorization: Bearer YOUR_API_KEY" \
+ -H "Content-Type: application/json" \
+ -H "Idempotency-Key: 10f84a56-8952-4e14-96b8-a1286c304dd4" \
+ -d '{"event":"knowledge.update","data":{"entry_id":"34d2156f-4e54-46db-902e-7831dd47ab1d","description":"Returns are accepted within 30 days with the original proof of purchase.","tags":["returns","policy","receipt"]}}'
Representative response
knowledge.update response
{
"ok": true,
"event": "knowledge.update",
"data": {
"entry": {
"id": "34d2156f-4e54-46db-902e-7831dd47ab1d",
"title": "Returns policy",
"description": "Returns are accepted within 30 days with the original proof of purchase.",
"tags": [
"returns",
"policy",
"receipt"
],
"created_at": "2026-08-15T09:20:00.000Z",
"updated_at": "2026-08-15T10:05:00.000Z"
}
},
"request_id": "dd083521-3922-4e50-bb2c-2b5f1ee8ccdb"
}
Send signed, near-real-time workspace events to one HTTPS endpoint. This section is the canonical setup and event reference.
Create the endpoint
Build a public HTTPS POST endpoint that can read the exact raw request body, return a 2xx response quickly, and process duplicate event IDs safely.
In Console, open Webhooks, turn on Enabled, enter the endpoint URL, and choose Save and generate secret. The signing secret is displayed once; store it server-side.
Select only events your application handles. Use the Save button above or below the subscription list. The selected count beside the top button confirms the intended scope.
Send a real qualifying action in a test workspace and verify signature, event type, event ID, and payload before enabling production automation.
Rotate the secret if exposed. Update the receiver before completing the rotation so valid requests are not rejected.
After an endpoint exists, the Enabled switch saves immediately. Turning it off stops new deliveries and locks subscription controls without requiring an inaccessible second save button.
Delivery behavior and limits
Mitsolab sends each subscribed event as an HTTPS POST after the related workspace action completes. Your endpoint should validate the signature, store the event durably, and return a successful 2xx response promptly. Perform database updates, provider calls, and other longer work after acknowledgement.
Destination: use the final public HTTPS URL. Redirect responses are not followed.
Success: any 2xx response confirms that your receiver accepted the event.
Duplicate safety: treat X-MitsoLab-Event-Id and the envelope id as the delivery identifier. Store it with a unique constraint so processing the same event more than once cannot repeat a business action.
Ordering: use each object's timestamps and current state instead of assuming that different event types will always be processed in a particular order.
Payload version: read api_version from the envelope and ignore fields your integration does not use, allowing compatible fields to be added over time.
Headers, envelope, and signature
Header
Value
X-MitsoLab-Event
Exact case-sensitive event name
X-MitsoLab-Event-Id
Unique event envelope ID
X-MitsoLab-Timestamp
Unix timestamp used by the signature
X-MitsoLab-Signature
v1=<lowercase SHA-256 hex>
Content-Type
application/json
Compute HMAC-SHA256 over timestamp + "." + exactRawBody using the generated signing secret. Reject stale timestamps according to your threat model, compare signatures in constant time, and deduplicate by event ID.
Do not parse and re-serialize JSON before verifying it. Even harmless whitespace changes alter the signature. Acknowledge after your own durable queue accepts the event, then run slow integrations asynchronously.
All 44 events
Names are case-sensitive. Subscribe to the exact value shown. Every example below contains the complete common envelope and a representative data.object.
Subscribe only to the events your receiver accepts and processes.
Durable acceptance and deduplication
Receiver storage example
create table received_mitsolab_events (
event_id text primary key,
event_type text not null,
received_at timestamptz not null default now(),
payload jsonb not null,
processed_at timestamptz,
processing_error text
);
Insert using the event ID as a unique key, return 2xx after durable acceptance, and process in a separate worker. Idempotent processing prevents duplicate business actions and keeps the receiver safe as integrations evolve.
Dispatch by exact event type
Event dispatcher
async function processMitsoLabEvent(event) {
switch (event.type) {
case "Conversation.message.received":
return indexInboundMessage(event.data.object);
case "Contact.updated":
return upsertContact(event.data.object);
case "Pipeline.card.moved":
return moveExternalDeal(event.data.object);
case "Email.message.bounced":
return suppressBouncedAddress(event.data.object);
default:
throw new Error("Unsupported subscribed event: " + event.type);
}
}
Keep a default failure for events that were accidentally selected but not implemented so configuration mistakes are visible during testing.
Monitor your webhook receiver
Log the event ID, type, receive time, signature result, acceptance result, processing result, and correlation identifiers. Redact message text or contact data when it is not required for operations.
Alert on signature failures, sustained absence of expected events, receiver 5xx, and queue backlog. To test after deployment, perform a known low-risk action such as creating a test contact and match its event ID through receiver acceptance and processing.
Security and operations
Apply least privilege, secret hygiene, change control, and production validation across Console.
Secrets and credentials
Keep Agent API keys, provider tokens, Action Tool headers, notification webhook URLs, and webhook signing secrets in server-side secret storage.
Never paste a private key into an agent role, note, FAQ, Dynamic Source, browser script, screenshot, or support conversation.
Generate separate credentials per workspace and integration so one exposure has a bounded effect.
Rotate first at the provider or receiver, update Console, test, and then revoke the old credential where overlap is supported.
Remove access for departed teammates and Portal agents promptly.
Safe change sequence
Confirm the current workspace and record the existing route, credential label, or permission state.
Make one bounded change. For routing, preserve a known fallback while testing.
Test the exact customer path and the failure path using non-production data.
Observe Console, provider, and receiver state. Confirm delivery rather than assuming a successful button click means completion.
Remove superseded routes or credentials only after the replacement is proven.
Document the change for operators who work in Portal.
Data minimization
Give agents and integrations only the information needed for the task. Avoid uploading duplicated policy documents, exposing internal Dynamic Source columns, returning complete third-party objects from Action Tools, or sending unrelated contact fields to external systems. Age and gender can be relevant to Copilot context when available, but external IDs and internal metadata should not be included without a concrete need.
Security launch checklist
Area
Required check
People
Owners, Console teammates, Human Agents, Admin flags, and pending invitations are current.
Agents
Roles prohibit unsupported commitments and knowledge contains no credentials.
Providers
Organization-owned credentials use least privilege and known rotation owners.
Actions
Endpoints authenticate, authorize tenant and operation, validate every input, and return minimal data.
Webhooks
Raw-body HMAC verification, timestamp tolerance, constant-time compare, durable queue, and event-ID deduplication are active.
Billing
Authorized owners and monitored payment method; auto-recharge has understood limits.
Data
Documents, notes, tables, logs, and exports contain only necessary information.
Operations
Incident owner, revocation procedure, fallback routes, and monitoring are documented.
Credential exposure response
Identify the credential type, workspace, integration, likely exposure time, and systems that used it.
Revoke or rotate at the authority that issued it: Mitsolab for Agent keys, provider for provider tokens, Slack/Discord for webhook URLs, your system for Action Tool credentials.
Update Console or the consuming server with the replacement and run a bounded test.
Inspect provider and application logs for unexpected use during the exposure window.
Remove the leaked value from published pages, screenshots, logs, tickets, and repository history where possible.
Record cause and prevention without copying the old or new secret into the incident note.
Plan routing continuity
Every production channel and address needs a known fallback when an AI Agent, Dispatcher, provider connection, or Human Agent category is unavailable. Test the fallback before maintenance. Route changes affect new work; separately manage open conversations and email tickets.
Troubleshooting
Diagnose configuration in dependency order: access, connection, routing, permissions, provider result, then application behavior.
AI Agent does not answer as expected
Save setup changes and start a new preview chat so old context does not mask the result.
Check that the correct agent and intelligence level are active.
Look for conflicting FAQs, notes, products, documents, or imported Notion pages.
Verify the Dynamic Source is enabled and its searchable columns allow the required filter.
Confirm the channel or email address routes to this agent.
Check remaining AI credits and whether an external action failed.
Channel or email traffic is missing
Confirm provider authorization, the exact page/number/bot/domain, and token validity.
Refresh provider state and verify required DNS or inbound webhook settings.
Inspect the current routing target, including fallback addresses and dispatcher targets.
For Meta, verify Messenger and Instagram were connected independently.
For LINE or Telegram approval mode, check pending identities.
For email, distinguish sending-domain verification from receiving enablement and test both directions.
Webhook is not received or rejected
Verify Enabled is on, the event is selected, and changes were saved.
Use the final public HTTPS URL; redirects are not followed.
Respond within four seconds after durably enqueueing work.
Read the raw body and compute HMAC over the timestamp, a period, and the exact bytes.
Use the current secret and compare v1= plus lowercase hex in constant time.
Check whether the business action actually committed the subscribed event.
Copilot is missing or cannot generate
Confirm workspace Copilot is enabled.
Check All human agents, allowed category, and the person's explicit override; Block wins.
Reload Portal if capability changed after Inbox was opened because permission is cached for the browser session.
Check included and purchased balance.
If generation fails, retry later; failed/refunded counts appear in analytics where applicable.
Billing change is pending
Wait for checkout synchronization and refresh once; do not submit the same purchase repeatedly.
Check the billing provider portal for payment method, invoice, and subscription state.
Review whether a downgrade or cancellation is scheduled for renewal rather than immediate.
Confirm you are an authorized workspace owner.
If the state remains inconsistent, contact support with workspace name, approximate time, and provider transaction reference—never a full payment credential.
Use the same diagnostic order
Start with the narrowest confirmed layer and move outward: workspace → user access → saved feature state → provider credential → provider asset → Mitsolab routing → destination permission → external receiver → end-user client. Changing several layers at once destroys the evidence that identifies the failure.
Collect useful support evidence
Workspace name and affected feature.
Approximate time with timezone.
Provider, channel, address, Agent, Dispatcher, or Action Tool label.
Expected result and actual result.
Relevant event ID, conversation ID, ticket ID, provider message ID, or billing transaction reference.
HTTP status and sanitized error text.
Whether the problem reproduces in a new conversation or private browser.
Recent configuration change before the failure.
Redact Authorization headers, API keys, webhook secrets, provider tokens, passwords, payment credentials, and unnecessary customer content.
Worked diagnostic examples
Copilot button is missing for one agent
Confirm the workspace is enabled, inspect that agent's explicit override, inspect the current category and allowed-category checkbox, then reload Portal because Inbox capability is cached for the browser session. Do not start with balance: an exhausted balance can block generation but does not explain an authorization-specific missing control.
Webhook receives contacts but not email bounces
Confirm Email.message.bounced is selected, then verify the email provider is sending bounce callbacks to Mitsolab and the outbound message has a provider message ID. The workspace webhook cannot emit a normalized bounce that Mitsolab never received from the provider.
Email arrives but nobody can reply
Open the exact address route and inspect Send separately from Receive. A category can receive the ticket while Send is Nobody. Also confirm the chosen domain and provider authorize the From address.
Glossary
Use the product's terms consistently when configuring or integrating a workspace.
Core terms
Term
Meaning
Workspace
One organization's security, configuration, data, and billing boundary.
Console
Administrative application for workspace configuration; publicly named ML Console.
Portal
Operational application used by human agents for Inbox, CRM, tasks, knowledge, and tools.
Console teammate
A person invited to administer the workspace in Console.
Human Agent
A person with Portal workspace access who handles operational work.
AI Agent
A configured autonomous conversational specialist occupying an AI slot.
AI Dispatcher
An AI router that collects intake and selects human or AI destinations.
Category
A Portal human-agent grouping used by routing and permissions.
Portal Action Tool
A secure human-triggered external HTTP action available inside Portal.
Agent action
An external action configured for autonomous use by one AI Agent.
Included balance
Allowance supplied by a plan or seat count and reset on its billing schedule.
Purchased balance
Additional drafts or credits bought separately; current Console terms determine expiry.
Exact address
A configured email local-part and domain with explicit ownership.
Fallback address
The All other addresses route for mail that does not match an exact configured address.
Webhook event
A signed JSON notification sent after a subscribed workspace state change.
Status language
Status
Meaning
Enabled
Feature is permitted to operate; downstream credentials and routing must still be valid.
Connected
Console has stored or validated a provider relationship; it does not prove end-to-end message delivery.
Verified
The provider or Console confirmed a required property such as domain ownership at that time.
Configured
Required settings are stored.
Active
Subscription, item, slot, or record is currently usable under its rules.
Inactive
Record is retained but not occupying or using active capacity.
Pending
Invitation, provider state, checkout, or operation awaits another step.
Synchronizing
Console is applying an external provider result.
Preview
UI or contract is shown for evaluation and is not a production availability promise.