2 Prerequisites

Recommended Tools

Tool Description Links
Github A Github repository containing both Oracle Hospitality REST API specifications and accompanying Postman Collections.

Documentation

Github hospitality API

Postman Collections In the postman-collections folder in Github, you can download and use the Postman Collections associated to the use cases explained in this guide.

Documentation

Tool

GraphiQL To better visualize the streaming API, a playground application is available that uses a tool called GraphiQL.

Documentation

Tool

Node Reference Implementation A reference implementation for the Streaming API in Node JS. Tool

Environment

OPERA Cloud Platform Module Description Minimum Version
OPERA Cloud Services The customer must have a subscription to OPERA Cloud Foundation. 23.5.x.x
Oracle Hospitality Integration Platform (OHIP)

For customers, OHIP is included in the subscription to OPERA Cloud Foundation.

Partners need a subscription to Oracle Hospitality Integration Cloud Service.

The latest released version. OHIP is a single version product.
OPERA Environment has Streaming API enabled (Optional) When a partner or customer wants to retrieve Business Events through the Streaming BE option.  

Configurations

To enable the ability to change Room Status, the following OPERA Control parameters must be set in OPERA Cloud Administration / Enterprise / OPERA Control / Room Management:
  • Set the OPERA Control Housekeeping Board active to see the current Room Status in OPERA Cloud UI and enable room status updates.
  • Set the OPERA Control Inspected active to enable updating the Room Status to "Inspected" status.
  • Set the OPERA Control Pick Up active to enable updating the Room Status to Inspected "Pick Up" Status.
  • Set the OPERA Control Out of Order active to set a room "Out of Order."
  • Set the OPERA Control Out of Service active to set a room "Out of Service."
  • Set the OPERA Control Turndown active to enable setting Turndown status.
  • To enable receiving OPERA Business Events for Room Status updates in OPERA Cloud, you must subscribe your OHIP application to the Streaming Business Event UPDATE ROOM STATUS.
  • To enable receiving OPERA Business Events for Out Of Order updates in OPERA Cloud, you must subscribe your OHIP application to the Streaming Business Events NEW OUT OF ORDER and UPDATE OUT OF ORDER.

To enable receiving OPERA Business Events for Out Of Service updates in OPERA Cloud, you must subscribe your OHIP application to the Streaming Business Events NEW OUT OF SERVICE and UPDATE OUT OF SERVICE.

For more details on how to configure Streaming Business Events, see Streaming API in the OHIP User Guide.

To send valid Out Of Order / Out Of Service Codes to OPERA Cloud, get the defined Out Of Order / Out Of Service reason codes and description from the OPERA Cloud Configuration:

Table 2-1 Configurations

Description Operation

To retrieve the defined Out of Service reason codes from OPERA Cloud, use the API Operation getOutOfOrderServiceReasonsand and store them in your configuration.

For more information on OPERA Cloud Houskeeping Out of Service reason codes, see Out of Order and Out of Service Reason Codes in the OPERA Cloud User Guide.

Get Out of Order Out of Service Reasons

GET {{HostName}}/rm/config/v1/hotels/{{HotelId}}/outOfOrderServiceReasons

Response:

{
    "outOfOrderServiceReasons": [
        {
            "description": "General Maintenance",
            "sequence": 2,
            "reasonCode": "GEN",
            "inactive": false,
            "includeInStatisticsYn": false,
            "deductYn": false,
            "returnTimeRequired": false,
            "hotelId": "{{HotelId}}",
            "managedBy": "PropertyManaged"
        },
        {
            "description": "Painting needed",
            "sequence": 4,
            "reasonCode": "PAINT",
            "inactive": false,
            "includeInStatisticsYn": false,
            "deductYn": false,
            "returnTimeRequired": false,
            "hotelId": "{{HotelId}}",
            "managedBy": "PropertyManaged"
        },
        {
            "description": "Broken Toilet",
            "reasonCode": "BROKEN",
            "inactive": false,
            "includeInStatisticsYn": false,
            "deductYn": false,
            "returnTimeRequired": false,
            "hotelId": "{{HotelId}}",
            "managedBy": "PropertyManaged"
        }
    ],
    "totalPages": 1,
    "offset": 20,
    "limit": 20,
    "hasMore": false,
    "totalResults": 3,
    "links": []
}

To retrieve the defined Rooms details from OPERA Cloud, use the Get Rooms operation.

Description Operation

Get the defined Rooms in OPERA Cloud that are used for Housekeeping Room Status / Guest Service Status.

Usually the Physical rooms are listed in the Housekeeping Grid, so the Search filter will be physical = true.

