> ## Documentation Index
> Fetch the complete documentation index at: https://help.treble.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Bloque de lectura de Salesforce

> Cómo traer un dato de Salesforce a una variable de la conversación: saludar por el nombre, ramificar el flujo según el estado de un registro o reutilizar un Id más adelante.

Este bloque hace lo contrario del [bloque de acción](/es/docs/integrations/salesforce/blocks/crm-action): en vez de escribir en Salesforce, **lee un campo y lo guarda en una variable** que puedes usar en el resto de la conversación.

Con eso puedes saludar a la persona por su nombre, decirle en qué estado va su solicitud, o mandarla por un camino distinto del flujo según lo que diga su registro.

El bloque se llama distinto según tu tipo de integración:

| Tipo de integración | Nombre del bloque |
| - | - |
| Objeto único | **Objeto CRM** |
| Multi-objeto | **CRM Multiple Object** |

<Note>
  En multi-objeto los dos bloques de Salesforce tienen nombres casi idénticos. El que **lee** es *CRM Multiple Object*. El que **escribe** es *CRM Multiple Object **Action***, con "Action" al final.
</Note>

<div class="hr" />

## Lo primero que conviene entender

Cada bloque lee **un solo campo**. Si necesitas tres datos, usarás tres bloques.

<Warning>
  **Si Treble no encuentra el registro, la variable queda vacía.** El flujo no se detiene ni muestra un error: simplemente la variable llega sin contenido, y si la usas en un mensaje la persona verá un espacio en blanco.

  Por eso conviene poner un bloque de **Condiciones** justo después, que revise si la variable tiene valor y arme un camino alterno cuando no lo tenga.
</Warning>

<div class="hr" />

## Agregar el bloque

Desde el constructor de conversaciones, abre el panel de bloques y busca el bloque de lectura dentro de *Bloques avanzados*.

<img src="https://mintcdn.com/trebleai/n_48dzI5l_tB6XfZ/images/salesforce-crm-read-so-1.png?fit=max&auto=format&n=n_48dzI5l_tB6XfZ&q=85&s=e9daf3181077ac163416cd11acd1deae" alt="Agregar el bloque de lectura desde el panel de bloques" className="mx-auto" width="3024" height="1716" data-path="images/salesforce-crm-read-so-1.png" />

<Info>
  El nombre que ves en el panel de bloques puede no ser el mismo que aparece después sobre el bloque en el lienzo. Guíate por el ícono y por la descripción ("guarda la variable en Treble"): es el bloque que **trae** información del CRM, no el que la guarda allá.
</Info>

Arrástralo al lienzo y haz clic en **Configuración** para abrirlo.

<div class="hr" />

## Configuración

