Skip to main content

EP-014: Notification & Communication Engine

FieldValue
Epic IDEP-014
Epic NameNotification & Communication Engine
OwnerCommunication Module Lead
Created2026-03-05
Last Updated2026-03-05
StatusIn Progress
PriorityP1 - High

1. Business Objective​

Deliver multi-channel guest communication for booking confirmations, pre-arrival information, in-stay service updates, and post-stay feedback requests -- replacing manual phone calls and paper notices that Indian hotels currently rely on. A typical 100-room hotel makes 150-200 manual phone calls daily for confirmations, reminders, and follow-ups. Automated communication reduces this by 80%, improves guest experience with timely information, and increases direct booking repeat rates by 15-20% through post-stay engagement. WhatsApp Business API is especially critical for Indian guests, with 90%+ smartphone penetration and WhatsApp as the dominant messaging platform.


2. Audience​

RoleInteraction
GuestReceives confirmations, pre-arrival info, invoices, feedback requests
Front Desk AgentTriggers manual notifications, views delivery status, agent handoff
Marketing ManagerTemplate management, trigger configuration, engagement analytics

3. Scope​

3.1 In Scope​

  • Email notifications via SendGrid (transactional: confirmations, invoices, receipts)
  • SMS notifications via Twilio (OTP, booking confirmations, reminders)
  • WhatsApp Business API integration (booking updates, pre-arrival, room service catalog)
  • Push notifications via Expo (mobile app alerts for checked-in guests)
  • Template management (multilingual: English, Hindi, regional languages)
  • Automated trigger configuration (event-driven via Kafka consumer)
  • Delivery tracking and analytics (sent, delivered, read, failed per channel)
  • WhatsApp catalog for room service / in-room dining ordering
  • Agent handoff from chatbot/WhatsApp to live front desk agent
  • DND (Do Not Disturb) and opt-out management (TRAI DND compliance)
  • Scheduled notifications (e.g., pre-arrival email 48 hours before check-in)

3.2 Out of Scope​

  • Marketing campaign management and segmentation (covered in EP-010 CRM)
  • AI chatbot conversation logic (covered in EP-013 AI)
  • PBX / in-room phone integration (covered in EP-005 Front Desk)
  • Social media management and posting

4. Current Implementation Status​

4.1 Backend (01-hmp-backend - Notification Service)​

ComponentStatusNotes
Kafka Event ConsumerBuiltListens for reservation, guest, folio events
Email via SendGridPartialIntegration code exists, not tested with live API key
SMS via TwilioPartialIntegration code exists, not tested with live credentials
WhatsApp Business APINot StartedRequires Meta Business verification
Push via ExpoPartialSDK integrated, mobile app token collection pending
Template ManagementBuiltCRUD with variable substitution, multilingual
Delivery TrackingBuiltStatus: QUEUED, SENT, DELIVERED, FAILED
Read ReceiptsNot StartedProvider webhook handlers not implemented
Automated TriggersPartialCore triggers work, custom trigger UI incomplete
DND / Opt-OutPartialSchema exists, TRAI DND check not integrated
Agent HandoffNot StartedNo live agent routing

4.2 Dashboard (02-hmp-web-dashboard)​

ComponentStatusNotes
Template EditorBuiltRich text with variable placeholders
Notification LogBuiltFilterable list of all sent notifications
Delivery AnalyticsPartialAggregate counts, no per-channel breakdown
Trigger Configuration UIPartialSome triggers editable, full config wizard not done
Manual Send from ProfileBuiltSend email/SMS from guest profile page
WhatsApp Thread ViewNot StartedNo WhatsApp conversation interface

5. Gap Analysis​

#GapImpactEffortPriority
1SendGrid/Twilio not tested with live credentialsCritical - no real notifications sendingSP0
2WhatsApp Business API not set upHigh - primary communication channel in IndiaLP1
3Read receipts not implementedMedium - engagement tracking incompleteMP2
4Agent handoff not builtHigh - guests with complex queries stuckLP1
5TRAI DND compliance not enforcedHigh - regulatory violation riskSP0
6Trigger configuration UI incompleteMedium - custom triggers need developerMP2
7WhatsApp room service catalogLow - convenience featureLP3

6. User Stories Summary​

