Hi Everyone!
We have great news for all AI enthusiasts and ChatGPT users! The much anticipated Zobot integration with ChatGPT Assistant is now available with Plugs.

Note:
- SalesIQ offers native integration with OpenAI, supporting several ChatGPT models, including Assistant, under the ChatGPT card.
- In this post, we’ll explore how to integrate ChatGPT Assistant with SalesIQ’s Zobot (Codeless Bot Builder) using Plugs
for advanced customizations.
OpenAI has introduced 'ChatGPT Assistants' to customize GPT models as per your requirement. These Assistants work based on your data, instruction, files, functions and more, making it more susceptible to your needs. With Assistant, your SalesIQ bot can be more powereful than ever, providing contextual assistance to your audience with data specifically exclusive for your business.

Please ensure to have a ChatGPT Assistant in your
OpenAI Platform to use this Plug.
Here's what the SalesIQ chatbot-Assistant brings to the table:
- Targeted Responses: Your bot will be entirely specific to your business, ensuring a tailored experience for your audience, rather than relying on global data.
- Omnichannel Availability: Bot works across all channels, including your mobile app, Website, Facebook, Instagram, WhatsApp, Telegram, and LINE.
- Human-like conversations: Engage your audience with natural, engaging interactions that feel human.
- Always-on availability: Provide 24/7 customer support with your bot, ready to engage with users anytime.
In this post, we will learn how to create a plug and connect your trained ChatGPT Assistant with your bot.
Plug Overview
The ChatGPT Assistant functions based on threads. Initially, you create a thread, add a message to it, and run the message to receive the Assistant's response. So, to integrate ChatGPT Assistant with the Codeless bot builder, we need two plugs.
- Plug 1 - To create a thread (thread ID) using OpenAI API keys.
- Plug 2 - To add a message to the thread using the thread ID, create a run and get the ChatGPT assistance's response.

Help guide to know more about how ChatGPT assistant works
How to build this Plug?
Step 1 - [Plug 1] Creating a thread for the visitor/user
- On your SalesIQ dashboard, navigate to Settings > Developers > Plugs > click on Add.
- Provide your plug a name, and description, and select the Platform as SalesIQ Scripts. Here, we call this plug as ChatGPTAssistantsCreateThread.
- The first step in building the plug is defining the parameters. This plug aims to create a thread and get the thread ID as output. So, only the output parameter (threadID) is needed here.
Copy the code below and paste it into your plug builder. Then, make the following changes.
- In line #2, replace your api_key (Navigate to the OpenAI developer section and click on API keys to create a new one)
- //ChatGPT api key
- api_key = "paste-your-api_key";
- //Header parameters
- headers = Map();
- headers.put("Authorization","Bearer " + api_key);
- headers.put("Content-Type","application/json");
- headers.put("OpenAI-Beta","assistants=v2");
- //This param is needed to use the V2 assistant apis
- // The following webhook will create a thread and return the thread id
- response = invokeurl
- [
- url :"https://api.openai.com/v1/threads"
- type :POST
- headers:headers
- ];
- response_json = response.toMap();
- thread_id = response_json.get("id");
- response.put("threadID",thread_id);
- return response;
- Then, click Save, preview the plug and Publish it.
Step 2 - [Plug 2] Add a message to thread and get response
- From the previous plug, we will get the thread ID as output.
- Create a new plug, here we call this plug as ChatGPTAssistantsCreateRuns.
- Pass the thread ID and the user/visitor input as input parameters.
- Once the plug is executed, we will get the ChatGPT Assistance's response, which is the output parameter.
Input Parameters
- Name: threadID | Type: String
- Name: userInput | Type: String
Output Parameters
- Name: assistantReply | Type: String
Copy the code below and paste it into your plug builder. Then, make the following changes.
- In line #2, replace your api_key (Navigate to the OpenAI developer section and click on API keys to create a new one.)
- In line #3, replace your chatGPT_assistant_id (Navigate to the OpenAI developer scetion > Assistants > choose your Assistant and copy the Assistance ID.

