Kaizen 249: Build an AI Room Recommendation Assistant with CRM Widgets, Catalyst, and Zia Agent

Kaizen 249: Build an AI Room Recommendation Assistant with CRM Widgets, Catalyst, and Zia Agent



Welcome to another week of Kaizen!

This Kaizen post is inspired in part by Zoho CRM’s hospitality use-case article, which presents a broader AI-powered CRM approach for guest personalization and hotel operations. That use case spans additional scenarios such as identity validation, self check-in, and competitor bench marking, whereas this Kaizen focuses specifically on building a guest room recommendation assistant using Zoho CRM Widgets, Catalyst, and Zia Agents.
In the hospitality business, every guest interaction is an opportunity to create a lasting impression. Returning guests expect hotels to remember their preferences, anticipate their needs, and personalize each stay.

Business Problem

Imagine a front desk executive opening a guest's CRM record before check-in. The CRM record contains details from previous stays, room preferences, and special requests. 
Consider this guest profile of Ms. Elene Martinez.


These are the key points the record:
  1. 5 previous stays
  2. High lifetime spend
  3. A preference for rooms near elevator
The hotel has dozens of available rooms. If dozens of rooms are available, which one should be assigned to her?
While all the required data already exists in CRM, the executive still has to review the guest profile manually, compare it against available rooms, remember special requests, and make the best possible decision. This process is time-consuming and tedious.

Solution

Instead of relying on manual analysis, we can delegate this reasoning to an AI agent. A front desk executive can simply click the button AI Room Recommendation Then, by clicking on Analyze Guest, the user can trigger a Zia Agent that will review the guest profile, evaluate the available rooms, and generate a recommendation within seconds.
In this Kaizen post, we will combine Zoho CRM Widgets, Catalyst Functions, Catalyst Connections, and Zia Agent to build an intelligent assistant that generates personalized room recommendations directly inside Zoho CRM.
We will place a custom button, AI Room Recommendation, inside the Contact record. When clicked, it opens a CRM widget where the executive can analyze the guest and view the recommendation.
When the front desk executive clicks Analyze Guest, the system will:
  1. Identify the current guest
  2. Retrieve the guest profile from CRM
  3. Send the guest context to a Zia Agent
  4. Allow the agent to fetch additional CRM data using CRM tools
  5. Generate a personalized room recommendation
  6. Display the result inside the CRM widget


Architecture

This solution has four parts:
  1. Zoho CRM Widget – captures the current Contact ID and displays the recommendation
  2. Catalyst Advanced I/O Function – receives the Contact ID and triggers the Zia Agent
  3. Catalyst Connection – securely manages authentication for the Zia Agent API
  4. Zia Agent – fetches CRM data, reasons over guest preferences and room availability, and returns the recommendation as HTML

Although a Zia Agent can be invoked directly from a custom button, in this solution we use a Zoho CRM widget and Catalyst function. This gives us more flexibility for future customization, such as returning additional data like the recommended room ID, integrating a booking action, applying business rules, etc.

Implementation

Step 1 – Create a Zia Agent

Create a Zia Agent that can recommend the best room for a guest based on their CRM profile. 
The agent should have access to the required CRM tools, such as:
  1. crm_getRecordById to fetch the Contact record
  2. crm_getRecords to retrieve records from the rooms module

Agent Prompt:
The prompt is sent from the Catalyst Function.

Agent Instructions:
Provide agent instructions based on your module and field details.
**Guest Profile Data Structure (from Contacts module):**

Each guest profile has these fields:
- First_Name: Guest's first name (e.g., "Michael")
- Last_Name: Guest's last name (e.g., "O'Brien")
- Full_Name: Combine First_Name + " " + Last_Name for display
- Email: Guest's email address
- Phone: Guest's phone number
- Loyalty_Tier: Diamond, Platinum, Gold, Silver, Bronze
- Total_Stays: Number of completed stays
- Lifetime_Spend: Total revenue from this guest in USD
- Last_Stay_Date: Date of most recent stay (YYYY-MM-DD)
- Preferred_Room_Type: Guest's preferred room category
- Past_Upgrade_Acceptance: Always, Sometimes, Never
- Floor_Preference: High Floor, Mid Floor, Low Floor, Any Floor
- Room_Location_Preference: Quiet Area, Near Elevator, Pool View, Garden View, Ocean View, Beach View, City View
- Special_Requests: Any special requests (multi-line text)
- RFM_Score: Combined Recency, Frequency, Monetary score (max 15)

