Workflow Extension Points
Extension Points
The table below summarizes workflow extension points.
In order to register the extension, specific interface has to be implemented and registered in manifest.json
file for web extensions. See Using Workflow Extensions article for implementation details.
Each extension point has its own functional interface. Data are passed in method’s parameter. Method returns status and (optionally) modified data.
Some of the extension points allow to modify data () and some contain data model that is read only and cannot be modified ().
All of the extension points share common details:
-
All extension points allow to execute custom code allowing Red Apps to provide custom logic.
-
Before extension points ("before" prefix in extension point name) are triggered before a request is sent. The common use cases for these extension points is the modification of the data in the request.
-
After extension points ("after" prefix in name) are triggered after response is received but before it is rendered to the screen. Often used to monitor agent actions.
-
All extension points allow to abort the flow. This can be used to replace the default flow with the custom one.
-
Input type extension points ("input" suffix in extension point name) are the special type of extension point triggered before a form is shown. The common use cases for these extension points is form prepopulation.
-
Credit card data available in some extension points data is always masked. See Credit card masking subsection for more details.
Credit card masking
In each extension point that contains Credit Card data, number and security code are masked. Credit card number is masked except last 4 digits, security code (CVV/CVC) is fully masked. Additionally, these fields contains masking identifier at the end of each separated by the pipe operator "|", e.g.:
-
Credit Card number
4242424242424242
will be masked intoXXXXXXXXXXXX4242|0
-
Security Code
123
will be masked intoXXX|1
If the extension allows to modify Credit Card data, new entered value should not contain a pipe separator and identifier.
Extension Points List
Group Id | Extension Point Id | Interface | Data Model | Returned value | |
---|---|---|---|---|---|
dynamo.air.airbooking |
|||||
dynamo.air.pq |
|||||
dynamo.air.pricing |
|||||
dynamo.airavailability |
|||||
dynamo.airshopping |
|||||
dynamo.airshopping.input |
|||||
dynamo.car |
|||||
dynamo.exchange |
|||||
dynamo.hotel.book |
|||||
dynamo.hotel.details |
|||||
dynamo.hotel.modify |
|||||
AfterHotelModifyExtension |
|
CommandMessageHotelModifyRs |
ExtPointResult |
||
dynamo.hotel.shopping |
|||||
dynamo.ndc |
|||||
dynamo.pnr |
|||||
dynamo.pnr.end |
|||||
dynamo.queue.place |
|||||
dynamo.segment |
|||||
dynamo.segment.cancel |
|||||
dynamo.ticketing |
|||||
Extension Points Details
dynamo.air.airbooking:beforeAirBookAndPrice
This extension point is executed before air segment book request is sent.
It is triggered from graphical path:
-
Command helper → Air → Shop fares → "Shop airfare" → Response drawer → "Sell & Save Price"
-
Command helper → Air → Shop fares → "Shop airfare" → Response drawer → Branded Fares tile → "Sell & Save Price"
-
Command helper → Air → Shop flights → "Shop flights" → Response drawer → "Sell & Save Price"
This extension point is used by some of the agencies to analyze sales decision factors in the booking process. To take advantage of it, the agency needs to decorate Sabre’s air shopping response with its own tags (or use Sabre-generated tags), then at the time of booking ("Sell & Save Price") Red App may read such data in the extension point to be further stored and analyzed by the agency management.
dynamo.air.airbooking:afterAirBookAndPrice
This extension point is executed after air segment book response is received.
Trigger points are described for dynamo.air.airbooking:beforeAirBookAndPrice.
dynamo.air.pq:beforePriceQuoteCreation
This extension point is executed before price quote creation request is sent.
It is triggered:
-
From price quote creation commands (e.g.
PQ
,PQA
,PQM-RATE DESK QUOTED
) -
From graphical path: Graphical PNR View → Quotes → Price quote drawer → "Refresh price quote"
-
After dynamo.air.airbooking:beforeAirBookAndPrice extension point
-
After dynamo.air.pricing:beforePricing extension point in case
RQ
qualifier is present (e.g.WP¥RQA
)
dynamo.air.pq:afterPriceQuoteCreation
This extension point is executed after price quote creation response is received.
Trigger points are described for dynamo.air.pq:beforePriceQuoteCreation.
dynamo.air.pricing:beforePricing
This extension point is executed before pricing request is sent.
It is triggered:
-
From commands starting with
WP
(e.g.WP
,WPA
) except forWPNI
command -
From graphical path using "Advanced Pricing Options":
-
Graphical PNR View → Itinerary → Segment drawer → "Pricing options"
-
Price quote response → "Re-pricing options"
-
When extension is triggered from "Advanced Pricing" window then modification of payment data is limited to fields that are available on this window. |
dynamo.air.pricing:afterPricing
This extension point is executed after pricing response is received.
Trigger points are described for dynamo.air.pricing:beforePricing.
dynamo.airavailability:beforeAirAvailability
This extension point is executed before air availability request is sent.
It is triggered:
-
From CPA commands (starting with
1
, e.g.1LASLAX
) -
From graphical path: Command helper → Air → Availability → "Search availability"
In case where agent is requesting multi air availability from graphical form then all legs are present in extension data model. So far it is not possible to add/remove air availability legs in request or modify their sequence. |
dynamo.airavailability:afterAirBooking
This extension point is executed after segment or segments book request is received.
It is triggered:
-
From sell commands (e.g.
01Y1
) -
From graphical path: Command helper → Air → Availability → "Search availability" → Response drawer → "Sell"
dynamo.airshopping:beforeAirShopping
This extension point is executed before air shopping request is sent.
It is triggered from graphical path:
-
Command helper → Air → Shop fares → "Shop airfare"
dynamo.airshopping:afterAirShopping
This extension point is executed after air shopping response is received.
Trigger points are described for dynamo.airshopping:beforeAirShopping.
dynamo.airshopping:beforeFlightsInput
This extension point is executed before user sees the "Flights" form.
It is triggered from graphical path:
-
Command helper → Air → Shop flights
dynamo.airshopping.input:beforeAirShoppingInput
This extension point is executed before user sees the "Air Shopping" form.
It is triggered from graphical path:
-
Command helper → Air → Shop fares
dynamo.car:beforeCarBookInput
This extension point is executed before user sees the "Car Book" form.
It is triggered from graphical path:
-
Trip summary → Air segment kebab menu → "Book car"
dynamo.car:beforeCarBook
This extension point is executed before car book request is sent.
It is triggered from graphical path:
-
Command helper → Cars → "Shop cars" → Response drawer → "Book"
dynamo.car:afterCarBook
This extension point is executed after car book response is received.
Trigger points are described for dynamo.car:beforeCarBook.
dynamo.car:beforeCarReservationInput
This extension point is executed before user sees the "Car Reservation" form.
It is triggered from graphical path:
-
Command helper → Cars → "Shop cars" → Response drawer → "Book"
-
Command helper → Car → Airport search/Location search/Car quote → "Shop cars" → Response drawer → "Book".
dynamo.car:beforeCarShopping
This extension point is executed before car shopping request is sent.
It is triggered from graphical path:
-
Command helper → Cars → "Shop cars"
dynamo.exchange:beforeExchangeComparison
This extension point is executed before user sees the exchange comparison form modal (launched during the ticket exchange procedure).
It is triggered from graphical path:
-
Workflows sidepanel → "Exchange ticket" flow
-
Graphical PNR View → Ticketing → "Exchange" dropdown → "Exchange ticket" flow
dynamo.exchange:afterExchangeComparison
This extension point is executed after exchange comparison response is received.
Trigger points are described for dynamo.exchange:beforeExchangeComparison.
dynamo.exchange:beforeExchangeConfirmation
This extension point is executed before user sees the exchange confirmation form modal (launched during the ticket exchange procedure).
It is triggered from graphical path:
-
Workflows sidepanel → "Exchange ticket" flow
-
Graphical PNR View → Ticketing → "Exchange" dropdown → "Exchange ticket" flow
dynamo.exchange:afterExchangeConfirmation
This extension point is executed after exchange confirmation response is received.
Trigger points are described for dynamo.exchange:beforeExchangeConfirmation.
Data provided to the extension point contains exchange confirmation result with PQR number in case of success or error messages in case of failure. |
dynamo.hotel.book:beforeHotelBookInput
This extension point is executed before user sees the "Hotel reservation" form.
It is triggered:
-
From hotel book commands (e.g. "0H1¥1")
-
From graphical path:
-
Command helper → Hotel → "Hotel property search" → "Shop hotels" → Response drawer (→ "Rate details") → "Book"
-
Command helper → Hotel → "Hotel search" → "Shop hotels" → Response drawer → "View rates" → Response Drawer (→ "Rate details") → "Book"
-
Some of the optional fields in the data model (e.g. crib or rollaway bed) may not be applicable and are not shown on the form - they will not be used in the request even if are defined by the extension. |
dynamo.hotel.book:beforeHotelBook
This extension point is executed before the hotel sell (book) request is sent.
It is triggered by submitting the "Hotel reservation" form. How to open "Hotel reservation" form is described for dynamo.hotel.book:beforeHotelBookInput extension point.
dynamo.hotel.book:afterHotelBook
This extension point is executed after the hotel sell (book) response is received.
Trigger points are described for dynamo.hotel.book:beforeHotelBook.
dynamo.hotel.details:beforeHotelDetails
This extension point is executed before the hotel details request is sent.
It is triggered:
-
From
HOD
commands (e.g.HOD123
) -
From graphical path:
-
Command helper → Hotel → Hotel property search → "Shop hotels"
-
Command helper → Hotel → Hotel search → "Shop hotels" → Response drawer → "View rates"
-
dynamo.hotel.details:afterHotelDetails
This extension point is executed after the hotel details response is received.
Trigger points are described for dynamo.hotel.details:beforeHotelDetail.
dynamo.hotel.modify:beforeHotelChangeDatesInput
This extension point is executed before user sees the hotel change dates form.
It is triggered from graphical path using "Change dates" action for the hotel segment. This action can be accessed:
-
Trip summary → Hotel segment kebab menu → "Change dates"
-
Graphical PNR View → Itinerary → Hotel segment drawer → "Modify" dropdown → "Change dates"
Some of the properties available in the data model are read-only (HotelName
, PropertyId
, and SegmentNumber
).
Changing read-only properties causes an Invalid data modification exception.
|
dynamo.hotel.modify:beforeHotelModifyDetailsInput
This extension point is executed before user sees the hotel modify details form.
It is triggered from graphical path using "Modify details" action for the hotel segment. This action can be accessed:
-
Trip summary → Hotel segment kebab menu → "Modify details"
-
Graphical PNR View → Itinerary → Hotel segment drawer → "Modify" dropdown → "Modify details"
It is forbidden to modify hotel segment data in this extension point. Attempting to modify this data will result in an error and flow interruption. |
dynamo.hotel.modify:afterHotelModifyDetails
This extension point is executed after hotel segment details modification response is received.
It is triggered:
-
From commands starting with
HOM
(e.g.HOM1O/AGT54123455
) -
From graphical path using "Change dates", "Change room type" and "Modify details" actions for the hotel segment. These actions can be accessed:
-
Trip summary → Hotel segment kebab menu
-
Graphical PNR View → Itinerary → Hotel segment drawer → "Modify" dropdown
-
dynamo.hotel.modify:afterHotelModify
Deprecated |
This extension point is deprecated and will be removed soon.
Use dynamo.hotel.modify:afterHotelModifyDetails extension point instead.
dynamo.hotel.shopping:beforeHotelShopping
This extension point is executed before hotel shopping request is sent.
It is triggered:
-
From commands starting with
HOT
(e.g.HOTJFK
) -
From graphical path: Command helper → Hotel → "Hotel search"/"Address search" → "Shop hotels"
dynamo.hotel.shopping:afterHotelShopping
This extension point is executed after hotel shopping response is received.
Trigger points are described in dynamo.hotel.shopping:beforeHotelShopping.
dynamo.ndc:beforeCreateOrderInput
This extension point is executed before user sees the "Create order" form modal.
It is triggered from graphical path:
-
NDC Air segment response drawer → "Select offer" → "Create Order"
|
dynamo.ndc:beforeOrderCreate
This extension point is executed before create order modal request is sent (after submitting "Create order" modal in graphical flow when working with an NDC segment).
It is triggered from graphical path:
-
NDC Air segment response drawer → "Select offer" → "Create Order"
dynamo.ndc:afterOrderCreate
This extension point is executed after create order modal response is received (after submitting "Create order" modal in graphical flow when working with an NDC segment).
Trigger points are described for dynamo.ndc:beforeOrderCreate.
dynamo.ndc:beforeRePriceOfferInput
This extension point is executed before user sees "Advanced pricing" modal form.
It is triggered form graphical path:
-
NDC Air segment response drawer → "Select offer" → "Reprice"
dynamo.pnr:beforeIgnore
This extension point is executed before PNR ignore request is sent.
It is triggered:
-
From ignore command (e.g.
I
,IC
,IR
) -
From graphical path: Trip summary → Action buttons → I/IR/IC
dynamo.pnr:afterIgnore
This extension point is executed after PNR ignore response is received.
Trigger points are described for dynamo.pnr:beforeIgnore.
dynamo.pnr:beforeInvoiceIssue
This extension point is executed before invoice issue request is sent.
It is triggered from commands starting with DIN
(e.g. DIN
, DIN/X|S1
).
dynamo.pnr:afterInvoiceIssue
This extension point is executed after invoice issue response is received.
Trigger points are described for dynamo.pnr:beforeInvoiceIssue.
dynamo.pnr.end:beforeEndCommand
This extension point is executed before end PNR request is sent.
It is triggered:
-
From end command (e.g.
E
,ET
,ER
,EC
) -
From graphical path: Trip summary → Action buttons → E/ET/ER/EC
dynamo.pnr.end:afterEndCommand
This extension point is executed after receiving PNR end response.
Trigger points are described for dynamo.pnr.end:beforeEndCommand.
dynamo.queue.place:beforeQueuePlace
This extension point is executed before request to place a PNR on the queue is sent.
It is triggered:
-
From commands starting with
QP
(e.g.QP/R14I13/11
) -
From graphical path: Workflows sidepanel → "Queue Place"
dynamo.queue.place:afterQueuePlace
This extension point is executed after PNR queue place response is received.
Trigger points are described for dynamo.queue.place:beforeQueuePlace.
dynamo.segment:beforeAirPassiveAdd
This extension point is executed before add passive air segment request is sent.
It is triggered:
-
From add air passive segment command (e.g.
0LO279Y17JULWAWLHRYK1
) -
From graphical path: Trip summary → "Add to PNR" → Passive segment → Air
dynamo.segment:afterAirPassiveAdd
This extension point is executed after add passive air segment response is received.
Trigger points are described for dynamo.segment:beforeAirPassiveAdd.
dynamo.segment:beforeCarPassiveAdd
This extension point is executed before add passive car segment request is sent.
It is triggered from graphical path:
-
Trip summary → "Add to PNR" → Passive segment → Car
Adding a passive car segment by sending a Sabre 0CAR…GK1… command will not trigger the extension point.
|
dynamo.segment:afterCarPassiveAdd
This extension point is executed after add passive car segment response is received.
Trigger points are described for dynamo.segment:beforeCarPassiveAdd.
dynamo.segment:beforeHotelPassiveAdd
This extension point is executed before add passive hotel segment request is sent.
It is triggered:
-
From commands starting with
0HHT
-
From graphical path:
-
Trip summary → "Add to PNR" → Passive segment → Hotel
-
Command helper → Hotel → "Hotel search"/"Address search"/"Hotel property search" → "Shop hotels" → Response drawer → "Add passive"
-
Commands with incorrect format won’t trigger the extension point. |
dynamo.segment:afterHotelPassiveAdd
This extension point is executed after add passive hotel segment response is received.
Trigger points are described for dynamo.segment:beforeHotelPassiveAdd.
dynamo.segment:beforeOtherPassiveAdd
This extension point is executed before add other passive segment request is sent.
It is triggered:
-
From commands starting with
0OTH
-
From graphical path: Trip summary → "Add to PNR" → Passive segment → Other
Commands with incorrect format won’t trigger the extension point. |
dynamo.segment:afterOtherPassiveAdd
This extension point is executed after add passive other segment response is received.
Trigger points are described for dynamo.segment:beforeOtherPassiveAdd.
dynamo.segment:beforeIssueServiceFee
This extension point is executed before issue miscellaneous intelligent service fee request is sent.
It is triggered from commands starting with MISF
(e.g. MISF¥S*AIR AND HOTEL SERVICE FEE¥C*IBM997YYZ
).
dynamo.segment:afterIssueServiceFee
This extension point is executed after issue miscellaneous intelligent service fee response is received.
Trigger points are described for dynamo.segment:beforeIssueServiceFee.
dynamo.segment.cancel:beforeSegmentCancel
This extension point is executed before delete segment request is sent.
It is triggered:
-
From command using cancel itinerary segment command
X
(e.g.XI
,X1
) -
From graphical path:
-
Graphical PNR View → Itinerary → "Delete"
-
Graphical PNR View → Expandable drawer section under the main PNR header → "Cancel PNR"
-
Trip summary → Segment kebab menu → "Delete segment"
-
dynamo.segment.cancel:afterSegmentCancel
This extension point is executed after cancel segment response is received.
Trigger points are described for dynamo.segment.cancel:beforeSegmentCancel.
dynamo.ticketing:beforeCancelDocumentRefund
This extension point is executed before cancel document refund request is sent.
It is triggered from commands starting with WTRX
(e.g. WTRX0161234567890
).
dynamo.ticketing:afterCancelDocumentRefund
This extension point is executed after cancel document refund response is received.
Trigger points are described for dynamo.ticketing:beforeCancelDocumentRefund.
dynamo.ticketing:beforeIssueTicketInput
This extension point is executed before user sees the "Issue ticket/EMD" form modal.
It is triggered from graphical path:
-
Workflows sidepanel → "Issue ticket/EMD"
It is forbidden to modify previously selected Price Quotes and Ancillary Items in this extension point. Attempting to modify this data will result in an error and flow interruption. |
dynamo.ticketing:beforeIssueTicket
This extension point is executed before issue ticket request is sent.
It is triggered:
-
From commands starting with
W¥
(e.g.W¥V1*23JUN
) -
From graphical path: Workflows sidepanel → "Issue ticket/EMD"
dynamo.ticketing:afterIssueTicket
This extension point is executed after issue ticket response is received.
Trigger points are described for dynamo.ticketing:beforeIssueTicket.
dynamo.ticketing:beforeRevalidateTicket
This extension point is executed before revalidate ticket request is sent.
It is triggered from commands starting with WETRL/
(e.g. WETRL/S3/C3*21JUN1522JUN15
).
dynamo.ticketing:afterRevalidateTicket
This extension point is executed after revalidate ticket response is received.
Trigger points are described for dynamo.ticketing:beforeRevalidateTicket.
dynamo.ticketing:beforeVoidDocument
This extension point is executed before void document (ticket or EMD) request is sent.
It is triggered:
-
From commands:
-
starting with
WV
except for commands starting withWV*
(e.g.WV3
) -
WETRV
-
WEMDV
-
-
From graphical path: Workflows sidepanel → "Cancel ticket/EMD"
|
dynamo.ticketing:afterVoidDocument
This extension point is executed after void document (ticket or EMD) response is received.
Trigger points are described for dynamo.ticketing:beforeVoidDocument.
|