© 2024 Napse. Todos los derechos reservados.
Alcance
Documentación de referencia
VIDEO de presentación de Instructivo para el Setup del OMNI Plugin
Video de referencia
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:
- dist.zip: Archivo de distribución de binarios del OMNI Plugin. Este archivo debe ser solicitado al equipo de Producto.
- nssm: Contiene las herramientas necesarias para instalar y manejar servicios en Windows.
- pm2: Contiene las herramientas necesarias para instalar y manejar servicios en Linux.
- default_config.json: Archivo de configuración inicial que debe ser ajustado con los parámetros específicos para el entorno.
- windows.bat: Script de instalación y configuración automatizada para sistemas Windows.
- linux.sh: Script de instalación y configuración automatizada para sistemas Linux.
- certs: Carpeta que contiene los certificados SSL necesarios.
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
| Atributo | Tipo de Dato | Descripción |
|---|---|---|
plugin.server.ssl.active | Boolean | Indica si SSL está activo. |
plugin.server.url | String | URL del servidor del plugin. |
plugin.server.port | String | Puerto del servidor del plugin. |
plugin.server.ssl.dir.ssl_private | String | Ruta al archivo de la clave privada SSL. |
plugin.server.ssl.dir.ssl_domain | String | Ruta al archivo del certificado SSL del dominio. |
plugin.server.ssl.dir.ssl_root | String | Ruta al archivo del certificado raíz SSL. |
plugin.server.ssl.dir.ssl_bundle | String | Ruta al archivo del paquete de certificados SSL. |
Bridge API
| Atributo | Tipo de Dato | Descripción |
|---|---|---|
bridge.server.port | String | Puerto del servidor del Bridge API. |
bridge.server.url | String | URL del servidor del Bridge API. |
bridge.credentials.client_id | String | ID del cliente para autenticación del Bridge API. |
bridge.credentials.client_secret | String | Secreto del cliente para autenticación del Bridge API. |
bridge.user.firstName | String | Nombre del usuario por defecto. |
bridge.user.lastName | String | Apellido del usuario por defecto. |
bridge.user.email | String | Correo electrónico del usuario por defecto. |
bridge.user.identifier | Integer | Identificador del usuario por defecto. |
bridge.user.identificationType | Integer | Tipo de identificación del usuario por defecto. |
bridge.user.telephone.countryCode | String | Código de país del teléfono del usuario por defecto. |
bridge.user.telephone.areaCode | String | Código de área del teléfono del usuario por defecto. |
bridge.user.telephone.telephoneNumber | String | Número de teléfono del usuario por defecto. |
bridge.user.telephone.extensionNumber | String | Extensión del teléfono del usuario por defecto. |
bridge.user.address.partyCode | String | Código de la parte del usuario por defecto. |
bridge.user.address.code | String | Código de la dirección del usuario por defecto. |
bridge.user.address.firstLine | String | Primera línea de la dirección del usuario por defecto. |
bridge.user.address.postalCode | String | Código postal de la dirección del usuario por defecto. |
bridge.user.address.cityLocation | Integer | Código de la ubicación de la ciudad del usuario por defecto. |
bridge.user.address.state | String | Estado de la dirección del usuario por defecto. |
bridge.user.address.secondLine | String | Segunda línea de la dirección del usuario por defecto. |
bridge.user.address.thirdLine | String | Tercera línea de la dirección del usuario por defecto. |
bridge.user.address.city | String | Ciudad de la dirección del usuario por defecto. |
bridge.user.address.country | String | País de la dirección del usuario por defecto. |
bridge.user.address.partyActivity | Integer | Actividad de la parte del usuario por defecto. |
bridge.user.address.currencyCode | String | Código de la moneda de la dirección del usuario por defecto. |
PedidosYa API
| Atributo | Tipo de Dato | Descripción |
|---|---|---|
peyaApi.active | Boolean | Indica si la API de PedidosYa está activa. |
peyaApi.channelCode | String | Código del canal para la API de PedidosYa. |
peyaApi.useStoreDelivery | Boolean | Indica si se debe usar la entrega en tienda para la API de PedidosYa. |
peyaApi.deliveryCompany | String | Compañía de entrega para la API de PedidosYa. |
peyaApi.server.url | String | URL del servidor de la API de PedidosYa. |
peyaApi.credentials.chaincode_name | String | Nombre del chaincode para la API de PedidosYa. |
peyaApi.credentials.chaincode_id | String | ID del chaincode para la API de PedidosYa. |
peyaApi.credentials.integration_name | String | Nombre de la integración para la API de PedidosYa. |
peyaApi.credentials.integration_code | String | Código de la integración para la API de PedidosYa. |
peyaApi.credentials.chain_name | String | Nombre de la cadena para la API de PedidosYa. |
peyaApi.credentials.chain_id | String | ID de la cadena para la API de PedidosYa. |
peyaApi.credentials.vendor_id | String | ID del vendedor para la API de PedidosYa. |
peyaApi.credentials.username | String | Nombre de usuario para la API de PedidosYa. |
peyaApi.credentials.password | String | Contraseña para la API de PedidosYa. |
peyaApi.credentials.secret | String | Secreto para la API de PedidosYa. |
peyaApi.credentials.grant_type | String | Tipo de concesión para la API de PedidosYa. |
peyaApi.credentials.server | String | URL del servidor de autenticación para la API de PedidosYa. |
peyaApi.cancelReasons | Array of Strings | Razones de cancelación para la API de PedidosYa. |
peyaApi.queues.order_queue | String | Cola de órdenes para la API de PedidosYa. |
peyaApi.queues.publication_queue | String | Cola de publicación para la API de PedidosYa. |
peyaApi.stores | Object | Tiendas asociadas a la API de PedidosYa. |
peyaApi.catalog.min_topping | Integer | Número mínimo de aderezos para el catálogo de la API de PedidosYa. |
peyaApi.catalog.max_topping | Integer | Número máximo de aderezos para el catálogo de la API de PedidosYa. |
peyaApi.catalog.title | String | Título del catálogo para la API de PedidosYa. |
peyaApi.catalog.schedules | Object | Horarios del catálogo para la API de PedidosYa. |
peyaApi.catalog.onlyChannelImages | Boolean | Indica si solo se deben usar imágenes del canal para la API de PedidosYa. |
PedidosYa SDK
| Atributo | Tipo de Dato | Descripción |
|---|---|---|
peyaSDK.active | Boolean | Indica si el SDK de PedidosYa está activo. |
peyaSDK.channelCode | String | Código del canal para el SDK de PedidosYa. |
peyaSDK.useStoreDelivery | Boolean | Indica si se debe usar la entrega en tienda para el SDK de PedidosYa. |
peyaSDK.server.url | String | URL del servidor del SDK de PedidosYa. |
peyaSDK.credentials.clientId | String | ID del cliente para el SDK de PedidosYa. |
peyaSDK.credentials.clientSecret | String | Secreto del cliente para el SDK de PedidosYa. |
peyaSDK.credentials.environment | String | Entorno para el SDK de PedidosYa. |
peyaSDK.credentials.chaincode_name | String | Nombre del chaincode para el SDK de PedidosYa. |
peyaSDK.credentials.chaincode_id | String | ID del chaincode para el SDK de PedidosYa. |
peyaSDK.credentials.integration_name | String | Nombre de la integración para el SDK de PedidosYa. |
peyaSDK.credentials.integration_code | String | Código de la integración para el SDK de PedidosYa. |
peyaSDK.credentials.chain_name | String | Nombre de la cadena para el SDK de PedidosYa. |
peyaSDK.credentials.chain_id | String | ID de la cadena para el SDK de PedidosYa. |
peyaSDK.credentials.vendor_id | String | ID del vendedor para el SDK de PedidosYa. |
peyaSDK.credentials.username | String | Nombre de usuario para el SDK de PedidosYa. |
peyaSDK.credentials.password | String | Contraseña para el SDK de PedidosYa. |
peyaSDK.credentials.secret | String | Secreto para el SDK de PedidosYa. |
peyaSDK.credentials.grant_type | String | Tipo de concesión para el SDK de PedidosYa. |
peyaSDK.credentials.server | String | URL del servidor de autenticación para el SDK de PedidosYa. |
Rappi
| Atributo | Tipo de Dato | Descripción |
|---|---|---|
rappi.active | Boolean | Indica si la API de Rappi está activa. |
rappi.channelCode | String | Código del canal para la API de Rappi. |
rappi.deliveryCompany | String | Compañía de entrega para la API de Rappi. |
rappi.server.port | String | Puerto del servidor de la API de Rappi. |
rappi.server.url | String | URL del servidor de la API de Rappi. |
rappi.credentials.server | String | URL del servidor de autenticación para la API de Rappi. |
rappi.credentials.client_id | String | ID del cliente para autenticación de la API de Rappi. |
rappi.credentials.client_secret | String | Secreto del cliente para autenticación de la API de Rappi. |
rappi.credentials.audience | String | Audiencia para la autenticación de la API de Rappi. |
rappi.credentials.grant_type | String | Tipo de concesión para la API de Rappi. |
rappi.queues.order_queue | String | Cola de órdenes para la API de Rappi. |
rappi.queues.publication_queue | String | Cola de publicación para la API de Rappi. |
rappi.stores | Object | Tiendas asociadas a la API de Rappi. |
rappi.catalog.max_topping | Integer | Nú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
- Node.js versión 14 (recomendado 14.21.3): El OMNI Plugin requiere específicamente la versión 14 de Node.js debido a una dependencia clave (
reception-system-sdkde PedidosYa), la cual se encuentra deprecada y solo es compatible con esta versión. Usar una versión diferente de Node.js podría generar incompatibilidades y errores durante la ejecución del plugin.
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
- Abrir una terminal y ejecutar los siguientes comandos:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
- Cerrar y abrir nuevamente la terminal, o bien ejecutar el siguiente comando para cargar
nvm:
source ~/.nvm/nvm.sh
- Verificar que la instalación fue exitosa comprobando la versión de
nvm:
nvm --version
Instalación de NVM en Windows
Para Windows, la forma recomendada de instalar NVM es a través de nvm-windows.
Descargar el archivo
.zipo.exedesde el repositorio.Seguir las instrucciones de instalación proporcionadas por el instalador.
Una vez instalado, abrir el
Command PromptoPowerShelly verificar la instalación:
nvm --version
Instalación de Node.js versión 14.x
- Con NVM instalado, proceder a instalar la versión específica de Node.js (14.21.3) requerida para el OMNI Plugin:
nvm install 14.21.3
- Luego, asegurarse de utilizar esta versión:
nvm use 14.21.3
- Verificar la instalación:
node -v
- Se debería visualizar este mensaje:
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
Abrir PowerShell en modo administrador.
Navegar a la carpeta donde se encuentran los archivos de setup.
Ejecutar el script
windows.batcon 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
Instalar PM2 y verificar su estado:
pm2 status
Si no está instalado, se puede instalar usando NPM:
npm install -g pm2
- Dar permisos de ejecución al script de instalación:
chmod +x linux.sh
- Ejecutar el script de instalación:
./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
| Comando | Descripció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 list | Listar todas las versiones instaladas de Node.js |
nvm use system | Usar la versión del sistema de Node.js |
PM2
| Comando | Descripció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 status | Listar 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 save | Persistir listado de aplicaciones actuales de PM2 |
Servicios en Windows
| Comando | Descripción |
|---|---|
sc query state= all / Get-Service | Listar 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) |