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 y package-lock.json
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 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:
Esto instalará el módulo Express y guardará las dependencias.
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.
Esta información también se actualizará en el archivo package.json.
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.
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 = '+xxxxxxxxxx';
var accountSid = "xxxxxxxxxxxxxx";
var authToken = "7xxxxxxxxxxxxxxx8";
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;
El directorio de funciones está ahora configurado.
Última actualización 2026-03-20 21:51:56 +0530 IST


