Accelerate Github code reviews with Zoho Cliq Platform's link handlers

Accelerate Github code reviews with Zoho Cliq Platform's link handlers



Code reviews are critical, and they can get buried in conversations or lost when using multiple tools. With the Cliq Platform's link handlers, let's transform shared Github pull request links into interactive, real-time code reviews on channels. Share PR links in any reviewer groups or channels to get approval or receive review comments instantly.

Pre-requisites:

  • Connection creation :

  • Creation of form function

    • To create a form function, navigate to Bots & Tools and select "Functions."

    • On the right side, click "Create Function" and name it "addCommentPullRequest."

    • Set the Function Type to "Form." The purpose of this function will be explained in Step 4.

Step 1: Create an extension and add a link handler

  • After successfully logging into Cliq, hover over the top right corner and click on your profile. Then navigate to Bots & Tools > My Extensions.
  • On the right side, click the Create Extension button.
  • To learn more about extensions and their purposes, refer to the Introduction to Extensions.
  • Create an extension using your preferred name. Please specify the following details: the extension name, a description (to help users understand the extension's purpose), and an image to identify it.
  • Under the link handlers section, enter github.com to configure the extension to preview links for that domain.
  • Bundle the newly created form function - addCommentPullRequest, as it is mandatory to include at least one component to an extension, and then click Create.

 

Step 2: Configuring the preview handler

  • After creating an extension, a popup will appear that provides an overview, which includes information about the extension. It will also list the connectors, showing the components bundled with the extension and their associated app keys.
  • Additionally, handlers will allow you to configure access, customize settings, and manage links within the extension.
  • Navigate to handlers, scroll down, and under link handlers, hover over to preview handler.

  • The Preview Handler expands a rich response when a URL is shared in a conversation. Click edit code and copy and paste the script below.
Script
  1. pullRequest_url = url;
  2. owner = pullRequest_url.getSuffix(".com/").getPrefix("/");
  3. pullRequest_ID = pullRequest_url.substring(pullRequest_url.lastIndexOf("/pull/") + 6);
  4. repositoryName = pullRequest_url.substring(pullRequest_url.indexOf("github.com/") + 11,pullRequest_url.lastIndexOf("/pull/"));
  5. // Fetch PR details from GitHub API
  6. getPRDetails = invokeurl
  7. [
  8. url :"https://api.github.com/repos/" + repositoryName + "/pulls/" + pullRequest_ID
  9. type :GET
  10. connection:"githubforcliq"
  11. ];
  12. // Parse API response
  13. pr_title = getPRDetails.get("title");
  14. pr_author = getPRDetails.get("user").get("login");
  15. changed_files = getPRDetails.get("changed_files");
  16. arguments = Map();
  17. arguments.put("pullRequest_ID",pullRequest_ID);
  18. arguments.put("repositoryName",repositoryName);
  19. arguments.put("owner",owner);
  20. arguments.put("pr_title",pr_title);
  21. arguments.put("pr_author",pr_author);
  22. arguments.put("changed_files",changed_files);
  23. // Build preview response
  24. response = {"title":"Pull Request -" + pr_title,"type":"link","provider_url":pullRequest_url,"faviconlink":"https://zoho.com/sites/default/files/cliq/images/githubmark.png","thumbnail_url":"https://zoho.com/sites/default/files/cliq/images/githubmark.png","fields":{"data":{{"label":"Author","value":pr_author},{"label":"Files Changed","value":changed_files}}},"actions":{{"hint":"Approve a pull request instantly","style":"+","label":"Approve","type":"button","params":arguments},{"hint":"Add review comments to the pull request","label":"Add a comment","type":"button","params":arguments}}};
  25. return response;

Step 3: Configuring the action handler

  • We have refined the response of the pull request URL when it is shared in a Cliq conversation. Now, we need to define the actions to be performed when the buttons in the unfurled response are clicked.
  • This can be configured in the action handler. To locate it, navigate to the extension handlers. Scroll down to find the link handlers section, then hover over to the action handler.
  • The action handler executes actions when the buttons in the unfurled card are clicked. Click "Edit Code" and copy and paste the script below.
Script
  1. label = target.get("label");
  2. pullRequest_ID = target.get("params").get("pullRequest_ID");
  3. repositoryName = target.get("params").get("repositoryName");
  4. owner = target.get("params").get("owner");
  5. response = Map();
  6. if(label.equals("Approve"))
  7. {
  8. params = Map();
  9. params.put("event","APPROVE");
  10. headers = Map();
  11. headers.put("Content-Type","application/json");
  12. approvePullRequest = invokeurl
  13. [
  14. url :"https://api.github.com/repos/" + owner + "/" + repositoryName.getSuffix("/") + "/pulls/" + pullRequest_ID + "/reviews"
  15. type :POST
  16. parameters:params + ""
  17. headers:headers
  18. detailed:true
  19. connection:"githubforcliq"
  20. ];
  21. info approvePullRequest;
  22. responseCode = approvePullRequest.get("responseCode");
  23. if(responseCode == 200)
  24. {
  25. pull_request_url = approvePullRequest.get("responseText").get("pull_request_url");
  26. pr_title = target.get("params").get("pr_title");
  27. pr_author = target.get("params").get("pr_author");
  28. changed_files = target.get("params").get("changed_files");
  29. response = {"card":{"title":"✅ Pull Request Approved","theme":"modern-inline"},"buttons":{{"label":"View Pull Request","hint":"","type":"+","action":{"type":"open.url","data":{"web":pull_request_url}}}},"text":"*Pull Request* :" + pr_title + "\n*Author* : " + pr_author + "\n*Files changed*:" + changed_files};
  30. return response;
  31. }
  32. else
  33. {
  34. banner = {"text":"Pull request approval failed!","status":"failure","type":"banner"};
  35. return banner;
  36. }
  37. }
  38. else
  39. {
  40. return {"type":"form","title":"Add Review Comment","name":"addComment","button_label":"Add","inputs":{{"label":"Review Comment","name":"comment","placeholder":"Leave a note for the author or your team","min_length":"0","max_length":"500","mandatory":true,"type":"textarea"},{"name":"pullRequest_ID","value":pullRequest_ID,"type":"hidden"},{"name":"repositoryName","value":repositoryName,"type":"hidden"},{"name":"owner","value":owner,"type":"hidden"}},"action":{"type":"invoke.function","name":"addCommentPullRequest"}};
  41. }
  42. return Map();
 

Step 4: Handling the form submit handler to add comments to a pull request

  • When clicking the "Add a comment" button, a form will be triggered to allow users to add comments in the specified multi-line input text field. This form should be submitted using the form functions in Cliq.
  • To create this function, navigate to Bots & Tools > Functions. On the right side, click "Create Function" and name the function "addCommentPullRequest." Choose the Function Type as "Form."
  • After that, click "Save & Edit Code" and paste the script provided below. 
Script : addCommentPullRequest - Form Submit Handler
  1. response = Map();
  2. formValues = form.get("values");
  3. pullRequest_ID = formValues.get("pullRequest_ID");
  4. repositoryName = formValues.get("repositoryName");
  5. owner = formValues.get("owner");
  6. comment = formValues.get("comment");
  7. params = Map();
  8. params.put("body",comment);
  9. params.put("event","COMMENT");
  10. headers = Map();
  11. headers.put("Content-Type","application/json");
  12. addComment = invokeurl
  13. [
  14. url :"https://api.github.com/repos/" + owner + "/" + repositoryName.getSuffix("/") + "/pulls/" + pullRequest_ID + "/reviews"
  15. type :POST
  16. parameters:params + ""
  17. headers:headers
  18. detailed:true
  19. connection:"githubforcliq"
  20. ];
  21. info addComment;
  22. responseCode = addComment.get("responseCode");
  23. if(responseCode == 200)
  24. {
  25. banner = {"text":"Comment added to the pull request","status":"success","type":"banner"};
  26. return banner;
  27. }
  28. else
  29. {
  30. banner = {"text":"Unable to add review comments!","status":"failure","type":"banner"};
  31. return banner;
  32. }
  33. return Map(); 

Note :

You need to configure the app link to get a rich, unfurled response for the GitHub PR links posted in any chat. Refer to the link below to configure the unfurl link in Zoho Cliq.

🔄 Workflow explanation  

With this custom solution, GitHub Pull Requests can be shared instantly in any chat, group, or channel to get them reviewed by designated reviewers or top collaborators of the repository.
 

💼 Business benefits  

  • Faster review cycles – Reduces turnaround time by bringing PRs directly into team conversations.
  • Improved code quality – Promotes timely feedback from key collaborators and senior reviewers.
  • Increased developer visibility – Ensures pull requests don’t go unnoticed or remain idle.
  • Streamlined collaboration – Centralizes communication around code changes, reducing context-switching. 
No more gaps between the coding lifecycle and collaboration. Implementing rich previews for GitHub pull requests speeds up the development process, leading to better visibility, quicker feedback, and more substantial code ownership.

We're here to help, so don't hesitate to reach out to support@zohocliq.com with any questions or if you need assistance in crafting even more tailored workflows.

    • Sticky Posts

    • Add Claude in Zoho Cliq

      Let’s add a real AI assistant powered by Claude to your workspace this week, that your team can chat with, ask questions, and act on conversations to run AI actions on. This guide walks you through exactly how to do it, step by step, with all the code
    • Zoho Cliq REST APIs v3 : A complete guide to what's changed and why 

      APIs are not just consumed by a developer with numerous automations and a series of open browser tabs. They are parsed by LLMs, fed into agent pipelines, and auto-completed by AI coding assistants that have zero tolerance for inconsistency. A verb tucked
    • Cliq Bots - Post message to a bot using the command line!

      If you had read our post on how to post a message to a channel in a simple one-line command, then this sure is a piece of cake for you guys! For those of you, who are reading this for the first time, don't worry! Just read on. This post is all about how
    • Automating Real-Time Zoho Bookings Alerts in Zoho Cliq

      Enable your teams to respond in seconds by bridging the gap between booking confirmation and team notification. No sticky notes, no calendar nudges and no follow-up frenzies. For businesses that rely on scheduled appointments, real-time visibility is
    • Automate attendance tracking with Zoho Cliq Developer Platform

      I wish remote work were permanently mandated so we could join work calls from a movie theatre or even while skydiving! But wait, it's time to wake up! The alarm has snoozed twice, and your team has already logged on for the day. Keeping tabs on attendance
    • Recent Topics

    • Cliq iOS can't see shared screen

      Hello, I had this morning a video call with a colleague. She is using Cliq Desktop MacOS and wanted to share her screen with me. I'm on iPad. I noticed, while she shared her screen, I could only see her video, but not the shared screen... Does Cliq iOS is able to display shared screen, or is it somewhere else to be found ? Regards
    • Error 1011 saving website personalisation — blocking all changes (corrupted "home_page.content" field)

      When trying to save changes under Settings → Brands → MY COMPANY → Website → Personalisation → Messenger, I receive the following error: "Either the request parameters are invalid or absent" upon checking on the developer console of the browser I get
    • All new Address Field in Zoho CRM: maintain structured and accurate address inputs

      Availability Update: 29 September 2025: It's currently available for all new sign-ups and for existing Zoho CRM orgs which are in the Professional edition exclusively for IN DC users. 2 March 2026: Available to users in all DCs except US and EU DC. 24
    • Tip #7 - Siri shortcuts in Zoho CRM

      Hello Everyone, Here is a tip about the 'Siri Shortcuts' feature and how it works in the iOS version of the Zoho CRM mobile app. What are Siri shortcuts? Siri Shortcuts are quick actions across your apps on iOS. They can perform an action automatically
    • Automatic Department and Employee Sync Between Zoho One and Zoho People

      Dear Zoho Support, I'm writing to propose a valuable feature request that would streamline data management and improve user experience within the Zoho ecosystem: automatic synchronization between departments and employees in Zoho One and Zoho People.
    • Nothing triggers a Journey

      I have been on the phone with Zoho support and they claim their development team needs to investigate more. However, I've found this is a pretty standard answer after a call takes any amount of time. After that, it's days and even weeks before it actually
    • Manually Backorder Sales Order and/or Change Sales Order Status

      Is there an option to manually 'backorder' a sales order, or otherwise change it's status?  In some cases, we receive orders for products that are out of stock, but we already have issued POs to our suppliers for replenishment.   Ex- we created a PO on
    • Backorder process review - Automating Removal of Sales Order from "On Hold" When PO is Received

      Hello Zoho Inventory Team, Currently, sales orders in On Hold status are released only when the bill for the purchase order is created. In our workflow, it would be much more efficient if the sales order could automatically move out of On Hold as soon
    • Kaizen #254 - Building a Temporal Lead Score Decay System in Zoho CRM

      Hello, CRM Wizards! Welcome to a fresh week of Kaizen. In this post, we will build a temporal lead score decay system that works alongside your existing scoring rules by introducing percentage-based score decay driven solely by customer inactivity. By
    • Metadata API Access to Functions

      I think it would be incredibly helpful to have api access to every function's code. Our team primarily uses deluge functions to update fields across modules according to business logic. I would like to create a visual dependancy model for our CRM, but
    • API actions/approvals endpoint returns UNAPPROVABLE despite user having full permissions and being the assigned approver

      Hi Team, We are trying to programmatically approve a record via the CRM API but consistently receive an UNAPPROVABLE error, even though the same user can approve the record without issue from the UI. Endpoint called: POST https://www.zohoapis.com/crm/v6/{module}/{record_id}/actions/approvals
    • Get a realistic picture of your revenue with Forecast Adjustments in Zoho CRM

      #crm25q1 Dear Customers, We hope you're doing well! Today, we're here with an important enhancement for business decision makers: forecast adjustments. Let's get straight to it! With technology on the rise and CX at its core, businesses are constantly
    • I am not able to check in and checkout in zoho people even location access allowed

      This issue i am facing in mackbook air m1, I allowed location in chrome browser and i also tried in safari but getting similar issue. Please have a look ASAP.
    • WhatsApp Vendors Module

      Hello, so WhatsApp works with the below, mainly with the customer side modules. Can we get functionality on the vendor side modules, i.e., PO, Bills, Vendor Credits, Payments Made, Purchase Received? WhatsApp is often the preferred method of communication
    • Upload ticket attachments via Drag-&-Drop

      Hello, if you want to upload a file to the ticket attachment you need to click the button and use the file browser to select and upload the desired file. In many cases, it would be much more efficient if you could simply drag the file to the browser window...
    • Elevate your Radar experience: Best practices part 3

      In the Spotlight: Zoho Desk's Radar app Customer support requires human intelligence combined with emotional intelligence. How about these coupled with contextual intelligence? These elevate the customer support experience. When providing support through
    • Migrating my email from GMAIL to ZOHO MAIL..........

      I am a long time GMAIL user and I really only understand how they operate, but after reviewing your tutorials and forums online, it is quite unbelievable how much more and how much more streamlined ZOHO mail is, not to mention ZOHO's wonderful, more advanced capabilities. I do have several questions about transitioning over to ZOHO.  Primarily, where is the best place to start, what do I do first? And how hard is it actually to move all my business and personal accounts over here?  When I sign up
    • 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
    • RFID Scanner/Adapter Solution for barcode scanning

      Hello, We will be trialing using barcode scanning for item verification during our picking process. Using a phone or a tablet is awkward and uncomfortable. Are there any Zoho compatible RFID scanners, or an RFID device/adapter that will connect with a
    • Approval Process not retriggering after rejection when stage is manually changed back

      We have an Approval Process on the Opportunities module that triggers when Stage is changed to Negotiation (Execute on: Edit Only). On rejection, a field update action reverts Stage back to Proposal. The issue: after rejection, AE can manually changes
    • Free Webinar Alert! Workdrive + Office Suite in Zoho Workplace: Create, co-edit and collaborate

      Hello Zoho Community! Looking for a better way to create, manage, and collaborate on your business documents? Join our upcoming webinar to discover how Zoho WorkDrive and the Zoho Office Suite (Writer, Sheet, and Show) help teams to work together from
    • Updating Sales orders on hold

      Surely updating irrelevant fields such as shipping date should be allowed when sales orders are awaiting back orders? Maybe the PO is going to be late arriving so we have to change the shipment date of the Sales order ! Not even allowed through the api - {"code":36014,"message":"Sales orders that have been shipped or on hold cannot be updated."}
    • Two-Factor Authentication in Zoho Mail: Add an extra layer of security to your organization

      Account security is a critical aspect of managing any organization's email. With increasing risks of unauthorized access, a single password may not always be sufficient to keep accounts protected. Zoho Mail's Two-Factor Authentication (TFA) addresses
    • Dark Mode - Font Colors Don't Work

      When editing a document in Dark Mode and selecting font colors, they don't show up on screen.  Viewing/editing the same document in Light Mode shows them just fine.
    • API to post drafts for social media

      I we want to post draft posts to our zoho social account and then approve and schedule them within Zoho social. is this possible with for example: https://apis.zoho.com/social/v2/post TIA Jon
    • How to show product cards in your chatbot

      Hey everyone, If you are using Guided Conversations to help customers find products, you have probably run into this problem: the bot gives customers a list of options, but they still have no idea which one to pick. There will be no images, no specs,
    • Changing settings for auto logoff

      I've noticed that when I haven't used Cliq for a while, I have to re-enter my password. That is really clumsy, especially if you have a complicated password. Because it won't be filled in automatically. Is there a way to change that behaviour? We are
    • How do you create invoices before sending them through Zoho Invoice?

      Hi everyone, I'm curious how other businesses handle their invoicing workflow before sending invoices through Zoho Invoice. Do you: Create invoices directly inside Zoho? Prepare them first in another invoice tool or template? Use Excel or Word before
    • ZML Error/Bug

      Hi, I would like to request for your help regarding this kind of behavior. Requested_Start_Time & End_Time - date-time fields https://......#Page:PH_Calendar_Page?reqDate=08-04-2026 https://......#Page:PH_Calendar_Page?reqDate=07-31-2026 https://....#Page:PH_Calendar_Page?reqDate=08-03-2026
    • Item with name in different languate

      Hello, is there a way to have an item with its name in different languages? For example: I sell an item in different markets and I'd like to have a Proposal and the Invoice with the Item Name in a specific language. Rino Bertolotto Zoho Specialist, STESA srl
    • Migration of emails from Yandex to Zoho

      I am trying to migrate an yandex mail account to zoho mail account. I am confused with all the related articles/informations in the net. Could someone please outline the process to do it, just thinking about me as a novice with limited knowledge or experience. A couple of questions from the knowledge gained. 1. I believe we have to delete the yandex current MX from the website records and add Zoho MX. What happens to the emails as we remove the mail exchange record. Yandex stops updating emails and
    • Calling a function within another function

      Hello there, I have just found out that you can simply call up functions in other functions, regardless of the department. You can't create functions with the same name twice, even though you are in a different department. If you try it, you don't get
    • 【続々公開】Zoholics Japan 2026 セッション情報を更新しました!

      ユーザーの皆さま、こんにちは! Zoholics Japan 2026のセッション情報を続々と公開しています! 今年は3つのトラックで、Zohoの最新情報やAI活用、製品アップデート、 活用事例など、多彩なセッションをお届けします。 現在公開中のセッション(一部) ・Zoho CRM 製品アップデート ・Zoho CRM Plus 製品アップデート ・Zoho Community セッション ・Zoho Desk セッション ・中堅・成長企業の人事DX ~AI時代に何から始めるべきか?~ ・Zoho
    • New Ways to Personalize, Organize, and Share Your Notes

      We're excited to introduce a new set of enhancements in Zoho Notebook that make your note-taking experience cleaner, more flexible, and easier to share. With this update, you can create notes that automatically adapt to your device theme, browse your
    • Introducing spam detection for webforms: An additional layer of protection to keep your Zoho CRM clean and secure

      Greetings all, One of the most highly anticipated feature launches—Spam Detection in webforms—has finally arrived! Webforms are a vital tool for record generation, but they're also vulnerable to submissions from unauthenticated or malicious sources, which
    • Rich-text fields in Zoho CRM

      Moderation Update: During the initial release of Rich Text fields, it was supported only in the Enterprise and Ultimate editions. We have gradually extended Rich Text fields to all the paid editions of Zoho CRM. Hello everyone, We're thrilled to announce
    • Email-Data Synchronization with Zoho Analytics

      Hello, Enterprise Support Community! We're excited to announce the availability of Email Data Synchronization with Zoho Analytics! This highly requested enhancement allows you to sync email data from Zoho CRM into Zoho Analytics, making it easier to analyze
    • Zoho - shopify sales order - invoicing

      we have integrated zoho with shopify. so now , when an order comes through shopify-it raises a sales order in zoho. And at this time- the inventory goes down in shopify, according to the sale. Then we manually convert the sales order to an invoice, and
    • Enable Replenishments Option not Available

      I'm looking to turn on the replenishment option in Zoho Inventory and I'm not finding settings for it in Zoho Books or Zoho Inventory. This is the tutorial I was following from Zoho. Is there a step I'm missing to have Replenishments be available in Zoho
    • Kiosk Page Refresh

      We have a Kiosk running from a button in contacts to update values and also add related lists, which works great, but when the kiosk is finished the page does not refresh to show the changes. Is there a way to force the contact to refresh/update when
    • Next Page