Kaizen #18 - Ruby SDK

Kaizen #18 - Ruby SDK

Hello everyone!
Welcome back to another week of Kaizen!
This week, we will discuss the Ruby SDK.

What is the Ruby SDK for Zoho CRM?

Ruby SDK allows you to create client Ruby applications that you can integrate with Zoho CRM, effortlessly. It serves as a wrapper for the REST APIs, thus making it easier to use the services of Zoho CRM.

Here is a sample of how the SDK acts as a middle ware between Zoho CRM and a client Ruby Application.


What can you do with the Ruby SDK?
  • Exchange data between Zoho CRM and the client application where the CRM entities are modeled as classes.
  • Authenticate your application easily every time you sync data between Zoho CRM and your application, as the SDK takes care of generating the access/refresh tokens automatically.
Environment Setup
The client app must have the Ruby version 2.3.7 or above installed. Refer to Ruby Installation for the steps to install Ruby.

How to Start using the Ruby SDK?
Follow the below steps:
  • Step-1: Register your application (Self Client or Web-based client)
  • Step-2: Install the SDK
  • Step-3: Initialize the SDK
    3.a. Choose the token persistence method
    3.b. Set up the configuration dictionary
    3.c. Generate the tokens
  • Step-4: Connect to Zoho CRM through the available methods
Let us now discuss these steps in detail.

Step-1: Register your application

All the Zoho CRM APIs are authenticated by the OAuth2.0 standards. It is mandatory to authenticate your application with Zoho.
You can register your application either as a Self Client (single user app) or a web-based app (multiple users app).
1.a. Self Client
  1. Go to https://api-console.zoho.com.
  2. Click ADD CLIENT.
  3. Choose the Client Type as Self Client, and click CREATE.
  4. You will receive a client ID and a client secret upon successful registration.
1.b. Web-based Client
  1. Go to https://api-console.zoho.com.
  2. Click ADD CLIENT.
  3. Choose the client as Web based and click CREATE NOW.
  4. Specify the client name, homepage URL of your application's UI, and a redirect URI to which you want to redirect the users after they grant consent to your application.
  5. Click CREATE.

  6. Your Client ID and Client Secret will be displayed.
Step-2: Install the SDK

The Ruby SDK is available as a gem. 
Run the below command to install the Ruby SDK for Zoho CRM.

gem install ZCRMSDK

Step-3: Initialize the SDK 

Initializing the SDK involves the following steps.

  • Step 3.a - Choosing the token persistence method
  • Step 3.b - Setting up the configuration dictionary
  • Step 3.c - Generating the tokens

3.a. Token Persistence
Your application should retain tokens (grant, access, and refresh tokens) to automate the process of data transfer between your Ruby application and Zoho CRM.

You can persist (store) the tokens in three ways.
a. MySQL Persistence (default)
b. File Persistence
c. Custom DB Persistence

a. MySQL Persistence
When you want to store the tokens in the MySQL DB, ensure that MySQL2 is installed.
Run the below command to install MySQL2.

gem install mysql2 -v 0.5.2

For this type of persistence, you must include the following keys in the configuration dictionary (discussed in the next section), along with other mandatory keys.

"mysql_username":"root",
"mysql_password":"*****",
"mysql_port":"port_number"

Note
When you use MySQL persistence, ensure that
  • MySQL runs in the same machine serving at the mentioned port. (by default 3306).
  • There is a database named zohooauth.
  • There is a table name oauthtokens with the columns useridentifier (varchar(100)), accesstoken (varchar(100)), refreshtoken (varchar(100)) and expirytime (bigint).

b. File Persistence
If you want to store the tokens in a file, you can create a file named zcrm_oauthtokens.txt and provide the absolute path of the folder containing this file in the below key of the configuration array.

"token_persistence_path":"path_to_the_folder_containing_the_txt_file"

If you do not create this file, the SDK itself creates this file in the path you have specified, and persists the token there.
Note: This method is recommended only for self client apps.

c. Custom DB Persistence
To use this method, you need to provide the following keys in the configuration dictionary.

