Setup Guide for the Omni Integration with KeyCRM

Publication date: 03.09.2026

What Is Omni-Integration

In traditional integrations, the workflow with the CRM is predetermined. As long as your process fits within it, everything works. Omni-integration is needed when you have something unique, such as your own field, condition, or sequence of actions.

It’s a flexible way to connect your CRM to UniTalk, where you configure the data exchange logic yourself: which entities are involved, including custom ones, what rules to use when searching for a customer, which fields to populate, and which events should trigger actions. If your CRM can send webhooks, the reverse direction works as well. An event in the CRM can trigger an action in UniTalk.

In practice, it’s simple. A “Contact” button appears on the customer’s profile, and phone numbers, email addresses, and chat details are automatically populated in Web Dialer without manual copying.

Flexibility means that the integration will do exactly what you specify, so it’s best to configure it systematically, step by step. That’s exactly how this guide is structured.

How to connect Omni integration?

To connect the Omni integration, go to your personal account and navigate to API and automation → Omni-integrations.

You can also open the page using the following link:

https://my.unitalk.cloud/api-automation/omni-integrations

And click “Connect” next to the integration you need.

Integration Setup

In this guide, we will look in detail at how to connect the Omni integration with the KeyCRM system.

1. Connection 

After clicking “Connect”, you will see the fields required for the integration to connect and function, namely:

API Key
Subdomain
Telephony webhook URL

We will now take a detailed look at where to find the required data.

1. In the CRM system, navigate to “Settings / Communications / Telephony” and click “Add new service”.

2. Next, in the opened window, you need to:

  • Enter a “Title” for the channel (in any format).
  • In the “Phone service” field, select Other.
  • In the “URL to initialize call” field, paste the following link:

Important: Also save the “Webhook URL”, as it will be required to connect the integration in the following steps.

Next, in the same window, go to the “User numbers” tab. Here, you need to enter the employee SIP lines that are configured in their softphones (calling apps/extensions) and map them to the corresponding users in the CRM. 

Click “Save”. Once done, the channel creation process will be complete, and you will see the newly created channel in the list of channels.

Important: In this panel, the “Status” must be active for the integration to function properly.

3. Go to the Settings – General section, find the “API Key” item at the bottom, generate (create) it, and copy it.

4. You can find the “Subdomain” in your CRM account’s URL field. You need to copy the part of the name before .keycrm. For example, as shown here, you would need to copy “alexkush”.

