> For the complete documentation index, see [llms.txt](https://docs.violetlabs.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.violetlabs.com/es/aplicaciones/i/ion/configure-webhooks-en-ion.md).

# Configure webhooks en ION

Habilite la obtención de datos en tiempo real desde ION a Violet

#### Configurar webhooks desde Violet a ION

1. Crear un [integración ION en Violet](/es/aplicaciones/i/ion.md).
2. Navega a la **Página de Webhooks** página en Violet:

<figure><img src="https://3116332745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvrraExym8pNEUvBDoima%2Fuploads%2F9ElCiUbltWWvQohLtr1E%2Fimage.png?alt=media&amp;token=1a5eb2a8-4a33-43cb-b51b-949d6f32fdfc" alt="" width="249"><figcaption></figcaption></figure>

3. Crea una URL de Webhook en Violet, seleccionando la integración ION cuando se te pida seleccionar una integración.
4. Copia y guarda la URL de Webhook generada en Violet - ***ESTO SOLO SE MOSTRARÁ UNA VEZ***.
5. En ION, navega al ejecutor de consultas GraphQL en la esquina inferior izquierda de tu entorno ION:

   <figure><img src="https://3116332745-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvrraExym8pNEUvBDoima%2Fuploads%2FGdfwdeEkSVvvUKm6AE0a%2Fimage.png?alt=media&amp;token=06a2088a-5172-45cb-9606-58eb9778e97f" alt="" width="333"><figcaption></figcaption></figure>
6. En el ejecutor de consultas de ION, ejecuta el siguiente código para crear un receptor de webhook - *reemplaza el* <mark style="color:$danger;">`webhookUri`</mark> *con el generado en Violet como se muestra en el bloque Input abajo*.

```typescript
# Crear un receptor
mutation CreateWebhookReceiver($input: CreateWebhookReceiverInput!) {
    createWebhookReceiver(input: $input) {
        webhookReceiver {
            id name description webhookUri sharedSecret contentType expectedResponseCode
            active subscriptions { resource action id } headers { key value id }
        }
    }
}

# Input
{
  "input": {
    "name": "Violet",
    "webhookUri": "Reemplaza esto con la URL copiada de Violet"
  }
}
```

6. Copia el ID del Receptor del webhook creado por la consulta anterior.
7. En el ejecutor de consultas de ION, ejecuta la consulta a continuación para suscribirte a todos los tipos de recurso y acción compatibles, reemplazando receiverId con el id del receptor creado arriba. Si quieres, puedes suscribirte solo a algunos tipos de recurso y acción ejecutando solo un subconjunto de las consultas.

```typescript
mutation {
  abomUpdate: createWebhookSubscription(input: { resource: ABOM_INSTALLATIONS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  abomCreate: createWebhookSubscription(input: { resource: ABOM_INSTALLATIONS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  filesUpdate: createWebhookSubscription(input: { resource: FILE_ATTACHMENTS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  filesCreate: createWebhookSubscription(input: { resource: FILE_ATTACHMENTS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  issuesUpdate: createWebhookSubscription(input: { resource: ISSUES, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  issuesCreate: createWebhookSubscription(input: { resource: ISSUES, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  organizationsUpdate: createWebhookSubscription(input: { resource: ORGANIZATIONS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  organizationsCreate: createWebhookSubscription(input: { resource: ORGANIZATIONS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  partsUpdate: createWebhookSubscription(input: { resource: PARTS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  partsCreate: createWebhookSubscription(input: { resource: PARTS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  planInputsUpdate: createWebhookSubscription(input: { resource: PLAN_INPUTS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  planInputsCreate: createWebhookSubscription(input: { resource: PLAN_INPUTS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  planItemsUpdate: createWebhookSubscription(input: { resource: PLAN_ITEMS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  planItemsCreate: createWebhookSubscription(input: { resource: PLAN_ITEMS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  plansUpdate: createWebhookSubscription(input: { resource: PLANS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  plansCreate: createWebhookSubscription(input: { resource: PLANS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  proceduresUpdate: createWebhookSubscription(input: { resource: PROCEDURES, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  proceduresCreate: createWebhookSubscription(input: { resource: PROCEDURES, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  purchaseOrderLinesUpdate: createWebhookSubscription(input: { resource: PURCHASE_ORDER_LINES, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  purchaseOrderLinesCreate: createWebhookSubscription(input: { resource: PURCHASE_ORDER_LINES, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  purchaseOrdersUpdate: createWebhookSubscription(input: { resource: PURCHASE_ORDERS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  purchaseOrdersCreate: createWebhookSubscription(input: { resource: PURCHASE_ORDERS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  receiptsUpdate: createWebhookSubscription(input: { resource: RECEIPTS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  receiptsCreate: createWebhookSubscription(input: { resource: RECEIPTS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  receiptItemsUpdate: createWebhookSubscription(input: { resource: RECEIPT_ITEMS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  receiptItemsCreate: createWebhookSubscription(input: { resource: RECEIPT_ITEMS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  runsUpdate: createWebhookSubscription(input: { resource: RUNS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  runsCreate: createWebhookSubscription(input: { resource: RUNS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  runStepsUpdate: createWebhookSubscription(input: { resource: RUN_STEPS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  runStepsCreate: createWebhookSubscription(input: { resource: RUN_STEPS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  stepUpdate: createWebhookSubscription(input: { resource: STEPS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  stepCreate: createWebhookSubscription(input: { resource: STEPS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }

  suppliersUpdate: createWebhookSubscription(input: { resource: SUPPLIERS, action: UPDATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
  suppliersCreate: createWebhookSubscription(input: { resource: SUPPLIERS, action: CREATE, receiverId: "2" }) {
    webhookSubscription { id _etag }
  }
}

```

8. Ahora, cualquier cambio y creación en los recursos a los que te hayas suscrito llegará a Violet de forma proactiva.

#### Limitaciones conocidas

1. Los eventos de webhook no se activan cuando se crean nuevos `líneas de orden de compra` son creadas
2. Los eventos de webhook no se activan de una manera que Violet soporte actualmente cuando los valores de las propiedades pasan de `vacío` a `poblado`. Estas propiedades se actualizarán correctamente en Violet en la próxima extracción programada.
3. Ciertas propiedades, especialmente las vinculadas a otro objeto de ION (por ejemplo, la dirección de envío en una `Orden`, que hace referencia a un `ubicación` de ION) llegan en un formato no compatible dentro del Webhook. En estos casos, el objeto se actualizará correctamente en Violet en la próxima extracción programada.
4. Para objetos recién creados en ION, algunos campos pueden no estar completamente poblados en Violet hasta la próxima extracción.


---

# 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://docs.violetlabs.com/es/aplicaciones/i/ion/configure-webhooks-en-ion.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.