"persistence_handler_class_path":"absolute path to the custom DB implementation"
"persistence_handler_class":"class name of the custom implementation".

You can use the inbuilt ZohoPersistenceHandler interface and include the following custom functions.

  • saveOAuthData(ZohoOAuthTokens tokens)
  • deleteOAuthTokens($userEmailId)
  • getOAuthTokens($userEmailId)
Note
The order of precedence for token persistence is custom, file, and DB persistence. That is, if you provide the details for custom persistence (in persistence_handler_class_path) and file persistence details (in token_persistence_path), then custom persistence is given priority over file.

3.b. Configuration dictionary
The below tables contains the list of keys you must include in the configuration dictionary based on the type of persistence.

Mandatory Keys

File Persistence
MySQL Persistence
Custom DB Persistence
client_id
client_id
client_id
client_secret
client_secret
client_secret
redirect_uri
redirect_uri
redirect_uri
token_persistence_path
db_username
persistence_handler_class
-
db_password
persistence_handler_class_path
-
db_port
-
current_user_email
current_user_email
current_user_email

Optional Keys

File Persistence
MySQL Persistence
Custom DB Persistence
application_log_file_path
application_log_file_path
application_log_file_path
log_in_console
log_in_console
log_in_console
sandbox
sandbox
sandbox
access_type
access_type
access_type
accounts_url
accounts_url
accounts_url
api_base_url
api_base_url
api_base_url
api_version
api_version
api_version

Where,
  • client_id, client_secret, and redirect_uri - Client details you received after registering your application. For self client apps, you can pass a dummy value for the redirect uri.
  • token_persistence_path - The relative path to store the OAuth tokens in the zcrm_oauthtokens.txt file. This key is mandatory if you want to use file persistence.
  • db_username, db_password, db_port - The MySQL username, password, and the port, respectively.
  • persistence_handler_class - Name of the class of the custom implementation for persistence. This key is mandatory if you want to use custom persistence.
  • persistence_handler_class_path - The absolute path to the custom DB implementation (.rb file).
  • application_log_file_path - The absolute path to log the exceptions during the usage of the SDK.
  • log_in_console - To print the exceptions on the console screen, when set as "true".
  • sandbox - Boolean key to make API calls to the sandbox environment. The value true makes API calls to the sandbox. Default value is false.
  • access_type - Must be set as offline as the SDK does not support online OAuth client, now.
  • accounts_url - The domain-specific accounts URL from which you generate the tokens.
    This key is mandatory when the user is not in the "com" domain.
    For US:
    https://accounts.zoho.com
    For EU:
    https://accounts.zoho.eu
    For CN:
    https://accounts.zoho.com.cn
    For IN:
    https://accounts.zoho.in
  • api_base_url - The domain-specific API URL from which you make API calls. For users from domains other than the US, this key is mandatory.
    For US:
    https://www.zohoapis.com
    For EU:
    https://www.zohoapis.eu
    For CN:
    https://www.zohoapis.com.cn
    For IN:
    https://www.zohoapis.in
  • api_version - Represents the version of the CRM APIs. The value is v2.
  • current_user_email - The email ID of the current user. You must set this either in the configuration array or ZCRMSDK::RestClient::ZCRMRestClient.current_user_email = "current user email id".

Below is a configuration dictionary with all the keys. 

config_details = { 'client_id' => 'xxxxx', #mandatory
'client_secret' => 'xxxxxx', #mandatory
'redirect_uri' => 'https://www.zoho.com', #mandatory
'api_base_url' => 'https://www.zohoapis.com', #optional, default is https://www.zohoapis.com
'accounts_url' => 'https://accounts.zoho.com', #optional, default is https://accounts.zoho.com
'current_user_email' => 'abc@xyz.com', #mandatory (should be either set in config array or ZCRMSDK::RestClient::ZCRMRestClient.current_user_email = "current user email id" )
'api_version' => 'v2', #optional,default is v2
'sandbox' => 'false', #optional default is sandbox
'application_log_file_path' => "/Users/xxxx/Desktop/log.log", #optional, absolute path of log file
'log_in_console' => 'true', #optional default is false, to log on the console
'persistence_handler_class_path' => 'absolute/path/to/customClass.ruby', #absolute path to the custom db implementation
'persistence_handler_class' =>'classname', #name of the class
'token_persistence_path'=>'relativepath/to/zcrm_oauthtokens.txt', #for file persistence
'db_username' => 'username', #optional, default root
'db_password' => 'password', #optional, default ''
'db_port' => 'port_number', #optional, default 3306
}