- //ChatGPT api key
- api_key = "paste-your-api_key";
- chatGPT_assistant_id = "asst_4DuWZxC0RNagq0b8pnml4ZPf";
- //Header parameters
- headers = Map();
- headers.put("Authorization","Bearer " + api_key);
- headers.put("Content-Type","application/json");
- headers.put("OpenAI-Beta","assistants=v2");
- //Get the thread ID from the plug input parameters
- thread_id = session.get("threadID").get("value");
- user_input = session.get("userInput").get("value");
- info thread_id;
- info user_input;
- // Messages API call
- requestBody = Map();
- requestBody.put("role","user");
- requestBody.put("content",user_input);
- jsonRequestBody = requestBody.toString();
- // The following webhook posts a message to the conversation thread
- response = invokeurl
- [
- url :"https://api.openai.com/v1/threads/" + thread_id + "/messages"
- type :POST
- parameters:jsonRequestBody
- headers:headers
- ];
- info response;
- // Runs API call
- requestBody = Map();
- requestBody.put("assistant_id",chatGPT_assistant_id);
- jsonRequestBody = requestBody.toString();
- // The following runs the thread which inturn generates a response once the thread is completed
- response = invokeurl
- [
- url :"https://api.openai.com/v1/threads/" + thread_id + "/runs"
- type :POST
- parameters:jsonRequestBody
- headers:headers
- ];
- response_json = response.toMap();
- run_id = response_json.get("id");
- run_status = "queued";
- retry_count = {1,2,3,4,5};
- for each retry in retry_count
- {
- if(run_status != "completed")
- {
- // The above executed run takes few seconds to complete. Hence a considerable time has to be left before the run is completed and the messages are fetched from the thread can be fetched. Here we wait for 3 seconds assuming the run gets complete within 3 seconds
- getUrl("https://httpstat.us/200?sleep=3000");
- response = invokeurl
- [
- url :"https://api.openai.com/v1/threads/" + thread_id + "/runs/" + run_id
- type :GET
- headers:headers
- ];
- response_json = response.toMap();
- run_status = response_json.get("status");
- }
- }
- // The following webhook fetches the messages from the thread
- getmsg_url = "https://api.openai.com/v1/threads/" + thread_id + "/messages";
- response = invokeurl
- [
- url :getmsg_url
- type :GET
- headers:headers
- ];
- info response;
- response_json = response.toMap();
- // Getting the last message from the thread messages list which is the assistant response for the user input.
- assistant_response = response_json.get("data").get("0").get("content").get("0").get("text").get("value");
- info assistant_response;
- response = Map();
- response.put("assistantReply",assistant_response);
- return response;
- Then, click Save, preview the plug and Publish it.
Step 3 - Adding plugs to the Codeless bot builder
- Navigate to Settings > Bot > Add, provide the necessary information, and select Codeless Bot as the bot platform. You can also open an existing bot.
- Next, click on Plugs under Action cards, select the first plug (ChatGPTAssistantsCreateThread), and provide a name to save the output (thread_id).
- Use the visitor fields card, click save in bot context, and provide a name to store the visit
- Then, select Plug 2 (ChatGPTAssistantsCreateRuns) and pass the value for the parameters
- thread_id (Input) - The output of the previous Plug
- user_input (Input) - The visitor's question/input from visitor fields card.
- assistant_reply (Output) - The final response from the ChatGPT assistance.
- Finally, use any response/input card to display the response to the visitor by typing the % to get the context variable (%assistant_reply%) in the message text box. Here, the button card is used along with the follow-up actions.

