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, 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:
Esto instalará las dependencias.
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.
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()
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, 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, 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 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 que se ha agregado al canal anterior.
-
Dominio de Zoho Accounts (línea 18): Indica el dominio de Zoho Accounts 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.
-
Client Secret (línea 71): Pega el Client Secret correspondiente generado en el Paso 4.
-
Refresh Token (línea 74): Proporciona el Refresh Token que generaste en el Paso 5 usando tu herramienta de cliente de API.
La Event Function ahora está configurada.
Última actualización 2026-03-20 21:51:56 +0530 IST
