Download the PHP package homlity/sdk-smarthome without Composer
On this page you can find all versions of the php package homlity/sdk-smarthome. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download homlity/sdk-smarthome
More information about homlity/sdk-smarthome
Files in homlity/sdk-smarthome
Package sdk-smarthome
Short Description SDK oficial de PHP de Homlity para consultar inventario inmobiliario (inmuebles, ubicaciones y tipos) y registrar leads en el CRM.
License proprietary
Homepage https://homlity.com/desarrolladores/
Informations about the package sdk-smarthome
Homlity SDK · Smart Inmobiliario
SDK oficial de PHP para integrar el inventario inmobiliario y el CRM de Homlity en cualquier sitio o aplicación.
Sitio principal · Portal de desarrolladores · Packagist · GitHub
Tabla de contenido
- ¿Qué es este SDK?
- ¿Para qué sirve?
- Requisitos
- Instalación
- Credenciales
- Inicio rápido
- Referencia de la API del SDK
- Modelos de datos
- Catálogos y códigos
- Ejemplos completos
- Integración con frameworks
- Buenas prácticas
- Limitaciones y advertencias
- Endpoints REST subyacentes
- Solución de problemas
- Pruebas
- Versionado y changelog
- Soporte
¿Qué es este SDK?
homlity/sdk-smarthome es una librería PHP sin frameworks que envuelve la API REST del
integrador inmobiliario de Homlity (https://api.smart-home.com.co). En lugar de armar URLs,
manejar cURL y navegar arrays asociativos en inglés, trabajas con objetos PHP con métodos en
español:
El SDK resuelve tres cosas por ti:
| Sin el SDK | Con el SDK |
|---|---|
Construir URLs con companyCode / projectCode en cada llamada |
Configuras las credenciales una vez en el builder |
Manejar cURL, headers Accept y compresión gzip a mano |
Ya viene configurado en cada petición |
Recorrer arrays con claves en inglés (unitCategoryDescription, mainImageURL…) |
Objetos tipados con getters legibles en español |
¿Para qué sirve?
Casos de uso reales que este SDK habilita:
- Portal inmobiliario propio. Publicar en tu sitio web el inventario que la inmobiliaria administra en Homlity, siempre sincronizado, sin duplicar la carga de datos.
- Ficha de inmueble. Página de detalle con galería de fotos, video, tour virtual 360°, características, mapa (latitud/longitud) y datos del asesor.
- Buscador y filtros. Construir filtros por ciudad, localidad, barrio, tipo de inmueble, gestión (venta/arriendo), precio, alcobas o baños usando los catálogos que expone la API.
- Captación de leads hacia el CRM. Enviar los formularios de contacto de tu web directamente al CRM de Homlity, asociados al inmueble específico que generó el interés.
- Landing pages y micrositios de proyectos que consumen un subconjunto del inventario.
- Sindicación / feeds hacia portales de terceros o alimentación de un índice de búsqueda.
Requisitos
| Requisito | Versión |
|---|---|
| PHP | >= 7.4 (probado hasta PHP 8.3) |
| Extensión | ext-curl habilitada |
| Extensión | ext-json habilitada |
| Extensión (recomendada) | ext-zlib para descompresión gzip |
| Dependencia | curl/curl ^2.5 (se instala automáticamente) |
| Red | Salida HTTPS hacia api.smart-home.com.co |
Instalación
⚠️ Nota de versión importante
La última etiqueta publicada en Packagist es v2.2.1, que expone una API distinta y
anterior (SDKSmartInmoBuilder::build() + SmartHomeFacade). Toda esta documentación
describe la API actual de la rama main (SDKSmartHomeBuilder), que aún no tiene etiqueta.
Mientras se publica la versión estable, instala la rama de desarrollo:
O fijando el commit para builds reproducibles:
Para el mantenedor: etiquetar
v3.0.0desdemainpublica esta API como versión estable y permitecomposer require homlity/sdk-smarthome:^3.0.
Instalación sin Composer
Necesitarás instalar también
curl/curlmanualmente.
Namespace
El paquete se llama homlity/sdk-smarthome, pero el namespace PHP sigue siendo
Codwelt\SDK\SmartHome\ por compatibilidad hacia atrás. No lo confundas:
Credenciales
El SDK necesita hasta tres identificadores, que entrega el equipo de Homlity al habilitar la integración:
| Credencial | Método | Se usa en | Ejemplo |
|---|---|---|---|
| Company Code | setCompanyCode() |
Todas las consultas de inventario | 695704c3 |
| Project Code | setProjectCode() |
Todas las consultas de inventario | 5bec54a5 |
| Project ID | setProjectId() |
Únicamente agregarLead() |
-IxD-MeYCo32TRLf… |
- Company Code identifica a la inmobiliaria dentro de la plataforma.
- Project Code identifica el proyecto o bolsa de inventario que quieres exponer.
- Project ID es el token largo del CRM al que se asocian los leads.
Solicítalos en el portal de desarrolladores de Homlity.
Seguridad: aunque el Company Code y el Project Code viajan en la URL y solo dan acceso de lectura al inventario que ya es público, nunca expongas el
projectIden JavaScript del lado del cliente. Las llamadas del SDK deben ejecutarse siempre en el servidor.
Guárdalas fuera del código:
Inicio rápido
Referencia de la API del SDK
SDKSmartHomeBuilder
Clase de entrada. Codwelt\SDK\SmartHome\SDKSmartHomeBuilder.
__construct(string $endpoint = "https://api.smart-home.com.co")
Crea el cliente. Solo necesitas pasar $endpoint si Homlity te asignó un entorno alterno
(staging, on-premise):
No incluyas la barra final: el SDK concatena las rutas directamente.
setCompanyCode(string $companyCode): void
Define el código de la inmobiliaria. Obligatorio para todas las consultas de inventario.
setProjectCode(string $projectCode): void
Define el código del proyecto. Obligatorio para todas las consultas de inventario.
setProjectId(string $projectId): void
Define el identificador del proyecto en el CRM. Solo se usa en agregarLead(); si no vas a
enviar leads puedes omitirlo.
obtenerPropiedades(): InmueblePreview[]
Devuelve todos los inmuebles del proyecto como un array de
InmueblePreview.
- Devuelve
[](array vacío) si la petición falla o no hay inventario. No lanza excepciones. - La respuesta no está paginada desde el cliente: la API devuelve hasta 10.000 registros por llamada. Si tu inventario es grande, cachea el resultado.
obtenerPropiedad(string $unitCode): ?InmuebleDetail
Devuelve el detalle de un inmueble a partir de su código (getCodigo() del listado).
- El parámetro es el
codedel inmueble (ej."20230022"), no elmoduleId. - Devuelve
nullsolo si la petición HTTP falla (red caída, endpoint inalcanzable). - 🔴 Un código inexistente NO devuelve
null. La API responde200conunits: nully el SDK entrega unInmuebleDetailvacío: el objeto existe, pero su array interno esnull, así que cada getter emite el avisoTrying to access array offset on value of type nully devuelvenull. Por eso comprobar=== nullno basta: valida además un campo obligatorio comogetCodigo(), tal como en el ejemplo de arriba. - El propio
obtenerPropiedad()emite ese mismo aviso desde dentro del SDK antes de devolverte el objeto. Si quieres logs limpios, llámalo como@$sdk->obtenerPropiedad($codigo).
obtenerUbicaciones(): ?Ubicaciones
Devuelve el árbol geográfico del inventario (países, ciudades, localidades, barrios y zonas), con el conteo de inmuebles de cada nodo — ideal para construir filtros.
obtenerTipoPropiedades(): ?TipoPropiedad[]
Devuelve los tipos de inmueble presentes en el inventario, con su conteo.
⚠️ Este método devuelve
null(no[]) cuando el proyecto no tiene tipos, y en ese caso además emite el avisoforeach() argument must be of type array|object, null givendesde dentro del propio SDK. Usa siempre?? []antes de iterar.
agregarLead(array $datos): ?string
Registra un contacto en el CRM de Homlity y lo asocia a un inmueble.
Claves del array $datos — todas son obligatorias:
| Clave | Se envía como | Descripción |
|---|---|---|
nombre |
first_name |
Nombre del interesado |
correo |
email |
Correo electrónico |
telefono |
mobile_number |
Celular, preferiblemente en formato E.164 (+57…) |
web |
origin |
Origen del lead: dominio, campaña o landing |
commentario |
comment |
Mensaje del interesado |
codigo |
moduleId |
getModuleId() del inmueble, no getCodigo() |
🔴 Dos detalles que causan la mayoría de los errores:
- La clave se escribe
commentario(con doble m), tal como la espera el SDK. Si la omites, PHP emitirá un warning de clave indefinida y el comentario viajará vacío.codigodebe ser elmoduleId(un UUID como35f98252-6db1-43d6-bd6b-18752b883c41), no el código visible del inmueble.Además,
setProjectId()debe haberse llamado antes; de lo contrario el lead llegará sin proyecto asociado.
Devuelve el cuerpo crudo de la respuesta del CRM (string) o null si la petición falló.
Comprueba siempre !== null antes de mostrar un mensaje de éxito al usuario.
Modelos de datos
Todos los modelos viven en Codwelt\SDK\SmartHome\InfraStructure\ y son objetos de solo
lectura construidos a partir de la respuesta JSON.
InmueblePreview / InmuebleDetail
InmuebleDetail extiende InmueblePreview sin añadir métodos: ambos exponen exactamente la
misma interfaz. La diferencia está en el origen de los datos, no en la clase.
Identificación
| Método | Campo JSON | Tipo | Notas |
|---|---|---|---|
getCodigo() |
code |
string |
Código visible del inmueble. Úsalo en obtenerPropiedad() |
getModuleId() |
moduleId |
string (UUID) |
Identificador interno. Úsalo en agregarLead() |
getNombre() |
name |
string |
Título comercial |
getDescripcion() |
description |
string |
Descripción larga, puede traer saltos de línea |
getMls() |
mls |
array\|null |
Códigos MLS asociados |
Áreas
| Método | Campo JSON | Tipo |
|---|---|---|
getArea() |
area |
float — área construida (m²) |
getAreaPrivada() |
privateArea |
float — área privada (m²) |
getAreaLote() |
lotArea |
float — área de lote (m²) |
Precios
| Método | Campo JSON | Tipo | Notas |
|---|---|---|---|
getValorVenta() |
price |
float |
Precio de venta |
getvalorArriendo() |
monthlyFee |
float |
Canon mensual. ⚠️ La v va en minúscula |
getMantenimiento() |
maintenanceFee |
float |
Administración |
getInmpuesto() |
tax |
float |
Impuesto. ⚠️ Nombre con errata: Inmpuesto |
getTieneImpuestos() |
hasTax |
bool |
|
getTotalMensualidad() |
totalMonthlyFee |
float |
Canon + administración + impuestos |
Gestión y tipo
| Método | Campo JSON | Tipo | Notas |
|---|---|---|---|
getGestionId() |
unitCategory |
int |
Ver catálogo de gestión |
getGestion() |
unitCategoryDescription |
string |
"Venta", "Arriendo"… |
getTipoUnidadId() |
unitType |
int |
Ver catálogo de tipos |
getTipoUnidad() |
unitTypeDescription |
string |
"Apartamento", "Casa"… |
Distribución
| Método | Campo JSON | Tipo |
|---|---|---|
getAlcobas() |
bedroom |
float |
getBanos() |
bathrooms |
float |
getGarajes() |
garages |
int |
getEstrato() |
strata |
string |
getNivel() |
floor |
int — piso |
getAnoConstruccion() |
yearBuild |
int — 0 si no se registró |
Ubicación
| Método | Campo JSON | Tipo | Notas |
|---|---|---|---|
getDireccion() |
address |
string |
|
getLatitud() |
latitude |
float |
Para mapas |
getLongitud() |
longitude |
float |
Para mapas |
getCiudad() / getCiudadId() |
city / cityId |
string |
|
getLocalidad() / getLocalidadId() |
locality / localityId |
?string |
Suele venir null |
getBarrio() / getBarrioId() |
neighborhood / neighborhoodId |
?string |
neighborhoodId puede ser null aunque haya nombre |
getZona() / getZonaId() |
zone / zoneId |
?string |
Frecuentemente null |
Multimedia y relaciones
| Método | Campo JSON | Devuelve | Notas |
|---|---|---|---|
getImagenDestacada() |
mainImageURL |
?string |
Puede ser null |
getFotos() |
images |
Fotos[] |
⚠️ Falla si images es null |
getCaracteristicas() |
features |
Caracteristicas[] |
⚠️ Falla si features es null |
getAsesor() |
seller |
Asesor |
⚠️ En inventarios reales,
imagesyfeaturesllegannullcon frecuencia (en el inventario de demostración: 3 de 15 y 4 de 15 respectivamente). Como los métodos hacenforeachdirecto sobre el campo, PHP 8 emite el avisoforeach() argument must be of type array|object, null giveny el método devuelve[].No es fatal por sí solo, pero sí es ruido en los logs — y en Laravel, Symfony o cualquier proyecto con un
set_error_handlerque convierte los avisos en excepciones, sí se convierte en unaErrorException. Usa accesores seguros que cubran ambos escenarios:
Fotos
Representa una pieza multimedia: foto, video o tour virtual.
| Método | Campo JSON | Notas |
|---|---|---|
getNombre() |
title |
Si viene vacío, cae al nombre del inmueble — útil como alt |
getTipoId() |
mediaType |
Ver catálogo multimedia |
getUbicacion() |
source |
URL absoluta del recurso |
getOrden() |
sequence |
Entero para ordenar la galería |
Caracteristicas
| Método | Campo JSON |
|---|---|
getNombre() |
name — ej. "BALCON", "ILUMINACION" |
Asesor
Datos de contacto del comercial responsable del inmueble.
| Método | Campo JSON |
|---|---|
getNombre() |
name |
getCelular() |
mobileNumber |
getEmail() |
email |
Ubicaciones
Contenedor del árbol geográfico devuelto por obtenerUbicaciones().
| Método | Devuelve | Campo JSON |
|---|---|---|
getPaises() |
Paises[] |
countries |
getCiudades() |
Ciudades[] |
cities |
getLocalidades() |
Localidades[] |
localities |
getBarrios() |
Barrios[] |
neighborhoods |
getZonas() |
Paises[] |
zones — ⚠️ ver nota |
⚠️
getZonas()envuelve las zonas en la clasePaises, por lo quegetCodigo()leerácountryIdy nozoneId. En los proyectos de pruebazonesviene vacío, así que rara vez se nota; evita depender de este método hasta que se corrija.
Paises
| Método | Campo JSON |
|---|---|
getCodigo() |
countryId (UUID) |
getNombre() |
name |
getCantidad() |
count — inmuebles en el país |
Ciudades
| Método | Campo JSON |
|---|---|
getCodigo() |
cityId (UUID) |
getPaisId() |
countryId |
getNombre() |
name |
getCantidad() |
count |
Localidades
| Método | Campo JSON |
|---|---|
getCodigo() |
localityId (UUID) |
getCiudadId() |
cityId |
getNombre() |
name |
getCantidad() |
count |
Barrios
| Método | Campo JSON |
|---|---|
getCodigo() |
neighborhoodId (UUID) |
getCiudadId() |
cityId |
getPaisId() |
countryId |
getNombre() |
name |
getCantidad() |
count |
TipoPropiedad
| Método | Campo JSON |
|---|---|
getCodigo() |
code (int) |
getNombre() |
name |
getCantidad() |
count |
Catálogos y códigos
Gestión (unitCategory)
| Código | Descripción |
|---|---|
0 |
Sin Definir |
1 |
Arriendo |
2 |
Venta |
3 |
Arriendo y Venta |
Usa siempre
getGestion()para mostrar el texto: la API ya envía la descripción oficial.
Tipos de inmueble (unitType)
Los códigos son estables, pero el catálogo disponible varía por proyecto. Obtén siempre el
listado real con obtenerTipoPropiedades(). Valores observados:
| Código | Nombre |
|---|---|
0 |
Sin Definir |
1 |
Apartamento |
2 |
Casa |
4 |
Oficina |
23 |
Casa Campestre |
Tipo de multimedia (mediaType)
| Código | Contenido | Cómo renderizarlo |
|---|---|---|
1 |
Imagen | <img src="…"> |
3 |
Video (.mp4) |
<video controls src="…"> |
5 |
Tour virtual 360° (Matterport) | <iframe src="…" allowfullscreen> |
Ejemplos completos
En la carpeta examples/ encontrarás estos scripts listos para ejecutar.
1. Listado con tarjetas
2. Filtrar en memoria
La API devuelve el inventario completo, así que los filtros se aplican en PHP:
3. Ficha de inmueble con galería
4. Construir filtros desde los catálogos
El atributo
data-ciudadde cada barrio permite encadenar los selects en JavaScript sin volver a llamar a la API.
5. Formulario de contacto que envía al CRM
6. Sitemap y feed JSON
Integración con frameworks
Laravel
Registra el SDK como singleton en un ServiceProvider:
Cache::rememberserializa los objetos del SDK sin problema: solo contienen arrays.
WordPress
PHP plano con caché en archivo
Buenas prácticas
- Cachea siempre.
obtenerPropiedades()trae el inventario completo en cada llamada. Un TTL de 10–30 minutos reduce drásticamente la latencia y la carga sobre la API. - Nunca llames al SDK desde el navegador. Las credenciales, y sobre todo el
projectId, deben quedarse en el servidor. - Sirve caché rancia ante fallos. Como el SDK devuelve
[]en vez de lanzar una excepción, una caída de la API vaciaría tu portal. Conserva la última respuesta buena. - Escapa toda salida. Las descripciones y títulos vienen tal como los cargó la
inmobiliaria: usa
htmlspecialchars()/esc_html(). - Valida antes de renderizar.
null,[]y campos ausentes son escenarios normales, no excepcionales. - Registra los fallos. Un
agregarLead()que devuelvenulles un lead perdido: déjalo en el log y, si es crítico, guarda el formulario en tu base de datos para reintentarlo. - Precarga las imágenes con
loading="lazy". Las galerías suelen traer más de 20 fotos en alta resolución. - Usa
getModuleId()para leads ygetCodigo()para URLs. Confundirlos es el error más frecuente.
Limitaciones y advertencias (importante)
Estas son características actuales del SDK que conviene conocer antes de llevarlo a producción:
| # | Comportamiento | Impacto | Cómo mitigarlo |
|---|---|---|---|
| 1 | Los errores se silencian. Los métodos capturan \Error y devuelven [] / null sin distinguir entre "no hay datos", "credenciales inválidas" y "la API está caída" |
No puedes reaccionar a un fallo real | Envuelve las llamadas y verifica el resultado; conserva caché rancia |
| 2 | obtenerTipoPropiedades() devuelve null, no [], si no hay tipos, y además emite un aviso foreach() … null given |
foreach sobre null en tu código |
?? [] antes de iterar |
| 3 | getFotos() y getCaracteristicas() avisan si el campo es null en la respuesta |
Aviso foreach() … null given; devuelven []. Se convierte en ErrorException si tu framework escala los avisos |
Accesor seguro con @ + try/catch |
| 4 | obtenerPropiedad() con un código inexistente devuelve un objeto vacío, no null |
Cada getter avisa y devuelve null |
Validar === null y getCodigo() === null |
| 5 | Erratas en nombres de métodos: getInmpuesto(), getvalorArriendo() |
Confusión al autocompletar | Documentadas en las tablas de arriba |
| 6 | La clave del lead es commentario (doble m) |
Comentario vacío en el CRM | Copiar la clave literal |
| 7 | getZonas() devuelve objetos Paises |
getCodigo() lee countryId |
Evitar el método por ahora |
| 8 | Sin paginación ni filtros del lado del servidor | Payload grande en inventarios extensos | Cachear y filtrar en PHP |
| 9 | Sin timeout de cURL configurable | Una API lenta bloquea tu petición | Ejecutar la sincronización en un cron, no en la petición del usuario |
| 10 | Sin reintentos | Un fallo transitorio pierde datos | Implementar reintentos con backoff en tu capa |
| 11 | La IP del lead se envía fija (10.0.1.1) |
No refleja el origen real | Limitación conocida del SDK |
| 12 | Namespace Codwelt\SDK\SmartHome pese al nombre homlity/… |
Confusión al importar | Documentado arriba |
Envoltorio recomendado
Endpoints REST subyacentes
Si trabajas en otro lenguaje (Node, Python, Go…), estos son los endpoints que el SDK consume.
Base: https://api.smart-home.com.co
| Método SDK | Verbo | Ruta |
|---|---|---|
obtenerPropiedades() |
GET |
/api/v1Inmobiliario/getUnits/{companyCode}/{projectCode} |
obtenerPropiedad() |
GET |
/api/v1Inmobiliario/getUnit/{companyCode}/{projectCode}/{unitCode} |
obtenerUbicaciones() |
GET |
/api/v1Inmobiliario/getUnitLocation/{companyCode}/{projectCode} |
obtenerTipoPropiedades() |
GET |
/api/v1Inmobiliario/getUnitType/{companyCode}/{projectCode} |
agregarLead() |
POST |
/api/SmartInmobiliario |
Todas las peticiones envían Accept: application/json y aceptan Content-Encoding: gzip.
Respuesta de getUnits
Los campos
agent,listingSites,featuredProperty,statuseindexexisten en la respuesta pero el SDK aún no los expone mediante getters.
Respuesta de getUnitLocation
Respuesta de getUnitType
Cuerpo de POST /api/SmartInmobiliario
Se envía como application/x-www-form-urlencoded.
Solución de problemas
obtenerPropiedades() devuelve un array vacío
Recuerda que el SDK no lanza excepciones. Comprueba en este orden:
1. Que llamaste a `setCompanyCode()` **y** `setProjectCode()` antes de consultar.
2. Que los códigos sean correctos (sin espacios ni saltos de línea al copiarlos).
3. Que el servidor tenga salida HTTPS hacia `api.smart-home.com.co`.
4. Que la extensión `curl` esté habilitada: `php -m | grep curl`.
Diagnostica el endpoint directamente:
Una respuesta correcta empieza con `{"returnCode":"SUCCESS"`.
Warning: foreach() argument must be of type array|object, null given
Estás llamando a `getFotos()` o `getCaracteristicas()` sobre un inmueble cuyo campo `images` o
`features` viene `null`. Es un escenario habitual, no un error de tu código.
En PHP puro es solo un aviso y el método devuelve `[]`. En Laravel, Symfony o cualquier proyecto
con un `set_error_handler` que escala los avisos, se convierte en una `ErrorException`. Usa el
accesor seguro (`@` + `try/catch`) descrito en [ficha de inmueble](#3-ficha-de-inmueble-con-galería).
El mismo aviso aparece dentro de `obtenerTipoPropiedades()` cuando el proyecto no tiene tipos.
Un inmueble responde con todos los campos en null
`obtenerPropiedad()` con un código inexistente **no devuelve `null`**: devuelve un
`InmuebleDetail` cuyo array interno es `null`. Cada *getter* emite
`Trying to access array offset on value of type null` y devuelve `null`.
Valida siempre dos condiciones:
El lead no aparece en el CRM
1. ¿Llamaste a `setProjectId()`? Sin él, el lead viaja sin proyecto. 2. ¿Usaste la clave `commentario` con doble *m*? 3. ¿Enviaste `getModuleId()` (UUID) en `codigo`, y no `getCodigo()`? 4. ¿`agregarLead()` devolvió `null`? Entonces la petición HTTP falló.La respuesta llega comprimida o ilegible
El SDK pide `gzip`. Si tu PHP no tiene `ext-zlib`, cURL no puede descomprimir. Verifica con `php -m | grep zlib`.Composer instala una versión con otra API
Es el caso descrito en [Instalación](#️-nota-de-versión-importante): la etiqueta `v2.2.1` expone `SDKSmartInmoBuilder` en vez de `SDKSmartHomeBuilder`. Usa `dev-main` mientras se publica la versión estable.Class "Codwelt\SDK\SmartHome\SDKSmartHomeBuilder" not found
1. ¿Incluiste `vendor/autoload.php`?
2. ¿Estás en `dev-main`? En `v2.2.1` esa clase no existe.
3. Regenera el autoloader: `composer dump-autoload`.
Pruebas
La suite actual (tests/IndexTestCase.php) es un esqueleto mínimo y no cubre la API vigente:
construye SDKSmartHomeBuilder pasando el companyCode al constructor, cuando el constructor
espera un endpoint. Trátala como código heredado, no como referencia de uso.
Para probar contra la API real sin tocar el CRM, usa únicamente los métodos de lectura y las
credenciales de demostración incluidas en index.php.
Versionado y changelog
El proyecto sigue SemVer y
Keep a Changelog. Consulta
CHANGELOG.md.
| Versión | Estado | API pública |
|---|---|---|
dev-main |
Actual, sin etiquetar | SDKSmartHomeBuilder + InfraStructure\* |
v2.2.1 |
Última etiqueta en Packagist | SDKSmartInmoBuilder::build() + SmartHomeFacade |
v1.x |
Obsoleta | — |
Soporte
| Canal | Enlace |
|---|---|
| Sitio principal | https://homlity.com/ |
| Portal de desarrolladores | https://homlity.com/desarrolladores/ |
| Repositorio | https://github.com/homlity/sdk-smartinmobiliario |
| Reportar un error | https://github.com/homlity/sdk-smartinmobiliario/issues |
| Packagist | https://packagist.org/packages/homlity/sdk-smarthome |
Otros SDK de Homlity
| Paquete | Para qué sirve |
|---|---|
homlity/sdk-smarthome |
Inventario inmobiliario y leads (este paquete) |
homlity/sdk-proppit |
Publicación de inmuebles en Proppit desde PHP/Laravel |
Hecho por Homlity · homlity.com