Note:
- The ChatGPT Assistant APIs are still in beta, so it's better to have a fallback flow in the bot until they are stable.
- Manage the plug failure instances within the plug failure leg by directing your users to operators using the "Forward to Operator" card or use the "Busy response" card to get the user's question, put them on the missed chats. Additionally, you can also "Send Email" card to notify yourself about the user's inquiry.
- The buttons, "I've another question", is used to get next question from the visitor. Use a Go To card and route it to visitor fields card to ask next question.
I hope this was helpful. Please feel free to comment if you have any questions. I'll be happy to help you.
Best regards
Sasidar Thandapani
Recent Topics
Tip #54- Exploring the Files Icon in Zoho Assist- 'Insider Insights'
As we’re already in mid-December, it’s a good time to take a closer look at one of the most useful options in the Zoho Assist remote support dashboard—the Files icon. To get started, log in to Zoho Assist using your credentials. Once you’re in, navigate
Tip#47: Estimation planner
Sprint planning becomes easier, smoother, more collaborative and more accurate with the Estimation Planner extension. Most work items involve multiple users, and each user's role and effort vary. To provide an unbiased and fair estimation point to the
Painfully Slow Zoho mail
Since yesterday Zoho Mail seems to have starting functioning very slowly and having a few bugs. It's slow to open mails, slow to send, slow to change between email accounts. Sometimes clicking on a particular folder (eg Sent folder) stops working and
Upcoming update to Google Drive integration in Zoho Creator
Hello everyone, We're writing to inform you about an upcoming update to how Zoho Creator integrates with Google Drive. In Zoho Creator, during actions like importing files to create an app or attaching files to fields, you can choose files directly from
Changing Default PDF Name
Is it possible to change the default name of a PDF? As of right now, all of my quotes are named 'QT_$QuoteNumber' (i,e: 'QT_19803471298374) - would it be possible to change this to: '$CompanyName - $AccountName - $QuoteNumber' for instance?
Time Tracking on Iphone doesn't stop
When I start a time tracking session the timer starts as expected. However when I hit stop, the timer remains on that project. The only buttons available are discard and start. Start runs the timer more and discard says it will throw away the data from
Zoho Sign - Zoho CRM extension upgrade
Hi everyone, We've updated Zoho Sign extension for Zoho CRM with significant internal changes. Impact on existing Zoho Sign extension users Users using the extension without customization If you are using the integration without implementing Zoho Sign's
Zoho Books blocks invoicing without VeriFactu even though it is not mandatory until 2027
I would like to highlight a very serious issue in Zoho Books for Spain. 1. The Spanish government has postponed the mandatory start of VeriFactu to January 1st, 2027. This means that during all of 2026 businesses are NOT required to transmit invoices
Group by Owner/ Owner Kanban /Group by Custom Field
Hi, We are missing the option of viewing Tasks grouped by their owner, as it is an essential function for us to manage our employees' working tasks. We find it hard to inspect what are the tasks that our employees are working on. We are seeking an option
Flow using way too many tasks
I built a flow that is using way too many tasks for what it is doing. I reached out to support a week ago but never heard back so hoping the community can help. Does a filter count as a task? I am seeing tons of records filtered with < 1 Sec Time Taken
Regarding the integration of Apollo.io with Zoho crm.
I have been seeing for the last 3 months that your Apollo.io beta version is available in Zoho Flow, and this application has not gone live yet. We requested this 2 months ago, but you guys said that 'we are working on it,' and when we search on Google
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
Start Workflow from Deluge Script
I have developed a customized process from our CRM that leverages a deluge script to create a statement of work document. Once the document has been created via the merge and store function, I would like the ability to start a workdrive review & approve
Saved Sections?
In sites editor, the + button reveals options to add a section, element, etc. It includes Saved Sections, but I can find no way to save a section I've already created. Otherwise, is there a way to copy a section from one page to another?
Marketer's Space: Unable to select a sender address? Here's the fix
Hello Marketers, Welcome back to yet another post! So you've added a sender address in Zoho Campaigns and later found that you're not able to select it while creating an email campaign. Has this ever happened to you? If so, don't worry—you're not alone.
Loading Project Balances in ZOHO Books for each project
Hello, What is the best method for loading project balances actual and budget into ZOHO books to provide tracking to our project managers. We have projects and federal awards (also treated as projects) which span multiple years. We are converting from
Zoho desk desktop application
does zoho desk has a destop applicaion?
Auto-Invite Users to Portals in Zoho CRM based on Conditions
Hello Everyone, You can now automate portal invitations in Zoho CRM with the new Auto-Invite users feature in Portal management. No more manually enabling portal access one by one. With this enhancement, you can automatically send invites for users to
Scale up your writing style with content analysis tool in Knowledge Base
Hello everyone, Sometimes writers may have strong knowledge about the subject but may find it challenging to articulate clearly or produce comprehensible, jargon free content. To make the process easier and to ensure consistent, high-quality articles,
Zoho Books "Update" Trigger for Zapier?
Hi Zoho Team, I've been in talks with Zapier about using their services to connect my Zoho Books account to various apps, but I require an additional trigger beyond the "New" trigger. I require an "Update" trigger, which will allow me to filter and create Zaps only when certain conditions are fulfilled on the Zoho Books end before I automate a separate app. Specifically this will help me create invoices in QuickBooks Online only when payments are recorded in Zoho Books, rather than when a new invoice
How to prevent editing of closed tickets in Zoho Desk?
I would like to confirm whether it is possible to completely prevent agents from editing tickets once their status is set to Closed. Is there any configuration, permission, or best practice in Zoho Desk to ensure that closed tickets remain read-only and
Zoho Desk Limitations
Good day, all, I would like to know whether others share my frustration with some of Zoho's limitations. Don't get me wrong, I like Desk (and I also have a subscription for Analytics), I have been with them for close to 10 years, and unfortunately, I
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
Is it possible to remove filtering options?
My CRM has a lot of custom fields that should not be used in filters or views. Fields that are automated and exist only to store temporary values that get used in functions. These create a lot of noise in the list of fields to filter. Isn't there any
New Mandatory One-Click Unsubscribe Link Overshadowing Custom Unsubscribe Link
I was recently informed by Zoho CRM Support that they are now mandated by the large email service providers like Google and Yahoo to provide a one-click unsubscribe option in the header (not the body) of all mass emails. I have a custom unsubscribe link
how to undoreconciled transaction
how to undo reconciled transaction
Can I export all attachments from Zoho CRM?
Can I export all attachments from Zoho CRM?
Exciting Updates to the Kiosk Studio Feature in Zoho CRM!
Hello Everyone, We are here again with a series of new enhancements to Kiosk Studio, designed to elevate your experience and bring even greater efficiency to your business processes. These updates build upon our ongoing commitment to making Kiosk a powerful
Change eMail Template for Event-Invitations
Hello ZOHO-CRM Team How I can change the eMail Template for Event-Invitations? I work with the German Version of the Free Version. I know how I can modify eMail alerts or Signature Templates, but where I can other eMails modify you send out? Thank you for your answer. Regards, Juerg
Right-Click Pipeline to Open in New Tab
Please add the ability to right-click on a pipeline to open it in a new tab
Service Title in Service Report Template Builder
I am currently working on the Service Report Template Builder in Zoho FSM. I have created three separate service report templates for different workflows: Preventive Maintenance Report Requested Service Report Installation Report My issue is that I cannot
Zoho Sign for Zoho Projects
Documents authorization and validation with signature is now easier in project management with Zoho Projects' Zoho Sign extension. Sign documents or send them for signatures directly from tasks and issues using Zoho Sign extension in Zoho Projects. Extension
Deluge Learning Series – Best Practices in Deluge | December 2025
We’re excited to bring you the next session of the Deluge Learning Series, focused entirely on writing cleaner, faster, and more reliable Deluge code. In this edition, we’ll dive deep into the essential best practices every Deluge developer should follow
Associate a Contact to a Campaign using deluge?
If I want to add one record to another related list, which zoho function do I use? zoho.updateRelatedRecord is not it I don't think. I simply want to take a "Contact" and associate it to a "Campaign" using deluge. Can anyone help? contactId = 5122008000000796037;
Add "Groups" above "Users" in the Zoho Forms Left Menu
Hi, We have Groups but you have to go to a Form and Share or use the Directory App to manage them, please add "Groups" above "Users" in the Zoho Forms Left Menu so you can manage them in 1 place within Zoho Forms too. Thanks Dan
Changing field types
Question im a Zoho CRM user and curious, if I change a flied type from single or multi line text to a URL field type will i lose the data in the field or will it be converted to website link automatically. Thanks
Adding Taxes to paid consultations in Zoho Bookings
I created a 'paid' consultation under Zoho Booking and integrated it with payment gateways for online/instant payment before a booking is done. How can I add 'taxes' to the price of consultation? I can add taxes to other Zoho apps (liks Books, Checkout,
Zoho CRM Reports Module on Mobil App
I have the mobile app and the reports module doesn't appear in the sidebar for some reason. I saw a Youtube video where the user had the Reports module on mobile. Is there a setting to show it on mobile? Thanks.
Inquiry on Help Centre Tab Customisation
Hi Zoho team, I’m wondering if it’s possible to further customise the Help Center tabs, specifically the descriptions under Knowledge Base, Community, and Tickets. While the current setup allows customising tab names, being able to tailor the descriptions
Passing a form object to a function
Suppose I have a sort_order field in multiple tables and I want to increment it by +1 onCreate of a new record. Is there a way to pass the form object as an argument into the function to keep things DRY? The following function from Zia works, but I'd
Next Page