Kaizen 256 Build an Arrival Readiness Web Tab in Zoho CRM

Kaizen 256 Build an Arrival Readiness Web Tab in Zoho CRM




Hi everyone!

Welcome back to the Kaizen series! In the post, we discuss a use case in hospitality industry: how an Arrival Readiness web tab widget can be used to let reception staff identify and resolve issues before arrival of guests. 

Use case

In the hospitality industry, every guest interaction is an opportunity to make a lasting impression. To ensure a smoother check-in process, reception staff should have access to information about which guests are arriving soon and be able to take the necessary action without hassle. The important question is:

                        "Which arrivals require action before the guest reaches the property?"

For example:
  1. A guest's ID verification is still pending.
  2. A guest has requested a service that has not yet been assigned.
  3. Other bookings are already ready for arrival.

Instead of making the reception staff open individual records and manually check these details, we can surface the information in a Zoho CRM Widget and provide an action directly from the dashboard. Without a focused dashboard, the team has to open each booking, inspect fields, and decide what to do. That takes time and increases the chance of missing something before guests arrive.

In this Kaizen, we'll build an Arrival Readiness Web Tab that:
  1. Retrieves bookings arriving within the next 48 hours.
  2. Determines the readiness of each booking.
  3. Displays a summary of arrivals requiring action.
  4. Allows staff to send an ID verification reminder.
  5. Allows staff to create a follow-up task for an unassigned special request.
  6. Updates the Booking record after the action is completed.


The solution combines CRM Widgets, Deluge Functions, REST API-enabled Functions, and CRM APIs.

To showcase this solution, we have created a custom module, Bookings, with the following custom fields:

Field Name
API Name
Data Type
Arrival Date Check_In DateTime
Departure Date Check_Out DateTime
Guest Name Guest_Name Single Line
ID Verification ID_Verification Single Line
Owner Owner1 Single Line
Payment Status Payment_Status Pick List
Readiness Readiness Pick List
Reminder Sent Reminder_Sent Boolean
Reminder Sent At Reminder_Sent_At DateTime
Request Status Request_Status Pick List
Special Request Special_Request Multi Line (Small)
Verification Link Verification_Link Single Line


We also have a web tab widget in which details are displayed.

Real-time flow inside the widget

When the widget loads:
  1. It calls 'getArrivalReadiness()'.
  2. The function fetches bookings and filters arrivals within the next 48 hours.
  3. Each booking is evaluated and assigned:
    1. readiness ('Ready', 'Action Required', 'Attention')
    2. issue
    3. recommended action
  4. The widget renders this as an actionable list.
  5. Staff can immediately trigger row-level actions:
    1. 'Send reminder' which then calls 'sendArrivalReminder(bookingId)'
    2. 'Assign task' which then creates a CRM Task and then calls 'assignArrivalTask(bookingId)'
  6. Booking fields are updated, and the widget refreshes to show status.

How the solution is split

We keep each responsibility separate:
  1. Three deluge functions
    1. getArrivalReadiness() that evaluates bookings and returns dashboard data
    2. sendArrivalReminder(bookingId) that sends reminder and updates reminder fields
    3. assignArrivalTask(bookingId) that updates booking request status after task creation
  2. Widget logic that renders UI, handles clicks, calls functions, refreshes view
This separation keeps UI logic in widget code and business rules in Deluge.

Step 1: Evaluate arrivals in the next 48 hours
When the widget loads, it calls getArrivalReadiness().
This function fetches bookings, filters arrivals within the next 48 hours, and evaluates each booking for readiness conditions.

Readiness rules:

Field
Field Conditions (exact)
Issue
Recommended Action
Action Required ID_Verification == "Pending" ID verification pending Send reminder
Action Required Special_Request != "" AND Request_Status != "Assigned" AND Request_Status != "Completed" Special request is unassigned Assign task
Ready None of the above conditions matched No action required No action

