--- title: "Configurar la función Advanced I/O" url: https://docs.catalyst.zoho.com/es/tutorials/dialer-app/nodejs/configure-advanced-function/ description: "Construye una aplicación de marcador usando Catalyst Advanced I/O Functions, DataStore e integración con la API de voz de Twilio que establece una conexión de llamada saliente entre tu equipo de ventas y los clientes." last_updated: 2026-08-17T12:16:04Z service: All Services type: tutorial related_links: - name: "Advanced I/O Functions" url: /es/serverless/help/functions/advanced-io/ - name: "Functions Directory Structure" url: /es/cli/v1/project-directory-structure/functions-directory --- # Configurar la función Advanced I/O Comencemos a codificar la aplicación Dialer configurando el componente de función. El directorio de la función, `functions/dialer` 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](https://docs.npmjs.com/files/package.json)` y `[package-lock.json](https://docs.npmjs.com/configuring-npm/package-lock-json.html)` ### Instalar paquetes para Node.js Necesitarás instalar dos paquetes adicionales en el directorio de funciones de tu aplicación antes de continuar. #### **Express** Para importar el paquete [Express Node.js](https://expressjs.com/) en el código, debes instalar las dependencias de Express en tu sistema. El framework express se usa para gestionar rutas y también responder a solicitudes HTTP. Para instalar `Express.js` en tu máquina local, navega al directorio principal de la función (`functions/dialer`) en tu terminal y ejecuta el siguiente comando: ```sh npm install express --save ``` This will install the Express module and save the dependencies. ![install-express](https://catalyst-docs-development.zohostratus.in/images/tutorials/dialer-app/install-express.webp) #### **Twilio** También necesitarás instalar el paquete de Twilio para este tutorial. La biblioteca de Twilio te permite hacer solicitudes HTTP a la API de Twilio. Ejecuta el siguiente comando para agregar las dependencias de Twilio. ```sh npm install twilio ``` ![install-twilio](https://catalyst-docs-development.zohostratus.in/images/tutorials/dialer-app/install-twilio.webp) This information will also be updated in the `package.json` file. ![package-json](https://catalyst-docs-development.zohostratus.in/images/tutorials/dialer-app/package-json.webp) A continuación, agreguemos el código en el archivo de la función. Copia el código de Node.js y pégalo en `index.js` en el directorio `functions/dialer`. Puedes usar cualquier IDE de tu preferencia 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. Discutiremos la arquitectura de la función y el cliente en la siguiente sección. **index.js** ```javascript const express = require("express"); const app = express(); var twilio = require('twilio'); const VoiceResponse = require("twilio").twiml.VoiceResponse; var catalyst = require('zcatalyst-sdk-node'); var YOUR_TWILIO_NUMBER = '+15612993019'; //Reemplaza con tu número de teléfono de Twilio var accountSid = "xxxxxxxxxxxxxxx"; //Reemplaza con tu Twilio Account SID var authToken = "{{7xxxxxxxxxxxxxxxxx8}}"; //Reemplaza con tu Twilio Auth Token var twilioClient = twilio(accountSid, authToken); var bodyParser = require('body-parser'); app.use(bodyParser.json()); // soportar cuerpos codificados en json app.use(bodyParser.urlencoded({ extended: true })); // soportar cuerpos codificados app.post("/makeCall", async (req, res) => { try { var salesNumber = req.body.salesNumber; console.log(req.body) const catalystApp = catalyst.initialize(req); let rowData = { fromNumber: req.body.phoneNumber, toNumber: req.body.salesNumber }; console.log(rowData) const catalystTable = catalystApp.datastore().table('CallLog'); const data = await catalystTable.insertRow(rowData); var url = 'https://' + req.headers.host + '/server/dialer/outbound/' + encodeURIComponent(salesNumber); var options = { to: req.body.phoneNumber, from: YOUR_TWILIO_NUMBER, url: url, method: 'post', statusCallbackEvent: ['answered', 'completed'], statusCallback: 'https://' + req.headers.host + '/server/dialer/statusCheck?ROWID=' + data.ROWID, statusCallbackMethod: 'POST' }; twilioClient.calls.create(options).then((call) => { res.status(200).send({ message: 'Call Initiated' }); }).catch((error) => { console.log(error); res.status(500).send({ "error": error }); }); } catch (e) { console.log("Exception while making a Call ::" + e); res.status(500).send({ "error": 'Internal Server Error Occured. Please Try again after sometime.' }); } }); app.post('/outbound/:salesNumber', function (req, res) { try { var salesNumber = req.params.salesNumber; var twimlResponse = new VoiceResponse(); twimlResponse.say('Thanks for trying out the Catalyst Dialer App. Please hold on so that we can connect with your Customer... ', { voice: 'alice' }); twimlResponse.dial(salesNumber); res.status(200).send(twimlResponse.toString()); } catch (e) { console.log("Exception while making Outbound Call ::" + e); res.status(500).send({ "error": 'Internal Server Error Occured. Please Try again after sometime.' }); } }); app.post('/statusCheck', async (req, res) => { try { const catalystApp = catalyst.initialize(req); if (req.body.CallStatus === "completed") { let updatedRowData = { callDuration: req.body.CallDuration, callStatus: req.body.CallStatus, calledCountry: req.body.CalledCountry, calledState: req.body.CalledState, timeOfCall: req.body.Timestamp, ROWID: req.body.ROWID }; console.log(updatedRowData) const catalystTable = catalystApp.datastore().table('CallLog'); await catalystTable.updateRow(updatedRowData); } res.status(200).send(' StatusCheck Completed'); } catch (e) { console.log("Exception while checking status :: " + e); res.status(500).send({ "error": 'Internal Server Error Occured. Please Try again after sometime.' }); } }); app.get('/getLogs', async function (req, res) { try { const catalystApp = catalyst.initialize(req); const query = 'SELECT callDuration,callStatus,calledCountry,timeOfCall,fromNumber,toNumber FROM CallLog'; const queryResult = await catalystApp.zcql().executeZCQLQuery(query); res.status(200).send(queryResult); } catch (e) { console.log("Exception while getting Call Logs ::" + e); res.status(500).send({ "error": 'Internal Server Error Occured. Please Try again after sometime.' }); } }); module.exports = app; ``` > **Nota**: Por favor, asegúrate de agregar tu accountID de Twilio, el número de teléfono de Twilio asociado y los valores de auth token en las líneas 6, 7 y 8. El directorio de funciones está ahora configurado. Discutiremos el código de la función y el cliente en la siguiente sección.