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

      • 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

        • How do I get to "Admin Panel"

          I just started a Cliq account. I am the sole administrator. As I read the documentation, I keep seeing reference to an "Admin Panel". I see no way to access this from my Cliq account. How do I access this panel?
        • 【初開催! オンライン】Zoho Campaigns メール配信の基礎・活用勉強会を開催します! 10/15 参加無料

          ユーザーの皆さま、こんにちは。 Zoho コミュニティグループの中野です。 Zoho ユーザーコミュニティ初となる、メールマーケティングをテーマにしたオンライン勉強会を開催します! ▶︎イベント詳細・参加登録はこちら 今回取り上げるサービスは「Zoho Campaigns」です。 「Zoho CRMとZoho Campaignsのどちらからメールを配信すればよいか分からない」 「一斉配信はできるようになったけれど、現在のリスト管理や設定が正しいか不安」 「メールを送るだけで終わり、配信後の改善につなげられていない」
        • Marketing Tip #46: Run flash sales the right way

          A flash sale can do a lot for your store. It can clear slow-moving inventory, spike revenue on a slow day, or reward your most loyal customers. But if done carelessly, flash sales can backfire. Customers start expecting discounts, stop buying at full
        • Introducing Smart Fields in Zoho Forms

          Hello form builders! We are excited to introduce Smart Fields in Zoho Forms - a faster way to add calculations to your forms without writing formulas. Instead of creating multiple fields and configuring complex calculations yourself, you can now drag
        • Checkbox not displaying correctly in subform

          Greetings: I have shared my app (wv) with support.  I am having problems with a checkbox field not displaying correctly in a subform.  The main form is called volunteers and the subform is called volunteers_subform.  The field in question is called roles. When you access the subform by itself the checkbox lookup displays as checkboxes.  But when you view it in the main volunteers form, it displays as a multi-select dropdown instead.   I have attached jpegs showing the difference.   Any thoughts?
        • Unbundle feature for composite items

          We receive composite items from our vendors and sell them either individually or create other composite items out of them. So, there is a lot of bundling and unbundling involved with our composite items. Previously, this feature was supported in form
        • Valid characters for use in email addresses using Zoho's apps/APIs

          We have found an issue with the + sign character in zoho subs - we are allowed to create a customer with an email address that has a plus sign but the API doesn't allow the + so the billing portal is not created. We are going to prevent users from using
        • Expand Zoho Analytics Spatial Capabitlities

          Dear Analytics team Thanks for the great product - I'm a big fan on Analytics and the monthly release highlights is one of my favourite emails to receive. I'd like to request expansion and improvement of Zoho Analytics spatial data capabilities, namely:
        • Automate customer follow-ups with Sequences in Bigin

          Greetings, We hope you're all doing well! We're happy to announce a new feature that we've added to Bigin. Following up with every lead at the right time can be challenging, especially when your team is managing multiple conversations across emails, calls,
        • 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
        • Can we have an automated TDS Receivable Recon with Form 26AS of Income Tax Portal ?

          Can we have an automated TDS Receivable Recon with Form 26AS of Income Tax Portal ?
        • Customers would like to add tips when paying in Client Portal

          I am happy with the clean interface of the Client Portal. However, I am running into a challenge: my customers would like to be able to add tips/gratuities when making payments. Currently, this is very clunky because they have to 1) manually over-pay,
        • Tag Limi?

          is there any way to create more than 20 tags? 
        • prefill_data for Creator + Merge & Sign

          Hello, Is there an option to use prefill_data for signer fields from creator? I see the option for CRM but it will not work with creator? I have tried passing the value in the signer data, and that also does not work. Alternatively, is there a way to
        • Delug script

          I have been looking at auto-update a amount (home currency) field from another module. Zoho native multicurrency was used in the other module (we have 4 here). Custom script was input with no error, but the field was not updated on trigger. Script as
        • Can I Build a Gaming Website Using Zoho? Need a Quick Roadmap

          Hi Dear Members, I want to create a gaming website using Zoho. Is it possible? My goal is to build a sleek, unique, easy-to-navigate, and fast-loading website for a gaming project. I want the site to look professional, user-friendly, and optimized for
        • Remove Due Date from Statements

          Is it possible to remove the Due Date on the Invoice transation line on statements? I have figured work arounds to get the Invoice detail on the Statement but cannot work out haw to simplify the stament by removing the "- due on xx/xx/2026" - it really
        • What Should an Agent-Native Project Workspace Look Like

          AI is moving beyond assistants that simply answer questions. With tools like MCP, agents can now interact directly with project data and perform actions. That makes me wonder: what should an agent-native project workspace actually look like? For me, it
        • unable to join meeting due to speaker issue

          unable to join meeting due to speaker issue
        • How to add formatting in zoho.cliq.postToUser(...) message?

          In a CRM Deluge function, I'm trying to use the message formatting guidelines given here: https://www.zoho.com/deluge/help/cliq/posting-to-zoho-cliq.html#message-formats My message is: message: #Title text. The result in Cliq is: #Title text. (no large
        • Marketing Tip #50: Sell digital products and use them to grow your store

          Physical products need packaging, shipping, and stock management. Digital products need none of that. Once created, they can be sold an unlimited number of times, delivered instantly, and never go out of stock. What counts as a digital product? A digital
        • Turn off Mobile Optimize

          Hello is it possible to stop the automatic mobile optimization of my site as it looks much better on a mobile in full site format rather than mobile format. Thanks
        • How to select from pricebook when creating a salesorder or quote

          I am creating a sales order and when selecting the Products I do not see any where to select from pricebooks. How do i associate this to my orders?
        • API - Available Stock Definitions

          Okay, Zoho team... your copywriters fell down on the job for this one :) I think these warrant a bit more explanation as to what they include and what they don't.
        • Cross-application Deluge calls fail when application link name starts with a number

          I encountered an issue when calling a custom function in another Zoho Creator application within the same account. The target application’s URL/application link name began with a number, similar to: 27_example_application The following cross-application
        • Transformez vos webinaires en opérations automatisées

          Organiser un webinaire, c’est bien plus que passer en direct. Il faut gérer les inscriptions, suivre les participants, envoyer les enregistrements, mettre à jour le CRM… et s’assurer que chaque étape se déroule au bon moment. L’automatisation des workflows
        • Cash Basis VAT RETURN REPORT Required in Saudi Arabia

          Zoho Books in Saudi Arabia not showing TAX RETURNS report on CASH Basis.. It only showing accrual basis. Oforur requirement is both reports (Cash Basis and Accrual Basis ) , same like indian Edition of Zoho Books showing. CASH BASIS RETURN is our Basic
        • Marketing Tip #1: Optimize item titles for SEO

          Your item title is the first thing both Google and shoppers notice. Instead of a generic “Leather Bag,” go for something detailed like “Handcrafted Leather Laptop Bag – Durable & Stylish.” This helps your items rank better in search results and instantly
        • How can I filter inactive/disable agent tickets?

          Hello, We have an user-agent that left the company and we inactive/disabled his agent. So, now I can no longer filter or search tickets that he is the current owner, or even create a rule to reassign tickets to another person when the ticket is reopen.
        • How do i move multiple tickets to a different department?

          Hello, i have several tickets that have been assigned to the wrong department.  I am talking about hundreds of automatically generated ones that come from a separate system. How can i select them all at once to move them to another department in one go? I can select them in "unsassigned open tickets view" but i can't find a "move to another department" option. I also can't seem to assign multiple tickets to the same agent in that same view. Could somebody advice?
        • Add Reauthentication Option for Zoho Bug Tracker Integration in Zoho Desk

          Hello Zoho Desk Team, We hope you're doing well. We would like to request an enhancement to the Zoho Bug Tracker integration within Zoho Desk. Current Limitation: At the moment, there is no option to reauthenticate the Zoho Bug Tracker integration in
        • Create Package From A Picklist

          Dear Zoho, Can it be made possible to create a package from a picklist? The reason our company makes a picklist is for that to become a package Our sales orders have 600-1000 items I hope that makes it clear that it's hard to delete 990 items when we
        • Migrating from Zoho Checkout to Zoho Billing

          I have an active Zoho Checkout account where I'm charging customers for subscriptions. Now I'm looking to upgrade and only use Zoho BIlling, in which my account in on read only mode at the moment. I can see is also tracking the customers and its payments.
        • Step up your lead generation game with online forms

          Hello fellow form builders,   Generating leads for your sales team gets easier when you integrate your CRM with online forms. To help show you how to use forms as part of your lead generation strategy, we have exclusive tips and tricks on how to collect, update and prioritize lead information in Zoho CRM based on form responses.  1. Create new leads If CRM software is designed to help you handle your business easily, that means getting data into it should also be easy. Check out the article on how
        • API - Bank Accounts | Reconciliation Discrepancy

          Unless I'm reading it wrong, the documentation for the Bank Reconciliations API is inconsistent with itself. https://www.zoho.com/books/api/v3/bank-accounts/#create-a-bank-reconciliation The text definition says that the transaction_id should be a string,
        • another little issue

          So to get over showing prices with VAT we used the price lists and made the prices inclusive. The problem is now on the items it wants to show the orginal retail value which makes no sense. Ideas please
        • Request to update VAT registration date for Brikz And Bolt Technical Services L.L.C S.O.C

          Dear Zoho Books Support Team, I am writing to request assistance with updating the VAT registration date to 01 June 2026 in our Zoho Books account (Organization: Brikz And Bolt Technical Services L.L.C S.O.C, TRN: 105420963800003). Currently, the system
        • Handle Leading Zeros in a Number Field

          Hi, If I use a Number Field, set with Min 7 Digits and Max 7 Digits, and enter 0000001, it will result in 1 and an error as it removes the leading zeros, the same with entering 0012340 will result in 12340 and error. So I have to use a Text Field and
        • HTML PDF Templates / Build From Scratch option not visible for Custom Modules

          Hi everyone, I am working with Zoho Books Custom Modules and trying to create a custom 4x4 package label PDF template using HTML/CSS. According to the official Zoho Books documentation for HTML PDF Templates, there should be an option like: Settings →
        • Virtual Option for Fields

          Hi, I would like to be able to choose another option other than Read-Only or Disabled, such as Virtual. And with Virtual, the field is shown on the form and avilable in rules, but NOT saved to the Database. A use case is having multiple Large Lists of
        • Next Page