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 el directorio de funciones

Ahora comenzaremos a codificar la aplicación Lead Manager configurando la función Advanced I/O.

El directorio de funciones functions/crm_crud contiene:

  • El archivo principal de la función index.js
  • El archivo de configuración catalyst-config.json
  • Módulos de Node
  • Archivos de dependencias package.json y package-lock.json

Agregarás código en index.js.

Puedes usar cualquier IDE para configurar la función.

Nota: Por favor revisa el código en esta sección para asegurarte de que lo comprendes completamente. Discutiremos el código de la función y del cliente, después de que configures el cliente.

Instalar los frameworks Express y Node Fetch para Node.js

La función de Node.js requiere la instalación de tres frameworks. Debes instalar las dependencias express, node-fetch y axios para importar esos paquetes en tu código.

express

Para instalar Express.js, navega al directorio de la función de Node (functions/crm_crud) en tu terminal y ejecuta el siguiente comando:

copy
$
npm install express --save

Esto instalará el módulo Express y guardará las dependencias.

catalyst_leadmanager_install_express

node-fetch

Para instalar node-fetch, ejecuta el siguiente comando desde el directorio de la función de Node, navega al directorio de la función de Node (functions/crm_crud):

copy
$
npm install node-fetch

Esto instalará el módulo.

catalyst_leadmanager_install_node_fetch

axios

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

copy
$
npm install axios

Esto instalará el módulo.

catalyst_leadmanager_install_axios

Esta información también se actualizará en el archivo package.json.

copy
{
	"name": "crm_crud",
	"version": "1.0.0",
	"main": "index.js",
	"author": "amelia.burrows@zylker.com",
	"dependencies": {
		"axios": "^0.27.2",
		"express": "^4.18.1",
		"node-fetch": "^3.2.6",
		"zcatalyst-sdk-node": "latest"
	}
}

Ahora puedes agregar el código en el archivo de la función.

Copia el código a continuación y pégalo en index.js ubicado en el directorio functions/crm_crud y guarda el archivo.