Story IDTitlePriorityPointsSprintStatus
US-014-01Email Notifications (SendGrid)P081Partial
US-014-02SMS Notifications (Twilio)P081Partial
US-014-03Automated Event TriggersP082Partial
US-014-04Template ManagementP151Built
US-014-05Delivery Tracking & AnalyticsP152Partial
US-014-06WhatsApp Business API IntegrationP1133Not Started
US-014-07Push Notifications (Expo)P283Partial
US-014-08DND & Opt-Out ManagementP152Partial
US-014-09Agent Handoff (WhatsApp/Chat)P184Not Started
US-014-10WhatsApp Room Service CatalogP385Not Started
US-014-11Scheduled NotificationsP253Partial

7. Dependencies​

DependencyTypeEpic/ServiceStatus
Reservation events (Kafka)UpstreamEP-003 / reservationAvailable
Guest profile (email, phone)UpstreamEP-004 / guestAvailable
Frontdesk events (check-in/out)UpstreamEP-005 / frontdeskAvailable
Folio events (invoice generated)UpstreamEP-005 / frontdeskAvailable
AI Concierge (chatbot escalation)PeerEP-013 / aiAvailable
Kafka event busInfraDocker / KafkaAvailable
Redis (rate limiting, queue)InfraDocker / RedisAvailable
SendGrid accountExternalEmail providerConfigured
Twilio accountExternalSMS providerConfigured
WhatsApp Business API (Meta)ExternalMeta/FacebookNot Ready
Expo Push serviceExternalExpoNot Ready

8. Epic-Level Acceptance Criteria​

  1. AC-EP-014-01: Booking confirmation emails and SMS are sent within 30 seconds of reservation creation with correct guest details, dates, and hotel information.
  2. AC-EP-014-02: All automated triggers (booking, check-in, check-out, invoice, feedback) fire correctly based on Kafka events without manual intervention.
  3. AC-EP-014-03: Delivery status (sent, delivered, read, failed) is tracked for every notification across all channels.
  4. AC-EP-014-04: WhatsApp messages are sent only to guests who have opted in, and DND preferences are enforced per TRAI regulations.
  5. AC-EP-014-05: Agent handoff from WhatsApp/chatbot to a live front desk agent completes within 2 minutes with full conversation context transferred.
  6. AC-EP-014-06: Templates support English and Hindi with dynamic variable substitution and proper formatting per channel.

9. KPIs​

KPITargetMeasurement Method
Email delivery rate> 98%Delivered / sent (SendGrid)
SMS delivery rate> 95%Delivered / sent (Twilio)
WhatsApp delivery rate> 99%Delivered / sent (WhatsApp API)
Notification send latency< 30 secondsEvent to send timestamp delta
Email open rate> 40%Unique opens / delivered
WhatsApp read rate> 85%Read receipts / delivered
Feedback survey response rate> 25%Responses / requests sent
DND compliance rate100%Zero DND violations

10. Detailed User Stories​


US-014-01: Email Notifications (SendGrid)​

As a Guest, I want to receive email notifications for booking confirmations, pre-arrival information, invoices, and feedback requests, So that I have a written record of my hotel interactions.

Priority: P0 | Points: 8 | Sprint: 1 | Status: Partial

Implementation Status​

SendGrid integration code exists with API key config. Email templates for booking confirmation, cancellation, check-in welcome, invoice, and feedback request are defined with variable placeholders. Send pipeline queues via Redis. Not tested with live SendGrid credentials -- logs email content in development.

Acceptance Criteria​

Scenario: Send booking confirmation email
Given guest "Priya Sharma" makes a reservation for March 15-18
And her email is "priya.sharma@email.com"
When the Kafka event "reservation.confirmed" is consumed
Then an email is sent via SendGrid within 30 seconds containing:
| Field | Value |
| Subject | Booking Confirmed - Hotel Sapphire |
| Confirmation # | HTL-2026-03150001 |
| Check-in | March 15, 2026 (2:00 PM IST) |
| Check-out | March 18, 2026 (12:00 PM IST) |
| Room Type | Deluxe King |
| Rate | INR 5,000/night + GST |
And the email includes hotel address, Google Maps link, and contact number
And the delivery status is tracked (QUEUED -> SENT -> DELIVERED)

Scenario: Send GST invoice email at checkout
Given guest "Amit Patel" checks out with a settled folio
When the Kafka event "guest.checked_out" is consumed
Then an invoice email is sent with the GST-compliant PDF attached
And the email body includes a feedback survey link
And the invoice shows GSTIN, SAC codes, and CGST/SGST or IGST breakup