The getArrivalReadiness() evaluates a 48-hour window in four concrete sub-steps:
  1. Define the time window
    1. It sets now = zoho.currenttime
    2. It sets endTime = now.addHour(48)
    3. This creates the comparison range: [current time, current time + 48 hours]
  2. Fetch candidate bookings
    1. It pulls booking records using:
    2. zoho.crm.getRecords("Bookings", 1, 200)
    3. This gives the function a working set of bookings to inspect.
  3. Normalize each booking’s check-in time for comparison
    1. For each booking, it reads Check_In.
    2. It preserves the original CRM datetime string (checkInOriginal) for display/output.
    3. It extracts only the datetime portion (subString(0,19)) and parses it into a time object:
    4. checkIn = checkInText.toTime("yyyy-MM-dd'T'HH:mm:ss")
    5. This parsed value is used only for logical comparison.
  4. Filter to “arriving soon” records
    1. It includes only bookings where:
    2. checkIn >= now && checkIn <= endTime
    3. Only these bookings move to readiness classification (Ready, Action Required, Attention).
The function computes a rolling 48-hour window, converts each booking’s check-in to a comparable datetime, and keeps only records whose check-in falls inside that window.

Step 2: Return one action-ready payload to the widget
After each booking is classified, the function getArrivalReadiness()  adds one row object to arrivals with: id, booking, guest, arrival, readiness, priority, issue, action.
At the same time, it builds summary with: total, ready, action_required, attention.
Finally, it returns a single response object:
  1. success
  2. generated_at
  3. window_hours
  4. summary
  5. arrivals
Because both summary cards and row-level actions come from this single payload, the widget can render in one function call (getArrivalReadiness) without additional CRM fetches.

Step 3: Render dashboard and bind row actions
Widget JS reads response.details.output, renders summary cards and actionable rows, then maps row actions to functions:
  1. Send reminder → sendArrivalReminder(bookingId)
  2. Assign task → create CRM Task, then call assignArrivalTask(bookingId)
All Deluge functions used by widget must be configured as Invoke as REST API.

Step 4: Execute “Send reminder” path for pending verification
For verification-pending bookings, sendArrivalReminder(bookingId) handles:
  1. Booking ID validation
  2. Booking lookup
  3. Guest email validation
  4. Duplicate reminder protection
  5. Email send
  6. Booking field updates (Reminder_Sent, Reminder_Sent_At)
This enables quick verification follow-up during pre-check-in.

Step 5: Execute “Assign task” path for unassigned requests
For unassigned special requests, widget creates a CRM Task linked to Bookings, then calls assignArrivalTask(bookingId) to update:
  1. Request_Status = Assigned
Using $se_module: "Bookings" ensures proper linkage to the custom module context.

Step 6: Refresh and reflect current operational truth
After any row action, widget refreshes readiness data so users immediately see updated status.
This creates a fast “identify → act → update → verify” loop.

Example outcomes:

  1. Laura Martin (BK-10492): ID verification pending → Action Required → Send reminder
  2. Ian Thomas (BK-10489): Late dinner request pending/unassigned → Action Required → Assign task
  3. Vivek Shah (BK-10491): Verification complete, no open request → Ready → No action
You can find the full code  of the widget and functions used in this function in the Kaizen github repository.

Conclusion

With this setup, the front office or operations team can move from record-checking to action execution in one screen.
You now have a working pattern that combines:
  1. readiness classification in Deluge
  2. direct actions in widget UI
  3. immediate CRM updates after each action
That combination is what makes the dashboard practically useful during real check-in prep.