index.js
copy
"use strict";
const express = require("express");
const http = require("https");
const app = express();
app.use(express.json());
const catalyst = require("zcatalyst-sdk-node");
const HOST = "www.zohoapis.com";
const AUTH_HOST = "https://accounts.zoho.com/oauth/v2/token";
const PORT = 443;
const axios = require("axios");
const CLIENTID = '{{YOUR_CLIENT_ID}}'; //Agrega tu Client ID
const CLIENT_SECRET = '{{YOUR_CLIENT_SECRET}}'; //Agrega tu Client Secret
app.get("/generateToken", async (req, res) => {
  try {
    const catalystApp = catalyst.initialize(req);
    const code = req.query.code;
    let userManagement = catalystApp.userManagement();
    let userDetails = await userManagement.getCurrentUser();
	const domain = `${process.env.X_ZOHO_CATALYST_IS_LOCAL === 'true' ? "http" : "https"}://${process.env.X_ZOHO_CATALYST_IS_LOCAL === 'true' ? req.headers.host : req.headers.host.split(':')[0]}`
    const refresh_token = await getRefreshToken(code, res, domain);
    const userId = userDetails.user_id;
    const catalystTable = catalystApp.datastore().table("Token");
    await catalystTable.insertRow({
      refresh_token,
      userId,
    });
    res.status(200).redirect(`${domain}/app/index.html`);
  } catch (err) {
    console.log(err);
    res
      .status(500)
      .send({
        message: "Internal Server Error. Please try again after sometime.",
        error: err,
      });
  }
});
app.get("/getUserDetails", async (req, res) => {
  try {
    const catalystApp = catalyst.initialize(req);
    const userDetails = await getUserDetails(catalystApp);
    if (userDetails.length !== 0) {
      res.status(200).send({ userId: userDetails[0].Token.userId });
    } else {
      res.status(200).send({ userId: null });
    }
  } catch (err) {
    console.log(err);
    res
      .status(500)
      .send({
        message:
          "Internal Server Error in Getting User Details. Please try again after sometime.",
        error: err,
      });
  }
});
app.get("/crmData", async (req, res) => {
  try {
    console.log();
    const catalystApp = catalyst.initialize(req);
    const userDetails = await getUserDetails(catalystApp);
    const accessToken = await getAccessToken(catalystApp, userDetails);
    const options = {
      hostname: HOST,
      port: PORT,
      method: "GET",
      path: `/crm/v2/Leads`,
      headers: {
        Authorization: `Zoho-oauthtoken ${accessToken}`,
      },
    };
    var data = "";
    const request = http.request(options, function (response) {
      response.on("data", function (chunk) {
        data += chunk;
      });
      response.on("end", function () {
        console.log(response.statusCode);
        res.setHeader("content-type", "application/json");
        res.status(200).send(data);
      });
    });
    request.end();
  } catch (err) {
    console.log(err);
    res
      .status(500)
      .send({
        message: "Internal Server Error. Please try again after sometime.",
      });
  }
});
app.get("/crmData/:id", async (req, res) => {
  try {
    const catalystApp = catalyst.initialize(req);
    const userDetails = await getUserDetails(catalystApp);
    const accessToken = await getAccessToken(catalystApp, userDetails);
    const options = {
      hostname: HOST,
      port: PORT,
      method: "GET",
      path: `/crm/v2/Leads/${req.params.id}`,
      headers: {
        Authorization: `Zoho-oauthtoken ${accessToken}`,
      },
    };
    var data = "";
    const request = http.request(options, function (response) {
      response.on("data", function (chunk) {
        data += chunk;
      });
      response.on("end", function () {
        res.setHeader("content-type", "application/json");
        res.status(200).send(data);
      });
    });
    request.end();
  } catch (err) {
    console.log(err);
    res.status(500).send({
        message: "Internal Server Error. Please try again after sometime.",
      });
  }
});
app.post("/crmData", async (req, res) => {
  try {
    const catalystApp = catalyst.initialize(req);
    const createData = req.body;
    const reqData = [];
    reqData.push(createData);
    const data = {
      data: reqData,
    };
    if (!createData) {
      res.status(400).send({ message: "Data Not Found" });
    }
    const userDetails = await getUserDetails(catalystApp);
    const accessToken = await getAccessToken(catalystApp, userDetails);
    const options = {
      hostname: HOST,
      port: PORT,
      method: "POST",
      path: `/crm/v2/Leads`,
      headers: {
        Authorization: `Zoho-oauthtoken ${accessToken}`,
        "Content-Type": "application/json",
      },
    };
    const request = http.request(options, function (response) {
      res.setHeader("content-type", "application/json");
      response.pipe(res);
    });
    request.write(JSON.stringify(data));
    request.end();
  } catch (err) {
    console.log(err);
    res
      .status(500)
      .send({
        message: "Internal Server Error. Please try again after sometime.",
      });
  }
});
app.put("/crmData/:id", async (req, res) => {
  try {
    const catalystApp = catalyst.initialize(req);
    const updateData = req.body;
    const reqData = [];
    reqData.push(updateData);
    const data = {
      data: reqData,
    };
    if (!updateData) {
      res.status(400).send({ message: "Update Data Not Found" });
    }
    const userDetails = await getUserDetails(catalystApp);
    const accessToken = await getAccessToken(catalystApp, userDetails);
    const options = {
      hostname: HOST,
      port: PORT,
      method: "PUT",
      path: `/crm/v2/Leads/${req.params.id}`,
      headers: {
        Authorization: `Zoho-oauthtoken ${accessToken}`,
        "Content-Type": "application/json",
      },
    };
    const request = http.request(options, function (response) {
      res.setHeader("content-type", "application/json");
      response.pipe(res);
    });
    request.write(JSON.stringify(data));
    request.end();
  } catch (err) {
    console.log(err);
    res
      .status(500)
      .send({
        message: "Internal Server Error. Please try again after sometime.",
      });
  }
});
app.delete("/crmData/:id", async (req, res) => {
  console.log(`/crm/v2/Leads/${req.params.id}`);
  try {
    const catalystApp = catalyst.initialize(req);
    const userDetails = await getUserDetails(catalystApp);
    const accessToken = await getAccessToken(catalystApp, userDetails);
    const options = {
      hostname: HOST,
      port: PORT,
      method: "DELETE",
      path: `/crm/v2/Leads/${req.params.id}`,
      headers: {
        Authorization: `Zoho-oauthtoken ${accessToken}`,
        "Content-Type": "application/json",
      },
    };
    const request = http.request(options, function (response) {
      res.setHeader("content-type", "application/json");
      response.pipe(res);
    });
    request.end();
  } catch (err) {
    console.log(err);
    res.status(500).send({
        message: "Internal Server Error. Please try again after sometime.",
      });
  }
});
async function getAccessToken(catalystApp, userDetails) {
  const refresh_token = userDetails[0].Token.refresh_token;
  const userId = userDetails[0].Token.userId;
  const credentials = {
    [userId]: {
      client_id: CLIENTID,
      client_secret: CLIENT_SECRET,
      auth_url: AUTH_HOST,
      refresh_url: AUTH_HOST,
      refresh_token,
    },
  };
  const accessToken = await catalystApp.connection(credentials).getConnector(userId).getAccessToken();
  return accessToken;
}
async function getRefreshToken(code, res, domain) {
  try {
    const url = `${AUTH_HOST}?code=${code}&client_id=${CLIENTID}&client_secret=${CLIENT_SECRET}&grant_type=authorization_code&redirect_uri=${domain}/server/crm_crud/generateToken`;
	const response = await axios({
		method: "POST",
		url
	  });
    return response.data.refresh_token;
  } catch (err) {
    console.log(err);
    res.status(500).send({
        message: "Internal Server Error. Please try again after sometime.",
        error: err,
      });
  }
}
async function getUserDetails(catalystApp) {
  let userDetails = await catalystApp.userManagement().getCurrentUser();
  let userDetail = await catalystApp.zcql().executeZCQLQuery(`SELECT * FROM Token where UserId=${userDetails.user_id}`);
  return userDetail;
}
module.exports = app;
				
View more
Nota: Después de copiar y pegar este código en tu archivo de función, asegúrate de reemplazar los siguientes valores en él:

El directorio de funciones está ahora configurado. Discutiremos el código de la función y del cliente, después de que configures el cliente.

Última actualización 2026-03-20 21:51:56 +0530 IST