Smart Create
Smart Create permite crearea unui anunț dintr-o descriere text și fotografii. AI analizează datele, extrage detaliile proprietății (tip, suprafață, preț, dotări) și creează automat un anunț structurat.
De ce să folosești Smart Create
În loc să mapezi manual fiecare câmp din CRM-ul tău în formatul Rentix — trimite descrierea text și fotografiile, sistemul face restul.
| Abordare | Ce trimiți | Ce primești |
|---|---|---|
| Upsert standard | Toate câmpurile manual | Anunț cu datele tale |
| Smart create | Text + fotografii | Anunț cu date extrase de AI |
Creează un anunț din descriere
Trimite o descriere text și cel puțin o fotografie. API-ul creează un job în fundal și returnează răspunsul imediat.
const response = await fetch('https://crm.rentix.md/api/v1/listings/smart', {
method: 'POST',
headers: {
'Authorization': 'ApiKey YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
description: 'Se dă în chirie apartament confortabil cu 2 camere, 65 m², etajul 3/9. Renovare euro, podele calde, încălzire autonomă. Preț 500 euro/lună.',
files: [
{ url: 'https://example.com/photo1.jpg', externalFileId: 'apt-001-photo-1' },
{ url: 'https://example.com/photo2.jpg', externalFileId: 'apt-001-photo-2' },
{ url: 'https://example.com/photo3.jpg', externalFileId: 'apt-001-photo-3' }
],
externalId: 'apt-001',
targetStatus: 'active'
})
});
const result = await response.json();
console.log(`Job created: ${result.jobId}, status: ${result.status}`);
curl -X POST https://crm.rentix.md/api/v1/listings/smart \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "Se dă în chirie apartament confortabil cu 2 camere, 65 m², etajul 3/9. Renovare euro, podele calde, încălzire autonomă. Preț 500 euro/lună.",
"files": [
{ "url": "https://example.com/photo1.jpg", "externalFileId": "apt-001-photo-1" },
{ "url": "https://example.com/photo2.jpg", "externalFileId": "apt-001-photo-2" },
{ "url": "https://example.com/photo3.jpg", "externalFileId": "apt-001-photo-3" }
],
"externalId": "apt-001",
"targetStatus": "active"
}'
$data = [
'description' => 'Se dă în chirie apartament confortabil cu 2 camere, 65 m², etajul 3/9. Renovare euro, podele calde, încălzire autonomă. Preț 500 euro/lună.',
'files' => [
['url' => 'https://example.com/photo1.jpg', 'externalFileId' => 'apt-001-photo-1'],
['url' => 'https://example.com/photo2.jpg', 'externalFileId' => 'apt-001-photo-2'],
['url' => 'https://example.com/photo3.jpg', 'externalFileId' => 'apt-001-photo-3']
],
'externalId' => 'apt-001',
'targetStatus' => 'active'
];
$ch = curl_init('https://crm.rentix.md/api/v1/listings/smart');
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);
{
"jobId": 789,
"status": "pending",
"externalId": "apt-001"
}
Cererea returnează imediat un jobId. Anunțul este creat asincron — urmărește statusul jobului pentru a afla când este gata.
Parametrii cererii
Obligatorii
| Câmp | Tip | Descriere |
|---|---|---|
description | string | Descrierea proprietății (40–2000 caractere) |
files | array | 1–20 fotografii (vezi formatele fișierelor) |
Opționali
| Câmp | Tip | Descriere |
|---|---|---|
externalId | string | ID-ul tău din CRM (până la 255 caractere) |
targetStatus | enum | draft sau active (implicit: draft) |
user | object | { userId } sau { externalUserId } — atribuie unui agent |
formOverrides | object | Suprascrie câmpurile extrase de AI (vezi mai jos) |
applyAnalysis | boolean | Aplică analiza foto AI (implicit: true) |
sanitizeAttributes | boolean | Elimină silențios atributele invalide (implicit: false) |
Suprascrie rezultatele AI
Dacă AI identifică greșit anumite câmpuri, folosește formOverrides pentru a le corecta. Doar câmpurile specificate sunt suprascrise — restul vin din analiza AI.
{
"description": "Se dă în chirie apartament...",
"files": [{ "url": "https://example.com/photo.jpg" }],
"formOverrides": {
"announcementType": "rent",
"propertyType": "residential",
"propertySecondaryType": "apartment",
"announcementValue": 500,
"announcementCurrency": "EUR"
}
}
formOverrides acceptă aceleași câmpuri ca upsert-ul standard, cu excepția announcementDescription, announcementStatus și files — acestea sunt gestionate de smart create.Urmărește statusul jobului
Smart create funcționează asincron. După primirea jobId, verifică statusul:
const response = await fetch(
`https://crm.rentix.md/api/v1/job/status?id=${result.jobId}`,
{ headers: { 'Authorization': 'ApiKey YOUR_API_KEY' } }
);
const job = await response.json();
if (job.status === 'completed') {
console.log('Listing created:', job.resultData.announcementId);
}
{
"id": 789,
"type": "announcement_smart_create",
"status": "completed",
"resultData": {
"announcementId": 42,
"finalStatus": "active"
}
}
Pentru detalii complete despre urmărirea joburilor, vezi Joburi asincrone.
Smart Create în operații bulk
Poți include operații smart_create în cererile bulk:
{
"operations": [
{
"op": "smart_create",
"description": "Se dă în chirie apartament...",
"files": [{ "url": "https://example.com/photo.jpg" }],
"externalId": "apt-001",
"targetStatus": "active"
},
{
"op": "smart_create",
"description": "Se vinde casă...",
"files": [{ "url": "https://example.com/house.jpg" }],
"externalId": "house-001"
}
]
}
Erori frecvente
| Eroare | Cauză | Soluție |
|---|---|---|
description too short | Descriere mai scurtă de 40 caractere | Adaugă mai multe detalii |
files are required | Nu au fost trimise fotografii | Adaugă cel puțin 1 fotografie |
Too many files | Mai mult de 20 fotografii | Reduce la 20 sau mai puțin |
Unknown field in formOverrides | Câmp invalid în suprascrierea | Verifică câmpurile permise |
Pașii următori
- Joburi asincrone — urmărirea progresului smart create
- Operații bulk — smart create în cereri în masă
- Creare și actualizare — creare standard cu mapare manuală a câmpurilor