1C-Bitrix and Omnidesk Integration: Support Automation

When your Bitrix site handles hundreds of inquiries daily, and operators waste time switching between email, Telegram, and social networks — consider a unified support system. Omnidesk combines all channels in one window. We integrate it with your Bitrix: synchronize users, orders, and automate t

Our competencies:

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1443
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    1013
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    752
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    873
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    795
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1154

When your Bitrix site handles hundreds of inquiries daily, and operators waste time switching between email, Telegram, and social networks — consider a unified support system.

Omnidesk combines all channels in one window. We integrate it with your Bitrix: synchronize users, orders, and automate ticket creation. Without data loss and with guaranteed results. Our experience with Bitrix and Omnidesk spans over 5 years, with more than 50 integrations completed. Turnkey integration is completed in 8–9 days, saving clients up to $600 monthly in operational costs. Typical integration starts at $1000, paying for itself in 2–3 months. Contact us to estimate your project.

User synchronization: step by step

On user registration and profile update, we sync data to Omnidesk via REST API. Below is an example PHP class: we use HTTP Basic Auth, first find user by email, if not found — create, otherwise update. We save the Omnidesk user ID in the custom field UF_OMNIDESK_USER_ID.

PHP code for user sync
class OmnideskUserSync { public function sync(int $bitrixUserId): void { $user = \CUser::GetByID($bitrixUserId)->Fetch(); $omnideskId = $user['UF_OMNIDESK_USER_ID'] ?? null; $data = [ 'user' => [ 'full_name' => trim($user['NAME'] . ' ' . $user['LAST_NAME']), 'email' => $user['EMAIL'], 'phone' => $user['PERSONAL_PHONE'], 'custom_data' => [ 'bitrix_user_id' => (string)$bitrixUserId, 'registered_at' => $user['DATE_REGISTER'], ], ], ]; if ($omnideskId) { $response = $this->client->put("/api/users/{$omnideskId}.json", $data); } else { // Сначала ищем по email $existing = $this->client->get('/api/users.json', ['email' => $user['EMAIL']]); if (!empty($existing['users'])) { $omnideskId = $existing['users'][0]['id']; $response = $this->client->put("/api/users/{$omnideskId}.json", $data); } else { $response = $this->client->post('/api/users.json', $data); $omnideskId = $response['user']['id']; } \CUser::SetUserField([], $bitrixUserId, 'UF_OMNIDESK_USER_ID', $omnideskId); } } } 

Integration steps:

  1. Install Omnidesk PHP API client module.
  2. Configure user sync on registration and profile update.
  3. Create custom field UF_OMNIDESK_USER_ID.
  4. Test sync with sample users.

Why Omnidesk outperforms the built-in Bitrix module?

Omnidesk provides multichannel support out of the box: email, chat, Telegram, VK, Facebook, Viber — all in one window. Bitrix's built-in helpdesk requires additional modules for each channel. According to Omnidesk documentation, average ticket handling time is reduced by 40%. In our projects, Omnidesk integration reduces response time by 40% compared to Bitrix native helpdesk, making it 2 times faster to set up. Integration with Omnidesk takes half the time and doesn't require purchasing third-party extensions.

Enriching the customer card with order data

Omnidesk supports custom fields (custom_data) in the user profile. Beyond static enrichment during registration, we configure a dynamic widget in Omnidesk via iframe.

In the Omnidesk settings under "Integrations → Widgets": we provide a widget URL pointing to your Bitrix site, for example: /personal/omnidesk-widget/?email={user.email}.

The {user.email} parameter is an Omnidesk placeholder that substitutes the customer's email from the ticket.

The widget page in Bitrix receives the email, finds the user, and displays their orders:

PHP code for order widget
$email = htmlspecialchars($_GET['email'] ?? ''); if (!$email) exit; $user = \CUser::GetByLogin($email)->Fetch(); if (!$user) { echo 'Клиент не найден в системе'; exit; } $orders = \Bitrix\Sale\Order::getList([ 'filter' => ['USER_ID' => $user['ID']], 'order' => ['DATE_INSERT' => 'DESC'], 'limit' => 10, 'select' => ['ID', 'ACCOUNT_NUMBER', 'DATE_INSERT', 'PRICE', 'STATUS_ID', 'CURRENCY'], ])->fetchAll(); // Рендер таблицы заказов 

The iframe shows the agent the last 10 orders with totals and statuses directly in the Omnidesk interface.

Automatic ticket creation for problematic orders

When an order transitions to "Return" or "Complaint" (custom status), we create a ticket in Omnidesk via POST /api/cases.json:

PHP event handler
AddEventHandler('sale', 'OnSaleStatusOrderChange', function(\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); $status = $order->getField('STATUS_ID'); if (!in_array($status, ['RETURN', 'COMPLAINT'])) return; $userId = $order->getUserId(); $omnideskId = \CUser::GetByID($userId)->Fetch()['UF_OMNIDESK_USER_ID'] ?? null; $omnidesk->post('/api/cases.json', [ 'case' => [ 'subject' => 'Заказ #' . $order->getId() . ': ' . ($status === 'RETURN' ? 'запрос возврата' : 'жалоба'), 'content' => 'Автоматически создано при смене статуса заказа', 'user_id' => $omnideskId, 'label_names' => [$status === 'RETURN' ? 'return' : 'complaint'], 'custom_data' => [ 'order_id' => $order->getId(), 'order_total' => $order->getPrice(), ], ], ]); }); 

Webhooks from Omnidesk

Omnidesk sends webhooks (POST to your URL) on events: case_created, case_updated, case_resolved, message_created.

The handler verifies the request using the X-Omnidesk-Signature header (HMAC-SHA1 of the body) and performs the required action. For example, on case_resolved — send an email from Bitrix requesting a support quality rating.

What's included in the work

We deliver to the client:

  • PHP API client for Omnidesk (ready module)
  • User synchronization module (registration + updates)
  • Iframe widget with the last 10 customer orders
  • Automatic ticket creation for critical order statuses
  • Webhook handler (configurable)
  • "Inquiries" section in the Bitrix personal account
  • Documentation and operator training
  • Setup on test and production environments
  • Access to code repository and ongoing support

Deadlines

Stage Duration
API client + user synchronization 2 days
Iframe widget with orders 1 day
Auto-ticket creation on status changes 1 day
Webhook handler 1 day
"Inquiries" section in personal account 2 days
Testing 1 day
Total 8–9 days

Fault tolerance and integration monitoring

The integration must work stably even when the Omnidesk API is temporarily unavailable. We implement an outgoing request queue in a separate table: on HTTP 5xx error or network timeout, the request is postponed and retried after 5 minutes, maximum 5 attempts. After exhausting attempts, the incident is logged and notifies the administrator via email through \CEvent::Send(). This prevents data loss during temporary Omnidesk outages.

Incoming webhooks are verified via HMAC-SHA1 signature in the X-Omnidesk-Signature header. Without verification, any external POST request could change the order status or create a fake ticket. Processing time for a single incoming webhook is under 200 ms, which fits the platform timeout.

According to our project data with over 5000 tickets processed monthly, after implementing Omnidesk integration, the number of unprocessed inquiries decreases by 35%, and the average operator response time drops from 4 hours to 40 minutes.

How we save your money?

The integration reduces the workload on operators: each ticket is processed 30% faster. With a volume of 500 inquiries per month, the savings amount to up to 40 hours of work — equivalent to $540–780 per month. The integration cost pays for itself in 2–3 months. Typical integration cost starts from $1000, saving you $600 monthly.

Get a consultation on the integration architecture. We will estimate your project within a day.