**Available Rooms Data Structure (from Rooms module):**

Each room in the availableRooms list has these fields:
- Name: The room's display name
- Room_Number: Physical room number
- Room_Type: Category (e.g., "Ocean Suite", "Executive Suite")
- Floor_Number: The floor the room is on
- Building_Wing: Building identifier
- Max_Occupancy: Maximum guests allowed
- Base_Price: Nightly rate in USD
- View_Type: View from the room (e.g., "Ocean", "City", "Garden")

You can test the agent directly in the test bed.



Once the response is validated, Deploy the agent using connection to Zoho CRM.
Deploying the agent creates a new Agent Version that can be invoked through the Zia Agents Trigger API. Your Catalyst function calls this deployed version whenever a user clicks Analyze Guest in the CRM widget.
In the deployed Zia Agent configuration, these CRM tools, crm_getRecordById  and crm_getRecords, are attached to the agent, so when the Catalyst function triggers the agent with the Contact ID, the agent can independently fetch both the guest detail from Contacts module and the available room inventory from Rooms module.

Step 2 – Create the Catalyst Project

Create a Catalyst project to host the server-side logic.
In this solution, a Catalyst Advanced I/O Function (NodeJS stack)  is used to:
  1. receive the Contact ID from the CRM widget
  2. invoke the Zia Agent
  3. return the generated HTML back to the widget
Using a Catalyst function keeps the widget free from business logic. It is also easier to maintain and avoids exposing credentials in the browser.  Since the Zia Agent response is asynchronous, the Catalyst function is a good place to handle the request lifecycle and error management. You can find the Catalyst function call in the Kaizen github repository. Replace the Zia Agent org id and api end point in the function.
 
Expose the Advanced I/O Function through Catalyst > Cloud Scale > API Gateway.
This provides an endpoint that can be called directly from the CRM widget.

Step 3 – Secure Authentication with Catalyst Connections

The Catalyst function needs to invoke a protected Zia Agent API. Instead of embedding OAuth tokens in code, we will create a Catalyst Connection. Create a Connection "ziaagent" in Catalyst for Zia Agent.
Grant the required scope: ZiaAgents.agents.TRIGGER


This keeps authentication centralized and secure.

Step 4 – Create the CRM widget

We use a button-type CRM widget because we want the recommendation to appear directly alongside the guest record.
Using the Widget SDK, the current Contact ID is captured.

When the user clicks “Analyze Guest” in the widget, it shows a loading message and sends a POST request to your Catalyst serverless function endpoint with { contactId } as JSON.  When the Catalyst function returns a successful response, the widget renders the returned HTML on the screen. You can find the widget code in Kaizen github repository. Replace with the Catalyst serverless function URL in the widget code.

The widget sends only one value:
Contact ID
The Catalyst function forwards it to the Zia Agent:
systemArgs: {
    crm_getRecordById: {
        record_id: contactId
    }
}
As the response is rendered inside a CRM widget, the Zia Agent is instructed to return HTML instead of Markdown. This allows the widget to display the recommendation directly without any additional parsing or formatting.

Final Experience   

Now, when the front desk executive clicks Analyze Guest, the assistant:
  1. reviews the guest profile
  2. reasons over CRM and room availability data
  3. recommends the best available room
  4. explains the rationale behind the choice
  5. suggests alternative options
All of this happens within a few seconds, directly inside Zoho CRM.

Conclusion   

By combining Zoho CRM widgets, Catalyst function, Catalyst Connections, and Zia Agent, we built an AI-powered assistant that transforms guest data into actionable recommendations without leaving CRM.

