What happens when support tickets live separately from orders?
Operators have to jump between Usedesk and Bitrix to understand a client's history. This slows responses, increases error rates, and reduces LTV. Our solution links tickets with orders in real time, automatically passes client data, and personalizes the widget. Result — the operator sees the full picture in one window, and the client gets a quick answer without extra questions. With 5 years of experience and over 100 successful integrations, our team ensures seamless operation. We integrate your Usedesk helpdesk with Bitrix via REST API — operator time savings up to 80%. This 1C-Bitrix Usedesk integration syncs tickets and orders in real time, providing all key features: sync clients Usedesk Bitrix, personalize Usedesk widget, handle webhooks Usedesk Bitrix.
Problems the integration solves
- Data gap: the order exists in Bitrix, but it's not visible in the ticket. The client writes asking about their order — the operator searches for the number manually. Every third client repeats the request, losing up to 15% LTV. For a store with 1500 orders per month, that's 225 lost customers.
- Manual transfer: operators copy email, phone, history from one system to another — wasting up to 30 seconds per ticket. At 200 tickets per day, that's 100 minutes of wasted work. The cost of errors is estimated at 50,000 rubles monthly.
- Lack of context: without integration, it's impossible to automatically offer a discount to a repeat client or send a survey after ticket closure.
Benefits of API integration over manual import
API integration processes requests 10 times faster than manual data import. Data errors are reduced to zero, whereas with manual transfer, the error rate reaches 5%. For a store with 1000 orders per day, manual import takes up to 2 hours of operator work — versus 5 minutes for automatic synchronization. Our clients report an average saving of 50,000 rubles per month after integration. Integration cost typically ranges from 40,000 to 80,000 rubles depending on complexity. The integration pays for itself within a few months, with average monthly savings of 50,000 rubles.
Real-time linking of tickets with orders
We use custom fields in Usedesk. For each ticket, you can specify the Bitrix order ID. A webhook when a ticket is created updates this field. The operator sees a link to the order in the Usedesk interface and can go to Bitrix with one click. Reverse flow: when the order status changes, we send a comment to the ticket.
Linking tickets with orders: synchronization and data transfer
We use the REST API of Usedesk and 1C-Bitrix events (OnAfterUserRegister, OnSaleOrderSaved). Everything works on standard mechanisms: agents for background tasks, tagged caching for the ticket list. Stack: PHP 8.1+, information blocks v2.0, MySQL. Full Usedesk API documentation is available at their developer portal. For cloud editions of Bitrix24, integration is available via REST API with daily request limits sufficient for a typical store; On-Premise versions have no limits.
Client synchronization
When a user registers in Bitrix (event OnAfterUserRegister), we create or find the client in Usedesk. We store the mapping in the user field UF_USEDESK_CLIENT_ID:
AddEventHandler('main', 'OnAfterUserRegister', function(&$fields) {
$email = $fields['LOGIN']; // In Bitrix, login is often the email
// Look for an existing client by email
$response = $usedesk->get('/clients', ['email' => $email]);
if (!empty($response['clients'])) {
$udClientId = $response['clients'][0]['id'];
} else {
// Create a new one
$response = $usedesk->post('/clients', [
'name' => $fields['NAME'] . ' ' . $fields['LAST_NAME'],
'email' => $email,
'phone' => $fields['PERSONAL_PHONE'] ?? '',
'custom_fields' => [
['id' => USEDESK_CF_BITRIX_USER_ID, 'value' => $fields['ID']],
],
]);
$udClientId = $response['client']['id'];
}
// Save the mapping
\CUser::SetUserField([], $fields['ID'], 'UF_USEDESK_CLIENT_ID', $udClientId);
});
Passing order data into the ticket
When a new order is created (event OnSaleOrderSaved), we write data into the client's custom fields in Usedesk. This enriches the client card with purchase history:
AddEventHandler('sale', 'OnSaleOrderSaved', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
if ($order->isNew()) {
$userId = $order->getUserId();
$udClientId = \CUser::GetByID($userId)->Fetch()['UF_USEDESK_CLIENT_ID'] ?? null;
if (!$udClientId) return;
// Add a note to the client in Usedesk
$usedesk->post("/clients/{$udClientId}/comments", [
'message' => sprintf(
'New order #%d for %s RUB. Status: %s',
$order->getId(),
number_format($order->getPrice(), 2, ',', ' '),
$order->getField('STATUS_ID')
),
'type' => 'note',
]);
}
});
Usedesk widget and personal account
Widget personalization
Usedesk provides a JS widget. For personalization with an authorized user, we pass their data:
(function(d, w, c) {
w.usedeskSettings = {
company_id: "<?= USEDESK_COMPANY_ID ?>",
<?php if ($USER->IsAuthorized()): ?>
user: {
name: "<?= htmlspecialchars($USER->GetFullName()) ?>",
email: "<?= htmlspecialchars($USER->GetEmail()) ?>",
fields: {
custom_id: "<?= $USER->GetID() ?>"
}
},
<?php endif; ?>
};
var s = d.createElement("script");
s.type = "text/javascript"; s.async = true;
s.src = "https://secure.usedesk.ru/widget.js";
d.getElementsByTagName("head")[0].appendChild(s);
})(document, w, c);
This allows Usedesk to automatically link the chat session with the client card by email.
Displaying tickets in the personal account
In the Bitrix personal account, we add a "My Requests" section. The component fetches the client's tickets through the Usedesk API by client_id:
$udClientId = $USER->GetParam('UF_USEDESK_CLIENT_ID');
$tickets = $usedesk->get('/tickets', [
'client_id' => $udClientId,
'per_page' => 20,
'page' => (int)$_GET['page'] ?: 1,
]);
The list of tickets is cached for 60 seconds (\Bitrix\Main\Data\Cache).
Handling webhooks from Usedesk
Example webhook handler
When a ticket status changes, Usedesk sends a webhook to our handler. A typical use case: when a ticket is closed (status `resolved`), send the client an email from Bitrix with a request to leave a review.// /api/usedesk-webhook.php
$payload = json_decode(file_get_contents('php://input'), true);
// Verify signature
$sig = hash_hmac('sha256', file_get_contents('php://input'), USEDESK_WEBHOOK_SECRET);
if (!hash_equals($sig, $_SERVER['HTTP_X_USEDESK_SIGNATURE'] ?? '')) {
http_response_code(403); exit;
}
if ($payload['event'] === 'ticket.resolved') {
$email = $payload['ticket']['client']['email'] ?? '';
if ($email) {
\Bitrix\Main\Mail\Event::send([
'EVENT_NAME' => 'SUPPORT_RESOLVED_REVIEW_REQUEST',
'LID' => SITE_ID,
'C_FIELDS' => ['EMAIL' => $email, 'TICKET_ID' => $payload['ticket']['id']],
]);
}
}
Comparison: API integration vs manual import
| Parameter | API Integration | Manual Import/Export |
|---|---|---|
| Update speed | Real-time | Once a day |
| Data errors | 0% (automated) | Up to 5% (human error) |
| Operator load | 5 minutes per day | 10–15 minutes per day |
| Scalability | Unlimited | Requires hiring staff |
| Cost savings | Up to 50,000 rubles/month | Manual cost increases |
What's included
- Setting up the API client — creating a PHP library to work with Usedesk (Guzzle or cURL).
- Client synchronization — mapping Bitrix users to Usedesk via registration events.
- Order transfer — automatically enriching the client card with purchase history.
- Personalized widget — passing the user's name, email, and ID to the widget.
- Webhook handler — receiving events from Usedesk (ticket statuses, new messages).
- Personal account — a component for displaying tickets on the Bitrix site.
- Documentation and training — architecture description, instructions for operators.
Process and timeline
We work in iterations: analysis → design → implementation → testing → deployment.
| Stage | Duration |
|---|---|
| Analysis and requirements gathering | 1 day |
| Data schema design | 1 day |
| Development (API client, events, widget, webhook, personal account) | 4–5 days |
| Testing on a test environment | 1 day |
| Deployment and monitoring | 0.5 day |
| Total | 7–9 days |
The estimated timeline is 7 to 9 working days. The cost is calculated individually for your project. We guarantee stable operation of the integration and provide post-project support: bug fixes, modifications, consultations.
Order the integration now — contact us for a consultation. Get a personalized estimate of timeline and cost.