Now that you have created and registered your app with Zoho, you must authenticate it. 
Pass the configuration dictionary in the method ZCRMRestClient.init(config) and authenticate your app.

3.c. Generating the tokens

As the V2 Zoho CRM APIs follow the OAuth2.0 protocol, it is mandatory to authorize the OAuth2.0 app before using the SDK functions.
You can generate an access token from a grant token.
You can generate the grant token in two ways based on the type of client.

For Self Client Applications
  • Go to Zoho Developer Console.
  • Select your Self Client.
  • Provide the necessary scopes separated by commas, along with the scope aaaserver.profile.READ.
  • Select the Time Duration from the drop-down. This is the time the grant token is valid for.
  • Provide a description for the scopes. Click GENERATE.
  • Copy the grant token.

For Web-based Applications

It is the responsibility of your client app to generate the grant token for the users trying to login.
Your Application's UI must have the Login with Zoho option to open the grant token URL of Zoho, which would prompt for the user's OAuth2.0 authorization.
Upon the successful login of the user, the grant token will be sent as a parameter to your registered redirect URL.

Generating an access token from the grant token
Use the below code snippet in your main class.

client = ZCRMSDK::OAuthClient::ZohoOAuth.get_client_instance
grant_token = 'grant_token'
client.generate_access_token(grant_token)
Note
  • The code snippet to generate the access token from the grant token is valid only once per grant token. If the grant token expires before you generate the access token, you must generate a new grant token only.
  • Generating access and refresh tokens is a one-time process. After the tokens are generated the first time, the SDK persists them based on the keys defined in the configuration dictionary, and refreshes the access token as and when required.

Step-4: Connect to Zoho CRM through the available methods
Here is a sample to get a specific user's details. You can find the code for this sample in the attachment.


The isTokenGenerated Method

def self.is_token_generate(user)
    tokens = ZCRMSDK::OAuthClient::ZohoOauth.get_persistence_instance.get_oauth_tokens(user)
    unless tokens.nil?
        return true
    end
    rescue Exception => e
        return false 
  end
You need to add this method to check if the access token has already been generated or not. It returns a Boolean value.
  • true - The access token has already been generated. 
  • false - The access token has not been generated previously, thus, it shifts the control to the code snippet that leads to access token generation.
For more sample codes, refer to our SDK guide.
We hope you found this post useful. Stay tuned for more!

