Runbook: Repush Booking When Failed Push to OTA Service
| Service | Channelku V1 / Channelku V2 |
|---|---|
| Owner Team slack handle | [@bnl-team-a] |
| Team's Slack Channel | #bnl-ota-notification |
Table of Contents
Important Links
| Alert / Notification | incident.io alert with title Failed Push to OTA Service is raised when a booking's XML fails to be delivered to the OTA service |
|---|---|
| Manual Resend Endpoint | Resend Manual Booking |
| OTA Service Endpoint | OTA Service |
1. Triage
Quickly identify the affected booking and confirm whether it still needs to be repushed to the OTA service.
-
1. Get the Booking ID from the alert:
- Open the alert in incident.io and confirm the title is
Failed Push to OTA Service. - Copy the Booking ID from the alert details.
- Open the alert in incident.io and confirm the title is
-
2. Check whether the booking has already been handled:
- In incident.io, check whether another alert for the same Booking ID has already been acknowledged or resolved with a repush note by another engineer.
-
3. Check whether the OTA service is reachable:
curl -o /dev/null -s -w "%{http_code}" https://ota.bookandlink.com/healthExpected result:
200. If the result is5xx,000, or a timeout, the OTA service is experiencing issues.
2. Decision Point
Interpret the triage results using the following conditions:
-
IF the same Booking ID has already been repushed by another engineer (duplicate alert)...
- ➡️ Go to: False Alarm
-
IF the Booking ID has not been repushed yet...
- 🛑 Go to: True Incident
3. False Alarm
The booking has already been repushed by another engineer after the alert was raised. There is no active incident. However, the failure should still be monitored, as repeated alerts indicate the OTA service is unstable.
- Re-confirm in the other alert's note that the Booking ID matches and the repush returned the generated XML.
- Resolve the alert in incident.io with a note referring to the alert where the booking was already repushed.
4. True Incident
The booking's XML has not been delivered to the OTA service. Until it is repushed, the OTA availability for the booked dates is out of sync. The first priority is to repush the booking manually.
4.1. Recover the System
The following are the most likely root causes, ordered from most common to least common.
Potential Cause 1: Temporary Push Failure
The OTA service is healthy (health check returns 200), but the push for this booking failed once, e.g. due to a timeout or a short network issue.
Remediation Plan:
- Repush the booking manually by opening the resend endpoint in a browser, replacing
[token]and[booking_id]:Example for booking IDhttps://api-channelku.bookandlink.com/api/resend-manual-booking?token=[token]&booking_id=[booking_id]52675175:curl "https://api-channelku.bookandlink.com/api/resend-manual-booking?token=[token]&booking_id=52675175"
Verification:
- A successful repush returns the booking info and the generated XML:
Booking ID : 52675175
Booking Date : 2026-09-25
URL : https://ota.bookandlink.com/utility/ota_update.php?propertyid=3078&priceflag=0&alotflag=1&stopsellflag=0&minflag=0&inclusionflag=...
Generated XML :
<request>
<propertyid>3078</propertyid>
<otaids>5,6,10,12,13,14,34,43,79,103,161</otaids>
<bookingrowid>52675175</bookingrowid>
<callingLoc>Bookings by [user_email] ([ip_address])</callingLoc>
<timestamp></timestamp>
<updatereq priceflag="0" alotflag="1" stopsellflag="0" minflag="0" inclusionflag="0" ctaflag="0"></updatereq>
<daterange day="2026-10-05" rateplan_id="27302" Alot="22"></daterange>
<daterange day="2026-10-05" rateplan_id="27303" Alot="22"></daterange>
...
<daterange day="2026-10-09" rateplan_id="81710" Alot="18"></daterange>
</request> - Confirm the following in the response:
bookingrowidmatches the Booking ID from the alert.alotflag="1", which means an allotment update was sent.- There is a
daterangeentry for each stay date and rate plan of the booking.
Potential Cause 2: OTA Service is Down or Overloaded
The OTA service is unresponsive or returning errors, so the manual repush also fails (no Generated XML block in the response, or an error is returned).
Diagnostic Steps:
- Check whether the OTA service endpoint is reachable:
Expected result:
curl -o /dev/null -s -w "%{http_code}" https://ota.bookandlink.com/health200. If the result is5xx,000, or a timeout, the OTA service is experiencing issues.
Remediation Plan:
- If the OTA service is confirmed down, do not repeatedly force the manual repush — wait until the health check returns
200again. - Once the OTA service recovers, repush the booking using the steps in Potential Cause 1.
- If the OTA service stays down or the repush keeps failing while the health check returns
200, escalate to@bnl-team-ain #bnl-ota-notification with the Booking ID and the response.
Verification:
- The manual repush returns the generated XML as shown in Potential Cause 1.
4.2. Clean Up
Once the booking is successfully repushed, the next step is to close the alert, communicate with stakeholders, and ensure no other booking was missed.
-
Verify the repush response contains the generated XML with the correct
bookingrowid. -
Resolve the alert in incident.io with a note containing the Booking ID and the time of the repush.
-
Check for other open
Failed Push to OTA Servicealerts in incident.io and repeat this runbook for each Booking ID. -
Create or update the post-mortem ticket if several alerts came in within a short time, or the same booking keeps failing, with the following details:
- Timestamp of the initial failure and time of resolution.
- Identified root cause.
- Total number of affected bookings.
- Action items to prevent recurrence.
- Assign to
@bnl-devfor review in the next sprint.