5. Enter the previously obtained data into the “Connection settings” fields in your UniTalk personal account (https://my.unitalk.cloud/api-automation/omni-integrations?crm=KEYCRM) and click “Save”.

2. Configuring Integration Entities

The first tab following the “Connection Settings” section is “Integration Entities.”

On this tab, you need to select the CRM system entities that the Omni integration will interact with. For the selected entities, the integration will be able to perform searches, create new records, and update existing ones during operation.

Available Entities for KeyCRM

The Omni integration supports standard KeyCRM entities: 

  • Order
  • Company
  • Lead
  • Customer

Important Interface Rule: Only the entities you activate at this stage will be displayed on all subsequent tabs of your account (in logic settings, action profiles, and dynamic values).

⚠️ Critical Warning: If you decide to modify the list of active entities in the future (either by adding a new one or disabling an existing one), the system will automatically set all your configured action profiles, inbound webhooks, and imports to OFF status for security reasons. This is done to protect your data, as older scenarios may become invalid. After modifying the entity list, you will need to go back into the settings and manually re-enable the required profiles.

3. “Common Settings” Section

On this tab, you will find the core system management options. It contains:

  • General integration settings: Activation and the primary rules for how the systems interact.
  • General settings for integration entities: Behavioral logic for created or updated CRM elements.
  • Operator assignment: Linking and mapping managers between the UniTalk account and the CRM.

Call Visualization in CRM

“Show standard CRM widget for inbound/outbound calls” feature: If your CRM system’s API supports displaying a standard pop-up window during calls and this checkbox is enabled, the system will automatically show it to the operator.

Important: If the API of a specific CRM does not support this feature, these two checkboxes will simply not appear in the settings interface.

In KeyCRM, this pop-up looks like this:

Additional Display Settings in the SIP Client:

  • “Display the person for incoming calls in the SIP client” field: This feature works identically to the setting of the same name in our legacy integrations. When enabled, the operator will see the name of the manager assigned to this client in the CRM directly within the SIP client during an incoming call.
  • “Entity priority for CRM cling and display responsible in SIP client” setting: Clicking this button adds a dropdown menu (select field). In this dropdown, you can select one of the integration entities that you previously enabled on the 2nd tab.

How priority works:

The higher a selected entity (deal, lead, contact, etc.) is positioned in the list, the higher its priority for the system when determining the responsible manager and triggering the “cling” feature.

3.1. Settings Section for Each Integration Entity

For each individual entity you activated on the “Integration Entities” tab, the system will automatically create a dedicated control block. These blocks will be displayed in the following format: “Entity — entity_name” (for example: Entity — OrderEntity — Customer, etc.).

Inside each of these blocks, you can configure the detailed operational logic specifically for that data type.

Call History and Synchronization with Entities

“Save to call history” checkbox: When this feature is enabled, detailed information about the found or created entity—such as its ID, type, responsible manager’s ID, and name—will be recorded in the details of each call. Consequently, a direct link to this CRM entity, along with its name and the assigned manager’s name, will appear in the UniTalk “Call History” context menu next to the contact’s phone number.

Quick search links for objects will be completely hidden from the interface in two cases:

  • If your CRM integration is currently completely disabled.
  • If the specific entity (for example, a lead or a company) was not previously activated on the 2nd settings tab.

Web Dialer Settings and Features

In the settings section for each entity, two important parameters are available for working with the Web Dialer:

  • “Send to Web Dialer during inbound/outbound calls” dropdown fields: When this feature is enabled, the name of the found object, the assigned manager’s name, and a direct link to this object in the CRM will be displayed directly within the Web Dialer during calls.
  • “Show ‘Contact’ button in CRM” checkbox: Checking this box enables a “Contact” button to appear on the specific object’s page in the CRM when using the Web Dialer.

How it works: When the “Contact” button is clicked, the system automatically collects all available customer information (phone numbers, email address, existing chat ID, or data to create a new one) and transfers it to the dialer. This allows the operator to instantly call or message the client directly from the Web Dialer interface.

This serves as a modern alternative to standard click-to-call from the CRM. It runs stably, eliminates the need to develop complex and expensive custom CRM widgets, and enables sending messages via chats, SMS, and Viber directly through the Web Dialer.

Default rules of entities search for calls

These settings allow you to set default object search rules separately for chats and separately for calls.

The system automatically applies these rules in the following cases:

  • During dynamic value search for event handling. If an entity is not found based on the rules specified in the action profiles, the system will perform a search using the default rules. Chat rules will be applied for chat events, while call rules will be used for all other events.
  • To display information in the SIP client. To show the operator the name of the found object and the assigned manager, the system always uses the default search rules for calls.
  • When configuring the “cling” feature in inbound call scenarios. The default search rules are automatically applied as the baseline configuration.
  • When creating new or not yet configured actions. Chat rules are automatically applied for chat events, and call rules are used in all other cases.

At this stage, it is important to configure the following: check the boxes for the fields you need in the dynamic event handling values.

Working with CRM Fields and Selecting Dynamic Values

CRM systems usually contain a large number of custom or legacy fields that are not used in telephony operations. To ensure the system runs quickly and stably, we do not retrieve absolutely every single field when fetching data via the API.

Fields with predefined integration logic are always fetched by the system automatically—you will not see them in the selection list.

Important configuration rule: Any other additional fields you need for your workflow must be checked manually. Only after doing so will they appear in the dynamic event handling values within the “Crm Connector” section.

Why this matters: This is crucial not only for event handling but also for configuring the integration across all subsequent tabs, as they rely on these dynamic values. If a field is left unchecked here, it will simply be unavailable later on.

Fields available by default (without checking the boxes):

  • Entity ID
  • Entity creation time
  • Entity last update time
  • Entity owner
  • Main text fields: first name, last name, middle name, title, subject 
  • Primary phone
  • Primary email
  • “All phones” — this is our system pseudo-field (created automatically within the UniTalk code) that collects and records numbers from absolutely all phone fields of the entity.
  • “All emails” — a similar pseudo-field that collects email addresses from all fields of the entity.
  • Pipeline 
  • Link to another entity — a field where the value is the ID of a related item (for example, the link between a deal and a contact). It is usually named after the corresponding entity: “Contact”, “Deal”, etc.
  • All fields with the “phone” data type
  • All fields with the “email” data type
  • All fields that are required when creating an entity in the CRM.

Verification Tip: If any of the fields listed above are missing from the default dynamic values list, it most likely means that the field does not exist in your CRM, or the system’s API does not provide it during a search. If you have any doubts, you can always contact our support team for a more detailed technical investigation.

3.2. “Operator Mapping” Section

Allows you to map CRM users, UniTalk users, SIP lines, and operators’ mobile numbers to one another.

Operator locations settings

In this section, you configure the connection between managers in your CRM and users in the UniTalk system. The configuration is presented as a table, where each column represents specific data:

  • 1st Column (CRM Username): Displays or allows you to select a specific manager from your CRM system.
  • 2nd Column (UniTalk Users): A dropdown list to select the corresponding UniTalk user. The same UniTalk user cannot be assigned more than once in the table. Limitation: Multi-select is supported, allowing you to choose multiple UniTalk users that correspond to this manager.
  • 3rd Column (SIP Lines): A dropdown list to select the specific SIP line that will be assigned to this user. The same SIP line cannot be added to the table more than once. Limitation: Multi-select is supported for SIP lines, meaning you can assign multiple lines to a single manager.
  • 4th Column (Mobile Numbers): An input field for entering operators’ mobile phone numbers. If there are multiple numbers, separate them with commas. Limitation: Numbers must be valid GSM numbers. The same phone number cannot be entered in the table more than once.

4. Integration Calls

Action Profiles Configuration

Action profiles are the heart of automation in Omni integrations. They determine exactly how the system searches for objects in the CRM, what it does with them after the search, the rules used to fill in fields, and how the schedule for default assigned managers is distributed.

Action profiles are managed across the next three tabs:

  • Integration Calls
  • Integration Chats
  • Integration Event Handling

The following events are available for calls:

  • Inbound call — started
  • Inbound call — answered
  • Inbound call — ended
  • Outbound call — started
  • Outbound call — answered
  • Outbound call — ended
  • C2C (Click-to-Call) scheduled

4.1 Key Differences in Call Logic Compared to Legacy Integrations

  • Click-to-Call (C2C) Calls: Previously, during a scheduled C2C call, entities were created automatically, and a default comment was added to them. In Omni integrations, there are no automatic actions—now you configure the required event chain yourself with complete flexibility.
  • Event Distribution: Previously, all 6 call events were combined into a single general algorithm, and entities for outbound calls were created only if a single global checkbox was enabled. The old logic triggered only once per call (at the moment of answer, or if unanswered, at the moment of completion).
  • Configuration Flexibility and Security: In the new connector, it is technically possible to configure object creation even for every single event (2 times for inbound and 3 times for outbound). However, we strongly recommend against doing this to avoid chaos and potential data errors in your CRM.

💡 How to configure calls “correctly”? To ensure the system runs stably (similarly to legacy integrations), configure your action profiles as follows:

  • For events related to answering a call, add a condition so that the profile executes only if the call was answered.
  • For call completion events, add a condition so that the profile executes only if the call was not answered.

4.2. “Integration & Event Handling” Tab (Custom Profiles)

This tab is designed for custom automation scenarios. By clicking the “Add” button, you can create any number of your own action profiles and give them clear, recognizable names.

Important Rule: Profiles from this tab can be used exclusively within global UniTalk event handlers by selecting the action type “Execute actions via Omni-integration”.

💡 Tip: Within global event handlers, you can also call profiles from the “Calls” or “Chats” tabs. In this case, the system event name (e.g., “Inbound call — answered”) will be displayed in the selection list instead of a custom profile name.

Dynamic Values Available on the Tabs

To keep the interface clean and avoid information overload, each tab displays its own tailored set of dynamic values. We have removed most of the fields that are irrelevant to the current event and would guaranteed remain empty.

“Event Handling” Tab:
 Absolutely all dynamic values are available, except for the “Omni-integration — authorization data” block and legacy values from the “CRM” category.

“Chats” Tab: Values from the following sections are available: “Miscellaneous”, “Chat”, “Analytics” (standard), “Omni-integration”, “UniTalk Contact Book”, “Call exists in call history”, “First call data”, “Last call data”.

“Calls” Tab: Field filtering here is fine-tuned specifically for each event:

C2C Order Event: “Miscellaneous”, “Click to call”, “Analytics”, “Omni-integration”, “UniTalk Contact Book”, “Call exists in call history”, “First call data”, “Last call data”.

Outbound Call Events: “Miscellaneous”, “Call”, “Omni-integration”, “UniTalk Address Book”, “Call exists in call history”, “First call data”, “Last call data”.

Inbound Call Events: The most extensive set, including: “Miscellaneous”, “Call”, “Click to call”, “Analytics”, “Omni-integration”, “IVR”, “Auto-dialer”, “Auto-dialer number data”, “Voice bot”, “UniTalk Contact Book”, “Call exists in call history”, “First call data”, “Last call data”.

⚠️ Please note: While this separation filters out unnecessary fields, it is not 100% absolute. For example, at the beginning of a call, you will still see the “call duration” field, even though it is only populated after the call ends. This is the current baseline functionality of the system—it fully serves its purpose and will be further refined if necessary.

4.3. Action Profile Statuses and Display

To help you easily monitor system operations, each action profile features a clear indicator. The way names and statuses are displayed depends on the selected tab:

“Calls” and “Chats” Tabs

On these tabs, you will always see the complete list of available standard events. The profile name here always matches the name of the event itself (e.g., “Inbound call — answered”).

Right next to the name, one of three statuses will be displayed:

  • Not configured — you have not yet defined the rules and logic for this action profile.
  • ON — the profile is fully configured, active, and successfully executing the specified actions.
  • OFF — the profile is configured but has been temporarily disabled by the user (all defined actions for this event will be paused).

“Event Handling” Tab

Since you create your own custom automation scenarios on this tab, the display logic is slightly different:

  • Instead of a system event, it always displays the custom profile name you provided during its creation.
  • A profile can only have two statuses — ON (active) or OFF (deactivated). There is no “Not configured” status here, as every manually created profile already contains defined logic.

5. Entities import

This section is used to import objects from the CRM, filtering a portion of them based on object field conditions, and triggering an event handler for the fields that meet those criteria.

About settings:

  • Name — the profile name.
  • Import “Auto-start” toggle: If enabled, the import will trigger automatically based on the “When to run” settings. (Only displayed after the settings are saved).
  • “When to run import” — specifies exactly when to trigger the automatic import. There are 2 options available:
    • Set a specific time for the import to run automatically every day (this can be used, for example, to transfer phone numbers into a calling campaign);
    • Define a recurrence interval (in minutes), counted from the last run. For example, you can use it like this: if the pipeline value is 1 or 2, add the number to Call Campaign 1; if the pipeline value is 3, add the number to Call Campaign 2.

⚠️ Note: Since only one import can be active (currently uploading data) at a time, this interval cannot guarantee a strictly defined start time. Another import profile might be running at that exact moment (for example, instead of the defined 15-minute interval, this profile’s import might start later, after 20 or 25 minutes, etc.).

  • Search by time field — searching for entities is only possible using fields with a “Date & Time” data type.
  • Time from, Time to — the time range for the search. You can specify one or both search boundaries (optional). You can input either an exact time or a relative time range (e.g., last 24 hours).
  • Event handlers — allows you to select up to 10 event handlers to be triggered in the future.
  • Find related objects before executing actions — during the import, data from a related object will also be fetched and considered. For example, when importing a deal, we also need to retrieve the phone number stored within the associated contact.
  • Save entity processing time to a field — allows you to record the time when the entity was sent for event handling (rather than when the processing was completed) into any available field.
  • Reprocess entity if more than N days have passed — if the timestamp in the field mentioned above is older than N days, the entity becomes eligible for reprocessing.
  • Pause between CRM API requests (sec) — a mandatory delay between API calls, ranging from 1 to 15 seconds.
  • Do nothing if conditions are met — entity field conditions used to filter out and skip entities that require no actions.

Manual Import Execution

After saving the import settings, a “Start Import” button will appear, allowing you to launch the import manually right away. The import operates based on the following logic:

  1. Entities are fetched from the CRM using filters based on the time field, with a limit of 50 entities per single API request.
  2. Each discovered entity is processed in a queue. The system checks whether a “Processing time” timestamp is recorded for the entity. If it is, and the “Reprocess entity if more than N days have passed” setting is either empty or the specified N days have not yet elapsed, the system skips the entity and does nothing.

6. Inbound Webhooks

On this tab, you can configure the processing of inbound webhooks using event handlers. Processing can be configured for each entity, depending on the selection made in the “Integration Entities” section.

Inbound webhooks operate slightly differently from those used in some legacy integrations:

  • Legacy Integrations: A phone number was passed within the webhook. The system used this number to find a contact or lead and, depending on the scenario, added the number to a calling campaign or removed it from the list.
  • New Functionality: Every webhook is strictly tied to a specific entity. Therefore, the CRM must pass the corresponding entity ID within the webhook. For example, if a webhook is configured in the Deals section, it must transmit the Deal ID.

The entity search is performed by its ID. If necessary, the system can also locate related entities and utilize them for further processing.

6.1. Webhook Requirements

A webhook must be sent using either the GET or POST method. (Support for other HTTP methods can be added if required; however, there is currently no such necessity).

The request must contain the entity identifier. It can be located in:

  • URL query parameters;
  • Request body in JSON format;
  • Request body in form-data or x-www-form-urlencoded format.

The identifier must be passed in a parameter named id or entityId. The parameter name is case-insensitive, so variations like IDEntityIdENTITYID, etc., are fully valid and accepted.

ℹ️ Note: If a specific CRM does not allow the use of any of the pre-defined parameter names, support for additional parameter names can be implemented in the system code upon request.

Passing data to an event handler does not guarantee that an action will be executed. The decision to execute a specific action is determined directly within the internal logic of the event handler itself.

To create a profile, click the “+” button inside the corresponding object’s block. Next, go to the “Event handlers” section and select the handler or handlers that should trigger when an inbound request is received from the CRM. There is no limit on the number of selected handlers.

The “Find related entities before do actions” option allows you to specify an entity that will be additionally checked for compliance with the criteria before the handler is triggered.

The “Do nothing if conditions are met” feature allows you to configure specific conditions under which this event handling profile will not be triggered.

After configuring the settings, click the “Save” button. This will create the profile and generate a “Webhook URL” link, which you can then copy and paste into the corresponding settings on the CRM side.

To activate the handler profile, you must enable it using the toggle switch; the same switch can be used to disable it. You can instantly see whether the profile is active or not directly to the right of the inbound webhook profile name.

Configuration on the KeyCRM Side

1. Go to “Settings” -> “Advanced”, then switch to the “Automation” tab and click “Add Trigger”.

2. In the trigger creation window, fill in the main parameters:

  • In the “Title” field, enter any name for the trigger, for example, “Webhook on order status change”.
  • In the “Event” field, select the entity type for which the webhook will be sent, as well as the specific change. For instance, select “Order / Order status change” and choose the required value, such as “Manufactured”.
  • In the “Time” field, leave the value as “Immediate” so that the webhook is sent right after the status changes (or, if necessary, set a delay specifying how many minutes after the event the trigger should fire).
  • In the “Conditions to execution” block, click “Add condition group” and add at least one condition. For this example, we will use a condition based on the order status. Our condition will look like this: Order status — includes — “Manufactured”.
  • In the “Actions” block, click “Add action”.

3. After clicking “Add action”, select “Send Webhook” from the list.

4. The next step is to configure the webhook submission settings:

  • Webhook URL: Paste the URL you previously copied from your personal account settings for the corresponding handler profile.
  • HTTP Request Method: Select POST.

After configuring the settings, click “Add” at the bottom of the window.

5. The webhook trigger has been successfully configured. Click “Save” at the bottom of the window.

Once the trigger is saved, every change of the order status to “Manufactured” will automatically initiate this scenario. Upon execution, KeyCRM will send a webhook to the corresponding Omni integration URL, prompting the system to run the configured event handlers. For instance, this could trigger sending a notification to Telegram, among other actions.

Conclusion

The steps above cover the basic setup of the Omni integration: from connection and entity selection to action profiles, imports, and incoming webhooks. This is enough for standard scenarios to run reliably, and thanks to the integration’s flexibility, you can always build in your own logic for specific tasks, without the limitations typical of off-the-shelf solutions.

UniTalk – A single solution for managing customer communication
Request a call back or give us a call
+38 (093) 170 08 00
Get a consultation
More articles
Want to become a UniTalk client?
FREE CONSULTATION
Request a call back or give us a call +38 (093) 170 08 00 .