Salesforce
Descripción
Sección titulada «Descripción»Integración con Salesforce a través de su API REST (versión v59.0). La familia cubre el ciclo de vida de un registro: crear, leer por id, actualizar, hacer upsert por id externo, borrar y consultar cualquier cosa con SOQL.
Igual que la propia API de Salesforce, los nodos son genéricos: en lugar de un nodo por entidad, nombrás el sObject (Account, Contact, Lead, Opportunity, Case, o cualquier objeto personalizado terminado en __c) en un parámetro, y el mismo nodo te sirve para toda la organización.
La autenticación se resuelve con el módulo de credenciales (proveedor salesforce) mediante el flujo OAuth2 password grant. El token se pide una vez, se cachea en memoria unas dos horas y se renueva solo cuando expira.
Operaciones
Sección titulada «Operaciones»Los nodos de un vistazo
Sección titulada «Los nodos de un vistazo»| Nodo | Nombre interno | Llamada HTTP |
|---|---|---|
| Salesforce: Crear registro | salesforceCreateRecord | POST /sobjects/{sobject} |
| Salesforce: Leer registro | salesforceGetRecord | GET /sobjects/{sobject}/{id} |
| Salesforce: Actualizar registro | salesforceUpdateRecord | PATCH /sobjects/{sobject}/{id} |
| Salesforce: Upsert registro | salesforceUpsertRecord | PATCH /sobjects/{sobject}/{extField}/{extValue} |
| Salesforce: Consulta SOQL | salesforceQuery | GET /query?q=... |
| Salesforce: Borrar registro | salesforceDeleteRecord | DELETE /sobjects/{sobject}/{id} |
Todas las rutas son relativas a {instance_url}/services/data/v59.0, y el instance_url viene junto con el token: nunca lo escribís.
Configuración
Sección titulada «Configuración»Todos los nodos comparten la credencial; cinco de los seis comparten además el parámetro sobject. El resto está documentado en la página de cada operación.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| credentials_id | credentials | Sí | Credencial de Salesforce (proveedor salesforce) |
| sobject | text | Sí (salvo en la consulta SOQL) | Nombre de API del objeto: Account, Contact, Lead, Opportunity, Case, MiObjeto__c… |
Credenciales
Sección titulada «Credenciales»Proveedor: salesforce. Creala en Credenciales → Agregar → Salesforce.
| Campo | Descripción |
|---|---|
login_url | https://login.salesforce.com para producción, https://test.salesforce.com para una sandbox. Opcional: por defecto usa producción |
client_id | Consumer Key de tu Connected App |
client_secret | Consumer Secret de tu Connected App |
username | El usuario de Salesforce con el que corre el flujo |
password | La contraseña del usuario concatenada con el security token, sin separador |
timeout | Opcional. Tiempo máximo de la petición en milisegundos (por defecto 30000) |
El botón Test pide el token OAuth2 y, si todo va bien, muestra el instance_url al que resolvió: una forma rápida de confirmar que estás apuntando a la organización correcta.
Importante: el flujo OAuth2 password grant
Sección titulada «Importante: el flujo OAuth2 password grant»Esta es la parte que más veces falla en el primer intento.
- El motor envía
grant_type=passworda{login_url}/services/oauth2/tokeny después llama a la API conAuthorization: Bearer {access_token}. passwordes la contraseña más el security token, pegados. Si tu contraseña esVentas2026!y el token esAbCd1234EfGh, el campo contieneVentas2026!AbCd1234EfGh. El security token le llega al usuario por email desde Setup → Reset My Security Token y cambia cada vez que cambia la contraseña.- La Connected App tiene que tener habilitado el password grant y los scopes OAuth
api(y normalmenterefresh_token). Según la organización, el perfil del usuario puede necesitar además relajar las restricciones de IP. - Para una sandbox, poné
login_urlenhttps://test.salesforce.comy acordate de que el usuario lleva el sufijo de la sandbox (usuario@empresa.com.nombresandbox). - El token se cachea en memoria unas dos horas y lo comparten todos los nodos del flujo, así que no se agotan los límites de login de Salesforce en cada llamada. Ante un
401, el nodo pide un token nuevo y reintenta la llamada una vez, de forma transparente.
Importante: cómo se elige el sObject
Sección titulada «Importante: cómo se elige el sObject»sobject es un campo de texto libre, no un desplegable, y su valor va directo a la URL. Tiene que ser el nombre de API del objeto, que en la práctica distingue mayúsculas y no siempre coincide con la etiqueta que ves en Salesforce:
| Lo que gestionás en Salesforce | sobject |
|---|---|
| Cuentas (empresas) | Account |
| Contactos | Contact |
| Candidatos | Lead |
| Oportunidades | Opportunity |
| Casos (soporte) | Case |
| Objetos personalizados | El nombre de API terminado en __c, ej. Suscripcion__c |
El valor no se valida antes de la llamada: un nombre equivocado vuelve como 404 desde Salesforce. Con los nombres de campo pasa lo mismo: LastName, Company, StageName, y los personalizados terminados en __c. Los consultás en Setup → Object Manager → Fields & Relationships.
Cada nodo devuelve su resultado en data más un _meta con la versión del módulo y los tiempos. Como Salesforce responde 204 No Content a PATCH y DELETE, los nodos de actualizar, upsert y borrar arman ellos mismos el objeto de confirmación:
{ "data": { "id": "0015g00000AbCdEFGH", "success": true }, "_meta": { "moduleVersion": "1.0.0", "success": true, "id": "0015g00000AbCdEFGH", "totalMs": 380 }}El nodo de consulta SOQL devuelve el array records directamente en data, listo para recorrer.
Si algo falla, el nodo corta la rama y devuelve un objeto error:
{ "data": {}, "error": { "message": "Required fields are missing: [LastName] (REQUIRED_FIELD_MISSING)", "type": "validation", "status": 400 }}Salesforce informa los errores como un array de { message, errorCode }; el nodo aplana la primera entrada en ese mensaje único y legible.
API utilizada
Sección titulada «API utilizada»- Salesforce REST API
v59.0— https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/
- Las variables dinámicas tipo
{{data.email}}se resuelven en todos los parámetros, incluidos los JSON y la consulta SOQL, porque el texto se resuelve primero y se parsea después. - Los reintentos son automáticos, con un tope de 3 intentos y espera exponencial, para errores de red, timeouts,
429/503(respetandoRetry-After) y5xx. Los errores de validación (400),404y de autenticación no se reintentan. - El tiempo máximo por petición es de 30 segundos; podés subirlo con el campo
timeoutde la credencial. - Los secretos nunca se escriben completos en los logs: solo una forma enmascarada.
- Los ids de Salesforce vienen en dos formas, de 15 caracteres (distingue mayúsculas) y de 18 (no las distingue). Las dos funcionan en los nodos.
Gestión de errores
Sección titulada «Gestión de errores»| Situación | ¿Se reintenta? | Qué hacer |
|---|---|---|
| Validación (400) | No | Salesforce explica el motivo en message (REQUIRED_FIELD_MISSING, INVALID_FIELD, una regla de validación…). Corregí los datos. |
| No encontrado (404) | No | El registro o el sObject no existe. Revisá el id y el nombre de API. |
| Autenticación (401/403) | No | Si después del reintento automático con token nuevo sigue fallando, revisá la Connected App, el usuario, la contraseña + security token o los permisos del perfil. |
| Límite de tasa (429/503) | Sí | Se respeta Retry-After y se reintenta la llamada. |
| Servidor (5xx) | Sí | Error temporal de Salesforce; se reintenta solo. |
| Red / Timeout | Sí | Problema transitorio; se reintenta solo. |
Ver también
Sección titulada «Ver también»- HubSpot — la otra familia de CRM, basada en objetos genéricos y propiedades.
- Monday — gestión del trabajo con un modelo de tableros parecido a un CRM.
- Integraciones de CRM — casos de uso completos entre CRMs.
- Variables dinámicas — cómo se resuelve
{{data.campo}}. - Nodo HTTP — para los endpoints de Salesforce que estos nodos no cubren (Composite, Bulk API, describe…).