Scenario: Handle email bounce
Given an email to "invalid@nowhere.test" bounces
When SendGrid reports the bounce via webhook
Then the notification status updates to "FAILED" with reason "Hard bounce"
And the guest profile is flagged "Email invalid"
And no further emails are attempted to this address until updated

US-014-02: SMS Notifications (Twilio)​

As a Guest, I want to receive SMS notifications for OTP verification, booking confirmations, and check-in reminders on my Indian mobile number, So that I stay informed even without internet access.

Priority: P0 | Points: 8 | Sprint: 1 | Status: Partial

Implementation Status​

Twilio integration code exists. SMS templates for OTP, booking confirmation (short), check-in reminder, and checkout thank you defined. India-specific: transactional vs promotional route distinction scaffolded but not fully configured. TRAI sender ID (HTLSAP) registration not completed.

Acceptance Criteria​

Scenario: Send booking confirmation SMS
Given guest "Rahul Verma" makes a reservation, mobile "+91 98765 43210"
When the Kafka event "reservation.confirmed" is consumed
Then an SMS is sent via Twilio transactional route:
"Dear Rahul, your booking at Hotel Sapphire is confirmed! Conf#: HTL-2026-03150001. Check-in: 15 Mar, 2:00 PM. Room: Deluxe King. Call +91-22-12345678 for help. -Hotel Sapphire"
And the SMS uses the registered sender ID "HTLSAP"
And delivery status is tracked via Twilio callback

Scenario: Send OTP for express check-in verification
Given guest "Sneha Reddy" initiates online express check-in
When OTP verification is triggered
Then a 6-digit OTP is sent: "Your OTP for Hotel Sapphire check-in is 834521. Valid for 10 minutes. Do not share."
And the OTP expires after 10 minutes
And maximum 3 attempts are allowed before lockout for 30 minutes

Scenario: Respect TRAI DND for promotional SMS
Given guest "Vikram Singh" mobile "+91 99887 76655" is on TRAI DND registry
And the notification type is "PROMOTIONAL" (e.g., weekend offer)
When the send pipeline processes the notification
Then the SMS is blocked: "TRAI DND registered - promotional SMS not sent"
And transactional SMS (booking confirmation, OTP) remain allowed per TRAI rules
And the block is logged with DND check timestamp

US-014-03: Automated Event Triggers​

As a Marketing Manager, I want to configure automated notifications triggered by hotel events (booking, check-in, check-out), So that guests receive timely communications without manual effort.

Priority: P0 | Points: 8 | Sprint: 2 | Status: Partial

Implementation Status​

Core triggers configured: reservation.confirmed (email + SMS), guest.checked_in (welcome SMS), guest.checked_out (invoice email + feedback email at +2 hours). Kafka consumer dispatches notifications based on trigger rules. Custom trigger creation UI (delay rules, conditions, channel selection) is partially built.

Acceptance Criteria​

Scenario: Pre-arrival email trigger (48 hours before check-in)
Given the trigger "Pre-Arrival Info" is configured:
| Event | reservation.confirmed |
| Delay | 48 hours before check_in_date |
| Channel | Email |
| Template | Pre-Arrival Information |
| Condition | Reservation status = CONFIRMED |
When a guest's check-in is 48 hours away
Then the pre-arrival email is sent automatically
And includes: hotel directions, parking info, check-in time, local weather, express check-in link
And if the reservation was cancelled, the notification is skipped

Scenario: Feedback request 2 hours after checkout
Given guest "Meera Joshi" checks out at 11:00 AM
And the feedback trigger is set for +2 hours after checkout
When 1:00 PM arrives
Then a feedback request is sent via email and WhatsApp (if opted in)
And includes a unique survey link pre-filled with her reservation details
And the survey covers: overall experience, cleanliness, food, staff, value

Scenario: Create custom trigger via UI
Given the marketing manager wants to send a "Happy Anniversary" message
When they create a custom trigger:
| Event | guest.checked_in |
| Condition | reservation.special_occasion = "Anniversary"|
| Delay | Immediately upon check-in |
| Channel | WhatsApp + Room Note |
| Template | Anniversary Welcome |
Then the trigger is saved and active
And anniversary guests receive a personalized welcome upon check-in

US-014-04: Template Management​

As a Marketing Manager, I want to create and manage notification templates with dynamic variables and multilingual support, So that all guest communications are professional, consistent, and localized.

Priority: P1 | Points: 5 | Sprint: 1 | Status: Built

Implementation Status​

