Sabre: How to pass 2 OTA_AirPriceRQ in EnhancedAirBookRQ? - sabre

How can I pass 2 OTA_AirPriceRQ in 1 EnhancedAirBookRQ for booking RoundTrip in Sabre?
Consider the below example:
<EnhancedAirBookRQ>
<OTA_AirBookRQ>
...
<FlightSegment>
<!-- Segment 1 Details -->
<FlightSegment/>
<FlightSegment>
<!-- Segment 2 Details -->
<FlightSegment/>
<OTA_AirPriceRQ>
<PriceRequestInformation>
<OptionalQualifiers>
<PricingQualifiers CurrencyCode='INR'>
<PassengerType Code='ADT' Force='true' Quantity='1'/>
</PricingQualifiers>
</OptionalQualifiers>
</PriceRequestInformation>
</OTA_AirPriceRQ>
<PostProcessing IgnoreAfter="false">
<RedisplayReservation/>
</PostProcessing>
<EnhancedAirBookRQ>
So from above code,I wanted to pass another OTA_AirPriceRQ for Segment 2, to achieve RoundTrip.
But I get error when I repeat OTA_AirPriceRQ Tag.

Try with SegmentSelect element under PriceRequestInformation/OptionalQualifiers/PricingQualifiers/ItineraryOptions.
By default, all segments will be priced the same way, so unless you want to do something special for particular segment/s, you don't need to add extra qualifiers.

OTA_AirPriceRQ is used to get pricing information (price breakdown) for a specific travel, however travel details (origin, destination, classes, flight numbers, etc) you have to provide in OTA_AirBookRQ. It's a part of a EnhancedAirBookRQ transaction you are using (but should be defined prior to OTA_AirPriceRQ in request xml)
To sum it up - when you provide in OTA_AirBookRQ information about outbound and inbound flight, then 1 OTA_AirPriceRQ returns you full pricing information (no seperate AirPriceRQ is required)
You can find more information here
https://developer.sabre.com/docs/read/soap_apis/air/book/orchestrated_air_booking

Related

How to get the list of bag options from a journey without recordlocator

We need to see if Ryan Air makes available the cabin bag option before booking.
Therefore what is the action verb we can use to get this list with flight information (itinerary, segment) ?
Thanks :)
Kind regards
It called "BrandedFares" attribute on the Sabre side. With BrandedFares option enabled, you get 1 basic price with its extra prices (cabin bag, meal, etc.).
If you're using BargainFinderMax operation to search and get flights, you have to set BrandedFareIndicators attribute as true, like this:
<TravelerInfoSummary>
<PriceRequestInformation>
<TPA_Extensions>
<BrandedFareIndicators MultipleBrandedFares="true"/>
</TPA_Extensions>
</PriceRequestInformation>
</TravelerInfoSummary>
And also, your PCC also have to be available and has access to get BrandedFares, you need to discuss it with your Sabre consultant.
Regards.

Number sequences hiding in TravelItineraryReadRQ

