© 2024 Napse. Todos los derechos reservados.



FechaVersiónDescripciónAutorJira

 

1.0Creación del documento

Autores: 







Alcance


Documentación de referencia

VIDEO de presentación de Instructivo para el Setup del OMNI Plugin




Introducción Setup del OMNI Plugin 

Este documento proporciona una guía detallada para la instalación y configuración del OMNI Plugin. El plugin está diseñado para integrarse con sistemas tanto en Windows como en Linux, facilitando la gestión de servicios y configuraciones necesarias para su correcto funcionamiento.

Estructura del Plugin

El OMNI Plugin debe ser instalado en una carpeta que contenga los siguientes archivos y directorios esenciales:

Detalles a Tener en Cuenta

Certificados SSL

Es indispensable contar con certificados SSL válidos, los cuales deben estar ubicados en la carpeta certs. El repositorio del setup de OMNI incluye certificados para el host localhost; sin embargo, estos no deben ser utilizados en entornos de producción. Se recomienda obtener certificados SSL específicos para el entorno de producción.

Los nombres de los archivos de certificados deben estar correctamente configurados en el archivo de configuración del plugin, en los atributos indicados en este documento.

Consideraciones para la Instalación de Plugins

Para habilitar cualquier tipo de plugin, es necesario configurar el atributo active en true dentro del archivo de configuración. Si no se realiza esta configuración, el plugin no estará activo y la configuración no tendrá efecto.

PedidosYa API

Es necesario obtener las credenciales del equipo de PedidosYa. Estas deben ser configuradas en el archivo de configuración en las secciones correspondientes al endpoint, la URL de login y las credenciales dentro de la sección peyaApi.

PedidosYa SDK

Al igual que con la API, se deben obtener las credenciales del equipo de PedidosYa. Estas credenciales deben ser configuradas en la sección correspondiente a peyaSDK. Cabe mencionar que esta integración con SDK está marcada como deprecada por el equipo de PedidosYa y se mantiene como legacy. Se recomienda considerar la migración a la API.

Rappi

Las credenciales obtenidas del equipo de Rappi deben ser configuradas según se detalla en la sección rappi del archivo de configuración.

Revisión de la Configuración

Antes de proceder con la instalación del entorno, es fundamental revisar y verificar que todos los parámetros en el archivo default_config.json estén correctamente configurados. Esto asegurará el correcto funcionamiento del OMNI Plugin.

Configuración del Archivo default_config.json

El archivo default_config.json contiene la configuración esencial para el funcionamiento del plugin. A continuación se detallan los atributos más relevantes:

OMNI Plugin

AtributoTipo de DatoDescripción
plugin.server.ssl.activeBooleanIndica si SSL está activo.
plugin.server.urlStringURL del servidor del plugin.
plugin.server.portStringPuerto del servidor del plugin.
plugin.server.ssl.dir.ssl_privateStringRuta al archivo de la clave privada SSL.
plugin.server.ssl.dir.ssl_domainStringRuta al archivo del certificado SSL del dominio.
plugin.server.ssl.dir.ssl_rootStringRuta al archivo del certificado raíz SSL.
plugin.server.ssl.dir.ssl_bundleStringRuta al archivo del paquete de certificados SSL.


Bridge API

AtributoTipo de DatoDescripción
bridge.server.portStringPuerto del servidor del Bridge API.
bridge.server.urlStringURL del servidor del Bridge API.
bridge.credentials.client_idStringID del cliente para autenticación del Bridge API.
bridge.credentials.client_secretStringSecreto del cliente para autenticación del Bridge API.
bridge.user.firstNameStringNombre del usuario por defecto.
bridge.user.lastNameStringApellido del usuario por defecto.
bridge.user.emailStringCorreo electrónico del usuario por defecto.
bridge.user.identifierIntegerIdentificador del usuario por defecto.
bridge.user.identificationTypeIntegerTipo de identificación del usuario por defecto.
bridge.user.telephone.countryCodeStringCódigo de país del teléfono del usuario por defecto.
bridge.user.telephone.areaCodeStringCódigo de área del teléfono del usuario por defecto.
bridge.user.telephone.telephoneNumberStringNúmero de teléfono del usuario por defecto.
bridge.user.telephone.extensionNumberStringExtensión del teléfono del usuario por defecto.
bridge.user.address.partyCodeStringCódigo de la parte del usuario por defecto.
bridge.user.address.codeStringCódigo de la dirección del usuario por defecto.
bridge.user.address.firstLineStringPrimera línea de la dirección del usuario por defecto.
bridge.user.address.postalCodeStringCódigo postal de la dirección del usuario por defecto.
bridge.user.address.cityLocationIntegerCódigo de la ubicación de la ciudad del usuario por defecto.
bridge.user.address.stateStringEstado de la dirección del usuario por defecto.
bridge.user.address.secondLineStringSegunda línea de la dirección del usuario por defecto.
bridge.user.address.thirdLineStringTercera línea de la dirección del usuario por defecto.
bridge.user.address.cityStringCiudad de la dirección del usuario por defecto.
bridge.user.address.countryStringPaís de la dirección del usuario por defecto.
bridge.user.address.partyActivityIntegerActividad de la parte del usuario por defecto.
bridge.user.address.currencyCodeStringCódigo de la moneda de la dirección del usuario por defecto.