In the result, the room information will show "pseudo": false, meaning the room is not a pseudo room (which are rooms that do not exist physically and used for other purposes) and not listed in the Housekeeping grids.

Get Rooms

GET {{HostName}}/rm/config/v1/hotels/{{HotelId}}/rooms?physical=true

200 response

{
    "rooms": [
        {
            "room": [
                {
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": true,
                        "maximumOccupancy": 6,
                        "accessible": false,
                        "roomType": "CLASSIC",
                        "meetingRoom": false
                    },
                    "roomDescription": "Classic Room",
                    "description": {
                        "defaultText": "Classic Room",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "001",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateCode": "1-MBOERACK",
                    "rateAmount": {},
                    "maximumOccupancy": 6,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": true,
                        "maximumOccupancy": 6,
                        "accessible": false,
                        "roomType": "CLASSIC",
                        "meetingRoom": false
                    },
                    "roomDescription": "Classic Room",
                    "description": {
                        "defaultText": "Classic Room",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "002",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateCode": "1-MBOERACK",
                    "rateAmount": {},
                    "maximumOccupancy": 6,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": true,
                        "maximumOccupancy": 6,
                        "accessible": false,
                        "roomType": "CLASSIC",
                        "meetingRoom": false
                    },
                    "roomDescription": "Classic Room",
                    "description": {
                        "defaultText": "Classic Room",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "01",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateAmount": {},
                    "maximumOccupancy": 6,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": true,
                        "maximumOccupancy": 6,
                        "accessible": false,
                        "roomType": "CLASSIC",
                        "meetingRoom": false
                    },
                    "roomDescription": "Classic Room",
                    "description": {
                        "defaultText": "Classic Room",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "02",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateAmount": {},
                    "maximumOccupancy": 6,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": true,
                        "maximumOccupancy": 6,
                        "accessible": false,
                        "roomType": "CLASSIC",
                        "meetingRoom": false
                    },
                    "roomDescription": "Classic Room",
                    "description": {
                        "defaultText": "Classic Room",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "1",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateAmount": {},
                    "maximumOccupancy": 6,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": true,
                        "maximumOccupancy": 6,
                        "accessible": false,
                        "roomType": "CLASSIC",
                        "meetingRoom": false
                    },
                    "roomDescription": "Classic Room",
                    "description": {
                        "defaultText": "Classic Room",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "100",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateCode": "EURO",
                    "rateAmount": {
                        "amount": 100
                    },
                    "maximumOccupancy": 6,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": false,
                        "suite": true,
                        "roomClass": "COMP",
                        "houseKeeping": false,
                        "maximumOccupancy": 3,
                        "accessible": false,
                        "roomType": "CLASS",
                        "meetingRoom": false
                    },
                    "roomDescription": "Classic Room Component Rooms send to IFC",
                    "description": {
                        "defaultText": "Classic Room Component Rooms send to IFC",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "1000",
                    "meetingRoom": false,
                    "roomComponents": [
                        {
                            "qty": 3,
                            "description": "Classic Room",
                            "roomType": "CLASSIC",
                            "rooms": [
                                {
                                    "roomType": {
                                        "roomType": "CLASSIC"
                                    },
                                    "roomId": "118"
                                },
                                {
                                    "roomType": {
                                        "roomType": "CLASSIC"
                                    },
                                    "roomId": "119"
                                },
                                {
                                    "roomType": {
                                        "roomType": "CLASSIC"
                                    },
                                    "roomId": "120"
                                }
                            ]
                        }
                    ],
                    "rateAmount": {},
                    "maximumOccupancy": 3,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": true,
                        "maximumOccupancy": 6,
                        "accessible": false,
                        "roomType": "CLASSIC",
                        "meetingRoom": false
                    },
                    "roomDescription": "Classic Room",
                    "description": {
                        "defaultText": "Classic Room",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "101",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateAmount": {},
                    "maximumOccupancy": 6,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": true,
                        "maximumOccupancy": 6,
                        "accessible": false,
                        "roomType": "CLASSIC",
                        "meetingRoom": false
                    },
                    "roomDescription": "Classic Room",
                    "description": {
                        "defaultText": "Classic Room",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "102",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateAmount": {},
                    "maximumOccupancy": 6,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": true,
                        "maximumOccupancy": 6,
                        "accessible": false,
                        "roomType": "CLASSIC",
                        "meetingRoom": false
                    },
                    "roomDescription": "Classic Room",
                    "description": {
                        "defaultText": "Classic Room",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "103",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateAmount": {},
                    "maximumOccupancy": 6,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
            ],
            "hotelId": "{{HotelId}}"
        }
    ],
    "links": []
}