I'm using TravelItineraryReadRQ to get information about Price Quotes in pnr. In some cases service response hides number sequences with ("XXXX") even if it was not credit card information. For example:
PQ creation commatnd: WPASU‡EDUFS123456‡FINVOICE*QUW12345‡RQ«
and here is what I get in response:
<tir39:PricedItinerary DisplayOnly="false" InputMessage="WPASU¥EDUFS1XXXX6¥FINVOICE*QUW1XXX5¥RQ" RPH="1" StatusCode="A" StoredDateTime="2018-12-21T09:13" TaxExempt="false" ValidatingCarrier="SU">
<tir39:AirItineraryPricingInfo>
<tir39:ItinTotalFare>
<tir39:BaseFare Amount="1980" CurrencyCode="RUB"/>
<tir39:Taxes>
<tir39:Tax Amount="2541" TaxCode="XT"/>
<tir39:TaxBreakdownCode TaxPaid="false">2265YQ</tir39:TaxBreakdownCode>
<tir39:TaxBreakdownCode TaxPaid="false">276RI</tir39:TaxBreakdownCode>
</tir39:Taxes>
<tir39:TotalFare Amount="4521" CurrencyCode="RUB"/>
<tir39:Totals>
<tir39:BaseFare Amount="1980"/>
<tir39:Taxes>
<tir39:Tax Amount="2541"/>
</tir39:Taxes>
<tir39:TotalFare Amount="4521"/>
</tir39:Totals>
</tir39:ItinTotalFare>
<tir39:PassengerTypeQuantity Code="ADT" Quantity="01"/>
<tir39:PTC_FareBreakdown>
<tir39:Endorsements>
<tir39:Endorsement type="PRICING_PARAMETER">
<tir39:Text>WPASU$EDUFS1XXXX6$FINVOICE*QUW1XXX5$RQ</tir39:Text>
</tir39:Endorsement>
Is there any way to get those numbers?
I believe Sabre has logic on their end due to GDPR requirements that masks credit card info from being viewed unless you have the CC in the correct form of payment field AND your EPR has the "CCVIEW" attribute assigned.
Essentially, Sabre doesn't want CC data stored anywhere but the secured Form of Payment field and they control who can and cannot see that data by using the EPR Keywords (the login info you get from Sabre).
So, for your example, my guess is that Sabre's regex or whatever they use to identify credit card data sees your strings in those fields, assumes they are CC numbers, and masks them. You may want to open a ticket with Sabre to address this, or as Andy K suggested above, try adding CCVIEW to that EPR (although I think that probably won't work).

how to use TransportAPI to generate a route at a specified time?

I was using TransportAPI to request a public route that took place at a specified date and time.
But it didnt return any route data. How should I set the date and time?
There's two different TransportAPI endpoints which you might be referring to when you say "public route" here. In both cases you can add date and time to the query:
You might mean "bus/route" - bus timetable information about one particular route. You actually have to specify a bus route (operator and line name) and details of particular departure, so for example here is the 185 bus departure at 11:26 today towards Lewisham:
http://transportapi.com/v3/uk/bus/route/LONDONBUS/185/inbound/490012571T/2017-09-22/11:26/timetable.json?app_id=APP_ID&app_key=APP_KEY
...or you might mean "public/journey". A route (or "journey plan") through the public transport system from one location to another. For example here's a journey plan from Vauxhall to Bethnal Green. The response is not just one route, but multiple alternatives
https://transportapi.com/v3/uk/public/journey/from/lonlat:-0.11966,51.48626/to/lonlat:-0.05703,51.52398/at/2017-10-10/10:00.json?
app_id=APP_ID&app_key=APP_KEY
The /at/2017-10-10/10:00 bit specifies your desired departure time, but you can also say /by/2017-10-10/10:00 to specify a desired arrival time, or you can leave it out (then it just plans for departing now)

Sabre: "UNABLE TO ISSUE PARTIAL CONNECTION-TKT ENTIRE CONNECTION" error in AirTicketRQ

