HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-172-31-4-197 6.8.0-1036-aws #38~22.04.1-Ubuntu SMP Fri Aug 22 15:44:33 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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()