<Tabs>
  <Tab title="Objeto único">
    El modal tiene dos pasos y un campo final para nombrar la variable.

    <img src="https://mintcdn.com/trebleai/n_48dzI5l_tB6XfZ/images/salesforce-crm-read-so-2.png?fit=max&auto=format&n=n_48dzI5l_tB6XfZ&q=85&s=8fa4906a8d526792ce856f7dc213072f" alt="Configuración del bloque Objeto CRM" className="mx-auto" width="3024" height="1708" data-path="images/salesforce-crm-read-so-2.png" />

    ### 1. Objeto y jerarquía

    **Objeto.** De cuál objeto vas a leer. Puede ser tu entidad padre (por ejemplo `Contact`) o alguno de sus objetos relacionados.

    **Jerarquía.** Qué hacer cuando la persona tiene **más de un registro** de ese objeto.

    | Opción | Qué hace |
    | - | - |
    | **Primero creado** | Lee del registro más antiguo |
    | **Último creado** | Lee del registro más reciente |
    | **Personalizado** | Tú defines un filtro para apuntar a un registro específico |

    <Tip>
      La jerarquía de lectura y la de escritura son configuraciones **independientes**. Si lees con *Primero creado* y escribes con *Último creado*, vas a leer de un registro y escribir en otro. Cuando ambos bloques deben trabajar sobre el mismo registro, revisa que la jerarquía coincida.
    </Tip>

    ### 2. Propiedad

    El campo de Salesforce cuyo valor quieres traer. En el ejemplo, `Lead Source`.

    ### Nombre de variable

    Al final defines cómo se va a llamar la variable. Si escribes `cliente_fuente`, en el resto de la conversación la usas como `{{cliente_fuente}}`.

    <Info>
      Usa nombres en minúscula y con guion bajo, sin espacios ni tildes. Son más fáciles de escribir correctamente en los mensajes y evitan errores difíciles de ver.
    </Info>
  </Tab>

  <Tab title="Multi-objeto">
    El modal tiene tres pasos, porque primero hay que decir **sobre cuál de tus objetos** se va a buscar a la persona.

    ### 1. Objeto de referencia y campo de teléfono

    <img src="https://mintcdn.com/trebleai/n_48dzI5l_tB6XfZ/images/salesforce-crm-read-mo-1.png?fit=max&auto=format&n=n_48dzI5l_tB6XfZ&q=85&s=8388e1544923ea48fd57f9154205e1aa" alt="Paso 1 del bloque CRM Multiple Object" className="mx-auto" width="3024" height="1712" data-path="images/salesforce-crm-read-mo-1.png" />

    **Referencia.** Cuál de los objetos que configuraste al instalar se va a usar para encontrar a la persona.

    **Campo de búsqueda de teléfono.** Por cuál campo de teléfono de ese objeto se busca. El desplegable lista todos los campos de teléfono del objeto (`Phone`, `Mobile Phone`, `Fax`, y los personalizados que tengas).

    <Warning>
      Elige el mismo campo donde realmente están guardados los números de tus registros. Si eliges uno distinto, Treble no va a encontrar a nadie y todas las variables van a llegar vacías.
    </Warning>

    ### 2. Objeto y jerarquía

    <img src="https://mintcdn.com/trebleai/n_48dzI5l_tB6XfZ/images/salesforce-crm-read-mo-2.png?fit=max&auto=format&n=n_48dzI5l_tB6XfZ&q=85&s=f56d35f7790aad8fcd385be1ac724937" alt="Pasos 2 y 3 del bloque CRM Multiple Object" className="mx-auto" width="3024" height="1710" data-path="images/salesforce-crm-read-mo-2.png" />

    El objeto del que vas a leer —puede ser el mismo de referencia o uno relacionado— y qué hacer cuando hay más de un registro.

    ### 3. Propiedad y nombre de variable

    La propiedad es el campo que quieres traer. Debajo, el **nombre de variable** con el que lo vas a usar en la conversación.
  </Tab>
</Tabs>

<div class="hr" />

## Usar la variable

Una vez configurado, el bloque muestra en el lienzo un resumen y, abajo, la variable que produce. Puedes copiarla con el botón de copiar y pegarla en cualquier bloque posterior.

<img src="https://mintcdn.com/trebleai/n_48dzI5l_tB6XfZ/images/salesforce-crm-read-so-3.png?fit=max&auto=format&n=n_48dzI5l_tB6XfZ&q=85&s=bbf8a5dd85582d42f7de1f4b92a70fed" alt="El bloque de lectura alimentando un mensaje con la variable" className="mx-auto" width="3024" height="1712" data-path="images/salesforce-crm-read-so-3.png" />

<Warning>
  El bloque de lectura tiene que ir **antes** en el flujo que el bloque donde usas la variable. Si lo pones después, la variable todavía no tiene valor en el momento en que se envía el mensaje.
</Warning>

En multi-objeto, el bloque de lectura y el de escritura se distinguen por el último recuadro del resumen: el de lectura termina en **Variable**, el de acción termina en **En la propiedad → Colocar**.

<img src="https://mintcdn.com/trebleai/n_48dzI5l_tB6XfZ/images/salesforce-crm-action-mo-4.png?fit=max&auto=format&n=n_48dzI5l_tB6XfZ&q=85&s=c6e0b278f032d99496fee0d8bfbf725c" alt="Bloque de lectura y bloque de acción en el lienzo" className="mx-auto" width="3018" height="1712" data-path="images/salesforce-crm-action-mo-4.png" />

