Smart Create
Smart Create позволяет создать объявление из текстового описания и фотографий. ИИ анализирует входные данные, извлекает характеристики объекта (тип, площадь, цена, удобства) и автоматически создаёт структурированное объявление.
Зачем использовать Smart Create
Вместо ручного маппинга каждого поля из вашей CRM в формат Rentix — отправьте текст описания и фотографии, система сделает всё сама.
| Подход | Что вы отправляете | Что получаете |
|---|---|---|
| Стандартный upsert | Все поля вручную | Объявление с вашими данными |
| Smart create | Текст + фото | Объявление с данными от ИИ |
Создайте объявление из описания
Отправьте текстовое описание и хотя бы одну фотографию. API создаёт фоновую задачу и возвращает ответ сразу.
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: 'Сдаётся уютная 2-комнатная квартира, 65 м², этаж 3/9. Евроремонт, тёплые полы, автономное отопление. Цена 500 евро/мес.',
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": "Сдаётся уютная 2-комнатная квартира, 65 м², этаж 3/9. Евроремонт, тёплые полы, автономное отопление. Цена 500 евро/мес.",
"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' => 'Сдаётся уютная 2-комнатная квартира, 65 м², этаж 3/9. Евроремонт, тёплые полы, автономное отопление. Цена 500 евро/мес.',
'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"
}
Запрос возвращается сразу с jobId. Объявление создаётся асинхронно — отслеживайте статус задачи, чтобы узнать, когда оно будет готово.
Параметры запроса
Обязательные
| Поле | Тип | Описание |
|---|---|---|
description | string | Описание объекта (40–2000 символов) |
files | array | 1–20 фотографий (см. форматы файлов) |
Необязательные
| Поле | Тип | Описание |
|---|---|---|
externalId | string | Ваш ID из CRM (до 255 символов) |
targetStatus | enum | draft или active (по умолчанию: draft) |
user | object | { userId } или { externalUserId } — привязать к агенту |
formOverrides | object | Переопределить поля, извлечённые ИИ (см. ниже) |
applyAnalysis | boolean | Применить анализ фото ИИ (по умолчанию: true) |
sanitizeAttributes | boolean | Тихо убирать невалидные атрибуты (по умолчанию: false) |
Переопределите результаты ИИ
Если ИИ неверно определил некоторые поля, используйте formOverrides для их исправления. Переопределяются только указанные поля — остальные берутся из анализа ИИ.
{
"description": "Сдаётся квартира...",
"files": [{ "url": "https://example.com/photo.jpg" }],
"formOverrides": {
"announcementType": "rent",
"propertyType": "residential",
"propertySecondaryType": "apartment",
"announcementValue": 500,
"announcementCurrency": "EUR"
}
}
formOverrides принимает те же поля, что и стандартный upsert, кроме announcementDescription, announcementStatus и files — ими управляет smart create.Отслеживайте статус задачи
Smart create работает асинхронно. После получения jobId проверяйте статус:
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"
}
}
Подробнее об отслеживании задач — в разделе Асинхронные задачи.
Smart Create в bulk-операциях
Вы можете включать операции smart_create в bulk-запросы:
{
"operations": [
{
"op": "smart_create",
"description": "Сдаётся квартира...",
"files": [{ "url": "https://example.com/photo.jpg" }],
"externalId": "apt-001",
"targetStatus": "active"
},
{
"op": "smart_create",
"description": "Продаётся дом...",
"files": [{ "url": "https://example.com/house.jpg" }],
"externalId": "house-001"
}
]
}
Частые ошибки
| Ошибка | Причина | Решение |
|---|---|---|
description too short | Описание менее 40 символов | Добавьте больше деталей |
files are required | Не переданы фотографии | Добавьте хотя бы 1 фото |
Too many files | Более 20 фотографий | Сократите до 20 или менее |
Unknown field in formOverrides | Недопустимое поле в переопределениях | Проверьте допустимые поля |
Следующие шаги
- Асинхронные задачи — отслеживание прогресса smart create
- Bulk-операции — smart create в массовых запросах
- Создание и обновление — стандартное создание с ручным маппингом полей