--- title: "Configurar la Event Function" url: https://docs.catalyst.zoho.com/es/tutorials/invoice-notifier/python/configure-function/ description: "Crea una arquitectura dirigida por eventos para automatizar las actualizaciones de facturas de Zoho Books a Zoho Cliq usando Event Functions y Catalyst Signals." last_updated: 2026-08-17T12:16:04Z service: All Services type: tutorial related_links: - name: "Event Functions" url: /es/serverless/help/functions/event-functions/ - name: "Functions Directory Structure" url: /es/cli/v1/project-directory-structure/functions-directory --- # Configurar la Event Function Ahora configuremos la event function `Cliq_Notifier`, que envía automáticamente un mensaje a un canal de Zoho Cliq. Este mensaje incluirá los detalles de las facturas de los nuevos clientes que han completado exitosamente su pago. La función se ejecutará cuando sea activada por Catalyst Signals. El [directorio de funciones](https://docs.catalyst.zoho.com/es/cli/v1/project-directory-structure/functions-directory), `functions/Cliq_Notifier` contiene: - El archivo principal de la función `main.py` - El archivo de configuración `catalyst-config.json` - El archivo `requirements.txt` para mencionar cualquier biblioteca externa que puedas agregar. Agregarás código en el archivo `main.py`. Nuestra función requerirá la biblioteca `requests` y el SDK de Catalyst como dependencias para su funcionamiento eficiente. Para instalarlas, navega al directorio de la función (`functions/Cliq_Notifier`) y crea una carpeta lib. Ejecuta el siguiente comando desde la carpeta lib: ```sh pip3 install requests zcatalyst-sdk -t . ``` Esto instalará las dependencias. ![installing requests dependencies](https://catalyst-docs-development.zohostratus.in/images/tutorials/invoice-notifier/requests-cli.webp) > **Nota:** Por favor, revisa el código en esta sección para asegurarte de que lo comprendes completamente. Copia el código de Python y pégalo en `main.py` en el directorio `functions/Cliq_Notifier` de tu proyecto, y guarda el archivo. Puedes usar cualquier IDE de tu elección para trabajar con los archivos de la aplicación. **main.py** ```python import sys sys.path.insert(0, 'lib') import logging import traceback import requests import zcatalyst_sdk logger = logging.getLogger() zbooksdomain = "{{YOUR_ZBOOKS_DOMAIN}}"; #Ingresa tu dominio de ZohoBooks según tu región zbooksorg = "{{YOUR_ZBOOKS_ORGANIZATION_ID}}" #Ingresa tu ID de organización de ZohoBooks zcliqdomain = "{{YOUR_ZCLIQ_DOMAIN}}"; #Ingresa tu dominio de ZohoCliq según tu región zcliq_channel_unique_name = "{{YOUR_CHANNEL_UNIQUE_NAME}}" #Ingresa el nombre único del canal donde se deben publicar las actualizaciones zcliq_bot_unique_name = "{{YOUR_BOT_UNIQUE_NAME}}" #Ingresa el nombre único del bot que publicará los mensajes zaccountsdomain = "{{YOUR_ZACCOUNTS_DOMAIN}}" #Ingresa tu dominio de ZohoAccounts según tu región def handler(event, context): try: data = extract_invoice_data(event) rows = transform_invoice_data(data) request_body = prepare_cliq_request(rows) access_token = get_access_token() send_to_cliq(request_body, access_token) logger.info("Message pushed to channel successfully") context.close_with_success() except Exception as e: logger.error("An unexpected error occurred:\n%s", traceback.format_exc()) context.close_with_failure() def extract_invoice_data(event): event_payload = event.get_raw_data() data = event_payload.get("data") rows = [invoice for invoices in data for invoice in invoices] return rows def transform_invoice_data(rows): for row in rows: invoice_id = row.get("Invoice Id") row["Link"] = f"https://{zbooksdomain}/app/{zbooksorg}#/invoices/{invoice_id}" del row["Invoice Id"] return rows def prepare_cliq_request(rows): request_body = { "slides": [{ "type": "table", "data": { "headers": ["Customer", "Invoice Number", "Amount", "Paid On", "Link"], "rows": rows } }], "text": "Here are the invoices marked as Paid in the last hour:" } return request_body def get_access_token(): app = zcatalyst_sdk.initialize() connector_config = { "CliqConnector": { "client_id": "{{YOUR_CLIENT_ID}}", #Ingresa tu Client ID "client_secret": "{{YOUR_CLIENT_SECRET}}", #Ingresa tu Client Secret "auth_url": f"https://{zaccountsdomain}/oauth/v2/token", "refresh_url": f"https://{zaccountsdomain}/oauth/v2/token", "refresh_token": "{{YOUR_REFRESH_TOKEN}}" #Ingresa tu Refresh Token } } connector = app.connection(connector_config).get_connector("CliqConnector") access_token = connector.get_access_token() return access_token def send_to_cliq(payload, access_token): cliq_channel_url = f"https://{zcliqdomain}/api/v2/channelsbyname/{zcliq_channel_unique_name}/message?bot_unique_name={zcliq_bot_unique_name}" headers = { "Content-Type": "application/json", "Authorization": f"Zoho-oauthtoken {access_token}" } response = requests.post(cliq_channel_url, headers=headers, json=payload) response.raise_for_status() ``` > **Nota:** Después de copiar y pegar el código en tu archivo de función, asegúrate de actualizar los siguientes marcadores de posición con los valores reales, como se indica en los comentarios en línea: - **Dominio de Zoho Books (línea 11)**: Ingresa el dominio correspondiente a tu organización de [**Zoho Books**](https://www.zoho.com/in/books/), según tu región. Ejemplo: books.zoho.com, books.zoho.eu o books.zoho.in - **ID de organización de Zoho Books (línea 12)**: Proporciona el ID de organización único de tu cuenta de Zoho Books. - **Dominio de Zoho Cliq (línea 14)**: Especifica el dominio de tu organización de [Zoho Cliq](https://www.zoho.com/cliq/), según tu región. Ejemplo: cliq.zoho.com, cliq.zoho.eu - **Nombre único de tu canal de Zoho Cliq (línea 15)**: Ingresa el nombre único del [canal de Zoho Cliq](https://help.zoho.com/portal/es/kb/zoho-cliq/user-guides/channels) donde se deben publicar las actualizaciones de facturas pagadas. - **Nombre único de tu bot de Zoho Cliq (línea 16)**: Proporciona el nombre único del [bot de Zoho Cliq](https://www.zoho.com/cliq/help/platform/bots.html) que se ha agregado al canal anterior. - **Dominio de Zoho Accounts (línea 18)**: Indica el dominio de [Zoho Accounts](https://www.accounts.zoho.com/) utilizado para iniciar sesión en Catalyst, Zoho Books y Zoho Cliq. Ejemplo: accounts.zoho.com, accounts.zoho.in - **Client ID (línea 70)**: Pega el Client ID obtenido durante el registro del cliente en el [Paso 4](https://docs.catalyst.zoho.com/es/tutorials/invoice-notifier/nodejs/register-client/). - **Client Secret (línea 71)**: Pega el Client Secret correspondiente generado en el [Paso 4](https://docs.catalyst.zoho.com/es/tutorials/invoice-notifier/java/register-client/). - **Refresh Token (línea 74)**: Proporciona el Refresh Token que generaste en el [Paso 5](https://docs.catalyst.zoho.com/es/tutorials/invoice-notifier/java/refresh-token/) usando tu herramienta de cliente de API. La Event Function ahora está configurada.