Template CRUD with rich text editor (email), plain text (SMS), and structured format (WhatsApp per Meta requirements). Variables: {{guest_name}}, {{confirmation_number}}, {{check_in_date}}, {{check_out_date}}, {{room_type}}, {{rate}}, {{hotel_name}}, {{hotel_phone}}. English and Hindi versions supported. SMS templates validated for 160-char limit.

Acceptance Criteria​

Scenario: Create bilingual booking confirmation template
Given the marketing manager creates a new template "booking_confirmation"
When they define the English version:
"Dear {{guest_name}}, your reservation {{confirmation_number}} at {{hotel_name}} is confirmed. Check-in: {{check_in_date}} (2:00 PM). Room: {{room_type}} at INR {{rate}}/night. For help: {{hotel_phone}}"
And the Hindi version:
"Namaste {{guest_name}}, {{hotel_name}} mein aapka reservation {{confirmation_number}} confirm hua. Check-in: {{check_in_date}} (2:00 PM). Room: {{room_type}}, INR {{rate}}/raat. Madad ke liye: {{hotel_phone}}"
Then both versions are saved with the template
And the language is selected based on the guest's profile preference
And a preview with sample data is available for both languages

Scenario: Validate SMS template character limit
Given an SMS template exceeds 160 characters
When the marketing manager saves the template
Then a warning shows: "Template is 185 characters (25 over limit). This will be sent as 2 SMS segments."
And the cost implication is noted (2 SMS credits per send)
And the manager can shorten the text or accept multi-segment delivery

US-014-05: Delivery Tracking & Analytics​

As a Marketing Manager, I want to track delivery status and engagement metrics for all notifications, So that I can ensure communications are reaching guests and optimize strategy.

Priority: P1 | Points: 5 | Sprint: 2 | Status: Partial

Implementation Status​

Delivery status tracking: QUEUED -> SENT -> DELIVERED -> FAILED with timestamps. Basic aggregate counts on notification log page. Read receipt handling (email opens, WhatsApp read status) via provider webhooks not implemented. Channel-wise breakdown and engagement funnel not built.

Acceptance Criteria​

Scenario: View delivery analytics dashboard
Given 500 notifications were sent today
When the marketing manager opens delivery analytics
Then the dashboard shows:
| Channel | Sent | Delivered | Read | Failed | Delivery % |
| Email | 200 | 196 | 82 | 4 | 98.0% |
| SMS | 180 | 171 | - | 9 | 95.0% |
| WhatsApp | 100 | 99 | 87 | 1 | 99.0% |
| Push | 20 | 18 | 12 | 2 | 90.0% |
And failed notifications are linked to error details
And a 30-day trend chart shows delivery rates over time

Scenario: Track email engagement
Given a feedback email was sent to 100 guests this week
When email open and click events arrive via SendGrid webhook
Then the dashboard shows: 100 sent, 98 delivered, 42 opened (42.9%), 18 clicked survey (18.4%)
And engagement data is available on individual guest profiles
And low-engagement templates are flagged for content review

US-014-06: WhatsApp Business API Integration​

As a Guest, I want to receive booking updates and hotel information via WhatsApp, So that I get instant notifications on my most-used messaging app.

Priority: P1 | Points: 13 | Sprint: 3 | Status: Not Started

Implementation Status​

Not started. Requires: Meta Business Manager verification, WhatsApp Business Account, phone number registration, and template message approval from Meta (24-hour rule for non-template messages). India context: WhatsApp has 500M+ users in India; it is the preferred channel over email for most domestic travelers.

Acceptance Criteria​

Scenario: Send booking confirmation via WhatsApp
Given guest "Anita Desai" has opted in for WhatsApp, number "+91 98765 43210"
When the Kafka event "reservation.confirmed" is consumed
Then a WhatsApp template message is sent:
"Namaste Anita! Your booking at Hotel Sapphire is confirmed.
Confirmation: HTL-2026-03150001
Check-in: 15 Mar 2026, 2:00 PM
Room: Deluxe King | Rate: INR 5,000/night
[View Details] [Get Directions]"
And interactive buttons are included (View Details opens booking page, Get Directions opens Google Maps)
And delivery and read receipts are tracked via Meta webhook

Scenario: Send pre-arrival message with express check-in link
Given guest "Rahul Verma" arrives tomorrow
When the 24-hour pre-arrival trigger fires
Then a WhatsApp message is sent:
"Hi Rahul! We look forward to welcoming you tomorrow at Hotel Sapphire.
Complete express check-in now to skip the queue:
[Start Express Check-In]
Need anything? Just reply to this message!"
And the guest can reply to initiate a WhatsApp conversation
And the conversation is tracked in the notification service