PedidosYa API

AtributoTipo de DatoDescripción
peyaApi.activeBooleanIndica si la API de PedidosYa está activa.
peyaApi.channelCodeStringCódigo del canal para la API de PedidosYa.
peyaApi.useStoreDeliveryBooleanIndica si se debe usar la entrega en tienda para la API de PedidosYa.
peyaApi.deliveryCompanyStringCompañía de entrega para la API de PedidosYa.
peyaApi.server.urlStringURL del servidor de la API de PedidosYa.
peyaApi.credentials.chaincode_nameStringNombre del chaincode para la API de PedidosYa.
peyaApi.credentials.chaincode_idStringID del chaincode para la API de PedidosYa.
peyaApi.credentials.integration_nameStringNombre de la integración para la API de PedidosYa.
peyaApi.credentials.integration_codeStringCódigo de la integración para la API de PedidosYa.
peyaApi.credentials.chain_nameStringNombre de la cadena para la API de PedidosYa.
peyaApi.credentials.chain_idStringID de la cadena para la API de PedidosYa.
peyaApi.credentials.vendor_idStringID del vendedor para la API de PedidosYa.
peyaApi.credentials.usernameStringNombre de usuario para la API de PedidosYa.
peyaApi.credentials.passwordStringContraseña para la API de PedidosYa.
peyaApi.credentials.secretStringSecreto para la API de PedidosYa.
peyaApi.credentials.grant_typeStringTipo de concesión para la API de PedidosYa.
peyaApi.credentials.serverStringURL del servidor de autenticación para la API de PedidosYa.
peyaApi.cancelReasonsArray of StringsRazones de cancelación para la API de PedidosYa.
peyaApi.queues.order_queueStringCola de órdenes para la API de PedidosYa.
peyaApi.queues.publication_queueStringCola de publicación para la API de PedidosYa.
peyaApi.storesObjectTiendas asociadas a la API de PedidosYa.
peyaApi.catalog.min_toppingIntegerNúmero mínimo de aderezos para el catálogo de la API de PedidosYa.
peyaApi.catalog.max_toppingIntegerNúmero máximo de aderezos para el catálogo de la API de PedidosYa.
peyaApi.catalog.titleStringTítulo del catálogo para la API de PedidosYa.
peyaApi.catalog.schedulesObjectHorarios del catálogo para la API de PedidosYa.
peyaApi.catalog.onlyChannelImagesBooleanIndica si solo se deben usar imágenes del canal para la API de PedidosYa.

PedidosYa SDK

AtributoTipo de DatoDescripción
peyaSDK.activeBooleanIndica si el SDK de PedidosYa está activo.
peyaSDK.channelCodeStringCódigo del canal para el SDK de PedidosYa.
peyaSDK.useStoreDeliveryBooleanIndica si se debe usar la entrega en tienda para el SDK de PedidosYa.
peyaSDK.server.urlStringURL del servidor del SDK de PedidosYa.
peyaSDK.credentials.clientIdStringID del cliente para el SDK de PedidosYa.
peyaSDK.credentials.clientSecretStringSecreto del cliente para el SDK de PedidosYa.
peyaSDK.credentials.environmentStringEntorno para el SDK de PedidosYa.
peyaSDK.credentials.chaincode_nameStringNombre del chaincode para el SDK de PedidosYa.
peyaSDK.credentials.chaincode_idStringID del chaincode para el SDK de PedidosYa.
peyaSDK.credentials.integration_nameStringNombre de la integración para el SDK de PedidosYa.
peyaSDK.credentials.integration_codeStringCódigo de la integración para el SDK de PedidosYa.
peyaSDK.credentials.chain_nameStringNombre de la cadena para el SDK de PedidosYa.
peyaSDK.credentials.chain_idStringID de la cadena para el SDK de PedidosYa.
peyaSDK.credentials.vendor_idStringID del vendedor para el SDK de PedidosYa.
peyaSDK.credentials.usernameStringNombre de usuario para el SDK de PedidosYa.
peyaSDK.credentials.passwordStringContraseña para el SDK de PedidosYa.
peyaSDK.credentials.secretStringSecreto para el SDK de PedidosYa.
peyaSDK.credentials.grant_typeStringTipo de concesión para el SDK de PedidosYa.
peyaSDK.credentials.serverStringURL del servidor de autenticación para el SDK de PedidosYa.

