How-to
Article MarkdownReport an error

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

  1. A ConnectiveOne administrator turns embedding on, adds the CRM domain and gets the login key.
  2. The CRM server builds a link with the operator email and the key and puts it into an iframe.
  3. 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.

  1. Turn on “Allow embedding the operator panel into a CRM”.
  2. In “CRM domains” enter your CRM address, one per line: https://crm.example.com. For all subdomains: https://*.example.com. Only https:// addresses are accepted.
  3. 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.

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=1 parameter still works: with init_dialog or chat_room_id it acts as embed_mode=chat, without them as embed_mode=queue.

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>

The CRM server builds the link when it renders the page or the card:

  1. Takes the current CRM user email → user.
  2. Takes the key from its protected settings → login_key.
  3. For a card, takes the client phone, digits only → init_dialog.
  4. 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

  1. The client with this phone exists and has an open chat — the operator joins that chat.
  2. The client exists without an open chat — a new chat is created in the given channel.
  3. 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.
Using your own AI agent?Install the open skill so your AI agent can work with current official ConnectiveOne documentation.Get the skillNeed support?Couldn’t find the answer or need help from the ConnectiveOne team? Create a request in Client Portal.Create a request