Scenario: Handle WhatsApp opt-out
Given guest replies "STOP" to a WhatsApp message
When the opt-out is received via webhook
Then the guest's WhatsApp preference is set to OPT_OUT
And a confirmation is sent: "You've been unsubscribed. Reply START anytime to resubscribe."
And no further WhatsApp messages are sent until the guest opts back in

US-014-07: Push Notifications (Expo)​

As a Guest, I want to receive push notifications on my phone for real-time updates during my stay (room ready, service request fulfilled), So that I am immediately informed of time-sensitive information.

Priority: P2 | Points: 8 | Sprint: 3 | Status: Partial

Implementation Status​

Expo push SDK integrated. Push token registration endpoint exists. Send function queues to Expo push service. Not connected to the guest mobile app (EP-021) for token collection. Notification categories defined but not all event triggers connected.

Acceptance Criteria​

Scenario: Send room ready push notification
Given guest "Manish Tiwari" checked in early and is waiting for his room
And he has the hotel app with push notifications enabled
When housekeeping marks room "408" as clean and it is assigned to him
Then a push notification is sent: "Your room 408 is ready! Head to the front desk for your keycard."
And tapping the notification opens the app's check-in screen
And delivery status is tracked

Scenario: Send service request completion notification
Given guest "Kavita Sharma" requested extra towels via the app
When housekeeping fulfills the request
Then a push notification is sent: "Your extra towels have been delivered to room 308. Enjoy your stay!"
And the notification includes a "Rate Service" quick action

US-014-08: DND & Opt-Out Management​

As a Front Desk Agent, I want to manage guest notification preferences and ensure DND compliance, So that guests are not disturbed and the hotel complies with TRAI regulations.

Priority: P1 | Points: 5 | Sprint: 2 | Status: Partial

Implementation Status​

Guest preference schema: email_opt_in, sms_opt_in, whatsapp_opt_in, push_opt_in, preferred_language, quiet_hours_start, quiet_hours_end. Opt-in/out toggles on guest profile page. TRAI DND registry lookup not integrated. Quiet hours enforcement in send pipeline not complete.

Acceptance Criteria​

Scenario: Enforce quiet hours
Given guest "Anil Kumar" has quiet hours set: 10:00 PM to 7:00 AM IST
And a non-urgent feedback request triggers at 10:30 PM
When the send pipeline processes the notification
Then the notification is held until 7:00 AM the next morning
And urgent notifications (e.g., fire alarm, safety) bypass quiet hours
And the hold is logged with reason "Quiet hours - delayed"

Scenario: TRAI DND compliance
Given guest "Deepak Joshi" mobile "+91 88776 65544" is on TRAI DND registry
When a promotional SMS is triggered (e.g., "Book now and get 20% off!")
Then the SMS is blocked with reason "TRAI DND registered"
And transactional SMS (booking confirmations, OTP) are permitted per TRAI guidelines
And the block is recorded in the notification log

Scenario: Guest opts out of marketing emails
Given guest "Reema Nair" clicks "Unsubscribe" in a promotional email
When the unsubscribe action is processed
Then her email marketing preference is set to OFF
And transactional emails (booking confirmation, invoice) continue normally
And a confirmation page shows: "You have been unsubscribed from marketing emails."

US-014-09: Agent Handoff (WhatsApp/Chat)​

As a Guest, I want to be connected to a live front desk agent when automated responses cannot help me, So that I can get human assistance for complex or sensitive requests.

Priority: P1 | Points: 8 | Sprint: 4 | Status: Not Started

Implementation Status​

Not started. Requires: conversation routing engine, agent console in dashboard for managing multiple simultaneous conversations, queue management with priority (VIP first), and seamless context transfer from chatbot/automation to human agent including full conversation history.

Acceptance Criteria​

Scenario: Escalate from WhatsApp chatbot to live agent
Given guest "Sunita Devi" is chatting via WhatsApp about a billing dispute
And the chatbot cannot resolve billing queries
When the chatbot triggers handoff
Then the guest receives: "I'm connecting you with our front desk team now."
And the conversation appears in the agent console with:
- Full chat transcript
- Guest name, room number, check-in/out dates
- Folio summary and recent charges
And the next available front desk agent picks up the conversation
And the agent's replies are sent via WhatsApp to the guest