Rappi

AtributoTipo de DatoDescripción
rappi.activeBooleanIndica si la API de Rappi está activa.
rappi.channelCodeStringCódigo del canal para la API de Rappi.
rappi.deliveryCompanyStringCompañía de entrega para la API de Rappi.
rappi.server.portStringPuerto del servidor de la API de Rappi.
rappi.server.urlStringURL del servidor de la API de Rappi.
rappi.credentials.serverStringURL del servidor de autenticación para la API de Rappi.
rappi.credentials.client_idStringID del cliente para autenticación de la API de Rappi.
rappi.credentials.client_secretStringSecreto del cliente para autenticación de la API de Rappi.
rappi.credentials.audienceStringAudiencia para la autenticación de la API de Rappi.
rappi.credentials.grant_typeStringTipo de concesión para la API de Rappi.
rappi.queues.order_queueStringCola de órdenes para la API de Rappi.
rappi.queues.publication_queueStringCola de publicación para la API de Rappi.
rappi.storesObjectTiendas asociadas a la API de Rappi.
rappi.catalog.max_toppingIntegerNúmero máximo de aderezos para el catálogo de la API de Rappi.


Ejemplo de Archivo de Configuración

{
    "plugin": {
        "server": {
            "url": "https://localhost:9000",
            "port": "9000",
            "ssl": {
                "active": true,
                "dir": {
                    "ssl_private": "certs/localhost.key",
                    "ssl_domain": "certs/localhost.crt",
                    "ssl_root": "certs/localhost.crt",
                    "ssl_bundle": "certs/localhost.crt"
                }
            }
        }
    },
    "bridge": {
        "server": {
            "port": "8081",
            "url": "http://localhost"
        },
        "credentials": {
            "client_id": "bridge-api",
            "client_secret": "xxxxxxxxxxxxxxx"
        },
        "user": {
            "firstName": "Plugin",
            "lastName": "Peya",
            "email": "[email protected]",
            "identifier": 11111111,
            "identificationType": 1,
            "telephone": {
                "countryCode": "56",
                "areaCode": "911",
                "telephoneNumber": "22222222",
                "extensionNumber": "0"
            },
            "address": {
                "partyCode": "138754405",
                "code": "138754405_Pedido Ya",
                "firstLine": "Cerro colorado",
                "postalCode": "3333",
                "cityLocation": 13114,
                "state": "BSAS",
                "secondLine": "prueba",
                "thirdLine": "bridge",
                "city": "BSAS_221",
                "country": "ARG",
                "partyActivity": 999999999,
                "currencyCode": "CLP"
            }
        }
    },
    "rabbit": {
        "server": {
            "url": "amqp://guest:guest@localhost",
            "port": "5672"
        }
    },
    "peyaApi": {
        "channelCode": "peyaAPI",
        "useStoreDelivery": false,
        "deliveryCompany": "peya",
        "active": true,
        "server": {
            "url": "https://integration-middleware.us.restaurant-partners.com"
        },
        "credentials": {
            "chaincode_name": "LATAM-NAPSE-1",
            "chaincode_id": "LATAMNAPSE0001",
            "integration_name": "LATAM-NAPSE-1",
            "integration_code": "LATAM-NAPSE-1",
            "chain_name": "LATAM-NAPSE-1",
            "chain_id": "LATAMNAPSE0001",
            "vendor_id": "AR-NAPSE-TEST-0001",
            "username": "us-plugin-napse-global-001",
            "password": "xxxxxxxxxx",
            "secret": "xxxxxxxxxxxx",
            "grant_type": "client_credentials",
            "server": "https://integration-middleware.us.restaurant-partners.com"
        },
        "cancelReasons": [
            "ADDRESS_INCOMPLETE_MISSTATED",
            "BAD_WEATHER",
            "BLACKLISTED",
            "CARD_READER_NOT_AVAILABLE",
            "CLOSED",
            "CONTENT_WRONG_MISLEADING",
            "FOOD_QUALITY_SPILLAGE",
            "FRAUD_PRANK",
            "ITEM_UNAVAILABLE",
            "LATE_DELIVERY",
            "MENU_ACCOUNT_SETTINGS",
            "MOV_NOT_REACHED",
            "NO_COURIER",
            "NO_PICKER",
            "NO_RESPONSE",
            "OUTSIDE_DELIVERY_AREA",
            "TECHNICAL_PROBLEM",
            "TEST_ORDER",
            "TOO_BUSY",
            "UNABLE_TO_FIND",
            "UNABLE_TO_PAY",
            "UNPROFESSIONAL_BEHAVIOUR",
            "WILL_NOT_WORK_WITH",
            "WRONG_ORDER_ITEMS_DELIVERED"
        ],
        "queues": {
            "order_queue": "queueForStatusChange_peyaAPI",
            "publication_queue": "queueForPublish_peyaAPI"
        },
        "stores": {
            "1": "xxxxxxxx"
        },
        "catalog": {
            "min_topping": 1,
            "max_topping": 3,
            "title": "Seleccione hasta 3 gustos",
            "schedules": {
                "xxxxxxx": {
                    "weekDays": ["WEDNESDAY"],
                    "startTime": "10:00:00",
                    "endTime": "14:00:00"
                }
            },
            "onlyChannelImages": false
        }
    },
    "peyaSDK": {
        "channelCode": "peya",
        "useStoreDelivery": false,
        "active": false,
        "server": {
            "url": "https://integration-middleware.us.restaurant-partners.com"
        },
        "credentials": {
            "clientId": "integration_bridge",
            "clientSecret": "xxxxxxxx",
            "environment": "PRODUCTION",
            "chaincode_name": "LATAM-NAPSE-1",
            "chaincode_id": "LATAMNAPSE0001",
            "integration_name": "LATAM-NAPSE-1",
            "integration_code": "LATAM-NAPSE-1",
            "chain_name": "LATAM-NAPSE-1",
            "chain_id": "LATAMNAPSE0001",
            "vendor_id": "TEST-ONB-AR-010",
            "username": "us-plugin-napse-global-001",
            "password": "xxxxxxxxx",
            "secret": "xxxxxxxxx",
            "grant_type": "client_credentials",
            "server": "https://integration-middleware.us.restaurant-partners.com"
        },
        "queues": {
            "order_queue": "queueForStatusChange_peya",
            "publication_queue": "queueForPublish_peya",
            "reconcilation_queue": "queueForOrderItemsChange_peya"
        },
        "reasonsForCancellation": {
            "options": [
                {
                    "descriptionES": "Fuera de la zona de entrega",
                    "forRestaurant": true,
                    "id": 1,
                    "name": "Fuera de la zona de entrega"
                },
                {
                    "descriptionES": "El local cerró",
                    "forLogistics": true,
                    "forPickup": true,
                    "forRestaurant": true,
                    "id": 3,
                    "name": "Restaurante Cerrado"
                },
                {
                    "descriptionES": "Faltan datos de tu dirección",
                    "forRestaurant": true,
                    "id": 4,
                    "name": "Datos insuficientes"
                },
                {
                    "descriptionES": "Faltan productos para tu pedido",
                    "forLogistics": true,
                    "forPickup": true,
                    "forRestaurant": true,
                    "id": 7,
                    "name": "Falta de productos"
                },
                {
                    "descriptionES": "Hay mucha demanda en el local",
                    "forLogistics": true,
                    "forPickup": true,
                    "forRestaurant": true,
                    "id": 15,
                    "name": "Hay mucha demanda en el local"
                },
                {
                    "descriptionES": "Hay mucha demanda en tu zona",
                    "forRestaurant": true,
                    "id": 16,
                    "name": "No hay cadete disponible"
                },
                {
                    "descriptionES": "Problemas técnicos",
                    "forRestaurant": true,
                    "id": 38,
                    "name": "Pedido falso"
                },
                {
                    "descriptionES": "Problemas operativos",
                    "forLogistics": true,
                    "forRestaurant": true,
                    "id": 39,
                    "name": "Perfil del local desactualizado"
                }
            ],
            "default": {
                "descriptionES": "Faltan productos para tu pedido",
                "forLogistics": true,
                "forPickup": true,
                "forRestaurant": true,
                "id": 7,
                "name": "Falta de productos"
            }
        },
        "stores": {
            "1": "xxxxxxxxx"
        },
        "catalog": {
            "max_topping": 3
        }
    },
    "rappi": {
        "channelCode": "delivery",
        "deliveryCompany": "rappi",
        "active": false,
        "server": {
            "url": "https://microservices.dev.rappi.com"
        },
        "credentials": {
            "server": "https://rests-integrations-dev.auth0.com/oauth/token",
            "client_id": "xxxxxxxxxxxxxxx",
            "client_secret": "xxxxxxxxxxxxxxxxxx",
            "audience": "https://int-public-api-v2/api",
            "grant_type": "client_credentials"
        },
        "queues": {
            "order_queue": "queueForStatusChange_delivery",
            "publication_queue": "queueForPublish_delivery"
        },
        "stores": {
            "1": "xxxxxxxxxxx"
        },
        "catalog": {
            "max_topping": 3
        }
    }
}


