View file | ||
---|---|---|
|
To download above documents:
Click on desired document to open it. Then, click on the cloud symbol in the top right corner of your screen to download, save, or print.
Amtrak Rail Services
The train travel service is integrated with the online travel booking process. It lets you set up spending policies, and guides users to appropriate train options. Tickets can be picked up at a station kiosk or emailed.
Table of Contents | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
Benefits and Need to Know
Benefits and Need to Know | |
Benefits |
|
|
|
|
|
|
Need to Know |
Supported GDS
|
|
|
|
|
...
Areas to
...
Configuration
Configuring Agency Settings |
|
|
|
|
See below instructions on how to configure Agency Settings |
Keep in mind you can have Agency Settings programmed, but until you check the rail box under travel service rules, no action will be taken.
PNR Mapping
Clones over from Template site
We have provided scripts you can add to template and existing sites, if you would like to write the fields to the PNR. Please see below instructions on how to configure PNR Mapping
Note: If this is the first time programming Rail, please open a Deem Support Case. Deem will assist you with programming your site. If there are other scripts you may need please add them to the case.
Keep in mind you can have PNR mapping configured, but until you check the rail box under travel service rules, no action will be taken.
Private Rates
Clones over from Template site
Please see below steps with regards to configuring private rates
Keep in mind you can have private rates configured, but until you check the rail box under travel service rules, no action will be taken.
Travel Policy
Clones over from Template site
Click link for further information around Travel Policy Best Practices
Display Policy
Clones over from Template site
Click link for further information around Display Policy Best Practices
Travel Service Rules
Clones over from Template site
Check box located under service Rules to fully enable rail and to show as a booking option on the home page with air, car and hotel.
Note: You can have all of the above steps completed, but if you do not go to service rules to enable rail the client will not have the ability to book.
Click link for further information around Travel Service Rules
Agency Settings Configuration
...
Accessing Agency Settings
...
Agency Setting configurations will clone over to your template site.
Click on Services tab
Click on Travel Agency
...
Click on Agency Settings
...
Click on current Agency Setting
...
Sales Location: If a US airport code is entered, then it is US’s Amtrak train service that will be offered
...
Note: Please open Deem Support Case if this is the first time setting up Rail Services. As Deem will need to obtain the following information from SilverRail.
You can have one SilverRail contract for your entire Agency to apply to your client sites if the client is not booking rail with a Corporate Site Card.
If Client will use a Corporate Site card for rail services you will need to open a Deem Support Case. Deem will need to notify Silverrail and they will provide Identifiers listed below.
Channel:
Enter the Deem-supplied Channel code (all capital letters).
Contact your Deem representative if you did not receive this code
Agency Identifier:
Enter the Deem-supplied Agency Identifier (all capital letters).
Contact your Deem representative if you did not receive this identifier.
Customer Identifier:
Enter the Deem-supplied Customer Identifier (all capital letters)
Contact your Deem representative if you did not receive this identifier, which defines a specific customer and is created during implementation. The field is used for reporting only.
Agency Identifier:
Enter the Deem-supplied Customer Identifier (all capital letters)
Contact your Deem representative if you did not receive this identifier, which defines a specific customer and is created during implementation
Customer Identifier:
Enter the Deem-supplied Customer Identifier (all capital letters)
Contact your Deem representative if you did not receive this identifier, which defines a specific customer and is created during implementation
Client ID Number:
Enter the number to be used when optional reporting is required
Customer DK Number:
Enter the number to be used when optional reporting is needed
...
Amtrak Specific Support: Follow these steps:
Add passive train segment to primary GDS?:
Select Yes or No
A passive segment is a set of trip information entered into the GDS that does not cause a ticket to be issued by the GDS. For example, a traveler may be taking a train between cities, and although you do not use the GDS to issue the train ticket, you may want all of the trip information to be in one place for the traveler's benefit, and so that agents can generate itineraries or make notes.
By default, no information is saved in the GDS unless you select Yes.
See below for examples of passive segments
Message for Train support procedure and phone numbers:
Enter the message to appear to the traveler on the purchase page and on confirmation messages.
Note: Do not include HTML tags or travel lingo
Train support phone number for mobile client:
Enter the phone number to appear in the mobile client if the number is different from other support numbers
...
Scroll to the bottom and click Save
...
Private Rate Configuration
...
Breakdown
...
Steps to Configure
...
Please take the following steps if your client or TMC has a private rate with Amtrak
Click on Service Tab
Click on Private Rates
...
Click on Train Rates
...
Click on Add a New Train Private Rate
...
Check box to the left of Activate this private rate
Private Rate Name: Enter Name
Example: Amtrak Private Rate
Enter the effective date range for this rate record: Not required, you can leave blank unless your client has a specific start and end date for their private rate.
Select a train carrier: Select Amtrak from dropdown menu
Discount Code: Enter Customer or TMC Amtrak Discount Code
Click Save
...
Click on Back to Private Rates:
...
Click on Train Rates Sets
Click on Add A New Train Private Rate Set
...
Private Rate Set Name: Enter Name of Rate
Example: Amtrak Private Rate
Click Add Rates
...
Click on radio button to the left of the rate you would like to add to the set
Click Ok
...
Click Save
...
Update in Travel Service Rules
...
Commit Changes and Test
...
Be sure to commit all changes you have completed during this configuration.
Click Changes not applied in the upper right hand corner
...
Click on Commit
...
Success message will be displayed
...
Now Test to ensure you are seeing rail bookings and that they are being processed properly. Ensure you are booking refundable rates, if you intend to complete a test booking.
Passive Segments
Sabre Passive Segment
...
Segment Example
...
Breakdown
...
0RAL2VGK1NYPBOS19DEC-LV-900A/AR-100P/NA- TRAIN 66/SI-BKD ONLINE/CF-123ABC
...
0RAL = constant
2V = Rail code – 2V is Amtrak code
GK1 = Constant
NYP = Departure Station
BOS = Arrival station
19DEC = Travel date
-LV- = Constant
900A = Departure time /DT-=Constant
19DEC = Arrival date
/AR- = Constant
100p = Arrival time
/NA- = Constant
Amtrak = Carrier code
66 = Train number
SI-BKD ONLINE/CF- = Constant
ABCDEF- = Record Locator
Apollo Passive Segment
...
Segment Example
...
Breakdown
...
02V95Y24SEPNYPPHLBK1/1035A1157A
...
02V = Constant
95Y = Train number and class
24SEP = Departure Date
NYP = Departure Station code
PHL = Arrival Station code
BK1/ = Constant
1035A = Departure Time
1157A = Arrival Time
Worldspan Passive Segment
...
Segment Example
...
Breakdown
...
TN2VMK1TRN24MAR/CC1-NYP/CC2-WAS/AN-AMTRAK 1229/TD-1000AM/TA-1130AM/CF-1234234
...
TN = Constant
2V = Carrier Code
MK1TRN = Constant
24MAR = Departure Date
/CC1- = Constant
NYP = Departure Station code
/CC2- = Constant
WAS = Arrival Station Code
/AN- = Constant
AMTRAK 1229 = Carrier Name <sp> Train number
/TD- = Constant
1000AM = Departure Time
/TA- = Constant
1130AM = Arrival Time
/CF- = Constant
1234234 = Amtrak Record Locator
PNR Scripts
Sabre PNR Editor Scripts
...
Function
...
Script
...
Error when Form of Payment is Declined
...
//AMTRAK RECORD LOCATOR - INVALID
if((UserPnrData.DataType=="hold")||(UserPnrData.DataType=="new"))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
var rr = rl.RailSegment[0].RecordLocator.Locator.substring (0,9);
{if (rr =="B-REARDEN") {out.print("5H-SPCL-VERIFY TICKET STATUS W AMTRAK POSS DECLINED FOP");}
}}}
...
For when no confirmation is received from Amtrak regardless of the reason (other than declined FOP)
...
//AMTRAK RECORD LOCATOR - NOT RECEIVED
if((UserPnrData.DataType=="hold")||(UserPnrData.DataType=="new"))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
var rr = rl.RailSegment[0].RecordLocator.Locator;
{if ((rr =="")||(rr==undefined))
{out.print("5H-SPCL-VERIFY TICKET STATUS WITH AMTRAK");}}}}
...
Amtrak Confirmation Number
...
//AMTRAK RECORD LOCATOR
if ( ((UserPnrData.DataType=="new") || (UserPnrData.DataType == "hold")) &&
(UserPnrData.UserBooking.RailBooking != undefined))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
{out.print("5A$-AMTRAK LOC " + rl.RailSegment[0].RecordLocator.Locator);}}}
...
No Passive Segments Needed
...
//AMTRAK RECORD LOCATOR when no passive segments are needed
if ( ((UserPnrData.DataType=="new") || (UserPnrData.DataType == "hold")) &&
(UserPnrData.UserBooking.RailBooking != undefined))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if ((rl.RailSegment.length() > 0)&&((UserPnrData.UserBooking.HotelBooking != undefined)||(UserPnrData.UserBooking.CarBooking != undefined)))
{out.print("5H-AMTRAK LOC " + rl.RailSegment[0].RecordLocator.Locator);}}}
...
Class of Service Booked
...
//AMTRAK CLASS OF SERVICE
if ( ((UserPnrData.DataType=="new") || (UserPnrData.DataType == "purchase_hold")) &&
(UserPnrData.UserBooking.RailBooking.PassengerInfo != undefined))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
{out.print("5A$-AMTRAK CLASS OF SVC " + rl.RailSegment[0].ClassCode);}}}
...
Form of Payment
...
//RAIL FOP
if((UserPnrData.DataType=="purchase_hold")||(UserPnrData.DataType=="new")){with (UserPnrData.UserSession.PurchaseInfo.RailBilling) {
var cardtype;
if (BrandType.substring(0,4) == "Visa") { cardtype = "VI"; } else if (BrandType.substring(0,4) == "Amer") { cardtype = "AX"; } else if (BrandType.substring(0,4) == "Mast") { cardtype = "CA"; } else if (BrandType.substring(0,4) == "Disc") { cardtype = "DS"; } else if (BrandType.substring(0,3) == "JCB") { cardtype = "JC"; } else if (BrandType.substring(0,4) == "Cart") { cardtype = "CB"; } else if (BrandType.substring(0,4) == "Dine") { cardtype = "DC"; } else if (BrandType.substring(0,4) == "Univ") { cardtype = "TP"; } else if (BrandType.substring(0,4) == "EnRo") { cardtype = "ER"; } else { cardtype = "XX" }
var year=ExpirationDate.Year;
var myyear=year.substring(2,4);
var mymonth=ExpirationDate.Month;
if (mymonth == "JAN") {mymonth = "01";}
else if (mymonth =="FEB") {mymonth = "02";}
else if (mymonth == "MAR") {mymonth = "03";}
else if (mymonth == "APR") {mymonth = "04";}
else if (mymonth == "MAY") {mymonth = "05";}
else if (mymonth == "JUN") {mymonth = "06";}
else if (mymonth == "JUL") {mymonth = "07";}
else if (mymonth == "AUG") {mymonth = "08";}
else if (mymonth == "SEP") {mymonth ="09";}
else if (mymonth =="OCT") {mymonth = "10";}
else if (mymonth == "NOV") {mymonth = "11";}
else if (mymonth =="DEC") {mymonth = "12";}
if (UserPnrData.UserSession.PurchaseInfo.RailBilling != undefined)
out.print("50/-*" + cardtype + CardNumber + "$" + mymonth + "/" + myyear + "-xn");}}
...
Total Fare
...
//FARE QUOTE - RAIL
if(((UserPnrData.DataType == "new") || (UserPnrData.DataType=="purchase_hold") || (UserPnrData.DataType == "change")) &&
(UserPnrData.UserBooking.RailBooking.PassengerInfo != undefined))
{out.print("5A$AMK FARE QUOTE - " + UserPnrData.UserBooking.RailBooking.RailFare.RailTotalFare.TotalFare);}
Apollo PNR Editor Scripts
...
Function
...
Script
...
Error when Form of Payment is Declined
...
//AMTRAK RECORD LOCATOR - INVALID
if((UserPnrData.DataType=="hold")||(UserPnrData.DataType=="new"))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
var rr = rl.RailSegment[0].RecordLocator.Locator.substring (0,9);
{if (rr =="B-REARDEN") {out.print("@:5A/SPCL-VERIFY TICKET STATUS W AMTRAK POSS DECLINED FOP");}}}}
...
For when no confirmation is received from Amtrak regardless of the reason (other than declined FOP)
...
//AMTRAK RECORD LOCATOR - NOT RECEIVED
if((UserPnrData.DataType=="hold")||(UserPnrData.DataType=="new"))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
var rr = rl.RailSegment[0].RecordLocator.Locator;
{if ((rr =="")||(rr==undefined))
{out.print("@:5A/SPCL-VERIFY TICKET STATUS WITH AMTRAK");}}}}
...
Amtrak Confirmation Number
...
//AMTRAK RECORD LOCATOR
if ( ((UserPnrData.DataType=="new") || (UserPnrData.DataType == "hold")) &&
(UserPnrData.UserBooking.RailBooking != undefined))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
{out.print("@:5A/AMTRAK LOC " + rl.RailSegment[0].RecordLocator.Locator);}}}
...
No Passive Segments Needed
...
//AMTRAK RECORD LOCATOR when no passive segments are needed
if ( ((UserPnrData.DataType=="new") || (UserPnrData.DataType == "hold")) &&
(UserPnrData.UserBooking.RailBooking != undefined))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if ((rl.RailSegment.length() > 0)&&((UserPnrData.UserBooking.HotelBooking !=
undefined)||(UserPnrData.UserBooking.CarBooking != undefined)))
{out.print("@:5A/AMTRAK LOC " + rl.RailSegment[0].RecordLocator.Locator);}}}
...
Class of Service Booked
...
//AMTRAK CLASS OF SERVICE
if ( ((UserPnrData.DataType=="new") || (UserPnrData.DataType == "purchase_hold")) &&
(UserPnrData.UserBooking.RailBooking.PassengerInfo != undefined))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
{out.print("@:5A/AMTRAK CLASS OF SVC " + rl.RailSegment[0].ClassCode);}}}
...
Form of Payment
...
//RAIL FOP
if((UserPnrData.DataType=="purchase_hold")||(UserPnrData.DataType=="new")){with
(UserPnrData.UserSession.PurchaseInfo.RailBilling) {
var cardtype;
if (BrandType.substring(0,4) == "Visa") { cardtype = "VI"; } else if (BrandType.substring(0,4) == "Amer") { cardtype =
"AX"; } else if (BrandType.substring(0,4) == "Mast") { cardtype = "CA"; } else if (BrandType.substring(0,4) == "Disc") {
cardtype = "DS"; } else if (BrandType.substring(0,3) == "JCB") { cardtype = "JC"; } else if (BrandType.substring(0,4)
== "Cart") { cardtype = "CB"; } else if (BrandType.substring(0,4) == "Dine") { cardtype = "DC"; } else if
(BrandType.substring(0,4) == "Univ") { cardtype = "TP"; } else if (BrandType.substring(0,4) == "EnRo") { cardtype =
"ER"; } else { cardtype = "XX" }
var year=ExpirationDate.Year;
var myyear=year.substring(2,4);
var mymonth=ExpirationDate.Month;
if (mymonth == "JAN") {mymonth = "01";}
else if (mymonth =="FEB") {mymonth = "02";}
else if (mymonth == "MAR") {mymonth = "03";}
else if (mymonth == "APR") {mymonth = "04";}
else if (mymonth == "MAY") {mymonth = "05";}
else if (mymonth == "JUN") {mymonth = "06";}
else if (mymonth == "JUL") {mymonth = "07";}
else if (mymonth == "AUG") {mymonth = "08";}
else if (mymonth == "SEP") {mymonth ="09";}
else if (mymonth =="OCT") {mymonth = "10";}
else if (mymonth == "NOV") {mymonth = "11";}
else if (mymonth =="DEC") {mymonth = "12";}
if (UserPnrData.UserSession.PurchaseInfo.RailBilling != undefined)
out.print("F-*" + cardtype + CardNumber + "/D" + mymonth + myyear);}}
...
Total Fare
...
//FARE QUOTE - RAIL
if(((UserPnrData.DataType == "new") || (UserPnrData.DataType=="purchase_hold") || (UserPnrData.DataType ==
"change")) &&
(UserPnrData.UserBooking.RailBooking.PassengerInfo != undefined))
{out.print("@:5A/AMK FARE QUOTE - " + UserPnrData.UserBooking.RailBooking.RailFare.RailTotalFare.TotalFare);}
Worldspan PNR Editor Scripts
Function
Script
Error when Form of Payment is Declined
//AMTRAK RECORD LOCATOR – INVALID
if((UserPnrData.DataType=="hold")||(UserPnrData.DataType=="new"))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
var rr = rl.RailSegment[0].RecordLocator.Locator.substring (0,9);
{if (rr =="B-REARDEN") {out.print("5.O SPCL-VERIFY TICKET STATUS W AMTRAK POSS DECLINED FOP");}}}}
For when no confirmation is received from Amtrak regardless of the reason (other than declined FOP)
//AMTRAK RECORD LOCATOR - NOT RECEIVED
if((UserPnrData.DataType=="hold")||(UserPnrData.DataType=="new"))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
var rr = rl.RailSegment[0].RecordLocator.Locator;
{if ((rr =="")||(rr==undefined))
{out.print("5.O SPCL-VERIFY TICKET STATUS WITH AMTRAK");}}}}
Amtrak Confirmation Number
//AMTRAK RECORD LOCATOR
if ( ((UserPnrData.DataType=="new") || (UserPnrData.DataType == "hold")) &&
(UserPnrData.UserBooking.RailBooking != undefined))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
{out.print("@:5A/AMTRAK LOC " + rl.RailSegment[0].RecordLocator.Locator);}
}}//AMTRAK RECORD LOCATOR
if ( ((UserPnrData.DataType=="new") || (UserPnrData.DataType == "hold")) &&
(UserPnrData.UserBooking.RailBooking != undefined))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
{out.print("5.O AMTRAK LOC " + rl.RailSegment[0].RecordLocator.Locator);}}}
No Passive Segments Needed
//AMTRAK RECORD LOCATOR when no passive segments are needed
if ( ((UserPnrData.DataType=="new") || (UserPnrData.DataType == "hold")) &&
(UserPnrData.UserBooking.RailBooking != undefined))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if ((rl.RailSegment.length() > 0)&&((UserPnrData.UserBooking.HotelBooking !=
undefined)||(UserPnrData.UserBooking.CarBooking != undefined)))
{out.print("5.O AMTRAK LOC " + rl.RailSegment[0].RecordLocator.Locator);}}}}
Class of Service Booked
//AMTRAK CLASS OF SERVICE
if ( ((UserPnrData.DataType=="new") || (UserPnrData.DataType == "purchase_hold")) &&
(UserPnrData.UserBooking.RailBooking.PassengerInfo != undefined))
{var rl = UserPnrData.UserBooking.RailBooking.RailLeg;
if (rl.length() > 0)
{if (rl.RailSegment.length() > 0)
{out.print("5.O AMTRAK CLASS OF SVC " + rl.RailSegment[0].ClassCode);}}}
Form of Payment
//RAIL FOP
if((UserPnrData.DataType=="purchase_hold")||(UserPnrData.DataType=="new")){with
(UserPnrData.UserSession.PurchaseInfo.RailBilling) {
var cardtype;
if (BrandType.substring(0,4) == "Visa") { cardtype = "VI"; } else if (BrandType.substring(0,4) == "Amer") { cardtype =
"AX"; } else if (BrandType.substring(0,4) == "Mast") { cardtype = "CA"; } else if (BrandType.substring(0,4) == "Disc") {
cardtype = "DS"; } else if (BrandType.substring(0,3) == "JCB") { cardtype = "JC"; } else if (BrandType.substring(0,4)
== "Cart") { cardtype = "CB"; } else if (BrandType.substring(0,4) == "Dine") { cardtype = "DC"; } else if
(BrandType.substring(0,4) == "Univ") { cardtype = "TP"; } else if (BrandType.substring(0,4) == "EnRo") { cardtype =
"ER"; } else { cardtype = "XX" }
var year=ExpirationDate.Year;
var myyear=year.substring(2,4);
var mymonth=ExpirationDate.Month;
if (mymonth == "JAN") {mymonth = "01";}
else if (mymonth =="FEB") {mymonth = "02";}
else if (mymonth == "MAR") {mymonth = "03";}
else if (mymonth == "APR") {mymonth = "04";}
else if (mymonth == "MAY") {mymonth = "05";}
else if (mymonth == "JUN") {mymonth = "06";}
else if (mymonth == "JUL") {mymonth = "07";}
else if (mymonth == "AUG") {mymonth = "08";}
else if (mymonth == "SEP") {mymonth ="09";}
else if (mymonth =="OCT") {mymonth = "10";}
else if (mymonth == "NOV") {mymonth = "11";}
else if (mymonth =="DEC") {mymonth = "12";}
if (UserPnrData.UserSession.PurchaseInfo.RailBilling != undefined)
out.print("50/-*" + cardtype + CardNumber + "$" + mymonth + "/" + myyear + "-xn");}}
Total Fare
//FARE QUOTE - RAIL
if(((UserPnrData.DataType == "new") || (UserPnrData.DataType=="purchase_hold") || (UserPnrData.DataType ==
"change")) &&
(UserPnrData.UserBooking.RailBooking.PassengerInfo != undefined))
{out.print("5.O AMK FARE QUOTE - " + UserPnrData.UserBooking.RailBooking.RailFare.RailTotalFare.TotalFare);}.
Amtrak Specific Support: Follow these steps:
| |
PNR Mapping |
|
Rail Private Rates |
|
Travel Policy |
Note: For Acela to appear you must allow users to book Business Class.
|
Display Configurations |
|
Service Rules |
Note: To enable users to book rail, you must enable it within Service Rules. Note: You can have all of the above steps completed, but if you do not go to service rules to enable rail the client will not have the ability to search or book Amtrak.
|
Commit Changes and Test |
Note: Book refundable rates if you intend to complete a test booking. |
Passive Segments
Sabre Passive Segment
Segment Example | Breakdown |
0RAL2VGK1NYPBOS19DEC-LV-900A/AR-100P/NA- TRAIN 66/SI-BKD ONLINE/CF-123ABC |
|
Apollo Passive Segment
Segment Example | Breakdown |
02V95Y24SEPNYPPHLBK1/1035A1157A |
|
Worldspan Passive Segment
Segment Example | Breakdown |
TN2VMK1TRN24MAR/CC1-NYP/CC2-WAS/AN-AMTRAK 1229/TD-1000AM/TA-1130AM/CF-1234234 |
|