Although our example focuses on hospitality, the same architecture can power intelligent assistants for sales, customer support, insurance, healthcare, and many other domains where AI needs to reason over CRM data. For example:
  1. Sales: An AI sales coach that analyzes customer interactions, open deals, past purchases, and activities to recommend the next best action, identify upsell opportunities, or generate personalized follow-up emails.
  2. Customer Support: A support assistant that reviews previous tickets, product history, and customer sentiment to suggest troubleshooting steps, draft responses, or recommend escalation when necessary.
  3. Insurance: An underwriting or claims assistant that retrieves policy details, claim history, and customer interactions to summarize cases, identify missing documents, and recommend the next processing step.
  4. Healthcare: A patient engagement assistant that uses appointment history, care plans, and previous interactions to generate follow-up recommendations, appointment reminders, or personalized wellness guidance.
We hope this Kaizen post is useful. If you have questions or suggestions, share them in the comments. 


    • Sticky Posts

    • 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
    • Kaizen #217 - Actions APIs : Tasks

      Welcome to another week of Kaizen! In last week's post we discussed Email Notifications APIs which act as the link between your Workflow automations and you. We have discussed how Zylker Cloud Services uses Email Notifications API in their custom dashboard.
    • Kaizen #216 - Actions APIs : Email Notifications

      Welcome to another week of Kaizen! For the last three weeks, we have been discussing Zylker's workflows. We successfully updated a dormant workflow, built a new one from the ground up and more. But our work is not finished—these automated processes are
      • Recent Topics

      • Zoho Wont Login

        Can anyone tell me why my password stops logging in all the time? Is it a ploy to make you change your password? I have to use OTP all the time. I dont want to change passwords all the time. Over the last couple of years I've found myself using Zoho (as
      • Setting checkbox value on template in Sign from Creator

        Good day, Please help me understand how do I set a tick from a checkbox in Creator into a checkbox on a Sign template. Below is the only values on the Sign template and the code from Creator, "field_boolean_data": {}, "field_date_data": {}, "field_radio_data":
      • Frustrated with Zoho Assist QuickSUpport

        Trialling Zoho Assist and I have a variety of clients. A lot are computer illiterate. Some have poor vision. The current support sessions are using apps which have desktop icons for the appropriate apps. I either connect on demand then the client approves
      • What's New in Zoho Inventory | April & May 2026

        Hello users, We're excited to roll out the latest Zoho Inventory updates for April and May 2026. These enhancements are designed to make your daily operations smoother and more efficient, from advanced inventory management and flexible pricing to automated
      • Gemini Action - Add "inineData" Support

        Thank you guys for adding a Gemini action. I like Gemini models for the "grunt work" of AI, as they have the cheapest tokens of the trustworthy providers One thing that's missing in the action, though, is the ability to pass file data. If you pass a base64-encoded
      • HR Helpdesk Cases

        We have Zoho One Enterprise. I'm trying to find HR Helpdesk Cases, but my UI does not match the documentation. I'm not sure how to move forward.
      • Remove the mandatory Name Card buttons (or at least make them optional)

        Please remove the mandatory Name Card buttons (or at least make them optional) A recent change to the Name Card in Zoho SalesIQ (currently affecting WhatsApp) introduced mandatory buttons before a visitor can provide their name. I believe this change
      • CRM x WorkDrive: We're rolling out the WorkDrive-powered file storage experience for existing users

        Release plan: Gradual rollout to customers without file storage add-ons, in this order: 1. Standalone CRM 2. CRM Plus and Zoho One DCs: All | Editions: All Available now for: - Standalone CRM accounts in Free and Standard editions without file storage
      • Zoho CRM Copilot Connector

        Hello, Are there plans to release a connector for Zoho CRM and Copilot? I'm in the early research stages of potentially switching our CRM solution to Microsoft Dynamics because of its out of the box integration with Copilot. The advantage being that we
      • Zoho Projects - Will there ever be a send email feature in Zoho Project?

        Hi team, Are there plans to or will there ever be a sendemail feature in Zoho Projects, brining it in line with other similar platforms like Asana, ClickUp and Monday? I know that you can add comments via email to a specific task, but I believe this only
      • Introducing Microsoft Word Integration in Zoho Contracts

        We are excited to announce a new feature that brings contract authoring and negotiation in your familiar environment — the Microsoft Word Integration. What This Integration Brings The Microsoft Word Integration connects Zoho Contracts with the Microsoft
      • Share Video Response Card ion Zobot

        I am using the zobot codeless bot builder in SalesIQ. I want to share a video but delay the next response card until after the video has finished playing or has been stopped. Is this possible?
      • Customer image field

        I created a custom image field for estimates, and it works as expected. The only issue I have is that I want to be able to place the custom image field in the estimate invoice. Is there a way I can do that, the field does not give the option to display
      • Sub Folders

        It would be great if there could be sub-folders in reports. We have a ton of individual reports and folders that would be easier to navigate this way 
      • Goals API - Zoho People

        Hi Team, I would like to get the API details for retrieving organisation-wise Goals from Zoho People. Currently, I am able to retrieve individual employee goals using the following API: https://people.zoho.com/api/v3/performance/goal/{emp_id} However,
      • Question and responses disapear

        I have a form where several people have had issues where the questions, responses or submission simply disappear when trying to complete the form. It seems to be random with no pattern of question, browser or OS. Hopefully there is a fix in the platform
      • Unable to send message;Reason:553 Relaying disallowed. Invalid Domain

        Hi, Now when I try to reply to an email, I see the Unable to send message;Reason:553 Relaying disallowed. Invalid Domain voicemessagedownloader.com error. I tested sending an email when I set it up in the past and it worked. I have checked the Zoho Organization
      • Guide customers to the right booking page with routing forms

        Greetings from the Zoho Bookings team! We're excited to introduce Routing Forms in Zoho Bookings. Routing forms let you collect information from customers before they schedule an appointment and automatically direct them to the most appropriate booking
      • Analytics Dashboard User Filters Default Value

        User Filters on Dashboard do not allow Unknown to be set as a default filter value. I have to include NULL values in my dashboard among other values but I can't include NULL/Unknown by default in Dashboard User Filters.
      • Horrible download speed

        Using a trial of Zoho Assist and downloading a 316 MB file on a 500/500 fibre connection to a remote computer on the same network took 7 mins to complete. On AnyDesk it took 1 min or so.
      • How to Backup Zoho to PST?

        I'm looking for a simple way to backup Zoho Mail emails to PST format. I tried the IMAP method with Outlook, but it seems slow and complicated for large mailboxes. I need a solution that can: Export Zoho emails to PST Preserve attachments and folder hierarchy
      • Zoho Books | Product updates | August 2026

        Hello users, July has been an exciting month for Zoho Books! This month, we're excited to introduce HTML PDF Templates, Placeholders as Pills, expanded approval workflows for Sales Returns and Journals, and significant compliance updates across the India,
      • Action required: WhatsApp now uses BSUID as the primary identifier

        Important If your support team uses WhatsApp to engage with customers, there is an important platform change you need to know about. BSUID support is now mandatory for all WhatsApp Business Platform partners and businesses. WhatsApp is introducing usernames,
      • Tip #83- Give Customers a Faster Way to Reach You with the Quick Support Plugin – 'Insider Insights'

        Hello Zoho Assist Community! Think about the last time a customer needed urgent support. They emailed in, waited for a response, got a session link, couldn't find it in their inbox, called back, and by the time the session actually started, a good chunk
      • Final Notice: Migrate Your ASAP Mobile SDK by August 31

        Alert August 31, 2026 is the deadline. After this date, older ASAP Mobile SDK versions will no longer work with the ASAP Help Widget. If your app hasn't been migrated to a supported SDK version, users will no longer be able to access the ASAP Help Widget
      • Approval Process configuration is now more flexible and fully customizable

        Hello everyone! Zoho CRM's Approval Process is back with a better user experience that makes it easier to add rules to your processes. This enhancement includes some UI updates that help you create highly structured approval stages—and more. Let's look
      • Kaizen #255 - Building a Real-Time Operational Dashboard with Zoho CRM Queries

        Hello Everyone, Welcome back to another edition of the Kaizen series, where we uncover powerful ways to extend and customize Zoho CRM. In the previous Query Kaizens, we explored how Queries can retrieve CRM data, invoke REST APIs, and even update CRM
      • 【Zoho CRM】キオスクに「ループ機能」が追加|同じ処理を繰り返し実行可能に

        ユーザーの皆さま、こんにちは。 コミュニティグループの中野です。 Zoho CRMのキオスクに、同じ処理を繰り返し実行できる「ループ機能」が追加されました。 これまでは、同じ処理を複数回実行したい場合、同じ設定を繰り返し作成する必要がありました。 ループ機能を使うと、処理を一度設定するだけで、指定した回数や 取得したデータ数に応じて自動的に繰り返すことができます。 目次 ループ機能とは 設定方法 注意点 1. ループ機能とは ループ機能を使うと、キオスク内の画面や処理を指定した条件に応じて繰り返し実行できます。
      • Es posible cambiar el lenguaje de los modulos del ASAP?

        Es posible cambiar el lenguaje de estos textos? Tengo Zoho configurado en español pero aun así me muestra estos textos en ingles:
      • Where do I edit the "Welcome to [portal name]" message

        I am looking for a way to edit the "Welcome to" part of the message that is seen on the landing page (ex: https://help.zoho.com/portal/en/home). When I use the French interface, it doesn't make sense... I want to change it from "Bienvenue chez" to" Bienvenue au". Thanks!
      • Zoho ERP | Product updates | July 2026

        Hello users, We're back with another round of updates to help you streamline your operations. This month's release brings new features and enhancements designed to help you work more efficiently. Read on to discover everything that's new in Zoho ERP this
      • Automate Backups

        This is a feature request. Consider adding an auto backup feature. Where when you turn it on, it will auto backup on the 15-day schedule. For additional consideration, allow for the export of module data via API calls. Thank you for your consideration.
      • Shared Snippets Everyone

        Hi, Now that the Shared Snippets have been released and I think will be the most used feature implemented in 2023 :) Creating and Using Snippets in Ticket Responses - Online Help | Zoho Desk Maintain consistency in ticket responses with shared snippets
      • Multi-currency and Products

        One of the main reasons I have gone down the Zoho route is because I need multi-currency support. However, I find that products can only be priced in the home currency, We sell to the US and UK. However, we maintain different price lists for each. There
      • Remove "Subject" as a required field on quotations

        Not sure why, but Zoho has made 'Subject' a system defined required field. I'm not entirely sure why subject would be required as a key field (i.e. you cannot deactivate it or change it from required). It doesn't make much sense on many product quotations,
      • Displaying only unread tickets in ticket view

        Hello, I was wondering if someone might be able to help me with this one. We use filters to display our ticket list, typically using a saved filter which displays the tickets which are overdue or due today. What I'd really like is another filter that
      • Best way to setup Inventory bin tracking for products with multiple boxes/crates

        Hi - we need some advice from the community on setting up Items in the Inventory for products with multiple crates. We have large products in our warehouse where the product is delivered as two large (double pallet) crates. We've setup the Items for these
      • Can't find field from ZCRM for a trigger

        Hello, Currently I am revamping our CRM system and we have created second layouts from to try out new processes while not disrupting the old one. Moreover, we want to use different layouts for different processes. The issue is that when creating the ZCRM
      • Discount Per Item / Option Removed

        Hi, I was using Zoho Books for three years now and very saticfied. Now, as we try to add an invoice, we founds that the discount option per item was takn away, and a discount from total was implemented. However, we have cases when we add a diffrent discount to each item. Was this option removed permanently? Thanks, 
      • Any Possible to change the challan type in Delivery challan ?

        Hello Team, We need to add the more values in challan type in delivery challan module in Zoho Books.So how to add additional values in challan type field. Please find following snap for your reference. Thanks in Advance, Thisai Moorthy.
      • Next Page