funnel.travel® - FAQ

The corporate post-booking travel management tool

What is funnel.travel?

funnel.travel is a post-booking travel management platform that collects, processes, and distributes booking data across different travel systems. It connects suppliers, booking tools, and midoffice systems to automate workflows and keep travel data consistent.

What is an extension in funnel.travel?

An extension is a modular component that processes booking data within funnel.travel. Extensions can import data, modify it, or export it to external systems, forming a configurable data pipeline.

What is a producer extension?

A producer is an extension type that imports booking data into funnel.travel from external systems such as booking platforms, APIs, or email sources. It is the entry point of data into the system.

What is a modifier extension?

A modifier is an extension type that transforms or enriches booking data within funnel.travel. It can apply business rules, filter data, or map fields before the data is passed on to other extensions.

What is a consumer extension?

A consumer is an extension type that exports booking data from funnel.travel to external systems such as midoffices, reporting tools, or downstream integrations.

How does data flow through funnel.travel?

Booking data flows through a pipeline of extensions:

  1. A producer extension imports the data
  2. Modifier extensions transform or enrich it
  3. Consumer extensions export it to external systems

This pipeline allows flexible configuration of how data is handled and routed.

What is a booking in funnel.travel?

A booking is an individual reservation or service (such as a flight, hotel, or activity). Multiple bookings can be combined into a single trip.

What is a trip in funnel.travel?

A trip is a logical grouping of bookings that belong together, typically based on traveler, timing, and related services such as flights or hotels. funnel.travel can aggregate individual bookings into trips for easier management.

How do I use the AI-powered email parser?

tl;dr : To use the AI-powered email parser, configure the Confirmation E-mails extension with OpenAI parsing enabled, then connect your mail account.

Preconditions:

Steps:

Keep in mind:

How do I use TravelC with multiple microsites?

tl;dr : Create a base, broadcasting TravelCompositor extension as webhook target, then add further TravelCompositor extensions as needed.

Steps:

Keep in mind:

How do I pass the Nezasa cancellation policy to Midoco?

tl;dr : configure a custom field with the appropriate extension field names.

Preconditions:

Add a custom field with:

How do I assign a travel number (aka "Reisenummer") to group bookings with Nezasa and Midoco?

tl;dr : configure a custom field with the appropriate extension field names, and tag the Nezasa template.

ZU3MP29

Preconditions:

Add a custom field with:

Rules / assumptions

funnel.travel needs additional information to know what services need to be associated with a travel number. The default behavior is:

What if the main module is component-priced?
Add a module tag "ftgrpforce" (or, alternatively, "rnrforce").
What if pre-/post-modules should also be assigned to the travel number?
Add a module tag "ftgrpforce" (or, alternatively, "rnrforce").
What if a module should be assigned a different travel number?
Add a module tag prefixed with "ftgrp-" (or "rnr-"), same syntax as on the template-level. Adding an override travel number on the module-level implies "ftgrpforce".
What if flights should also be assigned to the travel number?
If flights should be managed as part of the group booking, add a template tag "ftgrpflight". (or, alternatively, "rnrflight").
What if simply all services should be assigned to the travel number?
Add a template tag "ftgrpforce" (or, alternatively, "rnrforce")

Technical details

The following points give a technical overview of how group booking attributes are used.

ftgrp- (or rnr-) tag on template
The ftgrp- (or rnr-) template tag triggers travel number processing.
Reference to category-priced module
A category-priced module generate a "PACKAGE" entry in funnel.travel. Among other details, that entry holds the module price. Module components are associated via a "NzModule" service reference. This is primarily a *pricing relationship*.
Assigning services to a travel number / multiple packages
The "Rules / assumptions" above illustrate how Nezasa components are eventually assigned to a travel number. Using "ftgrpforce" (or "rnrforce") results in the service labeled with "group: true" in the service-level "Extension data". If that logic results in some components not assigned to the travel number, these are grouped in a separate package. Typical cases are flights, or pre-/post-module components.

How do I manage the Midoco "destination key" from within Nezasa?

tl;dr : configure a custom field with the appropriate extension field names, and tag the Nezasa template and/or module.

Preconditions:

Add a custom field with:

Rules / assumptions

Module-level tags are copied down to each service associated with that module.

  1. If any service has a destination key custom field set, the package destination key is derived from the contained services (with the destination key custom field taking precedence per service)
  2. If no service has a destination key custom field set, but there is a booking-level destination key custom field set, that value is used
  3. If non of the above applied, the destination key is derived from the contained services.

How do I transition an existing Nezasa/Midoco integration to funnel.travel?

tl;dr : configure a custom field with the appropriate extension field names.

Preconditions:

Add a custom field with:

Keep in mind:

How do I add payments entered in Midoco into Nezasa?

tl;dr : configure "Import payments from query ID" on the Midoco extension.

MP73SP

Preconditions:

Set the Midoco "Import payments from query ID" setting to the ID of the user query. The query must contain:

.. and use a query restriction on 'order_payment.creation_date' (Timestamp). A nightly import job will query Midoco, and create payments with:

These payments are then pushed to Nezasa, provided the job finds a matching Nezasa-generated booking in funnel.travel.

How do I override a provider/supplier code towards my midoffice?

If your producing extension allows for setting external references (e.g. Nezasa has such a feature), we recommend using that feature, as it's more transparent to the agents. Otherwise, use the funnel.travel provider mapping feature:

Keep in mind:

If the supplier should be set to a constant value, use the Repackage suppliers extension.

How do I override an agency code towards my midoffice?

As with providers, if your producing extension allows for setting external references, we recommend using that feature. Otherwise:

Keep in mind:

How do I use a GDS remark to remove a PNR from processing?

tl;dr : use the Data filter extension.

This approach works with an producer which can handle remarks.

Preconditions:

Then, add a custom field with:

What happens then is that the custom field remark pattern will recognize the matching remark and add a custom field value "STOP" to the booking. The Data Filter will pick up on that field (thanks to the mapped "filterRemark"), check the value against "Delete if custom field value pattern", and delete the booking if there is a match.

How do I use the Teams notification channel?

Use Microsoft "Power Automate" to create a workflow and add a "When a Teams webhook request is received".

Define the notification with type "Teams" and the Power Automate URL as notification target.

How do I retrieve a midoffice reference from a separate data stream?

This is a niche use case, but if a supplier is also on funnel.travel, there might be a case for getting the supplier midoffice reference into a data stream for later purchase matching. For this setup, two instances of the "Booking data share" extension are required:

Setup on data supplier

On the data stream which "owns" the desired midoffice reference, configure the "Booking data share (produce)" and define a random trust key (ideally 32 chars or longer).

Setup on data consumer

On the data stream which wants to read the above midoffice reference, configure the "Booking data share (consume)" and use the same trust key.

With the above setup, the "data supplier" will trigger whenever booking data changes. Ideally, the extension is sorted after the midoffice extension. funnel.travel core will then recognize the data sharing, and trigger all "data consumer" with the same trusted key and for the same booking reference.