We hope this Kaizen post is useful. If you have questions or suggestions, share them in the comments. 
    • Sticky Posts

    • Announcing the new SKILL.md for Zoho CRM and the updated OAS repository!

      We are introducing a new zoho-crm skill to make working with Zoho CRM Developer tools (like APIs, functions, widgets, client scripts, queries etc) easier and faster, with the help of AI in your preferred AI harness like Claude Code, Codex, Cursor, VSCode
    • Kaizen #256 - Build an Arrival Readiness Web Tab in Zoho CRM

      Hi everyone! Welcome back to the Kaizen series! In the post, we discuss a use case in hospitality industry: how an Arrival Readiness web tab widget can be used to let reception staff identify and resolve issues before arrival of guests. Use case In the
    • Kaizen #198: Using Client Script for Custom Validation in Blueprint

      Nearing 200th Kaizen Post – 1 More to the Big Two-Oh-Oh! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
    • Kaizen #226: Using ZRC in Client Script

      Hello everyone! Welcome to another week of Kaizen. In today's post, lets see what is ZRC (Zoho Request Client) and how we can use ZRC methods in Client Script to get inputs from a Salesperson and update the Lead status with a single button click. In this
    • Kaizen #222 - Client Script Support for Notes Related List

      Hello everyone! Welcome to another week of Kaizen. The final Kaizen post of the year 2025 is here! With the new Client Script support for the Notes Related List, you can validate, enrich, and manage notes across modules. In this post, we’ll explore how
    • Recent Topics

    • Free webinar: Zoho Sign for Microsoft apps

      Hello, Did you know Zoho Sign works right inside the Microsoft apps you already use? A signature request shouldn't mean leaving Teams for another tab, or downloading an Outlook attachment just to sign it. Zoho Sign integrates with Microsoft 365, Teams,
    • Billing Status and WO Status Field Colors -

      Hello Team, I noticed that the colors of the Billing Status and WO Status fields in the WO module have been changed. (Org ID:170000078905) This is not urgent to correct, but I wanted to bring it to your attention so you can check whether this is a system
    • Introducing throw statements in Deluge

      Hello everyone, We're introducing a powerful addition to Deluge that gives you more precise control over error handling in your scripts. Whether you're calling an external API, validating user input, or enforcing a business rule, there are moments when
    • Zoho Notebook、実はこんなところから使えます

      ユーザーの皆様、こんにちは。ゾーホージャパンの田村です。 前回に続き、今回もZoho Notebookをご紹介します。 関連情報 メモの保存場所、見直しませんか?― Zoho Notebookで始める情報管理 仕事中、「この内容、メモに残してあとで見返したいな」と思う瞬間はありませんか? 会議中の一言、お客様とのやり取り、CRMで見つけた気づき、 ほんの数秒で終わる内容だからこそ、「あとで書こう」と思って、そのまま忘れてしまうこともあります。 そこで今回は、PCやスマートフォンはもちろん、普段お使いのZoho製品からもすぐにアクセスできるノートアプリ「Zoho
    • I have been looking for CVID to get segmate list where & how can fnd it?

      I am trying to get segment details from the Zoho API. The API documentation says that the CVID is a mandatory parameter, but I cannot find the CVID in the "getmailinglists" API. Can you tell me where to find the CVID?
    • How do I increase the email attachment size in Zoho CRM ?

      It looks like I'm limited to 10MB when sending an attachment using the email widget on a record in Zoho CRM. Is there a way to increase the size? Or can I use some other tool? From what I'm reading online, I'm maxed out at 10MB. Any insight would be greatly
    • Introducing Incentives for Zoho CRM: Build, automate, and track sales commissions

      Dear Customers, We are here with an amazing news! We built a direct solution to help manage your commission provisioning activity in your business. From creating commission plans to issuing payouts, this application leverages your sales reps’ performance
    • Subforms and automation

      If a user updates a field how do we create an automation etc. We have a field for returned parts and i want to get an email when that field is ticked. How please as Zoho tells me no automation on subforms. The Reason- Why having waited for ever for FSM
    • Cannot format "start date" field in Zoho Flow

      I am trying to recreate a flow that connects Inventory package creation to Zoho projects (where a task is created in a defined project). I've been able to troubleshoot everything EXCEPT the date fields; specifically the "start date" - which is quite important
    • Dynamic Signature - Record owner

      Hi everyone, I’m using Zoho Writer merge templates from Zoho CRM and have two questions: Owner signature: How can I automatically insert the CRM record owner’s signature in the merged document? I’m not sure where this signature is stored or how to reference
    • Add ZeptoMail to Zoho One

      Hi Zoho Team, I would like to request that ZeptoMail be added as a fully included application within Zoho One. Why this is important Zoho One is positioned as a unified business operating system that brings the applications an organization needs under
    • GETTING THERE THANKS

      So we are still testing thanks to the great Zoho team for firstly getting pricelists working (essential) and writing some code to hide delivery and pickup options. Brilliant. So price lists are a definite mainly because of VAT. We run our Zoho books with
    • Time Zone is incorrect

      Time zone is not working properly...I've checked it twice. I'm eastern U.S. time it's currently 12:22 pm EST. CRM shows 3:22 pm EST.
    • CRM wants to access other apps and services on this device (Documents area)

      Did anyone else see this today? It only seemed to popup in the Documents area. Blocking it did not stop the ability to upload files there... Why is this coming up and what apps/services is it requesting in the background? Also, is it applicable elsewhere
    • Custom module - change from autonumber to name

      I fear I know the answer to this already, but thought I'd ask the question. I created a custom module and instead of having a name as being the primary field, I changed it to an auto-number. I didn't realise that all searches would only show this reference.
    • How can I populate dropdown data with information from another source or app?

      I want to maintain a list of items in another app (say in excel or another database) and sync those as items in a drop down menu, instead of copy pasting to import. Is this kind of a feature available?
    • Dynamic Field Folders in OneDrive

      Hi, With the 2 options today we have either a Dynamic Parent Folder and lots of attachments all in that one folder with only the ability to set the file name (Which is also not incremented so if I upload 5 photos to one field they are all named the same
    • Zoho Tables is now available in Zoho One!

      Hello Zoho One users, We’re excited to announce that Zoho Tables is now included as a part of Zoho One suite! As teams grow, managing projects, approvals, inventories, campaign trackers, and operational workflows across multiple spreadsheets become difficult.
    • Getting there -thanks

      So we are still testing thanks to the great Zoho team for firstly getting pricelists working (essential) and writing some code to hide delivery and pickup options. Brilliant. So price lists are a definite mainly because of VAT. We run our Zoho books with
    • Automatically remove commas

      Team, Please be consistent in Zoho Books. In Payments, you have commas here: But when we copy and paste the amount in the Payments Made field, it does not accept it because the default setting is no commas. Please have Zoho Books remove commas autom
    • #3 Making it look like my business

      Day 3: Meera had created her first invoice. The numbers were right, but something still felt unfinished. Her studio name was there, but the address did not look the way she wanted. Her logo was missing, and the invoice did not really feel like it came
    • Zoho Books - France

      L’équipe de Zoho France reçoit régulièrement des questions sur la conformité de ses applications de finances (Zoho Books/ Zoho Invoice) pour le marché français. Voici quelques points pour clarifier la question : Zoho Books est un logiciel de comptabilité
    • Scan & Fill with double quote key/value pairs

      Hi, An old Ticket moved to a Topic/Idea: I love the idea of the new Scan & Fill as it nearly covers my previous request for a QR Scanner to read a multi-part QR Code. My QR Codes are hard-coded as below: {"key1":"value1","key2":"value2","key3":"value3"}
    • Increase the "Maximum Saved Entries per User" Options Limit

      Hi, You can create lots of saved entries, yet the Limit when you apply one is 25, we may often expect 32 to be in draft, and therefore want to enforce that, can we increase the limit of this field from 25 to 100 (As you can just turn it off and have more
    • HEIC File Type Viewer

      Hi, It would be nice to be able to click on the images in the All Entries/Reports Tables which are HEIC the same as JPG, PNG, etc. so they open in a viewer from Zoho or the Attachment Service, today HEIC requires you to download each image and open it
    • Map Dependency Upgrades in Zoho CRM

      Map Dependency Fields enhancements are now available across all DCs. Hello everyone, We’ve introduced a set of enhancements to Map Dependency Fields to make setup simpler, faster, and more intuitive. Map Dependency helps control how values appear across
    • Specific ListView Canvas on Canvas Home Page Always Loads Most Recent ListView, Not the One Specified

      I had mentioned this to ZOHO, but I mainly wanted to see if others in the Community are also facing this problem. I created a Canvas ListView for a Custom Module, and then created a Canvas Home page (technically on a tab item, but I'm not sure if that
    • Programmatic Itemized Expenses?

      It does not appear that it is possible to create itemized expenses programmatically (via the API)? Is this correct, or am I misunderstanding the situation?
    • Zoho Forms Submission URL

      Hi Zoho, It would be great to have a URL which can take us to specific form entries. For example: https://forms.zoho.eu/ACCOUNTNAME/report/FORMNAME/records/UNIQUE-REF I currently have a use case where I want to use Zoho Flow to create a module entry in
    • Optional Parameter in Deluge Sendmail function to link email to record

      I love sendmail - it offers flexibility (and, with standalone functions, commonality with minimal maintenance) over the years the templates hadn't offered. I understand the templates have come a long way, but I still prefer sendmail most days. That said...
    • Zoho CRM Functions: Redesigned Interface, Rich Analytics, and Multi-Language Support

      Hello everyone! We have given Functions in Zoho CRM a major overhaul with a new interface that makes it easier to build, organize, monitor, and troubleshoot your functions throughout their lifecycle. As part of this revamp, we have also introduced a unified
    • 📣 And the Bigin Customer Award winners are...

      50+ entries. Customers from across the globe. So many great Bigin stories. And now, it's time to celebrate the people who stood out. We launched the Bigin Customer Awards to see how businesses are using Bigin in their own unique ways, and you did not
    • Report Configuration - Unable to select "File_Upload" under Supporting Document

      Good day everyone. I encounter this issue whereby i have difficulty to select "File_Upload" under Supporting Document when i configuring my report. Ps: I have create Supporting Document in Zoho creator form as subform and the add this "File Upload" inside
    • Zoho CRM Multi-select values not translated

      Hello! I have some issue with translate custom multi-select fields in zoho CRM in other language. I download export file, but it has all my custom fields and picklist values exept multi-select fields picklist values.  Please, help me to undestand, is
    • Go Multilingual with Instant Bot Auto-Translation

      Imagine you run a travel company with customers across different regions. Your website chatbot helps visitors discover travel packages, answers questions, and makes bookings. As your business expands into new markets, you want to offer the same experience
    • Create Flexible Layouts with Layout Rules

      In a project, when a work moves from planning to execution, the information teams need can change at every stage. A project can need one set of details, a phase can need another, and a custom process may require an entirely different set of information.
    • Zoho Sites after login page blank

      after i login to zoho sites, it stalls at a blank screen please help
    • Map My Client Locations for Zoho CRM Extension: Turn CRM Addresses Into Action

      Hello everyone, Your CRM knows who your customers are. Now, see where they are on the interactive map directly from Zoho CRM. Introducing Map My Client Locations for Zoho CRM, an extension built for businesses that rely on sales visits, field service,
    • Find the conversions hiding outside your funnel: User Journeys is now live in PageSense

      Hello Everyone, We are excited to announce that User Journeys is now live in Zoho PageSense. Here is what that means for you. Funnels are great for one thing. They tell you how the path you designed is performing. Homepage to product to cart to checkout,
    • Zoho CRM Error message #2 : Fixing [Invalid Credentials] and [Authentication Fail] while configuring IMAP

      Hi Everyone! As a part of our Zoho CRM Error messages series, we're going to focus on couple of error messages that you might encounter while configuring IMAP and ways to resolve them. These are: [Invalid Credentials] [Authentication Fail] The annoying
    • Next Page