How to Embed the Operator Panel into a CRM/ERP
ConnectiveOne can be opened inside your CRM/ERP in a frame (iframe): the operator handles dialogues without leaving the CRM. The panel embeds into Creatio, Zoho, Odoo and any other system that can show an iframe.
When to Use It
- A CRM menu item where the operator works with all chats.
- A tab or button on the client card that opens the chat with exactly this client.
- A chat queue next to the CRM without the ConnectiveOne menu.
How It Works
- A ConnectiveOne administrator turns embedding on, adds the CRM domain and gets the login key.
- The CRM server builds a link with the operator email and the key and puts it into an iframe.
- ConnectiveOne signs the operator in without a password and opens the requested part of the panel.
Step 1. Turn Embedding On
Settings → Operator panel → CRM embedding.
- Turn on “Allow embedding the operator panel into a CRM”.
- In “CRM domains” enter your CRM address, one per line:
https://crm.example.com. For all subdomains:https://*.example.com. Onlyhttps://addresses are accepted. - Click “Save”.
While embedding is off or the CRM domain is not in the list, the browser will not show ConnectiveOne inside the CRM.
👉 Access to the page is given by the role permission “CRM embedding” (Settings → Roles → Operator panel). “View” shows the page and the key status, “Edit” shows the key, changes the settings and regenerates the key.
Step 2. Get the Login Key
On the same page, “Password-less login key” block:
- “Generate key” — create a key if there is none yet.
- “Show key” → “Copy key” — take the key into the CRM settings.
- “Regenerate key” — create a new one. Integrations that use the old key stop working until you replace the key in the CRM.
🚨 Important: there is one key per instance and it signs in as any regular operator without a password. The key ends up in the iframe address, so every CRM user who gets the frame can see it (see Security). Turn embedding on only for people you trust as ConnectiveOne operators. Keep the key in the protected server settings of the CRM (System Settings, Vault), do not put it into page JavaScript and do not write it to CRM logs.
Step 3. Choose the Mode and Copy the Code
In the “Embed code” block choose what to embed:
| Mode | What the operator sees | Where to put it in the CRM |
|---|---|---|
Whole panel (embed_mode=panel) |
The full operator panel | CRM menu item |
Chat queue only (embed_mode=queue) |
Chats without the ConnectiveOne menu | Menu item or CRM side panel |
Chat from a client card (embed_mode=chat) |
Only the chat with this client | Tab, button or popup on the card |
For the client card chat choose the channel and the bot. The page shows a ready link and iframe code with the {EMAIL}, {LOGIN_KEY}, {PHONE} placeholders — the CRM server fills them in.
Link Parameters
The link always points to /autologin. Opening /login shows the login form, and the client card chat does not open.
| Parameter | Required | Meaning |
|---|---|---|
uk, en, … |
no | Interface language. The first parameter without a value: ?uk&user=…, not uk= |
user |
yes | Operator email. Must match the email of their ConnectiveOne account. The account must be an active operator without an administrator role (see Security) |
login_key |
yes | Login key from step 2 |
redirect_module |
yes | Where to go after sign-in: OperatorPanelChats |
embed_mode |
no | panel, queue or chat (see step 3). Without it — the whole panel |
init_dialog |
no | Client phone, digits only. Opens the chat with this client |
init_dialog_channel |
with init_dialog |
Channel: telegram, whatsapp, viber, widget, telephony |
init_dialog_bot_id |
no | Bot ID. Without it the first bot with this channel is used |
chat_room_id |
no | Open an already known room instead of searching by phone |
👉 The old
hide_nav=1parameter still works: withinit_dialogorchat_room_idit acts asembed_mode=chat, without them asembed_mode=queue.
Link Examples
Whole panel (menu item):
https://instancename.connectiveone.io/autologin?en&user={EMAIL}&login_key={LOGIN_KEY}&redirect_module=OperatorPanelChats&embed_mode=panel
Chat queue:
https://instancename.connectiveone.io/autologin?en&user={EMAIL}&login_key={LOGIN_KEY}&redirect_module=OperatorPanelChats&embed_mode=queue
Chat from a client card:
https://instancename.connectiveone.io/autologin?en&user={EMAIL}&login_key={LOGIN_KEY}&redirect_module=OperatorPanelChats&embed_mode=chat&init_dialog={PHONE}&init_dialog_channel=telegram&init_dialog_bot_id=1
iframe code:
<iframe
src="https://instancename.connectiveone.io/autologin?en&user={EMAIL}&login_key={LOGIN_KEY}&redirect_module=OperatorPanelChats&embed_mode=panel"
title="Operator panel"
style="width:100%;height:100%;min-height:720px;border:0"
allow="microphone; camera; clipboard-read; clipboard-write"
></iframe>
How the CRM Builds the Link
The CRM server builds the link when it renders the page or the card:
- Takes the current CRM user email →
user. - Takes the key from its protected settings →
login_key. - For a card, takes the client phone, digits only →
init_dialog. - Returns a ready iframe to the browser.
Server-side example (pseudocode):
params = {
"user": current_user.email,
"login_key": settings.get_secret("connectiveone.login_key"),
"redirect_module": "OperatorPanelChats",
"embed_mode": "chat",
"init_dialog": only_digits(contact.phone),
"init_dialog_channel": "telegram",
}
src = f"https://instancename.connectiveone.io/autologin?en&{urlencode(params)}"
What Happens with the Client Card Chat
- The client with this phone exists and has an open chat — the operator joins that chat.
- The client exists without an open chat — a new chat is created in the given channel.
- The client does not exist — a new dialogue is created if the instance has a bot with this channel.
If the Frame Does Not Open
| What you see | Cause |
|---|---|
| ConnectiveOne login form | /login was opened instead of /autologin, or user, login_key or redirect_module is missing |
| Empty or blocked frame | Embedding is off or the CRM domain is not in the list (step 1) |
embed_disabled error |
Embedding is off |
Invalid key error |
The key does not match — it was regenerated or copied with a mistake |
user not found error |
No active operator with this email, or the key can not sign in as this account: an administrator, a role that may edit roles, users or embedding, an account disabled in Active Directory |
too many requests error |
Too many attempts with a wrong key, wait an hour |
| Sign-in does not stick, the frame asks to sign in again | The browser blocks third-party cookies (privacy settings, some browsers by default) |
Security
- The key is visible in the browser. The CRM server builds the link, but the browser receives it with the key in the iframe address. Any CRM user who gets the frame can read the key in the browser developer tools. The key can also stay in the browser history and in the logs of web servers on the way. ConnectiveOne removes the key from the address right after the frame opens, but by then it has already been in the browser.
- The key signs in as regular operators only. It is refused for administrators (root and the admin role), for roles that may edit roles, users or the “CRM embedding” page, for inactive accounts and for accounts missing or disabled in Active Directory.
- Key sign-in does not ask for the two-factor authentication (2FA) code.
- A session opened with the key lives as long as a session after a password sign-in on this instance.
- Regenerating the key stops new sign-ins with the old key, but not frames that are already open.
- Use
https://only. - Viewing and regenerating the key are recorded in the settings change log.
- If the key may have leaked, regenerate it.
Limitations
- The operator email in the CRM must match the email in ConnectiveOne.
- The client card chat needs the client phone.
- Embedding depends on third-party cookies: if the browser blocks them, the sign-in is not kept.
- Some CRMs limit iframe size or permissions.