Requisitos Previos

Para proceder a la instalación del OMNI Plugin, independientemente del sistema operativo del entorno, asegúrese de cumplir con los siguientes requisitos:

NVM con Node.js Versión 14

Para evitar cualquier conflicto con versiones más recientes de Node.js que puedan estar instaladas en el sistema operativo, se recomienda utilizar NVM para gestionar y aislar la versión 14 de Node.js en el entorno del OMNI Plugin.

Instalación de NVM (Node Version Manager)

NVM es una herramienta que permite instalar y gestionar múltiples versiones de Node.js en el mismo sistema, sin interferir con la versión global de Node.js instalada en el sistema operativo.

Instalación de NVM en Linux

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash

source ~/.nvm/nvm.sh

nvm --version

Instalación de NVM en Windows

Para Windows, la forma recomendada de instalar NVM es a través de nvm-windows.

  1. Descargar el archivo .zip o .exe desde el repositorio.

  2. Seguir las instrucciones de instalación proporcionadas por el instalador.

  3. Una vez instalado, abrir el Command Prompt o PowerShell y verificar la instalación:

nvm --version

Instalación de Node.js versión 14.x

nvm install 14.21.3

nvm use 14.21.3

node -v

v14.21.3

Instalación de NPM

NPM (Node Package Manager) se instala automáticamente junto con Node.js, por lo que una vez instalada la versión correcta de Node.js, NPM estará disponible. Para verificar la versión de NPM instalada, ejecuta:

