OpenAI Alert! Plug Sample #11 - Next-generation chatbots, Zobot + ChatGPT Assistant

OpenAI Alert! Plug Sample #11 - Next-generation chatbots, Zobot + ChatGPT Assistant

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. 

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. 
Are you new to SalesIQ? Click here to know about SalesIQ's chatbots and plugs

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)
  1. //ChatGPT api key
  2. api_key = "paste-your-api_key";
  3. //Header parameters
  4. headers = Map();
  5. headers.put("Authorization","Bearer " + api_key);
  6. headers.put("Content-Type","application/json");
  7. headers.put("OpenAI-Beta","assistants=v2");
  8. //This param is needed to use the V2 assistant apis
  9. // The following webhook will create a thread and return the thread id
  10. response = invokeurl
  11. [
  12. url :"https://api.openai.com/v1/threads"
  13. type :POST
  14. headers:headers
  15. ];
  16. response_json = response.toMap();
  17. thread_id = response_json.get("id");
  18. response.put("threadID",thread_id);
  19. return response;
  • Then, click Save, preview the plug and Publish it. 
Reference:  OpenAI's Create a thread API

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.


  1. //ChatGPT api key
  2. api_key = "paste-your-api_key";
  3. chatGPT_assistant_id = "asst_4DuWZxC0RNagq0b8pnml4ZPf";
  4. //Header parameters
  5. headers = Map();
  6. headers.put("Authorization","Bearer " + api_key);
  7. headers.put("Content-Type","application/json");
  8. headers.put("OpenAI-Beta","assistants=v2");
  9. //Get the thread ID from the plug input parameters
  10. thread_id = session.get("threadID").get("value");
  11. user_input = session.get("userInput").get("value");
  12. info thread_id;
  13. info user_input;
  14. // Messages API call
  15. requestBody = Map();
  16. requestBody.put("role","user");
  17. requestBody.put("content",user_input);
  18. jsonRequestBody = requestBody.toString();
  19. // The following webhook posts a message to the conversation thread
  20. response = invokeurl
  21. [
  22. url :"https://api.openai.com/v1/threads/" + thread_id + "/messages"
  23. type :POST
  24. parameters:jsonRequestBody
  25. headers:headers
  26. ];
  27. info response;
  28. // Runs API call
  29. requestBody = Map();
  30. requestBody.put("assistant_id",chatGPT_assistant_id);
  31. jsonRequestBody = requestBody.toString();
  32. // The following runs the thread which inturn generates a response once the thread is completed
  33. response = invokeurl
  34. [
  35. url :"https://api.openai.com/v1/threads/" + thread_id + "/runs"
  36. type :POST
  37. parameters:jsonRequestBody
  38. headers:headers
  39. ];
  40. response_json = response.toMap();
  41. run_id = response_json.get("id");
  42. run_status = "queued";
  43. retry_count = {1,2,3,4,5};
  44. for each  retry in retry_count
  45. {
  46. if(run_status != "completed")
  47. {
  48. // 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
  49. getUrl("https://httpstat.us/200?sleep=3000");
  50. response = invokeurl
  51. [
  52. url :"https://api.openai.com/v1/threads/" + thread_id + "/runs/" + run_id
  53. type :GET
  54. headers:headers
  55. ];
  56. response_json = response.toMap();
  57. run_status = response_json.get("status");
  58. }
  59. }
  60. // The following webhook fetches the messages from the thread
  61. getmsg_url = "https://api.openai.com/v1/threads/" + thread_id + "/messages";
  62. response = invokeurl
  63. [
  64. url :getmsg_url
  65. type :GET
  66. headers:headers
  67. ];
  68. info response;
  69. response_json = response.toMap();
  70. // Getting the last message from the thread messages list which is the assistant response for the user input.
  71. assistant_response = response_json.get("data").get("0").get("content").get("0").get("text").get("value");
  72. info assistant_response;
  73. response = Map();
  74. response.put("assistantReply",assistant_response);
  75. 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

    Zoho Campaigns Resources

      Zoho Desk Resources

      • Desk Community Learning Series


      • Digest


      • Functions


      • Meetups


      • Kbase


      • Resources


      • Glossary


      • Desk Marketplace


      • MVP Corner


      • Word of the Day


        Zoho CRM Plus Resources

          Zoho Books Resources


            Zoho Subscriptions Resources

              Zoho Projects Resources


                Zoho Sprints Resources


                  Zoho Orchestly Resources


                    Zoho Creator Resources


                      Zoho WorkDrive Resources



                        Zoho CRM Resources

                        • CRM Community Learning Series

                          CRM Community Learning Series


                        • Tips

                          Tips

                        • Functions

                          Functions

                        • Meetups

                          Meetups

                        • Kbase

                          Kbase

                        • Resources

                          Resources

                        • Digest

                          Digest

                        • CRM Marketplace

                          CRM Marketplace

                        • MVP Corner

                          MVP Corner




                          Zoho Writer Writer

                          Get Started. Write Away!

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

                            Zoho CRM コンテンツ






                              ご検討中の方

                                • Recent Topics

                                • Rollup summary for custom module

                                  Rollup summary feature was introduced almost a year ago: https://help.zoho.com/portal/en/community/topic/introducing-rollup-summary-in-zoho-crm-public-early-access-2023 It does not support custom modules tough and this post aims to track such feature
                                • Feature Request: Search in the PC client. Some thoughts about the search.

                                  Hi all. I'm really excited to start using Zoho Notebook, but I'm missing some of the search capabilities on my desktop. There are also some thoughts on improving search in general. Search is very important to me, without it it is difficult for me to use
                                • Cannot use a Zoho Form in CRM Email Template

                                  I've created a Zoho form that has integration with Zoho CRM and is linked to a custom module. I know the form works as I have tested it. When I try and insert this Zoho Form in a button on a CRM email template set up with the same custom module I get
                                • Function Only Working Manually

                                  Good evening everyone. I have a function that creates a PDF from a Creator form. When I execute it manually it works perfectly. But when I execute it from within a On success workflow it is not working. I'll post my code below. Any ideas? //Function void
                                • How to send binary data in invokeurl task?

                                  Hello, I am using Adobe's Protect PDF API. Source: https://developer.adobe.com/document-services/docs/overview/pdf-services-api/ Everything works fine in Postman. But for some reason after encrypting the file, it is empty after password protecting the
                                • Campaign email bounces and CRM entries

                                  Using campaigns.zoho.com and utilizing a sync'd list works fine.  But when emails bounce, they are removed from the campaign side, but there is no way to update the CRM record.    You can see that the email bounced in CRM by looking at campaigns-> member status, but you can not use that field to create a search or any other way in which to update those bad records.    I have a list of several thousand emails, and to update each record that bounces is a nightmare.  There has to be a way to utilize
                                • Has anyone integrated SMS well for Zoho Desk?

                                  Our company does property management and needs to be able to handle inbound sms messages which create a ticket for Zoho Desk.  We then need to be able to reply back from Zoho desk which sends the user an sms message.  This seems like a fairly common thing to need - sms handling for support tickets.  There is basically no good information from any third party vendor for Zoho Desk, while there is a ton for CRM.  Zoho is pretty unhelpful when I've reached out to them, and a lot of vendors just direct
                                • Tags When Importing

                                  My biggest wish right now for making Zoho Notebook easier to work with would be to have the ability to add tags while importing files/clips. This includes using the web clipper, adding web pages with Share on my phone, and adding pages by using Attach.
                                • WhatsApp in Zoho Social

                                  Seems CRM team is not taking Whatsapp integration seriously. While Facebook already has 63 Whatsapp partners, some of which are very small, that have already completed API integration. Maybe the social team could take over this project from CRM and get
                                • Allow users to display columns dynamically

                                  I have a table with 50 users in Column A and the dates 1 Jan to 31 Dec along Row 1. I want users to be able to add data to the cells but would like to make it easier by allowing users to select a date and display that. So if the user wants to add data
                                • Download fails

                                  We are unable to download data. When we try, we get the message "Download failed." We have two Bases. Downloads are working in one but not the other. The Base with the problem is 'Projects'. We're trying to download Time Records from the Month view. Note:
                                • Webhook when estimate is refused is not firing

                                  Hello, I use a workflow through make that sends estimate with zoho books (I paid books and sign). -Those estimates when accepted are firing the webhook that I create in zoho sign (photo 1) -However when refused they are not firing the webhook that I created
                                • RFQ MODEL

                                  A Request for quotation model is used for Purchase Inquiries to multiple vendors. The Item is Created and then selected to send it to various vendors , once the Prices are received , a comparative chart is made for the user. this will help Zoho books
                                • Calculations in item custom field

                                  Dear Sirs,    Is it possible to do math inside items in Zoho Books? My item is a pack of plywood. Depending on thickness, there is certain amount of sheets in a pack and, as the result, different volume. I want to add fields like lenth, width, thickness,
                                • I can't send and receieve any email ERROR CODE :550 - 5.7.26

                                  Hello, I can't receive and send any email for months. I already sent an email to Zoho support but didn't get any response. I attached a screenshot of a message i get always when i tried to send an email. Please help me asap.
                                • Zoho Email Not Working After Domain Transfer and Nameserver Change

                                  Dear all, I hope you're all doing well. We recently transferred our domain, which is linked to Zoho, to another hosting provider. As part of the transfer, we updated the nameservers to the new hosting provider's ns1 and ns2. However, after this change,
                                • Linkedin - Recruiter System Connect

                                  Hi there! Does anyone here know how to connect Zoho Recruit to Linkedin Recruiter via Recruiter System Connect?
                                • 2025 Just Got More Exciting for Developers!

                                  Hello, Greetings to the Zoho Books Community! As we step into the New Year, we're thrilled to roll out something truly special for our Zoho Finance enthusiasts – the "Zoho Finance Developer" Community! This is your exclusive space to connect with fellow
                                • Does Client Script work on Zoho CRM Portal?

                                  Hi ! I create a new module to use at customer portal. But Client Script looks not work. Please help me clarify, thank you!
                                • Create custom rollup summary fields in Zoho CRM

                                  Hello everyone, In Zoho CRM, rollup summary fields have been essential tools for summarizing data across related records and enabling users to gain quick insights without having to jump across modules. Previously, only predefined summary functions were
                                • Alter a system defined field from a 'single line' into a picklist

                                  Hello,  I am looking to switch the STATE field, which is a Zoho defined field from a 'single line' into a picklist. Can you advise how to change this?
                                • SOLVED: Stopping Multiple Invitations when sync with Google Calendar

                                  I wanted to share this solution as I wasn't able to find it when searching through the Zoho community and via web search. The issue: When requestor books a meeting through Zoho Bookings, the requestor receives a confirmation email from both Bookings and
                                • Zoho Analytics - Data source timezone

                                  Hi, I have a Zoho Desk data source that should display date information / timestamps in Europe/Paris timezone (CET/CEST). However, as shown in the attached screenshot, the data source is using America/Mexico_City timezone despite having my Locale Information
                                • Merging Writer Titles

                                  When merging from CRM into Writer, is there a way to add fields to the document header? This would be very helpful for saving. Is there a way to link the document automatically to the module?
                                • Taxes... again.

                                  After reading the recent addition to the knowledge-base article at https://help.zoho.com/portal/en/kb/commerce/user-guide/settings/general-settings/articles/types-of-taxes, I feel compelled for the fourth year now to reiterate the glaring omission in
                                • View tickets

                                  Is it possible to have 1 person in a organization which can view all tickets of that company? Example: IT Manager of Company X wants to view all tickets of Company X, no other user can see  all tickets of Company X.
                                • Automatically associate contact with product

                                  Hello, I created a Real State scenario at CRM where I have property owners that are contacts, and properties that are products. After creating a contact and a product, I associated them. My Desk is integrated with my CRM, and it automatically creates
                                • Zoho Desk Deluge get tickets info

                                  When using Deluge, Need to use "tickets" to obtain ticket information. Example : ticketDetails = zoho.desk.getRecordById(XXXXXX,"tickets",ticketId); Is there a way for me to query ticket information while only knowing "ticketNumber"? The "ticket Number"
                                • What is the Desk API?

                                  I'm trying to fetch a lookup field data from desk to our creator application and it doesn't work. I'm guessing that my search parameter is wrong? On my trial function fetch if I use these: tickets = invokeurl [ url :"https://desk.zoho.com/api/v1/tickets/351081000145244764"
                                • Zoho still running very slow

                                  I have a lead log for my company and creator seems to be running extremely slow still.
                                • How to link Custom Fields in Ticket view

                                  Hi team, I have created 2 custom fields in our Accounts Module would like them to show in our ticket information. We don't have Enterprise so I cannot do it via a workflow, but I know you can do lookup fields to link modules. How would I go about making
                                • Sending a Slideshow as a scheduled email

                                  I have created a slideshow for my dashboards - is there anyway of automating or scheduling it to send to users ?
                                • How can I send out edm email without execced the mail limit and got block?

                                  Hello, What service should I subscribe and pay for?? Thanks Tomuel
                                • Global "Search" in FSM

                                  I'm missing the global Search function like in CRM. This should save us a lot of time. We don't now upfront if the customer is a Contact or a Company. So now we have to guess in what module to start a search/filter. Also looking up an address, phone number,
                                • Mapping of Zoho CRM Lookup field to CRM

                                  Hi, I have created a Zoho CRM Lookup field on a form for a client. The population of the field works great in the form however I cannot seem to get the data being entered in the form back into CRM. For example, the form is for new clients to fill in their
                                • Lost Data

                                  I never synced it before but now since ir forced me to login... my data is lost. Can I still recover my local data?
                                • Unable to verify Domain - Exabytes

                                  Hi, I have obtained a .com.my domain provided by Exabytes, but am unable to verify the domain ownership despite added in both TXT and CNAME as below: TXT - Name: @ ; Value: zoho-verification=zb88785805.zmverify.zoho.com CNAME - NAME: zb88785805 ; Value:
                                • Enhanced Placeholder Preview for Templates

                                  Hi, When creating a new template in Zoho CRM, there are many variables/placeholders available, such as ${Organization.Organization Name} and ${Quotes.Created Time}. While these placeholders are useful, it is not always clear what each field represents,
                                • Forgot password to my notebookd and notes

                                  Exactly what the title says. I know it sounds dumb since it's my own fault but what can I do? I'm just wondering if we can recover our password or something. I see there's no such feature but it should have right??? This is really frustrating to me because
                                • Problems with email configuration and slowness in Zoho support.

                                  I've been having problems configuring emails since yesterday, they responded to me today, I sent a response right away and so far I haven't received a resolution to the problem. Attached are the configuration attempts that were made.
                                • Next Page