Integración de reservas aéreas desde Kontrol Travel
Objetivo
Importar a NetSuite las reservas aéreas emitidas en el front de ventas corporativo de Ideas Fractal.
Contexto y Alcance
Cada vez que Kontrol Travel emite una reserva aérea, la misma se importa a NetSuite consumiendo un nuevo webservice denominado SaleInfo. El mismo es publicado por Netactica según especificación de Kontrol Travel.
A modo de resumen, el alcance está dado por los siguientes puntos:
Buscar el cliente en NetSuite. La creación del perfil será manual y luego se hará el mapeo correspondiente en Kontrol Travel.
Crear itinerario en NetSuite
Crear reserva con servicios aéreos dentro del itinerario en NetSuite
Crear service Fee cuando las reservas lo informen
Crear el registro de pago (recibo) en NetSuite
Exportar el itinerario para que NetOffice pueda emitir la factura correspondiente
Para cumplir con dicho alcance, NetSuite creó el siguiente webservice:
SaleInfo: Donde se hace el inicio de sesión en el header del RQ y en el cual obtenemos la información completa de la reserva aérea emitida en Kontrol Travel (dentro de un objeto BookReserva) para replicarla en NetSuite.
Configuraciones
Mapeo de Proveedores
Para saber qué proveedor de NetSuite dejar en la reserva dentro del itinerario, se consulta el campo <Source> dentro del payload del Request (dentro del objeto BookReserva) donde viene informado el nombre del perfil de Kontrol Travel.
Luego se busca qué Supplier tiene ese valor en el campo Prc_Code dentro de la tabla dbo.ProfilesCompanies para utilizar ese ID como proveedor de la reserva.
Importación de Reservas
Se detalla a continuación el flujo de emisión de vuelos entre el front de Kontrol Travel y NetSuite:
Donde:
ProcesoDecompra(). Es el proceso de compra, reserva y emisión que un usuario hace en la plataforma de Kontrol Travel.
GeneracionEventoDeintegracion(). Una vez se dispara el evento que invoca la integración, en este caso la emisión de servicios aéreos, la plataforma de Kontrol Travel llama al servicio web de NetSuite para entregar la información correspondiente.
SalesInfoRQ(). NetSuite expone/publica un webservice el cual cumple con los lineamientos de Kontrol Travel.
SalesInfoRS(). Es la respuesta que genera NetSuite, eso con el ánimo de tener una confirmación de la recepción de la información enviada por Kontrol Travel.
En conclusión, Kontrol Travel llama a un webservice de NetSuite con el fin de enviar la información correspondiente a cada reserva aérea emitida para que se registre en un nuevo itinerario.
Ejemplo de Request con toda la información de la reserva emitida:
<SaleInfoRQ> <locField>AAAXJSK</locField> <dateBookField>2019-05-23 T 23:15</dateBookField> <eventoField>Reserva</eventoField> <channelField>B2C</channelField> <portalField>http://www.travelsecurity.cl </portalField> <TechnologyField>WEB</TechnologyField> <includeFlightsField>Yes</includeFlightsField> <includeCarsField>Yes</includeCarsField> <includeHotelsField>Yes</includeHotelsField> <includeInsuranceField>No</includeInsuranceField> <includePackageField>No</includePackageField> <payload><![CDATA[" En esta seccion ir el XML de la informacion de venta "]]></payload> <SendformField>A</SendformField> </SaleInfoRQ>
Dentro del <payload> del SaleInfo se obtiene la información de la reserva para replicar en NetSuite.
Ejemplo de Response:
<SaleInfoRS> <locField>AAAXJSK</locField> <codeIntegrationBackofficeField>AF52536</codeIntegrationBackofficeField> <statusIntegracionField>OK</statusIntegracionField> <messageIntegrationField>Mensaje de exito</messageIntegrationField> <locsField> <loc> <productType>Flight</productType> <locProvider>HGYEHE</locProvider> <statusIntegracion>OK</statusIntegracion> <messageIntegration>Todo ok</messageIntegration> </loc> <loc> <productTypeField>Hotel</productTypeField> <locProviderField>HGYEHE</locProviderField> <statusIntegracionField>OK</statusIntegracionField> <messageIntegrationField>Todo ok</messageIntegrationField> </loc> <loc> <productTypeField>Hotel</productTypeField> <locProviderField>HGYHD</locProviderField> <statusIntegracionField>OK</statusIntegracionField> <messageIntegrationField>Todo ok</messageIntegrationField> </loc> </locsField> </SaleInfoRS>
Flujo en NetSuite
Consulta del Cliente
Para consultar si el cliente de la reserva ya existe en NetSuite, se lee el tag <AgencyCodeClient> del objeto BookReserva donde viene informado el ID del perfil cliente empresa de NeSuite.
Si el cliente existe en NetSuite → se utiliza el perfil para crear el itinerario.
Si el cliente no existe en NetSuite → se responde que el cliente no existe.
Consulta del Proveedor
Para consultar si el proveedor de la reserva <Source> ya existe en NetSuite, se lee el tag <Source> del objeto BookReserva donde viene informado el nombre del perfil de Kontrol Travel. Luego se busca qué Supplier tiene ese valor en el campo Prc_Code dentro de la tabla dbo.ProfilesCompanies para utilizar ese ID como proveedor de la reserva.
Si el proveedor existe en NetSuite → se utiliza el perfil para crear la reserva.
Si el proveedor no existe en NetSuite → se responde que el proveedor no existe.
Creación del Itinerario
Para crear un nuevo itinerario en NetSuite con la información de la reserva aérea emitida en Kontrol Travel, se obtiene la información del payload BookReserva, más precisamente de los siguientes nodos:
<AgencyCodeClient> → Información del cliente
<CenterCosts> → Lista de los centros de costo del cliente
<BookInfoFlights> → Información de la reserva aérea emitida en Kontrol Travel, los fees aplicados y el pago generado
Por lo tanto, el itinerario queda con:
El cliente corporativo de Kontrol Travel asociado
BookingSource “Kontrol Travel”
La o las reservas aéreas emitidas con su costo, precio, impuestos, origen, destino, fecha de salida, fecha de regreso (si corresponde), proveedor, aerolínea, pasajeros, etc.
Service fee siempre y cuando se haya aplicado una tarifa administrativa en Kontrol Travel
Registro de pagos realizados en Kontrol Travel
Exportación a Backoffice
Toda reserva importada desde Kontrol Travel, se informa al backoffice integrado mediante el TravelItineraryService como cualquier itinerario generado en NetSuite.
Consideraciones Adicionales
Las reservas importadas, no pasan por el motor de reglas de NetSuite.
Los remarks y UDIDs aplicados en Kontrol Travel, se guardan como comentarios en el display de reservas.
Los centros de costos aplicados en las reservas, se guardan en NetSuite en una nueva tabla de base de datos denominada dbo.ReservationItemsCenterCosts la cual depende de la tabla existente dbo.ReservationItems.
En dicha tabla se almacena los centros de costos de las reservas emitidas en Kontrol Travel, los cuales son informados en la sección <CenterCosts> del objeto BookReserva dentro del servicio SaleInfo.
La tabla cuenta con los siguientes campos:
ID (INT): Id del centro de costo. Es un Id autonumérico.
CenterCostCode (VARCHAR (20)): Código del centro de costo
CenterCostDescription (VARCHAR (50)): Descripción del centro de costo
CenterCostPercentage (DECIMAL (18,2)):
ReservationItemsId (INT): Id del Reservation Item al cual pertenece el Centro de Costo.
A su vez, la lista de centros de costos es informada a los backoffice integrados mediante el TravelItineraryService en el detalle de cada reserva, para que luego se trasladen a la factura.
Logs
Cada llamado que hace Kontrol Travel a nuestro webservice SaleInfo, se guarda como payload al igual que la respuesta que ofrece NetSuite.
El Request ofrece toda la información de la reserva aérea emitida.
Y el Response, la respuesta de NetSuite con el estado de procesamiento y el ID del itinerario correspondiente.
Netactica.com