npm -v

Si es necesario actualizar NPM, se puede hacer con el siguiente comando:

npm install -g npm

Instructivo para la Instalación en Windows

  1. Abrir PowerShell en modo administrador.

  2. Navegar a la carpeta donde se encuentran los archivos de setup.

  3. Ejecutar el script windows.bat con el siguiente comando:

.\windows.bat

Al finalizar la ejecución del script, el servicio "OMNI Plugin" debería estar visible en la lista de servicios de Windows.

Instructivo para la Instalación en Linux

pm2 status

Si no está instalado, se puede instalar usando NPM:

npm install -g pm2
chmod +x linux.sh
./linux.sh


Al finalizar la ejecución del script, el servicio "OMNI Plugin" debería estar visible en la lista de servicios de PM2 con el siguiente comando:

pm2 list


Comandos Útiles

NVM

ComandoDescripción
nvm install <version>Instalar una versión específica de Node.js
nvm use <version>Usar una versión específica de Node.js
nvm alias default <version>Establecer una versión como predeterminada
nvm listListar todas las versiones instaladas de Node.js
nvm use systemUsar la versión del sistema de Node.js

PM2

ComandoDescripción
pm2 start <app.js> --name <app-name>Iniciar una aplicación Node.js
pm2 start <app.js> --interpreter $(nvm which <version>)Iniciar una aplicación con una versión específica de Node.js
pm2 list / pm2 statusListar todas las aplicaciones gestionadas por PM2 y obtener IDs
pm2 restart <app-name> / pm2 restart <ID>Reiniciar una aplicación específica por nombre o ID
pm2 stop <app-name> / pm2 stop <ID>Detener una aplicación específica por nombre o ID
pm2 delete <app-name> / pm2 delete <ID>Eliminar una aplicación de PM2 por nombre o ID
pm2 logs <app-name> / pm2 logs <ID>Ver logs en tiempo real de una aplicación por nombre o ID
pm2 savePersistir listado de aplicaciones actuales de PM2

Servicios en Windows

ComandoDescripción
sc query state= all / Get-ServiceListar todos los servicios
net start <service-name> / Start-Service -Name <service-name>Iniciar un servicio específico
net stop <service-name> / Stop-Service -Name <service-name>Detener un servicio específico
Restart-Service -Name <service-name>Reiniciar un servicio específico
Get-Service -Name <service-name>Ver detalles de un servicio específico
sc config <service-name> start=<type>Cambiar el estado de inicio de un servicio (auto/manual/disable)