Scenario: Queue management during peak hours
Given 5 guests are waiting for agent handoff
And 2 front desk agents are available for chat
When the routing engine processes the queue
Then conversations are assigned by priority (VIP guests first, then FIFO)
And queued guests receive: "All agents are busy. You're #3 in queue, estimated wait: 5 minutes."
And the agent dashboard shows queue depth and average wait time

Scenario: Agent marks conversation resolved
Given agent "Ritu" resolves the billing concern via WhatsApp
When she marks the conversation as "Resolved" with category "Billing Query"
Then the guest receives: "Thank you for reaching out! If you need anything else, just message us."
And the conversation is archived with resolution time (6 minutes) and category
And the resolution metrics are available in the agent performance dashboard

US-014-10: WhatsApp Room Service Catalog​

As a Guest, I want to browse and order room service through WhatsApp using an interactive menu, So that I can conveniently order food from my phone.

Priority: P3 | Points: 8 | Sprint: 5 | Status: Not Started

Implementation Status​

Not started. WhatsApp Business API supports interactive list messages and product catalog messages that can display menu items. Requires: F&B menu sync from POS service (EP-007), catalog message construction, order capture and confirmation flow, folio charge or UPI payment, and order relay to kitchen (EP-005 US-005-20).

Acceptance Criteria​

Scenario: Browse room service menu via WhatsApp
Given checked-in guest "Madhuri Dixit" in room "601" messages "Room service"
When the system processes the message
Then a WhatsApp interactive list is sent:
| Category | Items |
| Starters | Paneer Tikka INR 350, Veg Spring Roll INR 250|
| Main Course | Dal Makhani INR 320, Butter Chicken INR 450 |
| Breads | Butter Naan INR 80, Tandoori Roti INR 60 |
| Beverages | Masala Chai INR 100, Fresh Lime Soda INR 120 |
And the guest can tap items to view details and add to order

Scenario: Place and confirm order via WhatsApp
Given the guest selects: 1x Paneer Tikka (INR 350), 2x Butter Naan (INR 160), 1x Chai (INR 100)
When the guest confirms the order
Then a summary is shown:
"Order for Room 601:
1x Paneer Tikka - INR 350
2x Butter Naan - INR 160
1x Masala Chai - INR 100
Total: INR 610 + GST (5%): INR 30.50 = INR 640.50
[Charge to Room] [Pay via UPI]"
And upon confirmation, the order is sent to the kitchen display
And a tracking update is sent: "Your order has been received. Estimated delivery: 25 minutes."

US-014-11: Scheduled Notifications​

As a Marketing Manager, I want to schedule notifications for specific times or relative to guest events, So that messages arrive at optimal engagement times.

Priority: P2 | Points: 5 | Sprint: 3 | Status: Partial

Implementation Status​

Basic relative scheduling works (e.g., +2 hours after checkout) via a cron job checking upcoming events. Absolute scheduling (send at specific time) not implemented. Birthday/anniversary greeting scheduler not connected to guest profile dates. Scheduled queue with retry and failure handling not fully built.

Acceptance Criteria​

Scenario: Schedule birthday greeting
Given guest "Priya Sharma" has birthday March 15 in her profile
And the "Birthday Greeting" trigger is configured to send at 9:00 AM IST
When March 15 arrives
Then at 9:00 AM, she receives an email and WhatsApp:
"Happy Birthday, Priya! Wishing you a wonderful year. Enjoy 15% off your next stay with code BDAY15. Valid 30 days. - Hotel Sapphire"
And the discount code is auto-generated and linked to her profile
And the send is logged with delivery status

Scenario: Pre-arrival notification at T-48 hours
Given 25 guests have check-ins on March 10
And the pre-arrival trigger is set for 48 hours before check-in (2:00 PM standard)
When March 8 at 2:00 PM IST arrives
Then all 25 guests receive pre-arrival notifications on their preferred channel
And guests whose reservations were cancelled in the interim are automatically excluded
And the scheduled sends are logged with actual dispatch time and status

Scenario: Cancel scheduled notification on reservation cancellation
Given a feedback request is scheduled for 2 hours after checkout for guest "Vikram"
And Vikram cancels his reservation before check-in
When the cancellation event is processed
Then the pending feedback notification is removed from the schedule
And the cancellation is logged: "Scheduled notification removed - reservation cancelled"

Document generated: 2026-03-05 | Epic Owner: Communication Module Lead | Review Cycle: Bi-weekly