Sincronizare continuă
După sincronizarea inițială, configurează actualizarea regulată pentru ca modificările din CRM să se reflecte pe Rentix.
Abordări de sincronizare
Poți trimite date în Rentix oricând și în orice mod convenabil:
- Imediat la modificare — trimite datele în momentul salvării în CRM
- Periodic — lansează sincronizarea conform unui program
- În pachete — acumulează modificările și trimite-le în grup prin endpoint-ul bulk
Alegerea depinde de arhitectura ta și cerințele de viteză a actualizării datelor.
Sincronizare programată
Periodic interogă anunțurile modificate din CRM-ul tău și trimite-le în Rentix.
Logica de funcționare
- Salvează timpul ultimei sincronizări reușite
- Interogă anunțurile modificate din CRM (începând de la acel timp)
- Trimite modificările în Rentix prin endpoint-ul bulk
- Actualizează timpul ultimei sincronizări
Exemplu cerere
const response = await fetch('https://crm.rentix.md/api/v1/listings/bulk', {
method: 'POST',
headers: {
'Authorization': 'ApiKey YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
operations: [
{
op: 'upsert',
externalId: 'apt-123',
announcementValue: 45000,
announcementStatus: 'active'
},
{
op: 'upsert',
externalId: 'apt-456',
announcementStatus: 'hidden'
}
]
})
});
const result = await response.json();
console.log(`Actualizate: ${result.summary.succeeded}/${result.summary.total}`);
curl -X POST https://crm.rentix.md/api/v1/listings/bulk \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operations": [
{
"op": "upsert",
"externalId": "apt-123",
"announcementStatus": "active",
"announcementValue": 45000
},
{
"op": "upsert",
"externalId": "apt-456",
"announcementStatus": "hidden"
}
]
}'
$data = [
'operations' => [
[
'op' => 'upsert',
'externalId' => 'apt-123',
'announcementValue' => 45000,
'announcementStatus' => 'active'
],
[
'op' => 'upsert',
'externalId' => 'apt-456',
'announcementStatus' => 'hidden'
]
]
];
$ch = curl_init('https://crm.rentix.md/api/v1/listings/bulk');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: ApiKey YOUR_API_KEY',
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
announcementStatus: "hidden" pentru anunțurile șterse din CRM-ul tău.Sincronizare la eveniment
La modificarea unui anunț în CRM, trimite datele în Rentix imediat.
Pentru un singur anunț
const response = await fetch('https://crm.rentix.md/api/v1/listings', {
method: 'PUT',
headers: {
'Authorization': 'ApiKey YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
externalId: 'apt-123',
announcementValue: 46000,
announcementDescription: 'Descriere actualizată'
})
});
const result = await response.json();
curl -X PUT https://crm.rentix.md/api/v1/listings \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalId": "apt-123",
"announcementValue": 46000,
"announcementDescription": "Descriere actualizată"
}'
$data = [
'externalId' => 'apt-123',
'announcementValue' => 46000,
'announcementDescription' => 'Descriere actualizată'
];
$ch = curl_init('https://crm.rentix.md/api/v1/listings');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: ApiKey YOUR_API_KEY',
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
Pentru mai multe anunțuri
Dacă CRM-ul tău acumulează modificări sau generează evenimente în pachet, folosește endpoint-ul bulk.
Abordare combinată
Pentru fiabilitate maximă, combină ambele abordări:
- Evenimente — pentru actualizări instantanee
- Verificare periodică — pentru detectarea modificărilor omise
Verificarea periodică acționează ca mecanism de rezervă în caz de eșecuri în sistemul de evenimente.
Recomandări
Trimite doar modificările
{
"operations": [
{
"op": "upsert",
"externalId": "apt-123",
"announcementValue": 45000
}
]
}
Rentix va actualiza doar câmpurile transmise. Dacă s-a schimbat doar prețul — trimite doar prețul.
Folosește bulk pentru actualizări în masă
În loc de 100 cereri separate, trimite o singură cerere bulk cu 100 operații. Maximum — 100 operații per cerere.
Procesează erorile parțiale
Endpoint-ul bulk returnează rezultat pentru fiecare operație:
{
"summary": {
"total": 3,
"succeeded": 2,
"failed": 1
},
"results": [
{ "externalId": "apt-123", "success": true },
{ "externalId": "apt-456", "success": true },
{ "externalId": "apt-789", "success": false, "error": "Invalid status" }
]
}
Operațiile nereușite nu afectează pe cele reușite. Procesează erorile și repetă operațiile nereușite separat.
Gestionarea erorilor
Rate limiting
La primirea 429 Too Many Requests așteaptă și repetă cererea. Headerul Retry-After indică timpul recomandat de așteptare.
Erori temporare
Erorile 5xx sunt de obicei temporare. Repetă cererea după câteva secunde.
Erori de validare
Erorile 400 Bad Request necesită corectarea datelor. Verifică mesajul de eroare și corectează datele înainte de a repeta.
Monitorizare
Recomandăm să urmărești:
| Metrică | Descriere |
|---|---|
| Număr anunțuri actualizate | Câte anunțuri au fost sincronizate cu succes |
| Număr erori | Câte operații s-au terminat cu eroare |
| Timpul ultimei sincronizări | Când au fost sincronizate datele ultima dată |
| Întârzierea sincronizării | Timpul între modificarea în CRM și actualizarea în Rentix |