> For the complete documentation index, see [llms.txt](https://navixy.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://navixy.com/docs/user/es/guide/account/iot-logic/nodes/geofence-functions.md).

# Funciones de zonas

Use las geocercas que ya tiene en Navixy dentro de los flujos de IoT Logic para actuar cuando un dispositivo entre o salga de un área, o para registrar en qué área se encuentra.

Las funciones de zona permiten que un flujo reaccione según la ubicación de un dispositivo, usando las zonas que ya tiene en Navixy. Usted hace referencia a una zona en lugar de describir un área con coordenadas, de modo que los límites sigan siendo los mismos que ya usa para alertas y reportes.

## Qué función necesita

| Si desea                                                                                                | Usar                                                                                                            |
| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| Actuar sobre una zona concreta, cuando un dispositivo está dentro de ella, entra en ella o sale de ella | `inGeofence()`, `enterGeofence()`, `leaveGeofence()`. Vea [Reaccionar ante una zona](#reacting-to-one-geofence) |
| Descubrir en qué zona está un dispositivo, sin nombrar una de antemano                                  | `geofenceName()`. Vea [Registrar la zona actual](#recording-the-current-geofence)                               |

{% hint style="warning" %}
Debe crear zonas en Navixy antes de poder referenciarlas en expresiones de IoT Logic. Para crear o administrar zonas, vea [Zonas](/docs/user/es/guide/tracking/map-tools/geofences.md).
{% endhint %}

{% hint style="danger" %}
**`geofenceName()` es una opción de pago, que se vende por separado.** Está desactivada de forma predeterminada para todas las cuentas, y su proveedor de servicios la habilita por cuenta a pedido. Las otras tres funciones no se ven afectadas y no necesitan ninguna opción adicional.

Póngase en contacto con su proveedor de servicios para que la active. Vea [Antes de comenzar](#before-you-start).
{% endhint %}

## Reaccionar ante una zona

Use estas tres funciones cuando ya sepa qué zona le interesa. Cada una responde sí o no para la mayoría de los paquetes de datos que envía el dispositivo, de modo que un flujo puede enviar esos datos por una rama u otra. En algunos paquetes, una función no puede responder y devuelve un valor vacío en su lugar. Vea [Cuando una función de zona no da respuesta](#when-a-geofence-function-gives-no-answer).

| Función             | Responde sí cuando                                    |
| ------------------- | ----------------------------------------------------- |
| `inGeofence(id)`    | El dispositivo está dentro de la zona en este momento |
| `enterGeofence(id)` | El dispositivo acaba de entrar en la zona             |
| `leaveGeofence(id)` | El dispositivo acaba de salir de la zona              |

Las agrega a la condición de un nodo de **IF/THEN Lógica** . El `id` es el ID numérico de la zona en su cuenta de Navixy, y un selector lo completa por usted, por lo que rara vez lo escribe a mano. Vea [Cómo agregar una condición de zona](#how-to-add-a-geofence-condition).

### Cuando una función de zona no da respuesta

`inGeofence()`, `enterGeofence()`, y `leaveGeofence()` devuelven un valor vacío en lugar de sí o no cuando no pueden responder. Una función no puede responder en estos casos:

* El paquete de datos no lleva coordenadas. Una posición de baja calidad igual se evalúa, por lo que una señal GPS débil devuelve un sí o no real.
* La zona se eliminó de su cuenta de Navixy o quedó inaccesible después de guardar el flujo. Una zona que ya falta cuando guarda el flujo se rechaza al guardar, en cambio.

Un valor vacío detiene la condición de la que forma parte. Cuando la función constituye toda la condición, los datos van por la ruta ELSE. Ese enrutamiento suele ser lo que usted quiere. Cuando la función se combina con cualquier otra cosa, el valor vacío puede detener toda la condición, incluidos los términos que sí tenían valores. Para que el resto de la condición siga funcionando, compare la función con `== true`:

```jexl
leaveGeofence(51577 /* Almacén de Austin */) == true || leaveGeofence(85269 /* Sitio de construcción 1 */) == true
```

Para consultar la regla completa, vea [Valores faltantes en expresiones](/docs/user/es/guide/account/iot-logic/nodes/missing-values-in-expressions.md).

### Sintaxis

{% tabs %}
{% tab title="Posición actual" %}
Este es el formato que inserta automáticamente el selector de zonas. El nombre de la zona aparece como comentario para facilitar la lectura, pero no afecta la evaluación.

```jexl
inGeofence(35229 /* Zona de entrega #4 */)
enterGeofence(51577 /* Almacén de Austin */)
leaveGeofence(85269 /* Sitio de construcción 1 */)
```

{% endtab %}

{% tab title="Posición histórica" %}
`inGeofence()` acepta dos parámetros más, por lo que puede probar una posición anterior en lugar de la actual:

```jexl
inGeofence(35229 /* zona de entrega #4 */, 1)
inGeofence(35229 /* zona de entrega #4 */, 1, 'valid')
inGeofence(35229 /* zona de entrega #4 */, 'valid')
```

El segundo parámetro indica de qué paquete de datos tomar la posición, contando hacia atrás desde el actual. El tercero indica si se deben contar los paquetes que no llevan posición. Ambos son opcionales y siguen la misma convención que la `value()` función.

`enterGeofence()` y `leaveGeofence()` toman el ID de la zona y nada más. Ambas comparan la posición actual con la anterior, por lo que no hay un índice que elegir. Un flujo que pase un segundo parámetro a cualquiera de las dos funciones no puede guardarse, y el error indica el nombre de la función.

Mantenga el índice en el rango de 0 a 11. `inGeofence()` acepta un índice mayor, se guarda sin error y luego devuelve un valor vacío para cada paquete.

No envuelva una función de zona dentro de `value()`. El primer parámetro de `value()` es un nombre de atributo, no una expresión, por lo que una llamada como `value("inGeofence(35229)", 1, 'valid')` busca un atributo con ese nombre literal y siempre devuelve un valor vacío.

Para `value()` los detalles de la función, consulte [Expresiones y sintaxis de IF/THEN Lógica](/docs/user/es/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md).
{% endtab %}
{% endtabs %}

### Cómo agregar una condición de zona

El campo de expresión en el **IF/THEN Lógica** panel de configuración del nodo incluye un selector de zonas dedicado <img src="https://1900701122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-f1ad9487846cd008c17c7a3a86c7f52b4f8d899d%2Fgeofence-picker.png?alt=media" alt="" data-size="line">, separado del autocompletado estándar de atributos [.](/docs/user/es/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#autofill-attribute-names)Enumera todas las zonas definidas en su cuenta de Navixy, agrupadas por nombre e ID.

Para agregar una función de zona a su expresión:

{% stepper %}
{% step %}

#### Abra la configuración del nodo

Abra el **IF/THEN Lógica** nodo haciendo clic en él en el lienzo.
{% endstep %}

{% step %}

#### Abra el selector de zonas

En el **Expresión de condición (JEXL)** campo, haga clic en el icono del selector de zonas para abrir la lista de zonas.

<figure><img src="https://1900701122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-4e9a17bca5a836559c33502a97f6c418f3504898%2Fgeofence-picker-list.png?alt=media" alt="Geofence picker list example, with all three options (in, enter, leave geofence)"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Busque y seleccione una zona

Escriba parte del nombre de la zona para filtrar la lista. Cada zona aparece tres veces, una por cada función disponible. Seleccione la entrada que combine la zona que necesita con la función que coincida con su condición:

* `inGeofence` - úsela cuando necesite comprobar si un dispositivo se encuentra actualmente dentro de la zona seleccionada.
* `enterGeofence` - úsela cuando necesite detectar que un dispositivo se movió desde fuera de la zona seleccionada hacia ella.
* `leaveGeofence` - úsela cuando necesite detectar que un dispositivo se movió desde dentro de la zona seleccionada hacia afuera.

El selector inserta la llamada completa a la función en la posición del cursor del campo de expresión.
{% endstep %}

{% step %}

#### Combinar con otras condiciones si es necesario

Use operadores lógicos para combinar la función de zona con otras condiciones. Consulte [Ejemplos de condiciones](#condition-examples).
{% endstep %}

{% step %}

#### Guardar la configuración

Haga clic en **Aplicar cambios** para confirmar la configuración del nodo.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
El selector de zonas solo muestra las zonas que existen en su cuenta de Navixy en el momento en que abre el nodo. Si agrega una nueva zona después de abrir el nodo, ciérrelo y ábralo de nuevo para actualizar la lista.
{% endhint %}

El selector inserta solo las tres funciones basadas en ID. Para usar `geofenceName()`, escríbala usted mismo en el campo.

### Ejemplos de condiciones

<details>

<summary>Condición de zona única</summary>

Dirija los datos según si un dispositivo está actualmente dentro de una zona de entrega:

```jexl
inGeofence(35229 /* Zona de entrega #4 */)
```

* **Ruta entonces**: Los datos de los dispositivos dentro de la zona fluyen aquí. Use esta rama para activar el procesamiento específico de la zona, como ajustar umbrales de velocidad o iniciar un atributo de temporizador de permanencia.
* **Ruta de lo contrario**: Los datos de los dispositivos fuera de la zona fluyen aquí para el procesamiento estándar.

</details>

<details>

<summary>Detección de entrada</summary>

Active una acción cuando un vehículo entre en un sitio restringido:

```jexl
enterGeofence(85269 /* Sitio de construcción 1 */)
```

* **Ruta entonces**: Conecte a un **Webhook** nodo para notificar la seguridad del sitio, o a un **Acción del dispositivo** nodo para registrar el evento de entrada.
* **Ruta de lo contrario**: Continúe con el procesamiento normal de datos para los dispositivos que no entren en el sitio.

</details>

<details>

<summary>Detección de salida</summary>

Detecte cuándo un vehículo sale de un área de servicio autorizada durante el horario laboral:

```jexl
leaveGeofence(51577 /* Almacén de Austin */) == true && value('business_hours', 0, 'valid') == true
```

* **Ruta entonces**: Envíe una alerta mediante un **Webhook** nodo a un sistema de despacho.
* **Ruta de lo contrario**: Continúe con el procesamiento normal.

</details>

<details>

<summary>Combinar varias zonas</summary>

Compruebe si un dispositivo está dentro de alguna de varias zonas restringidas:

```jexl
inGeofence(35229 /* Zona de entrega #4 */) == true || inGeofence(85269 /* Sitio de construcción 1 */) == true
```

Cada función se compara con `== true`, por lo que un paquete en el que una de ellas no puede determinarlo no detiene toda la condición. Sin la comparación, la primera función que devuelve un valor vacío detiene la condición y las otras zonas nunca se prueban. Consulte [Cuando una función de zona no da respuesta](#when-a-geofence-function-gives-no-answer).

* **Ruta entonces**: Aplique reglas o notificaciones específicas de la zona.
* **Ruta de lo contrario**: Procese los datos de los dispositivos fuera de todas las zonas enumeradas.

</details>

<details>

<summary>Zona combinada con un parámetro del dispositivo</summary>

Detecte el exceso de velocidad dentro de una zona urbana específica:

```jexl
inGeofence(84762 /* Destino 1 */) == true && value('speed', 0, 'valid') > 50
```

* **Ruta entonces**: Registre una violación de velocidad limitada a esa zona, o envíe una alerta dirigida.
* **Ruta de lo contrario**: Continúe con el procesamiento estándar para los datos conformes o fuera de la zona.

</details>

<details>

<summary>Comparación con la posición anterior</summary>

Detecte una transición de fuera hacia dentro comparando la posición actual con la anterior:

```jexl
inGeofence(35229 /* Zona de entrega #4 */) == true && inGeofence(35229 /* Zona de entrega #4 */, 1, 'valid') == false
```

Esta expresión devuelve `true` solo en el primer paquete después de que un dispositivo entra en la zona. `enterGeofence()` hace lo mismo en una sola llamada, así que use esta forma solo cuando necesite un índice diferente al del paquete anterior.

La segunda llamada se compara con `== false`, así que la expresión se activa solo cuando la posición anterior es conocida y estaba fuera de la zona. Un dispositivo sin una posición válida anterior no coincide. No escriba el segundo término como `!inGeofence(...)`, lo que no produce ningún resultado cuando no hay una posición anterior que probar.

</details>

## Registrar la zona actual

`geofenceName()` le indica en qué zona está un dispositivo, en lugar de probar una zona que usted eligió de antemano. Devuelve el nombre como texto, y usted almacena ese texto en un atributo propio.

Una sola fórmula cubre todas las zonas que tenga. No construye una cadena de comprobaciones por zona, y no edita el flujo cada vez que agrega una zona. Esto es lo que contiene el atributo para un vehículo de reparto que informa durante el día:

| Paquete de datos | `current_zone`        |
| ---------------- | --------------------- |
| 08:14            | `Garaje principal`    |
| 09:02            | (vacío)               |
| 09:47            | `Sitio del cliente 3` |

Usted lo crea como un atributo calculado en un **Iniciar atributo** Nodo. A partir de ahí se comporta como cualquier otro atributo calculado: aparece en [Analizador de datos](/docs/user/es/guide/account/iot-logic/data-stream-analyzer.md), puede mostrarse en la plataforma como un sensor personalizado y puede reenviarse a un sistema externo.

### Antes de comenzar

**La opción debe estar activada para su cuenta.** `geofenceName()` se vende por separado y está desactivado de forma predeterminada para todos. Póngase en contacto con su proveedor de servicios y pídale que habilite la función de nombre de Zona para su cuenta. Ayuda citar el nombre interno de la función, `iot_logic_zona_search`.

Hasta que no se active, no se puede guardar un flujo que use la función. El Nodo se marca con este error:

```
La función geofenceName() en el Nodo "Resolver la zona actual" (#2) no está disponible para su cuenta
```

Elimine la función del nodo para guardar el flujo, o espere hasta que su proveedor de servicios active la opción.

**También necesita zonas para buscar.**

* Existe al menos una zona en su cuenta. Consulte [Zonas](/docs/user/es/guide/tracking/map-tools/geofences.md).
* Para buscar solo una parte de sus zonas, asígneles etiquetas. Consulte [Usar etiquetas](/docs/user/es/guide/tracking/map-tools/geofences.md#use-tags) y [Etiquetas](/docs/user/es/guide/account/tags.md).

### Añadir el atributo

Cree un atributo calculado de la forma habitual, como se describe en [Administrar atributos](/docs/user/es/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#creating-attributes), e ingrese una de las fórmulas siguientes en **Fórmula** campo.

Escriba usted mismo el nombre de la función. El atributo autocomplete no ofrece `geofenceName`, y el selector de zonas está disponible solo en el **IF/THEN Lógica** nodo.

### Fórmulas

Las dos primeras fórmulas cubren la mayoría de los casos. La tercera lee una posición anterior en lugar de la actual.

| Fórmula                        | Qué devuelve                                                                                   |
| ------------------------------ | ---------------------------------------------------------------------------------------------- |
| `geofenceName()`               | El nombre de cualquier zona en la que se encuentre actualmente el dispositivo                  |
| `geofenceName('depots')`       | El nombre de una Zona etiquetada `depósitos` en la que se encuentra actualmente el dispositivo |
| `geofenceName('', 1, 'valid')` | El nombre de cualquier Zona en la que el dispositivo estaba un paquete de datos antes          |

Los tres parámetros son opcionales:

* **La Etiqueta**, en primer lugar, limita la búsqueda a las zonas que usted etiquetó con ese nombre. La mayúscula o la minúscula no hacen diferencia, y una etiqueta vacía significa todas las zonas. La etiquetación importa cuando usted tiene muchas zonas y solo algunas de ellas son significativas para este atributo, por ejemplo depósitos pero no sitios de clientes.
* **El número de paquete**, en segundo lugar, indica cuánto atrás buscar: `0` es el paquete que se está procesando, `1` el anterior, y así sucesivamente. Omítalo para la posición actual.
* **El filtro de posición**, en tercer lugar, es `'válido'` para omitir los paquetes que no contenían posición, o `'todos'` para contarlos. Omítalo y se contarán los paquetes sin posición.

Para conocer los límites exactos de cada parámetro, consulte [función de nombre de Zona](/docs/iot-logic-api/technical-details/geofence-name.md) en la documentación de la API de IoT Logic.

### Lo que devuelve

El atributo contiene el nombre de la zona como texto, o un valor vacío cuando no hay ningún nombre que devolver. Está vacío cuando:

* El dispositivo está fuera de todas las zonas que se buscaron.
* El paquete de datos no contiene posición.
* Ninguna zona de su cuenta tiene la etiqueta que usted indicó.

Un valor vacío se ve igual en los tres casos. En una fórmula, este valor vacío se escribe como `null`, que es como el ejemplo de enrutamiento a continuación lo comprueba.

Para obtener texto legible en lugar de un espacio en blanco, agregue un valor de respaldo con el `?:` operador:

```jexl
geofenceName() ?: 'Fuera de todas las zonas'
```

Cuando una posición cae dentro de dos zonas superpuestas, la función devuelve uno de los dos nombres. Navixy no prioriza las zonas superpuestas, y se devuelve el mismo nombre mientras el dispositivo permanezca en la superposición.

### Ejemplos de fórmulas

<details>

<summary>Nombre actual de la zona como atributo</summary>

En un **Iniciar atributo** nodo, cree un atributo llamado `current_zone` con esta fórmula:

```jexl
geofenceName()
```

Cada paquete de datos registrado dentro de una zona obtiene el nombre de esa zona. Los paquetes registrados fuera de todas las zonas obtienen un valor vacío.

</details>

<details>

<summary>Solo las zonas que etiquetó</summary>

Etiquete sus zonas de garaje con `depósitos`, luego cree un atributo con esta fórmula:

```jexl
geofenceName('depots') ?: 'En tránsito'
```

Un dispositivo dentro de un garaje obtiene el nombre de ese garaje. Un dispositivo en cualquier otro lugar obtiene `En tránsito`, incluso un dispositivo dentro de una zona que no tiene `depósitos` etiqueta.

</details>

<details>

<summary>Enrutamiento por área en un nodo IF/THEN Lógica</summary>

`geofenceName()` también funciona como condición, lo cual es útil cuando muchas zonas comparten una sola regla. Para enviar los datos registrados dentro de cualquier zona etiquetada `restringida` por la ruta THEN, use esta condición:

```jexl
geofenceName('restricted') != null
```

* **Ruta entonces**: Datos registrados dentro de una zona restringida. Conéctelo a un **Webhook** nodo para alertar a un despachador.
* **Ruta de lo contrario**: Todos los demás datos.

Compare el resultado con `==` o `!=` solo. Los `<`, `>`, `<=`, y `>=` operadores no dan un resultado útil cuando el valor está vacío.

</details>

<details>

<summary>Detectar un cambio de zona</summary>

Para activarse solo en el paquete en el que el dispositivo cambia de zona, compare el nombre actual con el nombre de la posición anterior:

```jexl
geofenceName() != geofenceName('', 1, 'valid')
```

El primer parámetro vacío significa todas las zonas, y `'válido'` hace que la comparación omita los paquetes que no contenían posición. Sin `'válido'`, un paquete sin posición se lee como un nombre de zona vacío, y la condición informa un cambio que no ocurrió.

</details>

## Preguntas frecuentes

#### ¿Dónde encuentro el ID de la zona?

El selector de zonas muestra el nombre y el ID numérico de cada zona en la lista. También puede encontrar el ID en la interfaz de zonas de Navixy. Cuando selecciona una zona del selector, el ID se inserta automáticamente en la expresión.

#### ¿Puedo almacenar una verificación de zona en un atributo?

Sí. Las cuatro funciones funcionan tanto en una fórmula de atributo como en una condición de enrutamiento. `geofenceName()` es la opción natural, porque le proporciona texto legible. Las otras tres le dan un valor de sí o no, o un valor vacío cuando la posición es desconocida. Un valor de sí o no suele ser más útil para el enrutamiento que para el almacenamiento.

El selector de zona solo aparece en el **IF/THEN Lógica** nodo, así que en una fórmula de atributo escribe usted mismo la función y el ID de la zona.

#### ¿Por qué no puedo guardar un flujo que usa geofenceName?

`geofenceName()` Es una opción de pago y está desactivada de forma predeterminada. Comuníquese con su proveedor de servicios para que la habilite en su cuenta. Consulte [Antes de comenzar](#before-you-start).

#### ¿Qué sucede si la zona referenciada se elimina?

Si una zona referenciada en una expresión se elimina de su cuenta de Navixy, la función ya no puede responder y devuelve un valor vacío. En un **IF/THEN Lógica** nodo que usa la función por sí solo, los datos fluyen por la conexión ELSE. El nodo almacena su propio atributo como un valor vacío, no como `falso`. En una condición que combina la función con otros términos, el valor vacío puede detener toda la condición. En un **Iniciar atributo** nodo, el atributo no tiene valor para ese paquete. Consulte [Valores faltantes en expresiones](/docs/user/es/guide/account/iot-logic/nodes/missing-values-in-expressions.md).

El flujo sigue ejecutándose, pero ya no puede guardarlo hasta que corrija la expresión. Al volver a guardarlo, falla con `El Nodo "<node title>" (#<node id>) contiene geozonas inexistentes o inaccesibles`. Actualice o elimine la expresión para restaurar tanto el enrutamiento como la capacidad de guardar.

#### ¿inGeofence evalúa la posición GPS actual del dispositivo?

Sí. `inGeofence()` comprueba la posición informada en el paquete de datos actual frente a los límites de la Zona. Cada paquete se evalúa de forma independiente, por lo que el resultado refleja la posición del dispositivo en el momento en que se recibió ese paquete. Un paquete que no contiene ninguna posición obtiene un valor vacío en lugar de `true` o `falso`.

#### ¿Cuál es la diferencia entre inGeofence y enterGeofence?

`inGeofence()` devuelve `true` para cada paquete que reporta una posición dentro de la zona. `enterGeofence()` devuelve `true` solo para el paquete que registra el momento en que el dispositivo cruzó la Zona. Use `inGeofence` cuando necesite aplicar lógica a todos los datos del interior del área. Use `enterGeofence` cuando necesite reaccionar específicamente al evento de cruce del límite.

#### ¿Por qué mi atributo geofenceName siempre está vacío?

Revise estas causas en orden:

1. La opción no está activada para su cuenta. Un flujo guardado anteriormente sigue ejecutándose y la función devuelve un valor vacío para cada paquete. Consulte [Antes de comenzar](#before-you-start).
2. La etiqueta que proporcionó no está asignada a ninguna zona. Los nombres de las etiquetas deben coincidir con una etiqueta que exista en su cuenta.
3. El dispositivo realmente está fuera de todas las zonas que buscó.
4. Tiene una cantidad muy grande de zonas y la fórmula no proporciona ninguna etiqueta. Proporcione una etiqueta para buscar un conjunto más pequeño. El umbral exacto se encuentra en [función de nombre de Zona](/docs/iot-logic-api/technical-details/geofence-name.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://navixy.com/docs/user/es/guide/account/iot-logic/nodes/geofence-functions.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
