Aviso:

Para brindarle información de soporte completa de manera más rápida, el contenido de esta página ha sido traducido al español mediante traducción automática. Para consultar la información de soporte más precisa, consulte la versión en inglés de este contenido.

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 index.js
  • El archivo de configuración catalyst-config.json
  • Los módulos de Node
  • Los archivos de dependencias package.json y package-lock.json

Agregarás código en el archivo index.js.

Nuestra función requerirá el paquete axios como dependencia para su funcionamiento eficiente. axios es un cliente HTTP basado en promesas que usaremos para enviar solicitudes HTTP asíncronas al endpoint de la API de Cliq para publicar mensajes.

Para instalar axios, navega al directorio de la función de Node (functions/Cliq_Notifier) y ejecuta el siguiente comando:

copy
$
npm install axios

Esto instalará el módulo.

installing axios dependencies

Esto también actualizará el archivo Package.json con la dependencia axios como se muestra en esta imagen.

Add dependencies for the fucntion

Copia el código de Node.js y pégalo en index.js 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.

Nota: Por favor, revisa el código proporcionado en esta sección para asegurarte de que lo comprendes completamente.
index.js
copy
const axios = require('axios');
const catalyst = require('zcatalyst-sdk-node');
const ZBOOKSDOMAIN = "{{YOUR_ZBOOKS_DOMAIN}}"; //Ingresa tu dominio de ZohoBooks según tu región
const ZBOOKSORG = "{{YOUR_ZBOOKS_ORGANIZATION_ID}}" //Ingresa tu ID de organización de ZohoBooks
const ZCLIQDOMAIN = "{{YOUR_ZCLIQ_DOMAIN}}"; //Ingresa tu dominio de ZohoCliq según tu región
const ZCLIQ_CHANNEL_UNIQUE_NAME = "{{YOUR_CHANNEL_UNIQUE_NAME}}" //Ingresa el nombre único del canal donde se deben publicar las actualizaciones
const ZCLIQ_BOT_UNIQUE_NAME = "{{YOUR_BOT_UNIQUE_NAME}}" //Ingresa el nombre único del bot que publicará los mensajes
const ZACCOUNTSDOMAIN = "{{YOUR_ZACCOUNTS_DOMAIN}}" //Ingresa tu dominio de ZohoAccounts según tu región
module.exports = async (event, context) => {
    try {
        const rows = transformEventData(event.getRawData());
        const requestBody = buildCliqRequestBody(rows);
        const accessToken = await getAccessToken(context);
        await sendToCliq(requestBody, accessToken);
        console.log("Message pushed to channel successfully");
        context.closeWithSuccess();
    } catch (error) {
        console.error('Error occurred:', error);
        context.closeWithFailure();
    }
};
function transformEventData(rawData) {
    let rows = rawData.data.flat();
    for (let row of rows) {
        const invoiceId = row["Invoice Id"];
        delete row["Invoice Id"];
        row["Link"] = `https://${ZBOOKSDOMAIN}/app/${ZBOOKSORG}#/invoices/${invoiceId}`;
    }
    return rows;
}
function buildCliqRequestBody(rows) {
    return {
        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:"
    };
}
async function getAccessToken(context) {
    const app = catalyst.initialize(context);
    var connector = app.connection({
            CliqConnector: {
                client_id: "{{YOUR_CLIENT_ID}}", //Ingresa tu Client ID
                client_secret: "{{YOUR_CLIENT_SECRET}}", //Ingresa tu Client Secret
                auth_url: `https://${ZACCOUNTSDOMAIN}/oauth/v2/auth`,
                refresh_url: `https://${ZACCOUNTSDOMAIN}/oauth/v2/token`,
                refresh_token: "{{YOUR_REFRESH_TOKEN}}" //Ingresa tu Refresh Token
            }
        })
        .getConnector('CliqConnector'); 
    return await connector.getAccessToken();
}
async function sendToCliq(body, accessToken) {
    const cliqChannelURL = `https://${ZCLIQDOMAIN}/api/v2/channelsbyname/${ZCLIQ_CHANNEL_UNIQUE_NAME}/message?bot_unique_name=${ZCLIQ_BOT_UNIQUE_NAME}`;
    const headers = {
        'Content-Type': 'application/json',
        'Authorization': 'Zoho-oauthtoken ' + accessToken
    };
    const response = await axios.post(cliqChannelURL, body, { headers });
}

View more

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 4): 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 5): Proporciona el ID de organización único de tu cuenta de Zoho Books.

  • Dominio de Zoho Cliq (línea 7): 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 8): 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 9): Proporciona el nombre único del bot de Zoho Cliq que se ha agregado al canal anterior.

  • Dominio de Zoho Accounts (línea 11): 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 54): Pega el Client ID obtenido durante el registro del cliente en el Paso 4.

  • Client Secret (línea 55): Pega el Client Secret correspondiente generado en el Paso 4.

  • Refresh Token (línea 58): 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