File: //var/www/bots/bot-pqr/src/app.js
import { createBot, createProvider, createFlow } from '@builderbot/bot'
import { MongoAdapter as Database } from '@builderbot/database-mongo'
import { MetaProvider as Provider } from '@builderbot/provider-meta'
import dotenv from "dotenv";
import flowMain from './flows/flow-main.js';
import flowClienteEnelarNo from './flows/pqr/flow-form-cliente-no.js';
import flowClienteEnelarSi from './flows/pqr/flow-form-cliente-si.js';
import flowDatosPqr from './flows/pqr/flow-datos-pqr.js';
import flowFormClienteEnelar from './flows/pqr/flows-cliente-enelar.js';
import flowMenuPqr from './flows/pqr/flow-menu-pqr.js';
import documentFlow from './flows/pqr/flow-leer-documento.js';
import flowCausal from './flows/pqr/flow-causal.js';
import flowMesReclamo from './flows/pqr/flow-mes-reclamo.js';
import flowRegistrarPqr from './flows/pqr/flow-registrar-pqr.js';
import flowConsultarPqr from './flows/pqr/consultar-pqr.js';
import flowConsultarCedula from './flows/pqr/flow-consultar-cedula.js';
import flowConsultarCodigo from './flows/pqr/flow-consultar-codigo.js';
import flowAnonimoEnelar from './flows/fraude/flow-anonimo.js';
import flowAnonimoSi from './flows/fraude/flow-anonimo-si.js';
import flowAnonimoNo from './flows/fraude/flow-anonimo-no.js';
import flowBarrioAnonimo from './flows/fraude/flow-barrio-anonimo.js';
import flowDiFaDo from './flows/fraude/flow-di-Fa-Do.js';
import flowDocumentosFraude from './flows/fraude/documento-fraude.js';
import flowRegistrarFraude from './flows/fraude/registrar-fraude.js';
import flowCodigoPqr from './flows/pqr/flow-codigo.js';
import flowRedactarSolicitud from './flows/pqr/flow-redactar-solicitud.js';
import flowCausalNoCliente from './flows/pqr/flow-causal-no-cliente.js';
import flowDetalleFactura from './flows/detalle-factura/flow-detalle-factura.js';
import flowMenuDetallefraude from './flows/flow-menu-detalle-fraude.js';
import flowReturnMain from './flows/detalle-factura/flow-return- main.js';
import flowMainRetornado from './flows/flow-main-retornado.js';
import flowMainFactura from './flows/detalle-factura/flow-main-factura.js';
import flowEvolucionConsumo from './flows/detalle-factura/flow-evolucion-consumo.js';
import flowTarifas from './flows/detalle-factura/flow-tarifas.js';
import flowMainCuenta from './flows/estado-cuenta/flow-main-cuenta.js';
import flowPagoParcial from './flows/estado-cuenta/flow-pago-parcial.js';
import flowMainConsultar from './flows/detalle-factura/flow-main-cosultar.js';
import flowClienteCedula from './flows/pqr/flow-cliente-cedula.js';
import flowEvaluacionServicio from './flows/flow-calificacion.js';
import flowMainConsumo from './flows/detalle-factura/flow-main-consumo.js';
import flowCalcularConsumo from './flows/detalle-factura/flow-calcular-consumo.js';
dotenv.config();
const PORT = process.env.PORT ?? 8005
const main = async () => {
const adapterFlow = createFlow([
flowMain,
flowClienteEnelarNo,
flowClienteEnelarSi,
flowDatosPqr,
flowFormClienteEnelar,
flowMenuPqr,
documentFlow,
flowCausal,
flowMesReclamo,
flowRegistrarPqr,
flowConsultarPqr,
flowConsultarCedula,
flowConsultarCodigo,
flowAnonimoEnelar,
flowAnonimoSi,
flowAnonimoNo,
flowBarrioAnonimo,
flowDiFaDo,
flowDocumentosFraude,
flowRegistrarFraude,
flowCodigoPqr,
flowRedactarSolicitud,
flowCausalNoCliente,
flowDetalleFactura,
flowMenuDetallefraude,
flowReturnMain,
flowMainRetornado,
flowMainFactura,
flowEvolucionConsumo,
flowTarifas,
flowMainCuenta,
flowPagoParcial,
flowMainConsultar,
flowClienteCedula,
flowEvaluacionServicio,
flowMainConsumo,
flowCalcularConsumo
])
const adapterProvider = createProvider(Provider, {
jwtToken: process.env.JWT_TOKEN,
numberId: process.env.NUMBER_ID,
verifyToken: process.env.VERIFY_TOKEN,
version: process.env.VERSION,
})
const adapterDB = new Database({
dbUri: process.env.MONGO_DB_URI,
dbName: process.env.MONGO_DB_NAME,
})
const { handleCtx, httpServer } = await createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
adapterProvider.server.post(
'/v1/messages',
handleCtx(async (bot, req, res) => {
const { number, message, urlMedia } = req.body
await bot.sendMessage(number, message, { media: urlMedia ?? null })
return res.end('sended')
})
)
adapterProvider.server.post(
'/v1/register',
handleCtx(async (bot, req, res) => {
const { number, name } = req.body
await bot.dispatch('REGISTER_FLOW', { from: number, name })
return res.end('trigger')
})
)
adapterProvider.server.post(
'/v1/samples',
handleCtx(async (bot, req, res) => {
const { number, name } = req.body
await bot.dispatch('SAMPLES', { from: number, name })
return res.end('trigger')
})
)
adapterProvider.server.post(
'/v1/blacklist',
handleCtx(async (bot, req, res) => {
const { number, intent } = req.body
if (intent === 'remove') bot.blacklist.remove(number)
if (intent === 'add') bot.blacklist.add(number)
res.writeHead(200, { 'Content-Type': 'application/json' })
return res.end(JSON.stringify({ status: 'ok', number, intent }))
})
)
adapterProvider.getDB = () => adapterDB.db;
httpServer(+PORT)
}
main()