Cheers!




    Access your files securely from anywhere

        All-in-one knowledge management and training platform for your employees and customers.






                              Zoho Developer Community




                                                    • Desk Community Learning Series


                                                    • Digest


                                                    • Functions


                                                    • Meetups


                                                    • Kbase


                                                    • Resources


                                                    • Glossary


                                                    • Desk Marketplace


                                                    • MVP Corner


                                                    • Word of the Day


                                                    • Ask the Experts



                                                              • 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


                                                              Manage your brands on social media



                                                                    Zoho TeamInbox Resources



                                                                        Zoho CRM Plus Resources

                                                                          Zoho Books Resources


                                                                            Zoho Subscriptions Resources

                                                                              Zoho Projects Resources


                                                                                Zoho Sprints Resources


                                                                                  Qntrl Resources


                                                                                    Zoho Creator Resources



                                                                                        Zoho CRM Resources

                                                                                        • CRM Community Learning Series

                                                                                          CRM Community Learning Series


                                                                                        • Kaizen

                                                                                          Kaizen

                                                                                        • Functions

                                                                                          Functions

                                                                                        • Meetups

                                                                                          Meetups

                                                                                        • Kbase

                                                                                          Kbase

                                                                                        • Resources

                                                                                          Resources

                                                                                        • Digest

                                                                                          Digest

                                                                                        • CRM Marketplace

                                                                                          CRM Marketplace

                                                                                        • MVP Corner

                                                                                          MVP Corner









                                                                                            Design. Discuss. Deliver.

                                                                                            Create visually engaging stories with Zoho Show.

                                                                                            Get Started Now


                                                                                              Zoho Show Resources

                                                                                                Zoho Writer

                                                                                                Get Started. Write Away!

                                                                                                Writer is a powerful online word processor, designed for collaborative work.

                                                                                                  Zoho CRM コンテンツ




                                                                                                    Nederlandse Hulpbronnen


                                                                                                        ご検討中の方




                                                                                                                • Recent Topics

                                                                                                                • Presenting ABM for Zoho CRM: Expand and retain your customers with precision

                                                                                                                  Picture this scenario: You're a growing SaaS company ready to launch a powerful business suite, and are looking to gain traction and momentum. But as a business with a tight budget, you know acquiring new customers is slow, expensive, and often delivers
                                                                                                                • Can Zoho Flows repeat Actions more than once?

                                                                                                                  I'm attempting to make an intentional Zoho Flow loop using the below layout. However, when "WithinLimit" condition is met, the program fails to execute the action "Get & Add Request Co..." again. Is this by design? Is Zoho Flows unable to repeat actions
                                                                                                                • Video interviews not compatible on mobile

                                                                                                                  Hi Zoho,  The 2-way video interview feature you have added to Recruit would be great if the candidate was able to use the link to the video on a mobile phone, it doesn't work on Samsung browser, it doesn't work on chrome/firefox mobile version of browser,
                                                                                                                • Zoho Desk View Open Tickets and Open Shared Tickets

                                                                                                                  Hi, I would like to create a custom view so that an agent can view all the open tickets he has access to, including the shared tickets created by a different department. Currently my team has to swich between two views (Open Tickets and Shared Open Tickets).
                                                                                                                • Enviro Recycling EHF Fee's

                                                                                                                  ​​I'm in Canada and each province has it's own recycling program with it's own fee's. There are numerous categories that electronics fall into and each category has a taxable rate applied to it. I need a way to be able to apply the correct rate depending
                                                                                                                • Zoho Desk API - Influence which layout is used

                                                                                                                  Hello, how can the ticket layout be changed using the API? I would like to choose the layout directly when creating the ticket. If this is not possible, my question would be how can I change it afterwards? Best regards, Sven
                                                                                                                • Has CSS Changed for Common Elements?

                                                                                                                  I noticed today that the standard title headings on my Forms and Reports display smaller in size than before. Google Dev Tools (attached), seems to confirm my suspicion. Something appears to be overriding the 1.375rem to 1.125rem. The font size on the
                                                                                                                • Text field alignment

                                                                                                                  Is it possible to align text in the text field? Or even better, is there a possibility to have a field which accepts only numbers?
                                                                                                                • email moderation issue when email is sent in the name of a mail group

                                                                                                                  Symptom: an email that is sent by a mail group moderator in the name of a moderated mail group is held back for approval. Reproduction: Create a moderated mail group with members and moderators. Allow that mails can be sent in the name of the group (extended
                                                                                                                • Pipeline in Custom Modules

                                                                                                                  I love the way the Sales Pipeline looks and functions with reports. I would like to add the save pipeline features and visualization to a custom module, however, I only see that these pipelines are only available for the Deals module. Is there a way to add pipelines to custom modules?
                                                                                                                • Tip #53- Remote Billing: Your End-to-End Billing Solution in Zoho Assist- 'Insider Insights'

                                                                                                                  Manual invoicing, after every remote support session, can be time-consuming and often error-prone. As an MSP, IT admin, or even a freelance support technician, it may become overwhelming to keep track of session time, service rates, and client invoices.
                                                                                                                • Record history and ticket interaction tab in contacts and accounts

                                                                                                                  Hello everyone! We have improved the History tab to help users trace updates in the interaction activity logs of the Contacts and Accounts detail pages in the Customer Module. This enhancement make it easier to get clear details about who made each update,
                                                                                                                • Is there an API to "File a Ticket" in Desk

                                                                                                                  Hi, Is there an API to "File a Ticket" in Desk to zoho projects?
                                                                                                                • Keyboard UX for Assemblies

                                                                                                                  The new Assembly module has a counter-intuitive behavior that ought to be corrected. When an Assembly is ready to be entered, there are two options given, the blue-highlighted "Assemble" and the gray "Save as Draft". This correctly implies that the normal
                                                                                                                • Why can't I see images uploaded by other users in the Library for Campaigns

                                                                                                                  We are several users of zoho Campaign. I have uploaded visuals of our company, but my team members can't see them.
                                                                                                                • zoho sheet stuck

                                                                                                                  I Need help. ZOHO sheets stuck on the loading screen. I've already deleted the system cache and cookies of my browser (google chrome) but it's still not opening. 
                                                                                                                • Tip of the Week #78 – Cut response time with multichannel shared inboxes

                                                                                                                  If you’ve ever felt your team juggling between multiple email accounts, social pages, and chat apps just to reply to customers, you’re not alone. Managing conversations in multiple channels can quickly turn messy. Important messages across inboxes, replies
                                                                                                                • Need a way to run a client script longet than 10 seconds

                                                                                                                  By The Grace of G-D. Hi, Currently, Client Scripts are Timing out at 10 seconds. We have complex logics that needs more time. Can you add a feature request to increase the timeout?
                                                                                                                • FSM Improvement Idea - Show an Import button when there is no data

                                                                                                                  I am setting up FSM for a client and I noticed that there is no option to import data, see screenshot below. Even when you click Create Contact there is only an option to Import from Zoho Invoice. It is only after you add at lease 1 record that the Import
                                                                                                                • UI Improvement - Ability to Collapse Flow

                                                                                                                  The UI for Flow is generally pretty good. However, when multiple decision trees are used, the layout can get pretty convoluted and hard-to-follow (see one of my Flows below): In these cases, even the auto-arrange fails to make this something that a normal
                                                                                                                • Tasks Statuses

                                                                                                                  Hi, The task status "Completed" is a final status which closes the task. We need to have a status "Cancelled". However, when the status is set to "Cancelled", the task prompt still has a blue button to Close Task. When the customer clicks that and closes
                                                                                                                • Add Lookup Field in Tasks Module

                                                                                                                  Hello, I have a need to add a Lookup field in addition to the ones that are already there in the Tasks module. I've seen this thread and so understand that the reason lookup fields may not be part of it is that there are already links to the tables (
                                                                                                                • Create New Tasks Layout in CRM

                                                                                                                  I am able to do this in Leads, Contacts, Meetings, Calls - every other module, but cannot create a new layout in tasks. I have the appropriate access but it's simply not appearing as an option. Only "Standard" option shows. Please help!
                                                                                                                • Using IMAP configuration for shared email inboxes

                                                                                                                  Our customer service team utilizes shared email boxes to allow multiple people to view and handle incoming customer requests. For example, the customer sends an email to info@xxxx.com and multiple people can view it and handle the request. How can I configure
                                                                                                                • Auto-sync field of lookup value

                                                                                                                  This feature has been requested many times in the discussion Field of Lookup Announcement and this post aims to track it separately. At the moment the value of a 'field of lookup' is a snapshot but once the parent lookup field is updated the values diverge.
                                                                                                                • Zoho Recruit Subscription

                                                                                                                  Hello Zoho Recruit Team, Good day! I would like to inquire about your recruitment subscription plans and would also like to verify the current subscription our company is enrolled in under Zoho Recruit. Thank you, and I look forward to your response.
                                                                                                                • Automatic Portal invite

                                                                                                                  We have numerous customers we move through a blueprint in deals, when they get to a certain point we need to give them portal access, how can this be done through deluge or a workflow? Latest Update (December 2025): The option to automate portal invitations
                                                                                                                • Marketer's Space: Why mobile optimization deserves a place in your email strategy

                                                                                                                  Hello Marketers, Welcome back to Marketer's Space! Today, we'll talk about the importance of creating mobile-friendly email designs. While mobile phones were once used only to make phone calls, today they're used for almost everything, including texting,
                                                                                                                • Enhancements in Canvas

                                                                                                                  Dear All, Greetings! Canvas lets you design the record details page to suit your brand or business preferences. We are glad to introduce the following enhancements to uplift your design experience. Reusable Components Style Presets Let's go! Reusable
                                                                                                                • Introducing Dark Mode / Light Mode : A New Look For Your CRM

                                                                                                                  Hello Users, We are excited to announce a highly anticipated feature - the launch of Day, Night and Auto Mode implementation in Zoho CRM's NextGen user interface! This feature is designed to provide a visually appealing and comfortable experience for
                                                                                                                • ABN with Legal Entity Name

                                                                                                                  Hi, How can I execute this? The ABN number is entered in Accounts Module and ideally, it should display or suggest the correct Legal Entity Name based on the ABN lookup. ex. Account Name: JPG Resources ABN Number: 65 067 761 871 Legal Entity Name: (auto
                                                                                                                • Issue: Ticket Export Does Not Include Ticket Threads

                                                                                                                  Dear Zoho Desk Support Team, I hope you’re doing well. I wanted to bring to your attention that the current ticket export feature in Zoho Desk does not seem to include the ticket threads or conversation history. When exporting tickets, only the summary
                                                                                                                • Pushover Notification Module

                                                                                                                  Hello, it would be good if there would be a "Pushover" (https://pushover.net/) module besides the standard SMS module. Pushover is now very well known, especially in IT, and is becoming more and more popular. The biggest advantage are the customizable
                                                                                                                • Forward - no Ticket Number

                                                                                                                  Hello, when I send an email to Zoho Desk via Reply or Reply All, the ticket number is in the subject line. But if I use forward then not. Is there an option to change this? We often forward e-mails and a reply to this will of course create a new ticket
                                                                                                                • Checkout: Adding Images

                                                                                                                  Hello everyone, I’m trying to add a small GoGreen logo in the shipping section of the checkout to promote our sustainable shipping. While I can insert text without any issues, it seems that adding images is not supported in this area. Is there currently
                                                                                                                • [solved] #original_sender trick not working for us

                                                                                                                  Hello community ! We really like DESK.. it's working like a charm for us but I have a request. Some users are sending emails personnaly to me (instead of using the support adress).. and I saw there was a possibilty to use : #original_sender {mail@mail.com}
                                                                                                                • Correlated subqueries not supported in Zoho Analytics. This creates huge limitations

                                                                                                                  Running into a major limitation in Zoho Analytics: correlated subqueries simply don’t work, even in completely standard SQL patterns inside a JOIN. Example: LEFT JOIN "Bills" b ON d."Id" = b."Deal ID" AND EXISTS ( SELECT 1 FROM "Bill
                                                                                                                • Batch Emails in CRM Plus without using a template?

                                                                                                                  Hi guys. Is it possible to send the same email to multiple people at the same time within CRM Plus without using an email template? At the moment we create a custom view in Contacts to display the people that we need. We then click the boxes on the left, and click 'Send Mail', but always need to select a template. Sometimes its better to write a quick one off message, without needing to set up a template first. Thanks.
                                                                                                                • bank charge

                                                                                                                  a charge to my account was made that I did not authorize, of $16.46, for something that looks like "computer maintenance or something to that matter". please refund.
                                                                                                                • [Free Webinar] Product Updates: Quick Catch-Up Session - Part II - Creator Tech Connect

                                                                                                                  Hello Everyone! We welcome you all to the upcoming free webinar on the Creator Tech Connect Series. The Creator Tech Connect series is a free monthly webinar featuring deep-dive technical sessions designed for developers, administrators, and app builders.
                                                                                                                • Next Page