I'm trying to do an international flight ticketing for Multicity, but trying to do book/ticket each segment individually, So which means am trying to call AirTicket for each Segment.
While doing it, I'm getting this error :-
UNABLE TO ISSUE PARTIAL CONNECTION-TKT ENTIRE CONNECTION-2032
So in this case what am I supposed to do.
Any help appreciated, Thanks.
It will help more if you post your requests, but it seems the segments (called 'married segments' if the below applies to your itinerary) you are trying to issue should be ticketed together, in a single, AirTicket call:
From the documentation at format-finder.sabre.com:
--------------------------------
Cause:
This response occurs if you are trying to break Married Connection logic at the time of ticketing.
Note: At time of fare storage there are no longer married segment validation checks. Segment selection is permitted and fares may be stored even if segment selection breaks married segment logic.
Instead, the Sabre ticketing system performs Married Connection validation checks against the segments selected for ticket issuance at the point at which the ticket is issued. If the segments selected break a marriage, then the error response displays:
UNABLE TO ISSUE PARTIAL CONNECTION-TKT ENTIRE CONNECTION-1330
The only exception to this rule applies when issuing a ticket from a phase IV record. In this case, there is no married segment validation check performed.
Solution:
Issue the ticket for the complete itinerary or for all selected segments that qualify as married segments.
-or-
Phase IV the itinerary and issue the ticket(s).
Note: Your agency is responsible for the phase IV and for breaking married segment logic if a debit memo is issued by the carrier. See SabreTravelNetworkGuarantees for more information.
--------------------------------
Normally, depending on the service you are using to 'shop' for flights, there is a 'MarriageGrp' indicator stating that the segments are 'married'.

How can reserve Air Seats for all segments in a given PNR?

I am planning to use the <AirSeatRQ> request using Sabre's SOAP API, but according to the documentation, you have to request a seat assignment for each passenger on each segment with the user's preference.
Something like this according to the example on Dev Studio:
<AirSeatRQ ReturnHostCommand="false" TimeStamp="2011-10-27T15:30:00-06:00" Version="2.0.0">
<!--Repeat Factor=0-->
<Seats>
<Seat BoardingPass="true" ChangeOfGauge="true" NameNumber="1.1" Number="21A" Preference="AN" SegmentNumber="1"/>
</Seats>
</AirSeatRQ>
Also, according to the request documentation, the repeat factor for the <Seats> request is zero. Does that mean that if I want to assign seats for all passengers on all segments do I have to send several requests?
Ideally, I would like to have the seats for all passengers in all segments automatically assigned after reading the PNR. Is that possible through Web Services?
Checking the <PassengerDetailsRQ> XML Schema definition, an <AirSeatRQ> can be sent along. I guess you can perform a standalone <AirSeatRQ> request, but bundling it with the passenger details is easier and save us from making extra requests to Sabre's API.
You have to send a <Seat\> request for each passenger in each segment of the itinerary. This is a working example I did for a two legs itinerary, each leg consisting of two segments for two adults:
I'm omitting most of the passenger details properties and focusing on the AirSeat element:
<PassengerDetailsRQ Version="2.3.0">
<PriceQuoteInfo HaltOnError="true"></PriceQuoteInfo>
<SpecialReqDetails>
<AddRemarkRQ>
<RemarkInfo>
<Remark Code="H" Type="General">
<Text>THANK YOU FOR BOOKING MAURICIO CUENCA AIRLINES</Text>
</Remark>
</RemarkInfo>
</AddRemarkRQ>
<AirSeatRQ>
<Seats>
<Seat NameNumber="1.1" Preference="AN" SegmentNumber="1"/>
<Seat NameNumber="1.2" Preference="AN" SegmentNumber="2"/>
<Seat NameNumber="1.1" Preference="AN" SegmentNumber="3"/>
<Seat NameNumber="1.2" Preference="AN" SegmentNumber="4"/>
</Seats>
</AirSeatRQ>
<SpecialServiceRQ HaltOnError="true">
<SpecialServiceInfo></SpecialServiceInfo>
</SpecialServiceRQ>
</SpecialReqDetails>
<TravelItineraryAddInfoRQ HaltOnError="true">
<AgencyInfo></AgencyInfo>
<CustomerInfo></CustomerInfo>
</TravelItineraryAddInfoRQ>
</PassengerDetailsRQ>
This way, right after the PNR is created, all seats for all passengers in every segment are already assigned and there is no need for further requests asking for seat assignments.
that seems to be the case.
Testing multiple <Seat> elements inside <Seats> returns a schema validation error. Same when using multiple <Seats> elements.
Looks like the only option right now is to send multiple requests, one for each passenger on each segment.

Resources