<div class="hr" />

## Usos comunes

<AccordionGroup>
  <Accordion title="Personalizar el saludo">
    Lee el nombre del registro y úsalo en el primer mensaje. Acuérdate del camino alterno: si la persona es nueva y no existe en Salesforce, la variable llega vacía.
  </Accordion>

  <Accordion title="Ramificar el flujo según el estado de un registro">
    Lee un campo de estado y conecta el bloque a un bloque de **Condiciones**. Así puedes dar un mensaje distinto a quien tiene una solicitud en trámite y a quien ya la tiene aprobada.
  </Accordion>

  <Accordion title="Guardar el Id para escribir después sobre ese mismo registro">
    En multi-objeto puedes leer el Id de un registro en una variable y usarlo más adelante en la **jerarquía personalizada** del bloque de acción (`Account ID = {{client_id}}`). Es la forma más confiable de asegurarte de que la escritura cae sobre el registro que quieres, y no sobre otro del mismo objeto.

    <a class="article-link" href="/es/docs/integrations/salesforce/blocks/crm-action"><p>Bloque de acción en CRM</p><Icon icon="arrow-up-right-from-square" iconType="solid" /></a>
  </Accordion>

  <Accordion title="Evitar preguntar lo que ya sabes">
    Si el dato ya está en Salesforce, léelo en vez de pedirlo. Acorta la conversación y evita que la persona escriba algo distinto a lo que ya tienes registrado.
  </Accordion>
</AccordionGroup>

<div class="hr" />

## Problemas frecuentes

<AccordionGroup>
  <Accordion title="La variable llega vacía">
    Las causas más comunes, en orden:

    1. **La persona no existe** en el objeto que elegiste. Es lo normal para contactos nuevos: arma un camino alterno.
    2. **El campo de búsqueda de teléfono no es el correcto.** Revisa en Salesforce en qué campo están realmente guardados los números.
    3. **El registro existe pero ese campo está vacío** en Salesforce.
    4. **La jerarquía apunta a otro registro.** Si la persona tiene varios, puede que estés leyendo del equivocado.
  </Accordion>

  <Accordion title="El campo que quiero no aparece en la lista de propiedades">
    Falta sincronizar. Corre la [sincronización de objetos](/es/docs/integrations/salesforce/object-sync) y vuelve a abrir el bloque.
  </Accordion>

  <Accordion title="La variable trae un código raro en vez del texto que veo en Salesforce">
    Pasa con campos de tipo lista desplegable y con campos de relación. Salesforce guarda internamente un valor distinto al que muestra en pantalla, y eso es lo que Treble lee.

    Si necesitas mostrarle el texto a la persona, usa un bloque de **Condiciones** para traducir el código a la palabra que corresponde.
  </Accordion>

  <Accordion title="Un campo de fecha no llega como esperaba">
    Los campos de fecha y fecha/hora llegan en el formato interno de Salesforce, no en el formato que ves en pantalla ni en el de tu país.

    Si vas a mostrarle la fecha a la persona en el chat, revisa primero cómo llega el valor con una prueba real antes de publicar el flujo.
  </Accordion>

  <Accordion title="En el mensaje aparece {{mi_variable}} tal cual, con las llaves">
    El nombre de la variable en el mensaje no coincide exactamente con el que definiste en el bloque. Revisa mayúsculas, tildes y guiones bajos; lo más seguro es copiar la variable desde el bloque con el botón de copiar.
  </Accordion>
</AccordionGroup>

<div class="hr" />

## Siguientes pasos

<CardGroup cols={2}>
  <Card title="Escribir datos en Salesforce" icon="upload" href="/es/docs/integrations/salesforce/blocks/crm-action">
    Guardar en el CRM lo que la persona responde en el chat.
  </Card>

  <Card title="Transferir a un asesor" icon="headset" href="/es/docs/integrations/salesforce/blocks/human-transfer">
    Pasar la conversación al propietario del registro en Salesforce.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.