# Internal Note > Internal Note is a strategic blog about Zendesk for teams who already know the platform and want to go further. It's written by Thomas Verschoren, and explores how Zendesk features fit together, how they behave in real workflows, and what they enable when combined. It shows what is possible today, where the platform is heading, and where the practic Public Ghost content for AI and LLM tooling. This file includes a bounded export of public pages first, then recent public posts. Append `.md` to any post or page URL to get the content in Markdown (for example, `/example-post.md`). ## Pages ### About Internal Note URL: https://internalnote.com/about/ Last updated: 2026-03-06T09:39:17.000Z Internal Note is a strategic blog about Zendesk for teams who already know the platform and want to go further. It's written by [Thomas Verschoren](https://www.linkedin.com/in/thomasverschoren/?ref=internalnote.com), Director AI Product Evangelism at Zendesk. All opinions expressed on this website are my own and do not reflect those of Zendesk itself. Internal Note explores how Zendesk features fit together, how they behave in real workflows, and what they enable when combined. It shows what is possible today, where the platform is heading, and where the practical limits still are. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/12/banner_3.png) Zendesk’s platform is broad, and individual releases rarely tell the whole story. Internal Note connects the dots, turning separate updates into narratives that clarify not just what changed, but why it matters and how it strengthens modern, AI-driven CX. It also helps long-time customers move forward. Many teams still operate in older established patterns; Internal Note revisits mature features, highlights how they have evolved, and offers strategic guidance on adopting newer workflows and capabilities. The approach is simple: bring together the many small releases across the platform and frame them within the bigger picture: showing depth, breadth, practical value, and the direction the platform is moving next. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/04/Frame-1-6.png) # Changelog - 2025-10-16: Updated logo to include Zendesk and removed paid subscribers. All content is now free - 2025-12-12: Redesign to Zendesk styling - 2026-03-01: Added latest Zendesk News in sidebar - 2026-03-02: Implemented authentication for the web widget and personalised the home screen for logged in users. - 2026-03-05: Added the ability for the Web Widget to summarise the current page - 2026-03-06: Improved mobile experience on long articles. ### Terms and Conditions URL: https://internalnote.com/terms-and-conditions/ Last updated: 2025-12-09T08:26:41.000Z 💡 ****Update 2025-12-09** Great news! Zendesk is teaming up directly with Internal Note. More information to come. ### Last updated: Mar 7th, 2023 Welcome to the Internal Note (“Thomas Verschoren”, “we”, “us”, or “our”) Web Site (the “Site”). PLEASE READ THE FOLLOWING TERMS AND CONDITIONS OF USE CAREFULLY BEFORE USING THE SITE. THESE TERMS AND CONDITIONS, INCLUDING OUR [PRIVACY POLICY](https://tripel-hop.squarespace.com/privacy-policy?ref=internalnote.com) (TOGETHER, THESE “TERMS”) ARE BINDING ON THE PARTIES AND GOVERN YOUR RELATIONSHIP WITH US REGARDING YOUR USE OF THE SITE. YOUR USE OR CONTINUED USE OF THE SITE CONSTITUTES YOUR AGREEMENT TO THE TERMS, WHICH MAY BE UPDATED BY US FROM TIME TO TIME WITHOUT NOTICE TO YOU. The Site is not intended for and is not designed to attract children under 13 years of age. IF YOU ARE NOT ELIGIBLE, OR DO NOT AGREE WITH THE TERMS, THEN YOU DO NOT HAVE OUR PERMISSION TO USE THE SITE. ## **Privacy.** These Terms incorporate by reference our [Privacy Policy](https://internalnote.com/privacy-policy/). Please read the Privacy Policy carefully for information relating to our collection, use, storage, and disclosure of your personal information as you agree to its terms when you use the Site. ## **Your Permission to use the Site.** *Eligibility.* You must be at least 13 years old to use the Site. By agreeing to these Terms, you represent and warrant to us that: (a) you are at least 13 years old; and (b) your use of the Site is in compliance with any and all applicable laws and regulations. If you are an entity, organization, or company, the individual accepting these Terms on your behalf represents and warrants that they have authority to bind you to these Terms and you agree to be bound by these Terms. *Restrictions.* We gives you limited permission to use the Site, subject to the following restrictions. Except as expressly authorized by us under a separate license or other agreement with you, you may only use material contained on the Site for personal and noncommercial use, and any commercial use, such as selling content, or posting information on another website, is prohibited. Further, you may not, and will not permit any third party to: (a) frame, reproduce, distribute, publicly display, or publicly perform the Site or any portion of the Site, including any Materials (as defined below) available on or through the Site; (b) make modifications to or create any derivative works based on the Site or any portion of the Site; (c) sublicense, distribute, sell, lend, rent, lease, transfer, or grant any rights in or to all or any portion of the Site or provide access to the Site to third parties on a service bureau basis or otherwise; (d) interfere with or circumvent any feature of the Site, including any security or access control mechanism, or introduce any security threats into or through the Site; (e) systemically retrieve, download or print materials from the Site; (f) change or delete (f) use the Site or any portion of the Site to exploit, interfere with, or circumvent any feature of any other website or service; (g) use the Site or any portion of the Site for any illegal, harmful, offensive, or objectionable purpose, including in a manner that violates the intellectual property or proprietary rights of, SJA or any third party, including changing or deleting any proprietary notices on the Site or from materials downloaded from the Site; (h) transmit, distribute, sell, or otherwise provide any content or data from the Site to a third party (except as expressly authorized by SJA); or (i) otherwise use the Site or any portion of the Site other than as provided in these Terms, or in violation of any applicable law. If you are prohibited under applicable law from using the Site, you may not use it. You agree to be solely responsible for your use of the Site. Your permission to use the Site will be terminated immediately, without any further action by us, if you breach these Terms. In addition, we may, at its sole discretion, terminate these Terms, or suspend or terminate your access to the Site, at any time for any reason or no reason, with or without notice. You may terminate these Terms by emailing us at support@tripelhop.dev. Upon termination, your rights under these Terms will terminate and you must immediately cease all use of the Site. The Sections titled “Your Permission to use the Site”, “Proprietary Rights”, “Feedback”, “Modification”, “Disclaimer of Warranties and Limitation of Liability”, “Indemnity”, and “Miscellaneous”, will survive termination. ## **Proprietary Rights.** The Site is owned and operated by Thomas Verschoren. Thomas Verschoren is the owner or licensee of all rights in the Site’s content and related software, including but not limited to the visual interfaces, graphics, design, compilation, information, data, computer code (including source code or object code), materials, products, software, services, or all other elements of the Site provided by Thomas Verschoren ( “Materials”). You have no rights to the Materials other than those expressly granted in these Terms. Internal Note and the logos or other proprietary marks of Thomas Verschoren and its affiliated organizations belong to them exclusively. No right, title or interest in those marks is granted in these Terms. Any third-party trademarks or service marks displayed on the Site are the property of their respective owners. We reserves all rights to the Materials and the Site not granted expressly in these Terms. ## Code samples on this website MIT License Copyright (c) 2022 Thomas Verschoren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ## **Feedback.** If you choose to provide input and suggestions regarding problems with or proposed modifications or improvements to the Site or our business, products, or services (“Feedback”), then you hereby grant us an unrestricted, perpetual, irrevocable, non-exclusive, fully-paid, royalty-free right to exploit the Feedback in any manner and for any purpose, including to improve the Site and create or improve other products and services. ## **Links and Online Listings.** From time to time, We may post on the Site (a) links to third party websites (“Links”) or (b) listings or descriptions of third-party information, products or services (“Listings”). Such Links and Listings are provided WITHOUT WARRANTIES OF ANY KIND, FOR USE AT YOUR OWN RISK. You acknowledge and agree that we does not control or endorse any information, products, or services made available via Links or Listings, and is not responsible for the accuracy, reliability, quality, or legality of any such information, products, or services. Please be sure to review the terms of use and privacy policy of any third-party services before you share any information through such Links or Listings. It is your responsibility to evaluate the information, opinions, advice or other content available through the Links or Listings, whether posted or provided by third parties or by us. We may remove any Links or Listings at any time for any reason or for no reason. WE WILL NOT BE LIABLE OR RESPONSIBLE FOR ANY TRANSACTIONS YOU CONDUCT WITH THIRD PARTIES, INCLUDING THE TERMS, CONDITIONS OR RESULTS OF ANY TRANSACTION BETWEEN YOU AND ANY THIRD PARTY. IF YOU HAVE A DISPUTE WITH ANY THIRD PARTY REGARDING ANY THIRD PARTY PROMISES (INCLUDING PROMISED OR PLEDGED DONATIONS), PRODUCTS AND/OR SERVICES, YOU RELEASE SJA (AND ITS RESPECTIVE SUCCESSORS, SPONSORS, EMPLOYEES, OFFICERS, DIRECTORS, SHAREHOLDERS, AFFILIATES, AGENTS, REPRESENTATIVES, LICENSORS, ASSIGNS, SUPPLIERS AND MEMBERS) FROM ANY AND ALL CLAIMS, DEMANDS AND DAMAGES (ACTUAL AND CONSEQUENTIAL) OF EVERY KIND AND NATURE, KNOWN AND UNKNOWN, SUSPECTED AND UNSUSPECTED, DISCLOSED AND UNDISCLOSED, ARISING OUT OF OR IN ANY WAY CONNECTED WITH SUCH DISPUTES. ## **Modifications.** We reserve the right at any time and from time to time to modify or discontinue, temporarily or permanently, the Site, these Terms or any portion thereof with or without notice.Please check these Terms periodically for changes. By using the Site after any changes to the Terms are published, you agree to the updated Terms. You agree that we shall not be liable to you or to any third party for any modification, suspension or discontinuance of the Site or any portion thereof. ## **Disclaimer of Warranties and Limitation of Liability.** *Disclaimer of Warranties.* We are under no obligation to provide support for the Site. THE SITE AND ALL INFORMATION, SERVICES OR LINKS ON OR THROUGH THE SITE ARE PROVIDED TO YOU “AS IS” WITHOUT ANY WARRANTIES OF ANY KIND, WHETHER EXPRESS, IMPLIED OR STATUTORY INCLUDING: (A) ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, QUIET ENJOYMENT, OR NON-INFRINGEMENT; AND (B) ANY WARRANTY ARISING OUT OF COURSE OF DEALING, USAGE, OR TRADE. WE DO NOT WARRANT THAT THE SITE OR ANY PORTION OF THE SITE, OR INFORMATION, SERVICES OR LINKS ON OR THROUGH THE SITE, WILL BE UNINTERRUPTED, SECURE, OR FREE OF ERRORS, VIRUSES, OR OTHER HARMFUL COMPONENTS, AND WE DO NOT WARRANT THAT ANY OF THOSE ISSUES WILL BE CORRECTED. NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED BY YOU FROM THE SITE OR SJA OR INFORMATION, SERVICES OR LINKS ON OR THROUGH THE SITE WILL CREATE ANY WARRANTY REGARDING THE SITE THAT IS NOT EXPRESSLY STATED IN THESE TERMS. WE ARE NOT RESPONSIBLE FOR ANY DAMAGE THAT MAY RESULT FROM YOUR USE OF THE SITE. YOU UNDERSTAND AND AGREE THAT YOU USE ANY PORTION OF THE SITE AT YOUR OWN DISCRETION AND RISK, AND THAT WE ARE NOT RESPONSIBLE FOR ANY DAMAGE TO YOUR PROPERTY (INCLUDING YOUR COMPUTER SYSTEM OR MOBILE DEVICE USED IN CONNECTION WITH THE SITE) OR ANY LOSS OF DATA. WE ARE NOT RESPONSIBLE FOR THE ACCURACY, TIMELINESS, OR COMPLETENESS OF THE MATERIALS DISPLAYED ON THE SITE. YOU AGREE THAT YOU MUST EVALUATE, AND THAT YOU BEAR, ALL RISKS ASSOCIATED WITH THE USE OF THE SITE, INCLUDING WITHOUT LIMITATION, ANY RELIANCE ON THE ACCURACY, TIMELINESS, COMPLETENESS OR USEFULNESS OF ANY CONTENT OR SERVICES AVAILABLE ON OR THROUGH THE SITE OR ON OR THROUGH ANY LINK OR LISTING. THE LIMITATIONS, EXCLUSIONS AND DISCLAIMERS IN THIS SECTION APPLY TO THE FULLEST EXTENT PERMITTED BY LAW. SJA DOES NOT DISCLAIM ANY WARRANTY OR OTHER RIGHT THAT WE ARE PROHIBITED FROM DISCLAIMING UNDER APPLICABLE LAW. *Limitation of Liability.* TO THE FULLEST EXTENT PERMITTED BY LAW, WE SHALL NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL, EXEMPLARY OR PUNITIVE DAMAGES OF ANY KIND, UNDER ANY CONTRACT, NEGLIGENCE, STRICT LIABILITY OR OTHER THEORY (INCLUDING DETRIMENTAL RELIANCE), INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, USE, DATA, LOSS OF INTELLECTUAL PROPERTY, LOSS OF OTHER INTANGIBLES, LOSS OF SECURITY OF INFORMATION IN CONNECTION WITH YOUR USE OR ANY OTHER PARTY’S USE OR MISUSE OF THE SITE, EVEN IF ADVISED IN ADVANCE OF SUCH DAMAGES OR LOSSES. YOUR SOLE AND EXCLUSIVE REMEDY FOR DISSATISFACTION WITH THE SITE IS TO STOP USING THE SITE. THE MAXIMUM LIABILITY OF US FOR ALL DAMAGES, LOSSES AND CAUSES OF ACTION, WHETHER IN CONTRACT, TORT (INCLUDING WITHOUT LIMITATION NEGLIGENCE) OR OTHERWISE, SHALL BE $100 US DOLLARS. ## **Indemnity.** You agree to indemnify and hold Internal Note and its subsidiaries, affiliates, officers, agents, employees, partners and licensors harmless from and against any claim or demand, including reasonable attorneys’ fees, made by any third party due to or arising out of or connected with: (a) your unauthorized use of, or misuse of the Site, (b) your violation of any portion of these Terms, any representation, warranty, or agreement referenced in these Terms, or any applicable law or regulation; (c) your violation of any third party right, including any intellectual property right or publicity, confidentiality, other property, or privacy right; or (d) any dispute or issue between you and any third party. We reserve the right, at our own expense, to assume the exclusive defense and control of any matter otherwise subject to indemnification by you (without limiting your indemnification obligations with respect to that matter), and in that case, you agree to cooperate with our defense of those claims. ## **Consent to Electronic Communications.** We may send you emails concerning our products and services, as well as those of third parties if you’ve opted in. You may opt out of promotional emails by following the unsubscribe instructions in the promotional email itself. By using the Site, you consent to receiving certain electronic communications from us as further described in our Privacy Policy. Please read our Privacy Policy to learn more about our electronic communications practices. You agree that any notices, agreements, disclosures, or other communications that we send to you electronically will satisfy any legal communication requirements, including that those communications be in writing. ## **Contact Information.** The Site is offered by Thomas Verschoren (support@verschoren.com) You may contact us by by emailing us at note@internalnote.com. ## **International Use.** The Site is ran from within Europe. We make no representation that the Site is appropriate or available for use outside of the European Union. Access to the Site from countries or territories or by individuals where such access is illegal is prohibited. If local laws prohibit you from using the Site, you may not do so. ## **General Terms.** You agree that no joint venture, partnership, employment or agency relationship exists between you and us as a result of the Terms or your use of the Site. The Terms constitute the entire agreement between you and us with respect to your use of the Site. You may not assign or transfer these Terms or your rights under these Terms, in whole or in part, by operation of law or otherwise, without our prior written consent. We may assign these Terms at any time without notice or consent. The failure of us to exercise or enforce any right or provision of the Terms shall not constitute a waiver of such right or provision. If any provision of the Terms is found by a court of competent jurisdiction to be invalid, the parties nevertheless agree that the court should endeavor to give effect to the parties’ intentions as reflected in the provision, and the other provisions of the Terms remain in full force and effect. The Terms and the relationship between you and us shall be governed by the laws of Belgium without regard to its conflict of law provisions. A printed version of the Terms and of any notice given in electronic form shall be admissible in judicial or administrative proceedings based upon or relating to the Terms to the same extent and subject to the same conditions as other business documents and records originally generated and maintained in printed form. Section titles in the Terms are for convenience only and have no legal or contractual effect. Any rights not expressly granted herein are reserved. ## Company Memberships Our company memberships are based on **one** email domain. We have a limit of 50 colleagues per subscription. © Thomas Verschoren ## **Privacy Questions** For any questions regarding our EULA, Terms or Privacy Policy, please email note@internalnote.com ### Privacy Policy URL: https://internalnote.com/privacy-policy/ Last updated: 2025-12-09T08:26:55.000Z 💡 ****Update 2025-12-09** Great news! Zendesk is teaming up directly with Internal Note. More information to come. 🔒 TLDR: Privacy is a human right. Welcome to Internal Note. Internal Note is a brand name for Thomas Verschoren (“Verschoren” “we,” “our,” and/or “us”). We value the privacy of individuals who use our website and related services (collectively, our “Services”). This privacy policy (the “Privacy Policy”) explains how we collect, use, and share information from users of our Services (“Users”). By using our Services, you agree to the collection, use, disclosure, and procedures this Privacy Policy describes. Beyond the Privacy Policy, your use of our Services is also subject to our [Terms of Service](https://internalnote.com/terms-and-conditions/). Our apps are built with a privacy first approach. ## **Information We Collect** We may collect a variety of information from or about you or your devices from various sources, as described below. ### **A. Information You Provide to Us.** If you subscribe to our newsletter or otherwise contact us directly, we receive information about you, such as your email address. When we send you emails, we may track whether you open them to learn how to deliver a better customer experience and improve our Services. If you're a paid subscriber we receive information about you via Stripe. We use this information to fulfil our financial and legal obligations, and use your email address for opt-in to Marketing if you choose to opt-in for this. ### **B. Information We Collect** #### **B.1 When You Use Our Website** We use [Plausible.io](https://stripe.com/en-gb-be/climate?ref=internalnote.com) for our analytics. It's a privacy focused EU hosted platform. **Location Information.** When you use our Services, we may infer the general location information of our Users, for example by using your internet protocol (“IP”) address. We do NOT store that IP address. **Device Information.** We receive information about the device and software you use to access our Services, including IP address, web browser type, operating system version. We only store aggregaged stats. **Usage Information.** To help us understand how you use our Services and to help us improve them, we automatically receive information about your interactions with our Services, like the clicks, opens in emails send, or aggregated data on pages or other content viewed on our website. **Information from Cookies and Similar Technologies.** Our website only has cookies for Stripe if you interact with our paid membership and Ghost, the platform we host this blog on. Our Plausible analytics works cookie free.We have no other external tools running on our website. We and our third-party partners collect information using cookies, pixel tags, or similar technologies. Our third-party partners, such as billing partner like Stripe, may use these technologies to collect information about your online activities over time and across different services. Cookies are small text files containing a string of alphanumeric characters. We may use both session cookies and persistent cookies. A session cookie disappears after you close your browser. A persistent cookie remains after you close your browser and may be used by your browser on subsequent visits to our Services. Please review your web browser’s “Help” file to learn the proper way to modify your cookie settings. Please note that if you delete or choose not to accept cookies from the Service, you may not be able to utilize the features of the Service to their fullest potential. ## How We Use the Information We Collect ### **Via our website** We use the information we collect: - To provide, maintain, improve, and enhance our Services; - To understand and analyze how you use our Services and develop new products, services, features, and functionality; - To communicate with you, provide you with updates and other information relating to our Services, provide information that you request, respond to comments and questions, and otherwise provide customer support; - To generate anonymized, aggregate data containing only de-identified, non-personal information that we may use for business purposes; - To find and prevent fraud, and respond to trust and safety issues that may arise; - For compliance purposes, including enforcing our TOS or other legal rights, or as may be required by applicable laws and regulations or requested by any judicial process or governmental agency; and - For other purposes for which we provide specific notice at the time the information is collected ## **How We Share the Information We Collect** **Vendors and Service Providers.** We do not share your information with other parties. **Analytics Partners.** We use analytics services in Ghost and Plausible for our website only to collect and process certain analytics data. To help us understand how you use our Services and to help us improve them, we automatically receive information about your interactions with our Services, like the pages or other content you view and the dates and times of your visits. These analytics only apply to our website. **As Required By Law and Similar Disclosures.** We may access, preserve, and disclose your information if we believe doing so is required or appropriate to: (a) comply with law enforcement requests and legal process, such as a court order or subpoena; (b) respond to your requests; or (c) protect your, our, or others’ rights, property, or safety. For the avoidance of doubt, the disclosure of your information may occur if you post any objectionable content on or through the Services. **Consent.** We may also disclose your information with your permission. ## **Your Choices** You can unsubscribe from our emails via the link provided in the emails. Opting out means we will not email you anymore unless you resubscribe. ## **Third Parties** Our Services may contain links to other websites, products, or services that we do not own or operate. We are not responsible for the privacy practices of these third parties. Please be aware that this Privacy Policy does not apply to your activities on these third-party services or any information you disclose to these third parties. We encourage you to read their privacy policies before providing any information to them. We make use the following third parties ### Zendesk Obviously we use Zendesk and its API and app endpoints to make our Zendesk integrations functional. See [https://www.zendesk.com/company/agreements-and-terms/privacy-notice/](https://www.zendesk.com/company/agreements-and-terms/privacy-notice/?ref=internalnote.com) for a full overview. ### Ghost We use Ghost to host this website and send out emails to our subscribers. See [https://ghost.org/privacy/](https://ghost.org/privacy/?ref=internalnote.com) to check out their privacy policies. ### Plausible We use Plausible to get analytics on website usage. See [https://plausible.io/privacy-focused-web-analytics](https://plausible.io/privacy-focused-web-analytics?ref=internalnote.com) to check out their privacy policies. ### Stripe We use Stripe to handle payment and subscriber information. See [https://stripe.com/en-gb-be/privacy](https://stripe.com/en-gb-be/privacy?ref=internalnote.com) to check out their privacy policies. ### Cloudflare Our DNS and website caching runs on Cloudflare ### GitHub Our source code lives on Github.com ### Google We use Google Workspace to host our email and documents. ## **Security** We make reasonable efforts to protect your information by using physical, managerial and technical safeguards designed to improve the security of the information we maintain. We cannot, however, ensure or warrant the security of any information you transmit to us or store on our Services, and you do so at your own risk. We cannot guarantee that such information may not be accessed, disclosed, altered, or destroyed by breach of any of our physical, technical, or managerial safeguards. If we learn of a security systems breach, then we may attempt to notify you electronically so that you can take appropriate protective steps. We may post a notice through our Services. ## **Children’s Privacy** We do not knowingly collect, maintain, or use personal information from children under 13 years of age, and no part of our Services are directed to children. If you learn that a child has provided us with personal information in violation of this Privacy Policy, then you may alert us at note@internalnote.com ## **Locality** Our Services are managed from Europe (Belgium) States and intended for visitors located within the EMEA region. If you choose to use the Services from outside the European Union with laws governing data collection and use that may differ from European law, then please note that you are transferring your personal information outside of those regions to the EU for storage and processing. Also, we may transfer your data from the EU to other countries or regions in connection with storage and processing of data, fulfilling your requests, and operating the Services. By providing any information, including personal information, on or to the Services, you consent to such transfer, storage, and processing. ## **Changes to this Privacy Policy** We will post any adjustments to the Privacy Policy on this page, and the revised version will be effective when it is posted. If we materially change the ways in which we use or share personal information previously collected from you through the Services, we will notify you through the Services, by email, or other communication. ## **Contact Information** If you have any questions, comments, or concerns about our processing activities, please email us at note@internalnote.com Last updated: Mar 7th, 2023 ## **Privacy Questions** For any questions regarding our EULA, Terms or Privacy Policy, please email note@internalnote.com. ### Assets and images URL: https://internalnote.com/assets-and-images/ Last updated: 2024-11-03T11:13:47.000Z ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2023/06/internalnote_social_eggshell@2x.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/11/internalnote_color.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/11/promobanner.png) ### Custom Objects EAP Feedback URL: https://internalnote.com/custom-objects-eap/ Last updated: 2023-10-05T19:17:19.000Z 🗓️ Last update: April 24th 2023 Below is a list of feature request and remarks for the Custom Objects EAP. To make the requests "easier" to understand I'll use a fictional scenario of Pokemon. [Preview: Creating a Pokédex with Zendesk Custom ObjectsThe awesome people at Zendesk just made the Custom Objects v2 EAP available.So why not build a Pokédex inside Zendesk to get to know the APIs 😉![](https://internalnote.com/content/files/2023/03/internalnote_black-apple-copy.svg)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2023/04/Apple-TV-4K-Copy-62@0.5x-1.jpg)](https://internalnote.com/creating-a-pokedex-with-zendesk-custom-objects/) --- # Object Viewer ## Create ticket for object Scenario: I'm an agent who wants to create a ticket for an Asset. In our demo here: I know it's a Pokemon, it's a Charmander, and it's when I browse the list, Ash's Charmander. If I already did the work of browsing the objects and finding the right Pokemon, a button to create a new ticket for this record would be handy. Similar to the button to create a new ticket for a user when looking at their profile. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2023/04/Screenshot-2023-04-13-at-20.03.00.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2023/04/Screenshot-2023-04-13-at-20.03.04.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2023/04/Screenshot-2023-04-13-at-20.03.07.png) 🤔 This might not be as straightforward as I thought. You could create multiple lookup fields referencing one Object Type, and then re-use these in one or more custom objects. Creating a option to create a ticket for that objects would then almost require rebuilding the entire Form sidebar UI from the ticket view, at which point it’s easier to just use the Ticket UI anyhow since as a user you’re already halfway there. ## Object overview The Custom Object overview page currently shows only name, created\_at, updated\_at values in the table. It would be nice to be able to also show the details fields in this column to give more context. (Or show the object on hover like tickets do) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2023/04/image-1.png) ## Lookup Fields Search in ticket view Currently only the name field is exposed. Searching on other objects could be useful to e.g. - Show a list all Pokemon owner by a trainer ( `custom_object_fields.trainer` lookup field for users ) by entering their name in the lookup field - Show a list of all fire Pokemon ( `custom_object_fields.type` lookup field for `Type` Object) Similar users might search for Microsoft and expect Office365 license to show up. ## Duplicate Object > [Zendesk Community post](https://support.zendesk.com/hc/en-us/community/posts/5624316251034-Add-a-Duplicate-Clone-button-to-any-Record?ref=internalnote.com) It might be useful to have a duplicate button next to edit and delete. Customers who have complex objects (e.g. licenses with lots of conditions, or assets that exist multiple times like laptops or printers) might be easier duplicated than recreated if a similar record needs to be added to the inventory. # API ## List records for user > [Community Post Link](https://support.zendesk.com/hc/en-us/community/posts/5628335216538-List-objects-for-a-user?ref=internalnote.com) When using Custom Objects via API to - create an overview for an end-user of their pokemon - to create a sidebar app that lists all pokemon owned by that user. Currently the Custom Object search only searches by name, and the relationships API endpoint for lookup fields only applies to ticket, user or organization fields. Something akin to this would be handy. Searching **`custom_object_fields`** and the owner field (user lookup) returns all records matching that relationship. ```bash curl https://{subdomain}.zendesk.com/api/v2/custom_objects/{custom_object_key}/records/autocomplete?custom_object_fields.trainer=12345678 ``` ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2023/04/image.png) ## Sideloading > [Zendesk Community link](https://support.zendesk.com/hc/en-us/community/posts/5600682528666-Sideloading-of-Custom-Object-lookups?page=1&ref=internalnote.com#community%5Fcomment%5F5624272043034) Imagine doing a request to `/api/v2/custom_objects/pokemon_captured/records/{record_id}.json` This now returns the following object: ```json { "custom_object_record": { "url": "https://d3v-verschoren.zendesk.com/api/v2/custom_objects/pokemon_captured/records/01GXXWZ8GWTDSTNEQHFZV02RAQ.json", "id": "01GXXWZ8GWTDSTNEQHFZV02RAQ", "name": "Ash's Bulbasaur", "custom_object_key": "pokemon_captured", "custom_object_fields": { "hp": 42, "pokeball": "01GXXWVG2SG5QNFE6KEG9S0S5B", "pokemon_species": "01GXXWN869WA5X6SSQKHSC7RJD", "shiny": false, "trainer": "10992004688146" }, "created_by_user_id": "362397585840", "updated_by_user_id": "362397585840", "created_at": "2023-04-13T18:10:17Z", "updated_at": "2023-04-13T18:10:17Z", "external_id": null } } ``` With `pokeball` and `trainer` and `pokemon_species` linked objects via lookup fields. To gather that data to show in a sidebar app or user profile we would need to make 3 additional API calls to gather those object records. As a developer, something akin to this would be faster: `/api/v2/custom_objects/pokemon_captured/records/{record_id}.json?include=trainer,pokeball,pokemon_species` Which would then return a more complete object. Probably a lot heavier on your server/databases, but a bit more lean to develop against? ```json { "custom_object_record": { "url": "https://d3v-verschoren.zendesk.com/api/v2/custom_objects/pokemon_captured/records/01GXXWZ8GWTDSTNEQHFZV02RAQ.json", "id": "01GXXWZ8GWTDSTNEQHFZV02RAQ", "name": "Ash's Bulbasaur", "custom_object_key": "pokemon_captured", "custom_object_fields": { "hp": 42, "pokeball": { "id": "01GXXWVG2SG5QNFE6KEG9S0S5B", "name": "Ultra ball", ... }, "pokemon_species": { "id":"01GXXWN869WA5X6SSQKHSC7RJD", "name":"Bulbasaur", ... }, "shiny": false, "trainer": { "id":"10992004688146", "name":"Ash", ... } }, "created_by_user_id": "362397585840", "updated_by_user_id": "362397585840", "created_at": "2023-04-13T18:10:17Z", "updated_at": "2023-04-13T18:10:17Z", "external_id": null } } ``` ## Create or Update endpoint Our customers (we're a Zendesk Partner) often require us to regularly import new data. For end-users the `create_or_update` or `create_or_update_many` endpoints are pretty cool. They allow us to bulk upload a hunderd records at a time, and records in Zendesk are then created or updated based on matching email. Similarly an endpoint for Custom Object Records where `external_id` or `name` are the key identifiers would make bulk import/update a lot faster than the current flow where we need to create the items 1 by 1\. # Custom Object Records ## Additional Field Types - URL - Image (URL) - Attachment (Base64 blob or real Zendesk attachment) ## One-to-many Lookup Fields > [Zendesk Community Post](https://support.zendesk.com/hc/en-us/community/posts/5592645478554-Multi-Select-field?page=1&ref=internalnote.com#community%5Fcomment%5F5624317272218) A lookup field on ticket level currently can contain only one object. E.g. This ticket is about my order X. There might be a scenario where a customer wants to log an issue against multiple items. - Water damage and my laptop and iphone are broken - Certificate experation for both our website and webshop that needs renewal - An order with two missing items - ... ### Update: You can get this to work with a *junction* object that basically links Orders and Products by creating an Orderline object. Or a Team members object that links a trainers' team and the captured Pokemon. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2023/05/Screenshot-2023-05-02-at-11.14.40.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2023/05/Screenshot-2023-05-02-at-11.14.46.png) ### Subscription confirmation URL: https://internalnote.com/your-membership/ Last updated: 2025-07-08T12:40:30.000Z Thank you for subscribing to the newsletter! As a member you'll receive a biweekly newsletter in your inbox with Zendesk news, reviews and tutorials. You'll also get access to the entire archive of articles, and access to comments to give feedback or ask for more information about the topics in the articles. If you're interested in supporting this blog and receive more content, take a look at [Internal Note Plus](https://internalnote.com/plus). ### User page view events to trigger custom bot welcome URL: https://internalnote.com/user-events-to-trigger-bot-welcome/ Last updated: 2024-07-02T12:14:30.000Z I was inspired by the following quote from Hardcore Software by Steven Sinofsky: ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/paragraph-formatting--and-indenting-copy-1.png) Yes.. this is about Clippy.. 📎 Imagine the following: A user browses a customers' website. They view pages and clearly have an intent. When they open the web widget instead of a generic "Hey can I help you", or the widget opening with a proactive message based on the last URL, the customer gets a "It seems you're trying to accomplish X, here's some info". That prompt is based on the pages viewed by the customer in their current session. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/overview-1.png) Example Flow. Customers would not see the middle one --- # What works now in Zendesk A customer looks at Internal Note and checks out the following pages (reverse order) - Zendesk acquires Ultimate: an in-depth overview of what the platform will gain - Road to Automation - Customer Service Trends 2024 - Zendesk Scorecard - Internal Note He then goes to the web widget and talks to the to and an agent. While browsing Zendesk collects his actions (URL, title) via an API call. When he reaches the agent, that data shows up in the agent sidebar as Pages Viewed. ## Storing actions ### Sample 1 `https://internalnote.zendesk.com/frontendevents/pv?client=1B752747-577B-429A-A0E0-83861AF69088` ```json { "url": "https://internalnote.com/zendesk-acquires-ultimate/", "buid": "8d493a37ce5b44c6998fcf689097dcd0", "channel": "web_messenger", "version": "67c35ac", "timestamp": "2024-06-26T18:27:19.178Z", "suid": "4e3bc363544b46e19de46bd0bae61bf6", "pageView": { "pageTitle": "Zendesk acquires Ultimate: an in-depth overview of what the platform will gain", "referrer": "https://internalnote.com/road-to-automation/", "time": 2200, "loadTime": 2261, "navigatorLanguage": "en-US", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", "helpCenterDedup": false } } ``` ```json { "author": { "role": "appUser", "appUserId": "667c5d49e98c2bd1186f4f95", "client": { "platform": "web", "id": "8d493a37ce5b44c6998fcf689097dcd0", "integrationId": "61ea8723f4aa6100eb8a69e5", "info": { "vendor": "zendesk", "sdkVersion": "0.1", "URL": "internalnote.com", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", "referrer": "https://internalnote.com/ultimate-trends-2024/", "browserLanguage": "en-US", "currentUrl": "https://internalnote.com/road-to-automation/", "currentTitle": "Road to Automation" } } }, "activity": { "type": "conversation:read" } } ``` ### Sample 2 `https://internalnote.zendesk.com/frontendevents/pv?client=1B752747-577B-429A-A0E0-83861AF69088` ```json { "url": "https://internalnote.com/road-to-automation/", "buid": "8d493a37ce5b44c6998fcf689097dcd0", "channel": "web_messenger", "version": "67c35ac", "timestamp": "2024-06-26T18:28:28.704Z", "suid": "4e3bc363544b46e19de46bd0bae61bf6", "pageView": { "pageTitle": "Road to Automation", "referrer": "https://internalnote.com/zendesk-acquires-ultimate/", "time": 1584, "loadTime": 1634, "navigatorLanguage": "en-US", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", "helpCenterDedup": false } } ``` ## Zendesk ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/image-3.png) ## Data Source Zendesk pulls that data from: [https://d3v-verschoren.zendesk.com/api/lotus/graphql](https://d3v-verschoren.zendesk.com/api/lotus/graphql?ref=internalnote.com) ```json { "data": { "user": { "id": "19776893760786", "events": { "edges": [ { "node": { "createdAt": "2024-06-26T18:28:28.704Z", "id": "01J1AWWVYVC9J64SHK6RWPAD1Q", "type": "page_view", "source": "zendesk", "properties": { "data": "{\"channel\":\"web_messenger\",\"device_id\":\"8d493a37ce5b44c6998fcf689097dcd0\",\"referrer\":\"https://internalnote.com/zendesk-acquires-ultimate/\",\"session_id\":\"4e3bc363544b46e19de46bd0bae61bf6\",\"title\":\"Road to Automation\",\"url\":\"https://internalnote.com/road-to-automation/\",\"user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\"}", "__typename": "UserEventProps" }, "receivedAt": "2024-06-26T18:28:30.851041979Z", "__typename": "UserEvent" }, "__typename": "UserEventEdge" }, { "node": { "createdAt": "2024-06-26T18:27:19.178Z", "id": "01J1AWTR246DH3GSHS68TKAC9Q", "type": "page_view", "source": "zendesk", "properties": { "data": "{\"channel\":\"web_messenger\",\"device_id\":\"8d493a37ce5b44c6998fcf689097dcd0\",\"referrer\":\"https://internalnote.com/road-to-automation/\",\"session_id\":\"4e3bc363544b46e19de46bd0bae61bf6\",\"title\":\"Zendesk acquires Ultimate: an in-depth overview of what the platform will gain\",\"url\":\"https://internalnote.com/zendesk-acquires-ultimate/\",\"user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\"}", "__typename": "UserEventProps" }, "receivedAt": "2024-06-26T18:27:21.323174035Z", "__typename": "UserEvent" }, "__typename": "UserEventEdge" }, { "node": { "createdAt": "2024-06-26T18:26:05.139Z", "id": "01J1AWRFW86WV62E9MCGT6CSHP", "type": "page_view", "source": "zendesk", "properties": { "data": "{\"channel\":\"web_messenger\",\"device_id\":\"8d493a37ce5b44c6998fcf689097dcd0\",\"referrer\":\"https://internalnote.com/ultimate-trends-2024/\",\"session_id\":\"4e3bc363544b46e19de46bd0bae61bf6\",\"title\":\"Road to Automation\",\"url\":\"https://internalnote.com/road-to-automation/\",\"user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\"}", "__typename": "UserEventProps" }, "receivedAt": "2024-06-26T18:26:07.392282491Z", "__typename": "UserEvent" }, "__typename": "UserEventEdge" }, { "node": { "createdAt": "2024-06-26T18:25:59.817Z", "id": "01J1AWRAQ46CR3CCV4CRRKAD9K", "type": "page_view", "source": "zendesk", "properties": { "data": "{\"channel\":\"web_messenger\",\"device_id\":\"8d493a37ce5b44c6998fcf689097dcd0\",\"referrer\":\"https://internalnote.com/zendesk-acquires-ultimate/\",\"session_id\":\"4e3bc363544b46e19de46bd0bae61bf6\",\"title\":\"Customer Service Trends 2024 - Zendesk Scorecard\",\"url\":\"https://internalnote.com/ultimate-trends-2024/\",\"user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\"}", "__typename": "UserEventProps" }, "receivedAt": "2024-06-26T18:26:02.119482773Z", "__typename": "UserEvent" }, "__typename": "UserEventEdge" }, { "node": { "createdAt": "2024-06-26T18:25:14.44Z", "id": "01J1AWPYBHC9GP4E1H6XJK2EB5", "type": "page_view", "source": "zendesk", "properties": { "data": "{\"channel\":\"web_messenger\",\"device_id\":\"8d493a37ce5b44c6998fcf689097dcd0\",\"referrer\":\"https://internalnote.com/\",\"session_id\":\"4e3bc363544b46e19de46bd0bae61bf6\",\"title\":\"Zendesk acquires Ultimate: an in-depth overview of what the platform will gain\",\"url\":\"https://internalnote.com/zendesk-acquires-ultimate/\",\"user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\"}", "__typename": "UserEventProps" }, "receivedAt": "2024-06-26T18:25:16.676808358Z", "__typename": "UserEvent" }, "__typename": "UserEventEdge" }, { "node": { "createdAt": "2024-06-26T18:24:29.023Z", "id": "01J1AWNJ1PCNK30EB571HK6S31", "type": "page_view", "source": "zendesk", "properties": { "data": "{\"channel\":\"web_messenger\",\"device_id\":\"8d493a37ce5b44c6998fcf689097dcd0\",\"referrer\":\"https://internalnote.com/\",\"session_id\":\"d30ebb1f36794df8a309778db04ffa3e\",\"title\":\"Internal Note\",\"url\":\"https://internalnote.com/\",\"user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\"}", "__typename": "UserEventProps" }, "receivedAt": "2024-06-26T18:24:31.294898508Z", "__typename": "UserEvent" }, "__typename": "UserEventEdge" } ], "__typename": "UserEventConnection" }, "__typename": "Customer" } }, "extensions": { "depth": 6, "potentialNodeCount": 5 } } ``` ### GraphQL ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/image-4.png) ```graphql query userPageViewQuery($userId: ID!, $first: Int!, $source: String!, $type: String!) { user(id: $userId) { id events(first: $first, source: $source, type: $type) { edges { node { createdAt id type source properties { data __typename } receivedAt __typename } __typename } __typename } __typename } } ``` ```json { "userId": 19776893760786, "type": "page_view", "source": "zendesk", "first": 20 } ``` # Concept What would happen if we pass that data to our Bot in the Welcome flow: ## Proxy for the API Since I don't control Ultimate ( 😅 ) I pulled the data from Zendesk and made it available as an API call. It returns the JQUERY data from Zendesk, but cleans up the big JSON file to a text string that works for Ultimate. It runs at [https://returnactivity.verschoren.workers.dev/19776893760786](https://returnactivity.verschoren.workers.dev/19776893760786?ref=internalnote.com) and requires the ID of the current user. (Which is easily retrievable from the user metadata you get from SunCo. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.17.36.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.17.39.png) ### SunCo Metadata [Managing user information![](https://static.ghost.org/v5.0.0/images/link-icon.svg)Smooch Documentation![](https://docs.smooch.io/static/sm_logo_fb.54a224a5.jpg)](https://docs.smooch.io/guide/managing-user-information/?ref=internalnote.com) ```json { "user": { "id": "deb920657bbc3adc3fec7963", "externalId": "user-id-231", "signedUpAt": "2015-10-08T23:52:11.677Z", "profile": { "givenName": "Steve", "surname": "Brule", "email": "steveb@channel5.com", "avatarUrl": "https://s3.amazonaws.com/avatar.jpg", "locale": "fr-CA" } } } ``` ### Returned Data: ``` Road to Automation - https://internalnote.com/road-to-automation/ | Zendesk acquires Ultimate: an in-depth overview of what the platform will gain - https://internalnote.com/zendesk-acquires-ultimate/ | Road to Automation - https://internalnote.com/road-to-automation/ | Customer Service Trends 2024 - Zendesk Scorecard - https://internalnote.com/ultimate-trends-2024/ | Zendesk acquires Ultimate: an in-depth overview of what the platform will gain - https://internalnote.com/zendesk-acquires-ultimate/ | Internal Note - https://internalnote.com/ ``` ### API Step ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.24.29.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.24.32.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.24.35.png) I then added an API step to my Welcome flow to get that data from the worker. Requires the aforementioned `user_id` ## Welcome flow 💡 The DEMO flow has an extra step to choose if you want to use the events data, and it asks for the User ID if yes. This way I could test the concept without also building a flow to get the SunCo ID ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.25.33.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.25.52.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.25.58.png) The uGPT prompt: > Tell the customer about {{events}}. These are all indexed items in your knowledge base and data sources. ## Sample Flow ### Example 1 > Darth Vader - ID 19776893760786 So based on the data available in Zendesk, when a customer loads the chat, they see this data ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.27.59.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.27.37.png) So a customer is exploring Ultimate on my blog >> they open the widget >> they see a summary of the article they are exploring. ### Example 2 > James Bond - ID 19777656776082 ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.36.24.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.36.30.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/Screenshot-2024-06-26-at-21.36.40.png) # Conclusion > Please excuse the crudity of this model. I didn't have time to build it to scale or paint it. - Doc Brown The above is obviously a rough proof of concept that lacks any finesse in the prompts used. Improvements can be made by combining the websites found into a proper intent, and then using that to ask uGPT for an answer. E.g. for my first example this would be a better input for uGPT ``` The user aims to explore automation strategies, understand Zendesk’s acquisition of Ultimate, and stay informed about customer service trends for 2024 via internalnote.com. ``` And this would return into: ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2024/06/image-6.png) ## Reference - Ultimate bot - [link](https://dashboard.ultimate.ai/bot/64aeabeaa3d0af7dc0ed6d28/intents/welcome?ref=internalnote.com) - Testbot - [ai.internalnote.com](https://ai.internalnote.com/?ref=internalnote.com) (very rough bot, its for development only) ### App Builder thoughts URL: https://internalnote.com/app-builder-thoughts/ Last updated: 2025-01-20T20:20:17.000Z 💡 This is an initial log of feedback not intended to be publicly shared # API Previewer App First concept, build an app that shows API output next to tickets for the Zendesk API. Disclaimer, this is an actual app in development/review for the marketplace by my company, so a fun expertise to build this again with the App Builder. ## Things I wanted to test - How does this behave - Can it render decent UIs - Does it know how to make API calls ## Experience - Going from initial draft to working prototype was fast - iterative process really helps thinking about the app logically - ran into some issues where moving some elements behind tabs required some persistent nudging and rephrasing - Often while iterating on e.g. the 2 action buttons the app would forget the (finally) working tab bar options ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-17-at-19.19.22.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-17-at-19.18.11.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-17-at-19.24.12.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-17-at-19.24.12-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-17-at-19.26.29.png) Stopped development testing after a persistent *Error getting response. Click to try again.* Even after 24h the issue persisted. I presume because of either reaching a memory limit for the context (I iterated a lot), or it crashed because of me asking for the icons? ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-16-at-12.07.53.png) App I build by hand I tried to replicate ## Gaps I found myself trying to reset the context. Like "Go back to version 4" or **STOP** in order to go back to a working version of the app. # Modal View app Second app was an attempt to replicate what I needed to build for a customer this week. They wanted to collect feedback from agents on how AI worked and for that they: - show a modal on ticket submit with status solved - gather feedback in three custom fields - store on ticket - solve ticket ## Things I wanted to test - Show modal view - interact with ticket fields - interact with ticket events ## Experience Where to start. At first it went well. My initial version showed a modal but only in the ticket sidebar. Some gentle nudging made the bot understand that there is such a thing as a modal view but it kept trying to add it as a separate modal.html file instead of inline html. When I convinced the bot by copying actual code examples from the documentation it did do an inline html element for the modal, but it never got invoked or shown on the preview app in test mode. I assume this is a limitation of the current SDK ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-14.36.14.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-14.36.57.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-14.37.06.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-14.37.09.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-14.38.50.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-14.40.38.png) ### Gaps - The bot invented fake modal functions - It never was capable of intercepting the solved state, the if clause for that one kept pulling from fake elements like `get(ticket.solved)`. - It also kept trying for an`event` it would received on ticket.submitted which does not exist. I could to get that element out of the code, even though I convinced the bot to use another way of checking for solved state. In the end I gave up since I assume modal options are not part of the current scope. Same as intercepting submit. # Alert on specific users An app we build for a customer shows a modal alert on specific customers tagged with `system`. There are users that are the result of web forms being submitted to Zendesk and up on e.g. mailer@domain.com users for all incoming email, and those users should not being modified for GDPR risk (We know, bad architecture but the customer can't easily change this) Modal was not an option so I decided to replicate this app with a `client.invoke(notify)` function instead. ## Things I wanted to test - Interact with user profiles - Use notify or modal to alert users ## Experience Even though the prompt specified user profiles the initial app got deployed as a ticket app. I convinced the builder to move to the user profile (and got a very friendly thanks back!) but try as I might, I could not get the app to show up in test mode on the user profile, even though the conversation told me it should ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.07.42.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.07.46.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.08.10.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.08.51.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.09.31.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.09.34.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.09.38.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.09.57.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.10.20.png) ## Gaps - A way to inspect or modify the manifest file would be nice - It used a toast provider to try to show alerts at first before I reminded the conversation the invoke(notify) function existed # Lookup Fields Next test. An app that looks at lookup fields in a ticket, gets the custom object record and shows the data of all records next to a ticket. Idea was to render a richer preview than Zendesk does (e.g. image urls as actual images, tags e.a.). I build such an app in the past so had an idea on the complexity of it. (Very complex) ## Things I wanted to test - Interact with ticket fields - render complex UIs with variable data - use Zendesk APIs in complex flows. ## Experience #1 The initial description of me was high-level. I wanted to see how good the builder could reason with Zendesk objects. It failed. - It assumed the lookup field returns actual data of the object - I had to remind it that the custom field only contains a record ID - I had to explain it that it needs to pull the ticket field /api/v2/ticket\_fields data via API to get its relationship - Explain that you need to call the custom object API to get custom record data - That Zendesk needs IDs and that the strings in the custom fields are not always usable and should be modified, e.g zen:custom\_object:object\_name ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.18.55-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.19.38-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.19.41-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.21.13-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.22.08-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.22.10-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.22.54-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.24.06-1.png) ## Gaps - Serious gaps in Zendesk knowledge - Bad notion of identifiers for API calls - Didn't handle API errors well. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.24.50.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.25.11.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.25.13.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.26.43.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.27.09.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.29.07.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.30.14.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.30.38.png) ## Experience 2 Knowing these gaps in Zendesk API logic, I decided to restart with a lot of knowledge in the initial description. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.44.22.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.45.22.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-15.47.08.png) Here also I got some weird failures. My initial description confused the system to start with *all *ticket fields* instead of those in the ticket.* The result was a working app that showed wrong data. I could not get this initial bias/bad start out of the rendered code and it kept resetting to this bad design. ### Gap - A way to say STOP forget what you are doing would be nice. - Once it goes the wrong path you can't easily reset ## Experience #3 I tried a final time for this one. I wrote an initial prompt with a lot of detail. But then it got stuck on a non-existing ticketFields object as part of its logic I could net get out if its rendering ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.06.40.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.09.31.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.11.52.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.09.35.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.15.24.png) ### Gaps - If it goes the wrong way it can't be 180-d to a better logic - It uses non-existing variables - It lacks a bias towards Zendesk APIs. # Movie App Final test was an app to work with the oMDB API. I had experience with this API from my blog building Bot flows. ## Things I wanted to test - Make external API calls - Get and Set ticket field data - Add ticket comments - Show a rich preview ## Experience This one went very well. The initial version after my prompt was spot on and iterating on the design and features went well. There were some errors like failures on the button actions due to a non-existing Toast Provider, which I fixes by asking for client.invoke(notify). I almost got this to a fully functional demo app. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.23.07.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.24.00.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.26.26.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.28.16.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.28.31.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.30.44.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.31.36.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.32.01.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.42.30.png) Some weird behavior - For demo purposes I had hardcoded the API token. Halfway through it used a different token all of the sudden - it refuses to output ticket comments in html, no matter the prompt The biggest failure was reminiscent of my first test. The moment I ask for icons it errors out and refuses to load anything else. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.46.59.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/01/Screenshot-2025-01-20-at-16.48.07.png) # Overall impressions I'm impressed. This really shows potential! - Very quick way to iterate on ideas - If you prompt right, and know your Zendesk you can get very far in building functional apps. - The app lacks Zendesk specific knowledge of the APIs so some things that for a developer like me are just known facts, are unknown to the app builder - it's iterative by design, but no easy way to go back to a previous known good state - limited to, I presume because MVP and EAP, to only support apps and no support for modal or other context. - no way to access settings, so API tokens have to be added as part of prompt. - no way to stop a prompt. You just need to wait until it fails or succeeds. Overall, I described it to a colleague as "this feels like talking to a good junior developer with potential. You need to give it a lot of attention and context, you need to check the code when it fails for just unknown nonsense, but it shows promise. ### Categories URL: https://internalnote.com/categories/ Last updated: 2025-12-03T09:48:55.000Z The content on this blog is organised around Zendesk’s Resolution Platform. Each section reflects one of the core layers that power modern, AI-driven customer and employee experiences — from knowledge and procedures to actions, agents, and governance. This structure makes it easier to explore how features work together, how they apply in real workflows, and how they contribute to automated, trusted resolutions across every channel. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2025/12/Resolution-Platform-1.png) ### Ask Echo URL: https://internalnote.com/echo/ Last updated: 2026-05-06T09:03:09.000Z You can ask Echo to summarise an article, dive into demo flows, or search across articles. ## Posts ### Prompting Action Flows with Admin Copilot URL: https://internalnote.com/prompting-action-flows-with-admin-copilot/ Last updated: 2026-09-04T08:04:57.000Z Customers want resolutions. Admins want to shape the knowledge, procedures and workflows that deliver them. Zendesk automates these two connected jobs. The first is the resolution loop. A customer asks a question, and Zendesk uses knowledge, procedures and actions to work out what needs to happen. An AI Agent can retrieve information, follow a procedure, call an Action Flow and take action across Zendesk or a connected system. The second is the learning loop. Admins inspect how those resolutions perform, identify gaps and improve the configuration behind them. They update knowledge, refine procedures, adjust routing, change automations or create new Action Flows. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Resolution-Learning-Loop.png) For a long time, humans sat at the centre of both loops. Agents handled tickets from start to finish. Knowledge managers wrote and maintained the articles that supported those conversations. Admins built the triggers, routing rules and workflows. Analysts reviewed reports and turned them into recommendations. That model is changing. AI Agents take on more of the resolution work. Agent Copilot works alongside agents while they handle tickets. Knowledge Copilot detects gaps and helps create new content. Analytics Copilot will help analytics teams find and understand insights. Admin Copilot already helps admins understand their setup, identify opportunities and improve the configuration behind it. New this month is Admin Copilot’s ability to work with Action Flows. Admins can now describe a process in writing, and Admin Copilot will generate an Action Flow for them. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Roles2.png) Humans owning the process is quickly shifting towards humans assisted by AI # The Action Platform ## Resolve the question Knowledge can answer a question, procedures can structure the interaction and actions can perform the work. A complete resolution often needs all three. A customer asking whether an order can be returned may need an explanation of the refund policy. But Zendesk may also need to identify the customer, retrieve the order, check its age and payment method, confirm eligibility, issue the refund, update the ticket and explain the result. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/core-elements.png) That process needs more than a reply. Procedures can define the conversation logic, but Zendesk also needs to gather context, apply business rules and process the refund. Action Flows provide a way to execute those actions. They connect individual steps into a defined process that can run as part of a procedure handling a customer conversation, support a human agent or execute automatically when something changes in Zendesk. A flow can retrieve information from another system, check a business rule, transform data, update a ticket or custom object, create a task, request an approval or notify another team. I explored these changes in previous articles, showcasing how Zendesk is moving from isolated triggers and hand-crafted integrations towards reusable processes that teams can call wherever a resolution needs them. [Action Platform. The new way of automating ZendeskA guide to Zendesk’s shift toward the Action Platform, showing how defaults stay in triggers while routing, integrations, and workflow logic move into Action Builder and Custom Actions.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_color@2x-19d8db1c-aab0-4b82-a234-5f7afdded201.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2026-01-Agentic-3-0d704a3f-b3b1-49d1-b438-17d2292262ec.png)](https://internalnote.com/automating-with-action-platform/) [Building more powerful and connected Action FlowsNew Action Flow capabilities and connectors give AI Agents, Agent Copilot and background automations more ways to execute work across your business.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_color@2x-e9d00102-de25-4a76-9ea0-9aa71d370c83.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2026-01-Agentic-861cee64-f089-4627-b597-0f3ec95be33a.png)](https://internalnote.com/more-powerful-action-flows/) ## Use the platform first The breadth of the Action Platform does not mean that every problem needs an Action Flow. The first question should always be whether Zendesk already has a native capability for the job. Admin Copilot can help with that assessment. An admin may ask for an Action Flow or Custom Agent, but the better answer might be a trigger, an automation, Omnichannel Routing or another existing setting. Action Flows and Custom Agents are not replacements for native Zendesk functionality. Use them to fill gaps, automate processes that span several parts of the platform and combine conditions that would otherwise become a wall of overlapping triggers. Take ticket priority and routing. A simple rule such as “if a ticket comes from a Gold customer, set the priority to Urgent” may belong in triggers. But the process becomes more useful when Zendesk needs to look up the requester’s support plan, check whether it is active and then branch across several customer tiers. That’s where Action Flows come into focus. An admin could ask Admin Copilot to build the following process: > When a ticket is created, look up the requester’s support plan in our CRM. If the customer is Gold and the support plan is active, set the ticket priority to Urgent. If the customer is Silver and the support plan is active, set the ticket priority to High. For all other customers, set the priority to Normal. If the support plan is inactive, add an internal note to the ticket to alert the agent, and set the priority to Low. The Action Flow handles the lookup and conditional logic. Once it sets the priority, it should stop. Omnichannel Routing already handles assignment through queues, skills, availability, capacity and priority. The flow should return the information the routing system needs and let the native routing capability take over. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Routing.png) The same principle applies to Custom Agents. Use them when the product gap is reasoning: interpreting an unclear request, working through a non-linear process or deciding what to do based on information discovered during execution. Do not build a Custom Agent to recreate a native queue, trigger or routing rule simply because you can describe it in a prompt. The Action Platform becomes more useful when it extends Zendesk instead of replacing it. Use triggers for simple updates, Omnichannel Routing for assignment, and Knowledge and procedures for answers and guided processes. Use Action Flows for multi-step logic, external actions, reusable business processes and the gaps that do not fit neatly into the native tools. # From build to prompt Building an Action Flow has always involved two different kinds of knowledge. An admin needs to understand the process the business wants to run, but they also need to understand how to express that process in Zendesk. Knowing the business process is usually the more familiar part. Admins understand the customer, the team, the policy and the outcome the business needs. They know that a hand-off is inefficient or that a repetitive task should be automated. The activation barrier comes from the second part. To build an Action Flow, an admin needs to understand how to configure its triggers, actions, conditions, branches and connections, then translate the business process into those individual components. They need to know how the platform works before they can use it to improve the way the business works. This also creates a discovery problem. Customers cannot always answer the question “what can I automate today?” They know where the process is slow, where a team is doing manual work or where information is being copied between systems. They do not necessarily know which Zendesk feature belongs in the solution, or whether the process should use a trigger, a routing rule, an Action Flow or a Custom Agent. Admin Copilot changes the starting point. The admin brings the business process, the goal and the context. They can ask what is possible, explore different ways to implement the idea and use written instructions to move from a requirement to a deployable configuration. With the new [AI-powered Action Flow creation capability](https://support.zendesk.com/hc/en-us/articles/8855601898266-Creating-action-flows-to-automate-processes-across-Zendesk-and-external-systems?ref=internalnote.com), an admin can choose one of six starter prompts or write a request from scratch. Admin Copilot interprets the request and generates a full Action Flow, including the triggers, actions, conditions and connections needed to run the process. The admin remains in control of the result. They can review the generated steps, change the logic or swap a connector before they confirm and let Admin Copilot build the flow. Once built, they can test the flow and activate it. If the process needs a data transformation, Admin Copilot can generate the JavaScript for a custom code step. If the flow requires a third-party connection that is not set up yet, Copilot can prompt the admin to complete the authentication step. > This prompt-to-flow capability is available as an early access feature that eligible customers can activate in their instance. This new capability changes the emphasis of the admin’s role. Admins are not giving up control of the configuration, but they are spending less time translating a known process into the construction language of a tool and more time exploring the options, checking the outcome and refining the experience. The admin defines what should happen, and Copilot helps build how it should happen. That is a shift towards admins becoming Service Architects who design and improve the experience, rather than Technicians who need to manually assemble every technical component. TWO DIFFERENT TYPES OF AI INSTRUCTIONS Zendesk uses written instructions in two different ways. Agentic procedures, including those used by Custom Agents, instruct the system how to reason over a situation. The AI Agent can interpret the input, analyse what it finds, write or summarise information and adapt its path while it works towards a goal. Admin Copilot uses written instructions to understand what an admin wants to build. It turns that request into a deterministic Action Flow with defined triggers, actions, conditions and connections. Custom Agents use prompts to reason at runtime. Admin Copilot uses prompts to create configuration. This distinction helps explain the products as prompting becomes more common across Zendesk. It is not a choice between the two approaches. A deterministic Action Flow can handle the fixed parts of a process and invoke a Custom Agent where the process needs interpretation or flexible reasoning. For a deeper look at the difference, read [Agentic versus deterministic approaches in Zendesk](https://internalnote.com/agentic-vs-deterministic-approaches-in-zendesk/). ## Prompt-built Action Flows The six starter prompts give admins a concrete place to begin when they know they want to automate something but have not yet decided what to build. The current examples cover several common patterns: escalating urgent tickets, logging negative CSAT, merging duplicate tickets, detecting ticket spikes, extracting order details and provisioning hardware with manager approval. An admin can also describe a process from scratch. Admin Copilot turns that written request into a draft Action Flow. The admin can review how the process has been interpreted, change the configuration where needed and continue refining the flow. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Action-Flow-Init.png) The six starter flows Action Copilot prompts offer you. Once the process matches the requirement, the admin can approve the flow and activate it. The result is still a visible, fully deterministic Action Flow. Prompting removes much of the manual setup work, but the admin can still inspect and edit the logic in the same way as any other flow. # Examples ## Set the priority The first example is a familiar one. It uses user-field data and conditional logic to set a ticket priority, while leaving assignment to the native routing system. Imagine an account that stores customer support plans in a user field. That field contains the customer tier and whether the support plan is active. The admin wants to set ticket priority based on those values, but does not want to resort to a long list of triggers for every possible combination. You can prompt Admin Copilot: > When a ticket is created, look up the requester’s support plan in the user field Support Plan. > \- If the customer is Gold and the support plan is active, set the ticket priority to Urgent. > \- If the customer is Silver and the support plan is active, set the ticket priority to High. > \- If the support plan is inactive, add an internal note to the ticket to alert the agent, and set the priority to Normal. > \- For all other customers, set the priority to Low. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Demo-A-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Demo-A-3.png) Admin Copilot can generate a flow that looks up the requester, retrieves the relevant support plan, checks whether it is active and branches according to the customer tier. It then sets the ticket priority and adds an internal note where required. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Demo-A-5.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Demo-A-4-1.png) That’s the flow. It does not assign the ticket. Omnichannel Routing uses the new priority together with its queues, skills, availability and capacity rules to handle assignment. This is where Action Flows builds on and expands the product and improves the admin experience. The basic priority logic could be handled by triggers, but the requester lookup, user-field check and several conditional branches make the process more involved. Instead of scattering those conditions across a long list of triggers, the Action Flow keeps the decision tree in one place and passes the result back into the native routing process. ## Run it on a schedule Action Flows can also run on time-based triggers. Earlier versions could only run once a day. Hourly schedules now make it possible to check for changes throughout the day and act while the information remains relevant. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Schedule.png) Consider a travel company with a Custom Object that stores its bookings. The object stores flight details, customer information and online check-in status. The admin wants to contact customers who are approaching departure but have not completed check-in. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Object-1.png) For this demo I needed to create that Custom Object. Luckily, Admin Copilot now supports generating these too, so building the object took a single prompt. Now, to build this automation, we can prompt Admin Copilot again: > Every hour, search the Bookings custom object for customers with a flight departing within the next four hours who have not completed online check-in. Create a proactive ticket for each customer with the booking details. Admin Copilot can generate a flow that runs every hour, searches the Bookings custom object, finds bookings with a departure time within the next four hours, checks whether online check-in remains incomplete and creates a proactive ticket for each matching customer. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Demo-B-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Demo-B-2.png) The hourly schedule matters because the relevant window moves throughout the day. A daily run could miss a customer whose flight enters the four-hour window after the automation has already completed. An hourly run can find that customer while there is still time to help. 🐝 I ran into a bug where the entire flow gets build correctly, but I manually had to select the **bookings* object in the **search objects* step. A small annoyance, but easily fixed. ### Improving my flow There is one operational detail to address before activating the flow. Running every hour against a four-hour window could create the same ticket more than once. After realising this issue, the admin can ask Admin Copilot to update the flow and check whether a ticket for that booking ID already exists before creating a new one. That is part of the value of prompt-based editing. The first version of the process gets the team started, and the flow can continue to adapt as the team finds edge cases and the company’s processes change. What's cool here is that Admin Copilot even created a Custom Action in order to execute the search efficiently. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Demo-B-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Demo-B-4.png) This same scheduling pattern could support upcoming appointments, delivery windows or other time-sensitive processes. A flow could search a custom object for appointments starting soon, identify customers who have not completed a required step and create a proactive ticket before the appointment becomes a problem. ## Act across systems Action Flows are useful when a process needs to cross the boundary between Zendesk and another system. The external action does not always belong at the end of the flow. A connector can provide information in the middle of a process, helping Zendesk decide what should happen next. For example, an admin could build a customer context enrichment flow that looks up the user and organisation, then updates the ticket with the relevant context. That information might feed a later condition, change the priority or give an agent more useful information. The connector is part of the decision, not just an escalation after it. A different process might send feature requests to a development team. The process can start when Intelligent Triage identifies the topic, rather than waiting for an agent to add a tag manually. The admin can prompt Admin Copilot: > When a ticket is updated and its Intelligent Triage topic is New feature request, summarise the conversation and extract the customer’s feature request. Create a GitHub issue with the summary, extracted request and ticket link, then notify the development team in Slack. Admin Copilot can generate a flow that checks for the Intelligent Triage topic `New feature request`, passes the conversation to an OpenAI step, summarises the conversation and extracts the feature request before creating the GitHub issue and notifying the development team in Slack. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Demo-C-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/09/Demo-C-3.png) The flow combines several types of work. Intelligent Triage provides the signal. The OpenAI step turns a long conversation into structured information. Jira receives the feature request, while Slack alerts the team that needs to act on it. Admin Copilot also detects the need for the integrations. If GitHub or Slack is not connected, it can prompt the admin to complete the setup in the newly generated flow. For some types of integrations it might even show the Connect button right inline in the conversation. # The promptable Zendesk Generating Action Flows is part of a broader change in how admins work with Zendesk. As described earlier, Admin Copilot already helps admins inspect their setup and decide which changes to make. It can identify unused or overlapping triggers, show when they last ran and explain why they may need review. The admin can open the related configuration, edit or deactivate the rule and save the change. Copilot can recommend changes to the admin, but the admin remains in control of what changes. Prompt-built Action Flows extend this interaction to more complex building blocks in Zendesk. This is the practical value of a more promptable Zendesk. Admin Copilot helps admins understand the current setup, identify what is missing and move from an operational problem to a configuration change. It does not optimise the account by itself today. But it makes the work of inspecting, designing and implementing improvements easier. The prompt is therefore more than a faster way to build and configure Zendesk. It gives admins a way to explore the platform starting from the problem they are trying to solve. The relevant solution might involve triggers and automations, Omnichannel Routing, Knowledge, procedures, actions, connectors, Action Flows, Custom Agents or analytics. The future vision goes beyond Action Flows, Custom Objects or the rest of the existing set of capabilities Admin Copilot has. Admins should be able to describe *anything* they want to improve and let Admin Copilot help them explore the relevant paths across Zendesk. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### Stop building one big bot URL: https://internalnote.com/stop-building-one-big-bot/ Last updated: 2026-08-31T08:52:29.000Z AI Agents sit at the core of the customer experience. They are the conversational layer through which customers ask questions, receive answers, and move through to a resolution. But as AI capabilities evolve, so does the way we architect what sits behind that experience. [https://www.zendesk.com/blog/zendesk-insights/expertise/stop-building-one-big-bot/](https://www.zendesk.com/blog/zendesk-insights/expertise/stop-building-one-big-bot/?ref=internalnote.com) ### Closing the Resolution Loop with Custom Agents URL: https://internalnote.com/closing-the-resolution-loop/ Last updated: 2026-08-31T11:36:36.000Z If you've been reading this blog for a while, the concept of resolutions shouldn't be new to you. AI Automation makes it possible to handle conversations at a scale where just counting interactions becomes a less relevant way to measure your operational excellence. An automated workforce can handle ten, a hundred or a thousand conversations at once. Handling a thousand tickets is no longer an achievement by itself, but *how* you handled them becomes a crucial metric. The same shift applies to other traditional support metrics. When AI Agents handle most of your conversations, first reply time can approach zero. At the same time, the complex conversations escalated to your team may take longer to resolve and push average handling time up. So, if first reply time, average handling time and solved tickets no longer tell the full story, what should we measure instead? ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Resolution-Learning-Loop.png) The answer is the outcome of each interaction. Did we help the customer resolve their question? Did we complete the action they needed? And did we handle the conversation well? That gives us two ways to improve: learning and prevention. Reporting looks backwards. It shows us where previous conversations fell short. From that we can learn how to improve the next thousand interactions based on the last thousand. Prevention on the other hand looks at the interaction itself and catches gaps before they become closed tickets, repeat contacts or customer complaints. Proactive recommendations, real time reporting and insights, and looking for known gaps. The goal is not simply to handle more conversations. It is to resolve every interaction well, using what we learn from the past to improve the next one and using automation to prevent avoidable gaps as they happen. And if we want to measure, we need to review both the automated work done by AI Agents, and the unique work done by people. # Evaluating AI Agent performance Across the platform there's a series of tools that help you measure how well your AI Agents are handling conversations and where your resolution rates are coming from. ## Resolution outcomes ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Demo-1-3.png) The starting point is the [AI Agent reporting dashboard](https://support.zendesk.com/hc/en-us/articles/9510024609178-Analyzing-AI-agent-performance-with-the-reporting-dashboard?ref=internalnote.com). It shows the number of conversations handled by your AI Agents and breaks them down into unassisted conversations, assisted escalations and automated resolutions. Unassisted conversations are interactions where the AI Agent only provided basic system replies and did not perform meaningful automation. Assisted escalations are conversations where the AI Agent did some work before handing the interaction to a human agent. Automated resolutions are divided into different resolution tiers. A contained resolution means the AI Agent handled the interaction to completion without the customer asking for further help. A verified resolution goes a step further: Zendesk's evaluation independently confirms that the interaction successfully resolved the customer's issue. [About automated resolution tiersAutomated resolutionsare the unit of measurement used for calculating and billing your account forAI agentusage. Paying per automated resolution means you pay only for customer requests tha…![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/favicon-72d9b7c5-280b-44ec-803e-895e7328ab63.ico)ZendeskZendesk![](https://support.zendesk.com/static.zdassets.com/logo.png)](https://support.zendesk.com/hc/en-us/articles/9570369117338-About-automated-resolution-tiers?ref=internalnote.com) You can read more about the automated resolution tiers in this support article . These metrics each describe different things. An interaction can be unanswered because the AI Agent had no relevant knowledge or use case. It can be unresolved because the procedure could not complete the requested action, or because the conversation needed a human agent. An escalation is not automatically a failure, but it is a signal that needs investigation. The main *automated resolution rate* is useful, but it is only the beginning. Drill into the results by use case, channel, language and knowledge source. This shows which procedures are generating automated resolutions, which ones regularly end in escalation, and which knowledge sources are helping or hurting performance. This is the same operating logic I described in [Road to Automation](https://internalnote.com/road-to-automation/). Reporting is not just there to prove that automation is working. It helps you decide what to improve next. A high escalation rate may point to a missing use case, poor knowledge, an incomplete procedure or an action that failed part-way through the interaction. [Road to AutomationLast months’ Relate event was all about Zendesk AI and how it can help you improve your CX or EX experiences. One of the key points notes not only in the main keynote, but also in sessions during the event was the concept of automation and automation rates for your tickets.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_color@2x-fb68a7b8-c732-4e3a-9b48-f72e90074b59.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/fb-deviceinfo-3-0e31ae71-2577-4615-8cd4-185ee46832ec.png)](https://internalnote.com/road-to-automation/) ## Conversation quality There is another layer that is just as important: quality. A conversation can be counted as an automated resolution and still contain an incorrect answer, an incomplete process, poor tone or an unnecessary handoff. [Zendesk QA can evaluate AI Agent conversations](https://support.zendesk.com/hc/en-us/articles/7418648293018-Evaluating-the-performance-of-AI-agents-using-Zendesk-QA?ref=internalnote.com) using the same kinds of scorecards used for human agents. Zendesk can automatically identify AI Agents on messaging channels, and you can configure whether each bot is reviewable. With AutoQA enabled, conversations can be scored across categories such as accuracy, tone, policy adherence and escalation behaviour. You can also review conversations manually when you need more context. Use reporting to find the gap and QA to understand the cause. Then update the relevant knowledge, procedure, action or escalation path. # Evaluating human agent performance Human agents need a broader set of metrics because their work is not only about whether a conversation ended in a resolution. You also need to understand how much work is arriving, how efficiently it is being handled, how customers experience the interaction and whether the answer was complete. A human resolution does not always need to be a yes. “We cannot refund this order because it is outside the refund period” can be a valid resolution if the agent explains the reason clearly and there is no remaining action for either side. A ticket however, is not resolved when the agent simply closes it without answering the question or explaining what happens next. ## Workload and efficiency Start with the [Zendesk Support dashboard](https://support.zendesk.com/hc/en-us/articles/4408835846810-Analyzing-your-Support-ticket-activity-and-agent-performance?ref=internalnote.com) in Analytics. It gives you separate views for ticket volume, efficiency, assignee activity, unsolved tickets, backlog and satisfaction. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Demo-3-1.png) The workload view helps you understand how much work is reaching the team and where it is accumulating. Look at tickets created, open and unsolved tickets, backlog trends, assignments and tickets solved by each group or agent. This tells you whether a performance problem is really an agent problem, or whether the team is dealing with a volume spike, poor routing or an uneven distribution of work. The efficiency reports show first reply time, first resolution time, full resolution time, requester wait time and the number of replies required to solve a ticket. For messaging and omnichannel teams, the [Omnichannel agent productivity and queues dashboard](https://support.zendesk.com/hc/en-us/articles/5600291364378-Overview-of-the-omnichannel-agent-productivity-and-queues-dashboard?ref=internalnote.com) also includes average handle time, queue volume and agent capacity. Average handling time is useful, but it should never be treated as a target in isolation. A lower handling time might mean that agents are working efficiently. It might also mean that they are closing tickets too quickly, giving incomplete answers or transferring difficult conversations elsewhere. Pair it with full resolution time, reopen rates, the number of replies, CSAT and QA results. CSAT gives you the customer's perspective. The Satisfaction tab in Explore shows the overall satisfaction score, good and bad ratings, the rated ratio and satisfaction by channel, group, priority or ticket type. Use this to find patterns rather than to judge individual conversations from a single score. A low CSAT score can be caused by an unpopular policy, a delayed delivery or a product problem that the agent cannot fix. ## Quality and sentiment This is where [Zendesk QA](https://support.zendesk.com/hc/en-us/articles/7043701144858-About-dashboards-in-Zendesk-QA?ref=internalnote.com) becomes important again. Manual reviews help you assess complex conversations and provide coaching. AutoQA reviews a much larger sample and can identify recurring issues across the team. The [AutoQA dashboard](https://support.zendesk.com/hc/en-us/articles/9019507481242-Understanding-the-AutoQA-dashboard?ref=internalnote.com) shows quality performance by agent and category, including the Auto Quality Score, modified reviews and root causes such as tone or spelling problems. Sentiment adds another useful signal. Intelligent triage can classify tickets by topic, language and sentiment, while QA can analyse the emotional tone of conversations itself. Use sentiment to identify trends, not as a verdict on an agent. Negative sentiment may reflect a serious underlying issue that the agent handled correctly. A neutral conversation can still contain an inaccurate or incomplete answer. The most useful view combines sentiment with CSAT, QA and resolution data. # Improving future resolutions Once you understand the patterns, use Zendesk's recommendations to decide what to change. Admin Copilot can suggest workflow improvements, macro changes, QA configuration, high-takeover procedures and new AI-generated procedure drafts. Intelligent triage can recommend new topics where your existing topic model has gaps or conflicts. [Introducing Admin Copilot. Keep your Zendesk on target.Zendesk Admin Copilot turns admins from manual configuration hunters into strategic operators. It surfaces account-specific insights, recommends fixes, and helps execute changes with approval, closing the loop between data, AI, and action.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_color@2x-7cd430f6-2c03-42a8-ac7e-919549eeea74.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2026-01-Agentic-7-e0e8a8a2-4d3e-4bc6-90a4-0e6520eb7812.png)](https://internalnote.com/introducing-admin-copilot/) Knowledge Copilot extends this approach into Knowledge admin. It can surface gaps in coverage, freshness and AI readability, and help generate article and procedure drafts from ticket data. Review the generated content carefully before publishing it. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Demo-4-1.png) Finally, check whether agents are actually using the tools you have built for them. The *Zendesk Copilot: Agent productivity dashboard* shows usage and acceptance of auto assist, AI suggestions and generative tools. If a procedure is rarely used, the problem might be discoverability, trust or poor procedure quality. If it is used frequently but does not improve handling time, CSAT or QA scores, it may be saving clicks without improving the resolution itself. This is how reporting improves the next thousand interactions. But reporting is still looking backwards. It tells you what went wrong after the conversation has already ended. # Preventing incomplete resolutions Multi-intent handling helps AI Agents recognise and resolve several questions in the same interaction. This removes one of the most obvious causes of partial resolutions. But recognising multiple intents does not guarantee that every thread is completed. [Multiple intent handling for AI Agents AdvancedZendesk AI Agents now handle multiple intents in a single customer message, resolving each question one by one across both messaging and email. This upgrade reduces failures, avoids unnecessary escalations, and delivers clearer, more complete responses with no setup required.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_color@2x-afc78629-ceeb-4697-b680-64db48eaf26e.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2025-12-WEB-WIDGET-5-685ddc5a-97cc-4d63-b4df-87f31b9f2eff.png)](https://internalnote.com/multiple-intent-handling-for-ai-agents-advanced/) A customer might ask a small question in the middle of a complex interaction. An agent might promise to check something and never return with the answer. A customer might hint at a deeper problem without stating it directly. The main request gets resolved, the ticket is marked Solved, and the unanswered part disappears into the conversation history. Let's imagine a customer that submits one ticket with three questions: > Where is my order? > Does this product exist in orange? > What are your opening hours? The agent answers two of the three and solves the ticket. The customer now has to reach out again, or quietly gives up. Nothing in the standard workflow or product currently flags the gap, we only notice the customer reopening the ticket or complaining after the fact. For an AI Agent, this type of gap often points to missing knowledge, an unknown use case or a procedure that did not complete. Things we'll notice in reporting and can fix structurally. For a human agent, it is usually more indirect: a question was forgotten, a promise was not followed up or the conversation was closed before the customer received a complete answer. Mistakes happen, in the end, we're all humans sitting behind a screen. That is where a **Custom Agent** can act as a safety net. You can build an agent that runs whenever a human agent marks a ticket as Solved. While there is still a window to react before the ticket becomes Closed or the customer has time to complain. That agent then reads the full conversation and checks whether the interaction actually covered everything the customer asked. The Custom Agent should look for both unanswered and unresolved elements like: - Was every question answered? - Was every promised action completed? - If the answer was no, was the reason explained clearly? - Is there a remaining step for the customer or the support team? - Did the customer mention another issue that was never addressed? The role of the Custom Agent is not to reply to the customer or to try and resolve the issue by itself. If it finds a gap, it reopens the ticket and adds an internal note explaining what was missed. It can also suggest a response or next action, so the agent picking up the ticket knows exactly where to continue, but its Agent Copilot and people handling the conversation. ## Building a post-solve audit agent For this tutorial, a Custom Agent reviews every ticket solved by a human agent. It does not need to review [AI Agent tickets](https://internalnote.com/ai-agent-tickets-in-agent-workspace/) because those conversations already have their own reporting and QA flows and are *currently* read only anyhow.. You could also choose to exclude specific groups or use cases if the audit does not make sense for them. The flow is a handoff between two building blocks: An Action Flow that gets triggers, and a Custom Agent that runs the audit logic. ### Custom Agent The Custom Agent has a quite straightforward instruction set: > Take a look at all the `List ticket comments.` > > Analyse the conversation and check if their are open items that are not addressed yet. > If you find open items that are not addressed or answered, list them in an internal note and set the ticket status to open. > > The same goes for items we promised but did not follow-up on or proofed the result. > > For example: > A customer asks about a refund, opening hours and availability. > We only answer the refund and availability questions. This leaves a solved ticket with an open question about opening hours. > Or we tell the customer he's eligible for the refund, but nowhere in the conversation do we address actually refunding them. First we retrieve all comments via a native Zendesk Action and we tell the Custom Agent to analyse the conversation. If every item in the conversation is covered, the Custom Agent exits without changing the ticket. If it finds a gap, it performs two actions: 1. Reopens the ticket. 2. Adds an internal note naming the unanswered question, incomplete resolution or missed commitment. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Custom-Agent-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Custom-Agent-2.png) Reopening the ticket gives the normal routing process another chance to do its job. With [Omnichannel Routing](https://support.zendesk.com/hc/en-us/articles/4828787357210-Managing-your-omnichannel-routing-configuration?ref=internalnote.com) configured to reassign reopened tickets, the ticket can be sent back through the routing queue and assigned to the best available agent. The internal note provides the context, so the new agent does not need to reread the entire conversation to discover what was missed. There is no need for a separate notification to the customer at this point. The Custom Agent is an internal quality check. The assigned agent decides how and when to continue the conversation. ### Action Flow An [Action Flow](https://support.zendesk.com/hc/en-us/articles/8855601898266-Creating-action-flows-to-automate-processes-across-Zendesk-and-external-systems?ref=internalnote.com) watches for a ticket event, such as the status changing to Solved. It does not perform the analysis itself. It simply sends the ticket to a Custom Agent designed for this one job. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Flow-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Flow-2.png) The flow should only run when the status changes to Solved, not every time the ticket is updated. If the agent resolves the ticket again after reviewing the internal note, the Custom Agent can rerun its logic, and hopefully finds a fully resolved conversation this time. That is the whole build: one Action Flow to catch the moment, and one Custom Agent to inspect the conversation and update the ticket when something was missed. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Customer-1-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Customer-3-1.png) ## Working beside the conversation Most of what you hear and read about AI Agents in Zendesk is about agents that talk to customers. They live inside the conversation, answer questions, execute actions and resolve tickets, autonomously or while assisting your team in a Copilot role. This Custom Agent is a different shape. The audit agent never talks to a customer directly. It sits beside the conversation and checks the work after the agent has finished, similar to how QA analyses the quality of your work. That makes it useful for more than forgotten questions. The same pattern can look for a sales intent and create a lead in your Sales CRM. Or it can look for feature requests and automatically add them to your User Voice lists. Having an agent that runs alongside a conversation and looks for specific intents or actions is useful across your entire operation. It is the support equivalent of proofreading an article before a reader finds the spelling mistake. The QA, CSAT and resolution metrics still tell you whether the operation is working. This check gives you a chance to fix one conversation before it becomes part of those metrics. It's just one example of how you can leverage Custom Agents to improve your customer and employee service experience in more ways than just answering the customer directly. # Closing the Resolution Loop Custom Agents add a modular layer to the Resolution Platform. They can reason over conversation context, use knowledge and actions, call other agents, inspect attachments and update tickets. More importantly, they let you extract one piece of business logic from a large process and reuse it wherever it is needed. They are one part of the wider learning loop. [Admin Copilot](https://internalnote.com/introducing-admin-copilot/) turns account activity into insights and recommendations, then helps admins apply the right fixes. [Knowledge Copilot](https://internalnote.com/knowledge-connectors/) does the same for the knowledge base by surfacing gaps in coverage, freshness and AI readability, and helping create the articles and procedures needed to close them. At Relate 2026, Zendesk showed where the analytics side is heading with [Agentic Analytics and Analyst Copilot](https://internalnote.com/zendesk-relate-2026-proactive-copilots/). The idea is to move beyond manually interpreting separate reports and make it easier to ask why a metric changed, understand the causes and decide what to do next. Reporting helps us learn from the previous thousand interactions. Custom Agents help prevent drops and gaps in the next one. Copilots turn those signals into fixes, while Agentic Analytics will make the learning loop easier to explore. The goal remains the same throughout: resolve every interaction well, then use what happened to make the next resolution better. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### Building more powerful and connected Action Flows URL: https://internalnote.com/more-powerful-action-flows/ Last updated: 2026-08-31T11:36:58.000Z Not every resolution can be handled with knowledge alone. The first stage of automated service focused heavily on answers. Give an AI Agent access to accurate content and it can explain a policy, answer a product question or guide a customer through troubleshooting. But higher levels of [automated resolution](https://internalnote.com/tag/resolution-path/) require the system to do more than just answer. It needs to gather customer-specific context. It needs to follow business logic and make decisions. And it needs to execute the outcome by changing an order, updating a record, creating a task, requesting approval or notifying another team. A refund is your typical use case for any AI Agent demo. Knowledge can explain the refund policy, but resolving the request requires a process and the ability to actually *do* something. Identify the customer. Retrieve the order. Check the order date and payment method. Decide whether the customer is eligible. Execute the refund. Update the ticket and tell the customer what happened. Procedures structure that conversation flow. Actions perform individual pieces of the work, and Action Flows combine those actions into reusable business processes. These processes and actions are not limited to AI Agents. Agent Copilot can propose the same actions to a human agent, requiring their approval before anything happens. Action Flows can also run automatically when tickets, users or custom objects change, or execute on a schedule alongside customer conversations. Custom Agents can use them to run specialised business processes in the background. The same Action Flow might therefore be invoked by an AI Agent during a conversation, approved by a human agent through Copilot, or executed automatically when something changes on a ticket. [Action Platform. The new way of automating ZendeskA guide to Zendesk’s shift toward the Action Platform, showing how defaults stay in triggers while routing, integrations, and workflow logic move into Action Builder and Custom Actions.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_color@2x-5664bb9d-137f-447e-9b7f-912cb431a9c0.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2026-01-Agentic-3-a2da2178-1255-48f3-a41a-87916e2a7ab3.png)](https://internalnote.com/automating-with-action-platform/) My previous article covers how Action Builder, Custom Actions and Custom Agents fit together, and which types of automation should move away from triggers and webhooks. Over the summer, Zendesk has invested heavily in their Action Platform. Action Flows can now store variables, transform data with JavaScript, loop across results and handle failures per step. A new Connections experience makes integrations easier to discover and manage. The MCP Client is generally available. Native and partner-built connectors extend execution across more of the applications your company uses. ## Usage ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Usage.png) All these automation capabilities have become more accessible too. Native Zendesk actions no [longer consume action credits](https://support.zendesk.com/hc/en-us/articles/11111726294938-Announcing-an-update-to-action-credits-for-native-Zendesk-actions?ref=internalnote.com). Neither do Action Flow triggers, flow-control and utility steps, test runs, IT asset actions, or native actions invoked by AI Agents and Copilot. Action credits are now reserved for third-party connectors and Custom Actions. This means you can build multi-step processes across Zendesk tickets, users, organisations, custom objects, assets, tasks and approvals without worrying about credits for every step. Your Action credits will only be used where the workflow reaches outside Zendesk. Together, these releases make it easier and more affordable to move from answering questions towards running the processes that resolve them. # Updates to Action Flows An Action Flow combines multiple steps into one reusable process. Each step is small and specific. Retrieve an order. Transform a response. Check a condition. Update a ticket. Notify another team. The flow links those individual steps together and defines the order in which they should run. The first version of Action Builder was good at chaining actions and branches. That covers plenty of workflows, but real business processes rarely stay on one clean path. APIs return lists instead of single records. Data arrives in the wrong format. A result discovered halfway through the process needs to be remembered later. External platforms fail. Variables, custom code, logical loops and step-level error handling give Action Flows more control over those situations. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Action-Platform-Small.png) ## Variables When a customer contacts your support team, the conversation often only contains part of the context. You need to know about their order, booking, subscription. Knowing whether a customer has an open order could meaningfully change the interaction. It could prevent an agent from asking for information Zendesk can retrieve itself. It could influence routing or priority. It could help Copilot recommend the right next step before the agent even opens the order platform. For the purpose in this article, this is the context I want to each new release, with the goal of updating a newly created ticket with: > Does this customer currently have an open order? The order platform can return several orders for the customer that each have their own status, ranging from pending to shipped, delivered or cancelled. But what we actually care about as context is, just a simple answer: does the customer have an open order or not. Or, if you're in a travel context, does the customer have an upcoming flight in the next 24 hours? In order to know that answer, we need to go over each order and check its status. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Custom-Variable-1.png) We start the flow by creating a custom variable called `open_order` of type boolean. The flow then retrieves and checks the customer’s orders. If it finds an open one, it changes the variable to `true`. Once every order has been checked, later steps can use the final value. Instead of using the complete order response through the rest of the workflow, the flow creates that one useful piece of context that another branch, action or procedure can understand. Variables can also retain page numbers, count processed records or carry a value across different branches. They give the flow its own state, rather than limiting it to whatever the previous action returned. Zendesk explains how to create and update variables in its guide to [creating Action Flows](https://support.zendesk.com/hc/en-us/articles/8855601898266-Creating-action-flows-to-automate-processes-across-Zendesk-and-external-systems?ref=internalnote.com). ## Custom code The next problem is the order API itself. APIs return data in the format that suits the platform providing it. An order response might contain customer details, payment metadata, line items, pagination information and internal identifiers. Our flow only needs a clean list of orders and their statuses. A custom JavaScript step lets us transform the response inside the Action Flow. The code receives the output of an earlier action, processes it and returns a set of defined outputs for later steps. It can extract values, change data types, map internal identifiers to readable labels or restructure a response so another flow step can use it. For this demo, the Custom Action returns the raw order data: ```json { "orders": [ {"delivered":true,"order_id":"ORD1234","order_status":"confirmed"}, {"delivered":true,"order_id":"ORD5678","order_status":"pending"}, {"delivered":true,"order_id":"ORD2468","order_status":"cancelled"} ] } ``` The custom code step takes that response and extracts the information required by the loop: ```javascript module.exports = (inputs) => { const orders = JSON.parse(inputs.orders); const orderStatuses = orders.map(order => order.order_status); return { orders_array: orderStatuses, open_order: true }; }; ``` The result is a smaller and more predictable output: ```json { "open_order": true, "orders_array": [ "confirmed", "pending", "cancelled" ] } ``` The Custom Action and Custom Code step have separate jobs. The Custom Action connects to the order platform and retrieves the data. The JavaScript Custom Code step cleans up that data. The rest of the Action Flow decides what to do with it. Custom code cannot make network requests or import external libraries. Connections to other systems still belong in Custom Actions, native connectors or MCP tools. The code step is the transformation layer between those integrations and the rest of the workflow. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Custom-Action-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Custom-Code.png) Zendesk documents the supported inputs, outputs and JavaScript restrictions in [Using custom code steps in Action Flows](https://support.zendesk.com/hc/en-us/articles/9853782610970-Using-custom-code-steps-in-action-flows?ref=internalnote.com). ULTIMATE - AI AGENTS ADVANCED If you're used to using API integrations in AI Agents Advanced, you've probably used JSONata in the past to transform the data returned from API calls. Action Flows uses Custom Actions and Custom Code steps to accomplish the exact same thing. But by using Javascript instead of JSONata, you can do more powerful transformations, with a more familiar language. ## Logical loops Once the API response has been cleaned up, the flow needs to check every returned order. Action Builder offers two looping patterns. - **Repeat for each** runs the same steps for every item in a list. In this example, every order enters the loop and its status is checked. - **Repeat while** continues running a group of steps while a condition remains true. This is useful for scenarios such as pagination, where the flow keeps requesting another page until the external system reports there are no more results. My demo uses *Repeat for each* and it runs against the output of the Custom Code step. Inside the loop, a branch checks the status of the each order. If the order is *pending*, the flow updates the custoo variable `open_order` to true. After the loop completes, the variable contains the answer for the entire order list, either the default `false`, or `true` if at least one order was pending.. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Loop-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Loop-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Loop-3.png) 💡 ****A current limitation** In the current builder, an **Update custom variable* step cannot set freely entered text. It can only reference an output from an earlier action or step. For that reason, my Custom Code step also returns a `open_order` output with the value `true`. When the loop finds an open order, the flow updates the variable by referencing that existing output, thus setting it to true. This is a minor workaround, but it also shows why code, variables and loops need to work together. The code prepares the values. The loop inspects each record. The variable keeps the result after the loop has finished. Loops also open up broader background processes. A scheduled flow could retrieve expiring contracts and create a renewal ticket for each customer. An incident flow could retrieve affected services and update every related problem ticket. An onboarding flow could create a set of tasks for each new employee. At the time of writing, Zendesk’s [Action Flow documentation](https://support.zendesk.com/hc/en-us/articles/8855601898266-Creating-action-flows-to-automate-processes-across-Zendesk-and-external-systems?ref=internalnote.com) marks Repeat for each and Repeat while as ITAM-only. Check their availability in your account before building around them. ## Error handling A human agent has options when an external system fails. They can try again, refresh the page, leave a note or ask someone else for help. An AI Agent or Action Flow can only do what it has been instructed to do. A reliable process thus also needs instructions for what should happen when an action does not work. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Error-Handling.png) Error handling can now be configured on each step in an Action Flow. When an action fails, the flow can retry it and then follow one of three paths: - Stop the flow. - Continue with the next step. - Follow a separate error branch. The correct behaviour depends on the role that action plays. - If a Slack notification fails after the main work is complete, the flow can probably continue, or we can branch to error flow that uses a Gmail connection to notify the team via email. - If an enrichment lookup fails, the flow might just stop, and the agent looking at the ticket needs to manually lookup the user in the CRM. - If the flow cannot retrieve the order data required for its decision, it should move to an error branch and probably escalate. Continuing would mean acting without the context the process depends on. Error paths can also use the returned HTTP status, error message and response body. A flow can therefore distinguish between a missing record, invalid input, temporary outage and rate limit, then respond appropriately. ## Let’s make this real Feature lists only explain so much. For me, the easiest way to understand what a new platform capability adds is to build a small process that needs it. For this article I wanted to enrich a ticket with order context before someone starts working on it. Throughout these article I've shown how these new additions to Zendesk Actions make such a flow possible. The customer’s open orders live in an external order platform. The ticket only contains the customer’s email address. An agent could open the order platform, search for the customer and inspect the returned orders manually, but that is exactly the kind of repetitive lookup an Action Flow should handle. We ended our flow with a loop across all orders, updating the `open_order` variable to true if we found a Pending order. Once the loop has processed every order, the flow checks the final value. If `open_order` is true, a Zendesk Action adds an internal note: > This customer currently has an open order. If it remains false, the flow ends without changing the ticket. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Demo-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Demo-2.png) The internal note updates that status for the agent, but it is not the only possible outcome. The same result could set a ticket field, update priority, affect routing, influence a Copilot suggestion or be returned to an AI Agent procedure. What the flow has produced is one useful piece of customer context. The procedure or person using that context does not need to understand the order API, raw JSON, loop or retry configuration. It only needs the answer. And if the order platform changes, the integration and transformation logic can be updated in this one flow rather than in every procedure that needs order information. That is the kind of work worth extracting into Action Flows. Small pieces of business logic, built once and reused wherever Zendesk needs them. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Demo-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Demo-4.png) # Connections An Action Flow can structure work inside Zendesk, but it will need access to other systems to execute that work and make things happen across your company. Connectors make capabilities from those external platforms available as actions inside Zendesk. Zendesk has now moved connection management into its own area under **Apps and integrations > Connections** in Admin Center. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Connectors-1.png) From this page, an admin can browse the connector library, connect an MCP server or create a custom connection for an API-based Custom Action. This separates two jobs that used to be mixed together: The Connections page manages which systems Zendesk can access and how that access is authorised. And Action Builder that defines what should happen with those systems once they are connected. Zendesk has three main ways to add external actions: - Prebuilt connectors for supported platforms. - MCP connections that discover tools exposed by an MCP server. - Custom Actions for platforms that expose an API but do not have a packaged connector. Custom connections remain the flexible option. If a platform has an API but does not offer a Zendesk connector or MCP server, you can store its authentication in Connections and define the required API calls as Custom Actions. This is the route used by the order lookup in my demo. One connection stores access to the order platform. The Custom Action defines the request that retrieves the orders. The Action Flow decides how to process the response. Zendesk explains the centralised experience in [Managing connections to external services](https://support.zendesk.com/hc/en-us/articles/5174239310746-Managing-connections-to-external-services?ref=internalnote.com). ## Connections in one place Connectors used to be hidden inside the products that needed them. Action Builder exposed connections while building a flow, listing them in the same ling list as MCP servers and Custom connections. There was no central place to see which systems were connected to Zendesk, and new or available connectors were difficult to discover unless you already knew where to look. The new Connections experience includes a library where admins can browse every connector available to their account. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Connectors-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Connectors-2.png) Each connector has a logo, description, builder name and Connect button. Connectors that have already been configured link to their existing connection. Search on both the connections place and in the Action Flow sidebar makes the growing list easier to navigate. And Zendesk keeps expanding that list. Recent additions include ServiceNow, monday.com, Microsoft Planner, Azure DevOps, Dynamics 365 Sales, Dynamics 365 Business Central, HiBob, New Relic and Snowflake. Added to an already powerful list of capabilities that OneDrive, SharePoint, incident.io, Linear, Asana and Claude. The [Zendesk Marketplace also has a dedicated Action Flow connector section](https://support.zendesk.com/hc/en-us/articles/11072724952474-Announcing-action-flow-connectors-are-now-available-on-the-Zendesk-Marketplace?ref=internalnote.com), making these integrations easier to discover before you start building a flow. ## MCP Client support now generally available Custom Actions work well when you have a specific API endpoint you want to use. You define the request, provide its inputs and describe the output Zendesk should retain. One action retrieves an order. Another cancels it. A third gets its delivery status. But every new capability requires another API integration. And as the number of procedures and automated use cases grows, so does the list of endpoints you need to configure and maintain. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/04Lucy_06_MCPLLM_25.png) MCP changes that model. An MCP server publishes a catalogue of tools and describes how each one should be called. Zendesk’s MCP Client connects to the server, discovers the available tools and lets an admin choose which ones should be exposed in Action Flows. One connection can therefore add an entire set of capabilities. A Stripe MCP server could expose actions for customers, payments and disputes. An Asana server could provide tools for finding, creating and updating tasks. A private MCP server could give Zendesk governed access to your company’s own order, subscription or warehouse platform. The external platform describes its tools once, and any compatible MCP Client can use them. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/MCP-1.png) This does not make the underlying APIs disappear. Someone still needs to build and maintain the MCP server. But the Zendesk admin no longer needs to recreate every individual endpoint as a separate Custom Action. Once a server is connected, its selected tools join the other actions available in Action Builder. Their outputs can feed branches, loops and code steps, and each action can use the same retry and error-handling options as the rest of the flows. If you currently connect to your tools via Custom Actions, I highly recommend checking if that platform is supported via MCP. This way you can replace a dozen custom connectors with one single, always up to date, set of actions. ## A new opportunity for Marketplace partners Historically, Marketplace apps were designed around a human agent. They added customer context to the ticket sidebar, presented a custom interface or gave agents buttons to perform actions in another platform. Many apps also installed triggers and webhooks to send ticket updates to an external service or run work in the background. This model works when a human agent is at the centre of the process. But an AI Agent does not need a sidebar. It cannot open an app, read the information and click a button. It needs direct access to the capability behind that interface. Action Flow connectors give partners a new way to provide that access. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Marketplace-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Marketplace-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/08/Marketplace-4.png) Instead of exposing their value only through a ticket app, partners can make their platform’s capabilities available as reusable Action Builder steps. Each action can accept structured inputs, return outputs and participate in the rest of the workflow. A retail partner could expose actions to retrieve an order, validate eligibility, create a return and generate a shipping label. A finance partner could provide actions to check a payment, request approval and issue a refund. A workforce management partner could expose scheduling, availability and shift actions. Those actions can then be used by flows triggered from tickets, users or schedules. They can be invoked by Agent Copilot, AI Agents and Custom Agents. They can run before a human touches the ticket or as part of a fully autonomous resolution. This is a much deeper form of integration. The partner is no longer only adding an interface beside Zendesk. Its capabilities become part of the processes running inside Zendesk. It also changes how partners should think about their Marketplace strategy. The question used to be: > What information and controls should we put in front of an agent? The new question is: > Which parts of our platform should Zendesk’s agents and workflows be able to execute? The strongest partner integrations will probably offer both. A clear interface for the work that requires human review, and a catalogue of granular actions for the work that can be automated. The first partner-built Action Flow connector comes from SweetHawk, with more partner options expected as the Marketplace category expands. As service moves from human-driven ticket handling towards automated resolution, the value of an integration increasingly sits in the action behind the button, not only in the interface around it. # Conclusion Zendesk continues to invest in both sides of its execution layer. Action Flows are becoming more powerful. Variables, code, loops and error paths let them retain state, transform responses, process lists and define what should happen when a step fails. At the same time, the connection library, MCP Client and partner ecosystem give those flows access to more of the systems where the work happens. The new Connections page brings those integrations into one discoverable and manageable place. And with native Zendesk actions no longer consuming action credits, you can build as many steps as the process needs inside Zendesk. Credits are reserved for the third-party and custom actions that extend the workflow beyond the platform. > More capable flows. More connectivity. Fewer limits on automating the work inside Zendesk. This creates an opportunity to pull more of your automation logic into the platform, running alongside the tickets, users, objects, agents and procedures that depend on it. So, let’s use it. Look at the workflows you currently run in an Azure Function, Cloudflare Worker, Make or Zapier. If a workflow starts with a Zendesk event, calls an API, transforms the response and updates something in Zendesk, it may now be a good candidate for an Action Flow. If you have not built an Action Flow yet, browse the connector library and connect one platform your team already uses. Find one manual handoff between Zendesk and that platform, then automate it. And if you use AI Agents Advanced, take one of your existing API integrations that combines an API request with JSONata. Rebuild it as a proper Action Flow, add error handling and make that same process reusable by AI Agents,, while also making it available to Agent Copilot and the rest of the platform. Start with one process. Bring its logic into Zendesk. Connect it to the systems it needs. Then make it available wherever that work needs to happen. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### Introducing Lisbon. A Conversational Experience for the Zendesk Help Center URL: https://internalnote.com/introducing-lisbon/ Last updated: 2026-07-29T09:31:55.000Z Let's rewind the clock a decade or two. Customer Care at that moment was fairly simple. Customers reached out over email, and an agent replied back to them with an answer. This meant that your customer support workload was equal to the amount of incoming emails. Deflection, or self-service was *the* strategy applied by most companies to reduce that inflow of emails. The Help Center was created as a centralised place to find answers to most common questions. And web forms enabled to turn those incoming questions in a more structured format, capturing context before the question reached an agent. Both solutions were a sign of their times. The Help Center mirrored the search paradigm popularised by Google. You search, and the result was a list of relevant links. Each link then opened an article that, hopefully contained an answer to the customer's question. Forms were basically a more structured entry point on top of the email channel. It offered companies a way to ask for the information they needed, preventing those first back-and-forth emails to get the context. Which hopefully meant they could reach that magical goal of a one touch ticket, answered with a single reply. This setup of a Help Center, search and web forms was the standard for up to around 2020, and the main focus of Zendesk's Self Service strategy at the time. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Classic-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Classic-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Classic-4.png) The support experience in most companies up to 2020 And while this strategy was successful, there are two big shifts that happened in the last few years that made this classic approach less impactful than it used to be. # Rethinking the Help Center Experience. If we look at how support is evolving we see three big trends. For one, customers are getting used to conversations instead of email. They chat with AI tools, and messaging channels are quickly becoming more popular than classic email. Secondly, customers are getting used to specific and personalised answers generated for them, instead of a general answer that applies to everyone, hidden somewhere in support articles. And thirdly, when machines take over from humans, knowing who and what to trust becomes even more important. ## Shift 1: Conversations instead of tickets. Around the 2010s social channels were at the top of their game. Plenty of companies started leveraging Facebook Messenger, WhatsApp, WeChat as potential support channels, building on top of the success they saw with offering live chat on their website. These kinds of conversational support channels offered benefits that email couldn't offer. Since the conversation was live, customers could get help here and now. Getting context, working around misunderstandings and guiding the customer towards a resolution became easier than ever. However, these channels had a downside. If customers went to Facebook Messenger for support, they did not go to the Help Center or Google. So in order to keep that deflection rate up and offer proper self-service, chatbots and AI Agents were needed. They took the same knowledge the Help Center offered, but turned it into generative replies. This meant that the central role of the Help Center as the hub were support happened, diminished. The content of that Help Center however was more important than ever, and allows for automated support at scale. ## Shift 2: Personalised, instead of generic support The second shift happened thanks to those AI capabilities. Instead of offering customers generic answers in the form of long articles to read, AI offers them personalised answers specifically generated for their question and context. And as customers became familiar with this new experience across Google search, ChatGPT, the experience of the Help Center with its list of links all of the sudden felt very old. Why would a customer read the entire contents of an article, if an AI Agent or LLM-based search offered the answer quicker? That's where Zendesk's Quick Answer offered a solution. When a customer searches your Help Center they no longer see *just* the list of articles, but get a generated answer specific for their question instead, followed by the familiar list of articles. On top of that, if they need further clarification, that answer and their next question can get passed to an AI Agent who takes over and handles the question. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Copenhagen-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Copenhagen-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Copenhagen-3.png) A modern Zendesk Help Center powered by AI And while this experience turns a classic Help Center into an AI-powered experience, it still has some friction. For example, once the customer needs more help, the entire conversation is pushed into a tiny web widget window, ignoring the rest of the space the website offers. Secondly, their previous support interactions are all hidden in that widget, which makes them tricky to discover. ## Shift 3: Trust And thirdly, in a world of AI and hallucinations, trust is important. If you want to be sure the answer you get is correct, getting it from the actual company you need an answer from is the best way. So while a generated answer on Google Search is nice, a generated answer on your company's support page is still more trustworthy for your customer. # Lisbon Combining these three trends of conversations, generative answers and trust, and we get a whole new support experience that's not based on tickets, articles and forms, but rather on generative answers provided by AI Agents within conversations. Over the last year, Zendesk has been thinking about those exact same lines. And this month we got the outcome of that process: **Lisbon**. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Lisbon-3.png) Lisbon is a completely rethought experience for the Zendesk Help Center based on those exact criteria. It's a Zendesk Help Center that focused on conversational experience first, where AI agents provide answers for customers right within your Help Center. **It's currently in EAP, freely available for every customer to test.** [Announcing the conversational help center (EAP)Announced on Rollout starts Rollout ends July 16, 2026 July 16, 2026 July 22, 2026 We’re excited to announce an Early Access Program (EAP) for the conversational help center experience, delivere…![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/favicon-c021a4cd-829f-4a2c-be83-517d87c8c119.ico)Zendesk help![](https://support.zendesk.com/static.zdassets.com/logo.png)](https://support.zendesk.com/hc/en-us/articles/11007001237274-Announcing-the-conversational-help-center-EAP?ref=internalnote.com) So what's new in Lisbon? Let's dive in. ## Search Experience The first change lies in the way Search is handled. It no longer shows you the classic list of articles and Quick Answer on top. Instead the entire UI is replaced with a conversational experience similar to what you'd get when using ChatGPT or Claude. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Lisbon---Live-2-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Lisbon---Live-3-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Lisbon---Live-4-1.png) The first answer is provided by Zendesk's [generative search](https://support.zendesk.com/hc/en-us/articles/8888178335898-Using-generative-search-to-provide-AI-powered-answers-to-search-queries?ref=internalnote.com) feature. If the customer asks a follow up question the entire conversation is passed to your AI Agent. It will then take that input, together with the already provided first answer, and take over the conversation up to resolution. This AI Agent can leverage its knowledge sources, use cases with procedures and if needed escalate in order to resolve the conversation. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Customer-Lifecycle-1.png) What's important to note is that these are Messaging conversations, and behave exactly as they used to. Guest users are created as new users in Zendesk, and logged in users get their conversations assigned to their history. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Sidebar.png) That history is reachable via the new sidebar, showing the list of conversations just like the web widget would. And speaking of the web widget, that widget is nowhere to be seen on the new Lisbon theme. What's actually happening is that this entire experience is powered by the widget in the new embedded mode! [Embedded mode for the Zendesk WidgetEmbeddable mode transforms the Zendesk Widget from a fixed overlay into a flexible, fully integrated component. You can embed it anywhere, split it into separate components, customise its UI, trigger conversations programmatically, and match it to your product’s layout and design.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_color@2x-d9314925-7ea8-4570-ae39-1ed9f8421a1c.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2025-12-WEB-WIDGET-1-4373fcba-72af-47a4-81ba-bda3424019e3.png)](https://internalnote.com/embeddable-zendesk-widget/) So all these releases of the last few months, Generative Search, the more powerful web widget customisations, the automatic sign-in of Help Center users into the web widget all combine into a brand new support experience on the Help Center. ## Theming and branding The new Lisbon theme offers a list of customisation options that will allow it to nicely fit into your branding. You can add your logo, set the background gradient to match your brands' colors, and add an banner image below the search bar. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Lisbon-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Lisbon-2.png) Additionally you can change the placeholder text for search and enable/disable the new dynamic welcome message, which moves from good morning to good evening and good night! ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Custom-Brand.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Custom-Brand-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Custom-Brand-3.png) There's also a new Featured banner which allows you to add text and an action button to your banner image. ## Alert banner At the top of the Help Center you can add a Alert banner. This is a customisation feature that many customers build via custom coding in their themes, so it's nice to see this is now natively available. These banners are useful to alert customers of issues, or inform them about new capabilities, or announce scheduled downtime. And the more you inform customers proactively this way, the less support requests you'll get for those topics! ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Alert-1.png) The banner can have a title, message, link, and can be set to one of four types: info, warning, error, and success. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Alert-2.png) Customers can dismiss the banner, but any time you add a new alert with different text, it'll reappear for all customers. ## Dark Mode The Help Center now offers support for Dark Mode right out of the box. Customers can choose to follow the system appearance, or pick light or dark mode as the default. The theme will apply the brand color as a gradient on a dark background, and will dim or invert other colors smartly. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Default---Dark-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Default---Dark-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Dark-Mode.png) And that same dark mode is nicely translated to Mobile too: ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/iOS-1.png) ## Mobile version Speaking of mobile, the entire Lisbon theme adapts to mobile browsers, giving customers that same conversational experience on the go. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/iOS-2.png) And honestly, I think the theme comes to its own even better on mobile. Chatting and sending quick messages has always felt more natural on phones, and the way search and articles nicely blend into conversations on mobile is just great. # Under the hood Lisbon is built on top of existing Zendesk features and releases, deeply integrating the Help Center into the web widget, AI Agents and messaging experience. And while the theme itself is not (yet) editable for end-users who install the EAP, I do want to highlight some of the ways Zendesk has built out this team. Note that all code is sample code and not a copy of the actual implementation. For starters the entire experience is powered by the Zendesk Web Widget, leveraging is embeddable mode and new styling options. First, it renders the conversation in [embedded mode](https://internalnote.com/embeddable-zendesk-widget/) with the Conversation List and Conversation placed in two separated containers: ```javascript zE("messenger", "render", { mode: "embedded", conversationList: { targetElement: "#conversations-list-container" }, messageLog: { targetElement: "#chat-message-log" } }) ``` It then uses the Theme Customisation options to hide a lot of the Zendesk UI, leveraging the new [minimalistic render mode](https://developer.zendesk.com/api-reference/widget-messaging/web/core/?ref=internalnote.com#set-customization) that removes a lot of the chat UI we're used from in the widget. ```javascript zE("messenger:set", "customization", { common: { hideHeader: ttue, stylingPreset: "minimalistic" }, conversationList: { hideNewConversationButton: true, avatar: { hidden: true, }, hideTimestamp: true, hideMessagePreview: true, hideDivider: true, }, messageLog: { businessMessage: { hideBubble: true }, } }) ``` If the customer does not interact further, the question is logged and shows up in Analytics as part of the Knowledge dashboard. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Ratings.png) However, if the customer asks a follow up question, we pass control from generative search to the AI Agent, leveraging the `newConversation()` API for the Web Widget. It passing in the original search query and answer generated by the Help Center, as context, and marks it as such with a custom `metadata` value. ```javascript zE("messenger","newConversation", { message: { content: { type: "text", text: "I asked "How do I brew coffee?" in search and received this answer: 1. Preheat your coffee machine. 2. Weigh 18g coffee beans, then grind to the right consistency. 3. Add grounds to the portafilter and tamp evenly. 4. Insert portafilter; pre-infuse with a little water. 5. Pull the shot: ~30 seconds, aiming ~27g extracted. 6. Remove portafilter and discard grounds.. I have this follow-up question: I wanted to brew espresso." }, metadata: { follow_up_context: true } } } ) ``` Once an AI Agent takes over, the question actually turns into a Messaging Conversation, and the rest of the conversation is handled just like any other one. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/AIAA.png) The theme does use a bit of magic to hide that first message from the end-user whenever a conversation is escalated. This way the conversation feels more natural and the experience more integrated. It does this by leveraging the [new](https://developer.zendesk.com/api-reference/widget-messaging/web/core/?ref=internalnote.com#set-delegate---before-message-display) `beforeMessageDisplay()` . ```javascript zE("messenger:set", "beforeMessageDisplay", function (message) { if (message.metadata?.follow_up_context === true) { return null; // Returning null hides the message } // If it's not metadata, show the original message return message }) ``` # Limitations and removals The new Conversational Experience for the Help Center rethinks a lot of old paradigms. We already discussed the shift from search to conversations at length, but there's some other things that have changed as a consequence. The biggest? There is no more forms. Since the entire experience is now based around conversations, traditional forms are gone. Instead you can [leverage](https://internalnote.com/messaging-metadata/) your AI Agent to gather context, show input fields or carousels to get the information you need before a user submits their requests. The removal of forms might feel like big change. And it is. But when you look at it from an AI Agent perspective, it's natural. Conversations are way better at resolving a conversation end to end, while forms are more useful for tickets that humans handle. So when we shift from human-first to autonomous AI Agents, it's a logical consequence. But it will require you to move your forms to AI Agents first, before you adopt this conversation first approach. Since this is still in Early Access, there's some things that are not available for now: - No ending sessions or downloading transcripts, since those are in the header that is hidden. - No support (yet) for editing the theme's source code, which also means you can't use Custom Page templates. Mostly because Lisbon is still in EAP and things will change, and updating a custom theme automatically is not possible. - The sidebar currently shows two Zendesk notices. One is part of the theme, the second one is part of the Web Widget, and can be disabled via *Admin Center > Channels > Messaging > Web Widget*. - No support *yet* for Employee Service features like the Service Catalog or Approvals. - No Gather/Community support. What is still available is the classic Requests page. And while most end-users will not really need this anymore if most interactions are launched over Messaging, for those that do email, or for follow-up over email for voice tickets, you do need this list to get access to tickets. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Requests-1.png) # A vision of the future Lisbon is a radical shift away from the classic Zendesk Help Center. It builds on top of a messaging first experience, leveraging generative search and AI Agents to rethink the way end-users get support on a surface that you control. As customers move away from webpages towards LLM tools like Gemini, Claude or ChatGPT, and as we all get used to generated answers and agents acting on our behalf, the classic Help Center is an interface paradigm that's swiftly moving away. Lisbon still offers a way to read long form. And if you look at this blog, I'm glad it still does. Long form allows you to give depth and detail that no summary can ever give you. But while some still read all, most people rather want to ask a specific question, and get a short answer with only the details they're looking for. And it's that paradigm that Lisbon is optimised for. End-user asking questions, and getting a resolution either in the form of an answer, or an action taken by the AI Agent. I'd recommend you to install Lisbon in your Zendesk instance today. But don't put it live for your customers. Rather, run it, test it, and see how AI ready your support experience really is. Find gaps in your knowledge, test complex procedures. Validate that customers can sign in, and you get a rich history of their interactions in the side bar. Start moving your web forms into AI Agent use cases that gather that same context while mapping out how you can resolve, rather than escalate those use cases. And then enable it for your customers. And if this entire shift from tickets and forms to messaging and agents feels a bit too big of a shift for you.. well, in the words of Marty McFly: > *"Guess you guys aren't ready for that yet. But your kids are gonna love it."* ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### Leveraging the Automation Potential dashboard in Zendesk URL: https://internalnote.com/automation-potential-dashboard/ Last updated: 2026-07-23T08:11:37.000Z At Zendesk we've been pushing automation in Customer and Employee service forward. With AI Agents running your conversations autonomously, Copilots assisting your agents and admins, or the new Custom Agents running specialised processes alongside conversations. These agents run across a variety of channels. Most customers start by deploying them on Messaging channels like the web widget, or social channels like Facebook Messenger, WhatsApp or Instagram. Even before modern LLMs, chatbots have always been active on messaging channels. The more powerful reasoning capabilities provided by these modern LLMs have only increased the automation potential of those conversational channels. But there's more than just Messaging. Voice, the *original* support channel, and email are still responsible for a major part of a company's support surface. Traditionally, the automation numbers of those two channels have always lagged behind those of Messaging. For Voice, the reason is the complexity of turning spoken word into something a machine can understand and react to. And it needs to do so while remaining responsive, fast and understandable. Zendesk Voice AI Agents are an answer to that problem, and once they'll move out of EAP, I'll be writing about them in depth on this blog. For email however, the complexity lies in the nature of the content within those emails. Emails are often long and can span multiple topics in one message. And there's a delay between sending and replying that does not exist in live chat making it longer and more complex to automate. However, as trust in AI automation grows and the numbers for Messaging go up, companies want those same capabilities enabled on their email channel too. And now that Zendesk's AI Agents support not only generative knowledge replies but also agentic procedures for email, there's no better time to start than now. # Resolution Learning Loop If you have been following my [Towards Automated Resolutions series](https://internalnote.com/towards-automated-resolutions-designing-automated-resolution-paths-in-zendesk), you know the framing. The Resolution Platform runs on two cycles. There's the Resolve loop that handles interactions: knowledge, procedures, data and actions working together to close a conversation. And then there's the Learning loop. It takes all your conversations and turns them into recommendations that improve the next one: every resolution becomes an input that shows us how to make the next one better. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Resolution-Learning-Loop-1.png) This article will walk through a structured approach to building out email automation based on the signals we get from the Learning Loop. We do that by leveraging Zendesk's Automation Potential Report. We'll go from **no** email automation all the way to your first fully automated use cases. An AI deployment always runs in phases. Step one is validating your existing knowledge coverage so you have a baseline and insight into where you are today. Step two would be fixing gaps and making sure you've got a baseline that's good enough to start. It's important to note that most customers start with these knowledge answers first. And while it's tempting to say "they start with *just* knowledge", a good Help Center and generative replies can make a significant impact on your escalated ticket volume already. And it's exactly this potential impact that the Automation Potential dashboard shows. Once your knowledge is in a good place, you can start thinking about the more complex use cases where process, actions and context play a role in automating interactions. # Governance and control Before we let an AI Agent loose on your conversations, it's important to think about governance and control. You want to be sure the AI Agent is not only doing the right thing, but that it's also acting on the right conversations. Defining those boundaries and guardrails is a key aspect of trusting your AI Agents and scaling your automation setup. Zendesk's AI Agents have built-in secure guardrails to make sure they only use knowledge and instructions as defined in *your* Zendesk instance and never go outside of those boundaries. This way you can be sure that *when* your AI Agent reacts, it does so with information *you* provided. And if the answer is wrong, you know you need to start looking at your indexed knowledge sources, or the way you structured your procedures. Auditing those conversations is done via the Conversation Logs, giving you the exact reasoning and sources behind every answer. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Audot.png) An example conversation in AI Agents' Conversation Logs ## Limiting reach Knowing why and how the agent acted is one side of the coin. But you also need to define when your agent gets triggered, and which conversations can get processed by AI First you need to decide on which channels and for which brands you want to activate your AI Agent. Secondly, you need to decide which use cases the AI Agent should respond to, and which knowledge sources it can use. Within those use cases you can use single sign-on and user context to personalise the response to a specific user segment. And finally, you can use triggers in Zendesk to further narrow down *which* tickets get routed to the AI Agent, excluding specific email addresses or topics entirely. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/core-elements.png) When configuring those limitations it's important to do so in order. Brands and channels are your broadest brushstrokes. They include (or exclude) whole conversation types at a time. Enabling a new brand or channel is a big decision. Rolling out new use cases broadens your coverage and will increase your automation rates. Doing so requires understanding of the use case, but also knowing the data around it. How many times did the question get asked, how big is the impact on CSAT, how *automatable* is it? Context and user information is all about deepening the process and making sure you handle specific paths, and exclude or map failure modes. This is where a lot of iterative improvement happens. At the start you'll probably automate the perfect path and escalate the others, gradually increasing your coverage. The final layer is that of excluding specific conversations from reaching the AI Agent. This can be for legal reasons. It could be to exclude a very specific user segment. Or it might be a team that is, currently, better off without automation, like your privacy or security team. However, since AI Agents run on a use-case-first basis, if you don't build a privacy-related use case, or have no privacy topics in your Knowledge Base, the AI Agent will not handle these tickets and they'll get escalated anyhow. The only reason to **specifically exclude** conversations via triggers would be to *prevent* AI touching the ticket, all other exclusions can be handled with the previous filters. Regardless of your approach, the goal is to gradually and continuously increase your automations over time. By following the above logic, you can make sure that as you expand your coverage with new use cases, there are no triggers in place preventing your use cases from doing their work. # The Automation Potential Dashboard Hidden in Zendesk's Admin Center within the AI Agents section lives the Automation Potential dashboard. It's a weekly updated dashboard that shows you how well your knowledge is performing, and what the impact would be if you made that knowledge available to an AI Agent, for example on the email channel. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Where.png) The dashboard looks at the last 90 days of conversations and tells you how many of those interactions could have been resolved with Knowledge. It then splits out how many of those are already covered within your existing knowledge articles, and what's been answered by your team but not (yet) turned into an article. This is the Learning Loop made visible, before you've even automated your first conversation. Taking information from previous tickets, and turning them into suggested improvements and insights. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/1.-Automation-Potential-top.png) The Automation Potential dashboard serves two purposes. It shows you what you already have available in your Help Center and the impact it could make if you enabled it as a knowledge source for your AI Agent. This is especially useful for customers who have no AI Agent and want to see what the potential immediate impact (and gain) would be by doing so. For existing users of AI Agents and new customers alike, the knowledge gaps show you how to further increase your automation rate by adding new content to your Help Center and filling those gaps. ## Covered by knowledge If you don't have any AI Agents active, the *Covered by knowledge* tab will give you a good insight into what you can expect once you add your Help Center as an AI Agent's knowledge source and enable its Knowledge Replies. Below the headline metrics, the report breaks volume into topic categories, each labelled `high`, `medium` or `low` impact based on their estimated automation rate. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/2.-Automation-Potential-by-topic.png) The *Covered by knowledge* tab shows topics where your Help Center already contains articles an AI Agent could use. Expand a topic and it shows you a list of subtopics. Each subtopic contains a list of sample tickets, and the ability to preview how the AI Agent would answer such a question. The preview shows a Messaging Agent, but the same could apply to an Email Agent. It's important to review the provided samples. If customers reach out over email or messaging, these are the answers they'll get. So if any information in the linked article is wrong, the generated responses will be wrong too. Once reviewed, you've got a pretty good idea of how performant your AI Agent will be on day one. If those numbers look good, you can move forward and start configuring your AI Agent, knowing that it will respond correctly to any question related to these topics. However, if those initial numbers are too low, or if there's not enough covered knowledge, you're better off postponing your initial launch and working on filling gaps first. ## Handling knowledge gaps Knowledge gaps are any type of questions that customers ask about that have no answer in your Knowledge Base. There's two types of gaps. Actual articles missing, and missing use cases. Let's start with the latter. Not all of these questions should or can be handled with a support article though. Some of these are better served with a procedure that acts on behalf of the customer. The AI Agent executing a refund. Changing an address. Modifying a booking. These are all resolved by defining a use case and writing the process down the steps to be taken in a procedure. The second type of gap is one that *could* be answered with a support article but isn't currently. The answer is not written down in a publicly available source, but might live within comments made by your team on older tickets. It's these knowledge gaps and comments that the dashboard lists in its *Knowledge gaps* tab. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/3.-Gaps.png) Its the topics and subtopics where it could find answers in comments provided by your agents. You can again see the impact, or the number of tickets it could be automating if it were an article. Instead of showing you a sample response, it offers to generate an article based on your team's comments. Clicking *Create article* triggers Knowledge Copilot, which will generate a draft article for your Help Center. You can then proofread, edit and publish the article, which makes the content available to your AI Agents. Provided you added your Help Center as a knowledge sources already. ## Knowledge Copilot The Automation Potential dashboard is not the only place where you can find insights and recommendations related to automation. There are also the recommendations made by Knowledge Copilot. Knowledge Copilot and Automation Potential partially cover the same data. But the Automation Potential Report should really be seen as a *starting* point for enabling AI automation. Whereas Knowledge Copilot is useful once you're already using AI Agents and want to continuously improve the quality of your knowledge sources over time. They go hand in hand. As we just saw, when you act on a Knowledge Gap in the report, it actually triggers Knowledge Copilot to generate an article based on that recommendation. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/5.-Knowledge-Copilot-1.png) # Use Cases So far we've focused on the Knowledge recommendations made in the report, using knowledge as the starting point in deploying AI Agents for email. Now it's time to dive into use cases. When an AI Agent uses Knowledge, it basically tries to find an answer to a customer's question. It performs a search on the indexed knowledge sources, gets the article content, and generates an answer based on that. But as we noted earlier, not every question can be answered with Knowledge. Sometimes we need to *do* something. Or sometimes we don't want to generate a response but rather want to ask a few clarifying questions and guide the customer towards a generated or pre-canned response. Use Cases in Zendesk are how you "intercept" a conversation and define how the AI Agent should handle that specific topic. An AI Agent in Zendesk will look at any conversation and will always try to match it to a Use Case first, before using knowledge to answer the question. Small talk is always excluded, and if both options fail, you can define a failure path, which often results in an escalation. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/7.-Procedure-USe-Case.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/7.-Procedure.png) The benefit of Use Cases is that they basically work as an allow-list for the AI Agent. If a topic is covered by a use case you defined, the AI Agent will respond. If not, it won't. In the case of Messaging this means the conversation is escalated. With email the conversation gets assigned to an agent, with no changes made by the AI Agent. You can define Use Cases in the AI Agents dashboard. Each use case gets a Name, and a description that tells the system for which type of requests the use case should be triggered. Use Cases can also be segmented, but more on that below. For each use case you can add a Procedure. [Procedures](https://internalnote.com/whats-new-for-zendesk-ai-agents-advanced/#ai-agent-for-email) allow you to write down your logic, add actions and link to other procedures. The system will take those instructions and generate a visual map that you can use to validate the procedure. ## Use Case Suggestions Use Case suggestions show you potential new areas you can automate with AI Agents. As the AI agents processes conversations, it aggregates the once it can't handle, and tries to combine them into suggestions for new use cases. When you review the dashboard you can decide if this is a relevant topic, and if so accept it. You'd then need to write a procedure on how you want to handle this type of conversation. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/4.-Use-Case-Suggestions.png) ## Segmenting use cases Not every use case should respond to every customer. This is where segments come in, and it's the context and user information layer from our control section in practice. Segments in the AI agents workspace are collections of customers who share common traits. You define them with one or more session parameters and a matching rule: match all conditions, match any, or match none. Those parameters can come from anywhere the AI Agent gets its context. Think of the locale or language of the conversation, a customer type or plan fetched from your CRM via an API integration, or user context passed along through single sign-on. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Segment.png) Once defined, segments let you make sure only the right customers get an automated reply for a specific use case. In a dialogue, segments power conditional blocks that split the flow per customer type. For AI Agents using agentic AI, you can also use segments to tailor search rules, so a given segment only gets answers drawn from the knowledge that applies to them. And within a procedure, that same context lets you define different paths. A standard customer gets the self-serve flow. Your enterprise tier gets an immediate, well-documented escalation. Segments also show up in the conversation logs. You can filter conversations by segment, which makes it easy to validate that a specific customer group is getting the treatment you designed for them. # Activating your AI Agent As we noted in our section about controlling the AI Agent, it all starts with defining for which brands and channels the AI Agent should be activated. For Messaging this is done in Admin Center, where you can choose for which channel an AI Agent should respond. Within the AI Agents dashboard you can then further specify which specific AI Agent should respond by using [routing rules](https://internalnote.com/connecting-ai-agents-essentials-and-advanced-to-channels/#what-about-multiple-ai-agents-advanced). ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/6.-Knowledge-Sources-1.png) For email, things work a little bit differently. Since email is not a Messaging channel, there's no switchboard or first responders like we have with Sunshine Conversations. AI Agents interact with email-based tickets via a trigger. That trigger uses a webhook to post data from Agent Workspace to the AI Agent whenever a ticket is created or updated. The AI Agent in turn uses the Zendesk API to update the ticket with its reply. That setup is a consequence of the way *Ultimate* worked in the past, but over the last year the way this integration works has actually been upgraded significantly. Every AI Agent dashboard is automatically linked to your Agent Workspace, and you can also specify the way the AI Agent shows up in tickets. The default is *system*, making it easy to exclude it from other triggers or assignment rules. But if you want, you can create a dedicated *named* agent in your instance, and the AI Agent will show up as that user on tickets. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Trigger---AI-Agent-1-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Trigger---AI-Agent-2-2.png) Once you enable the trigger, every ticket will be sent to the AI Agent, which will then process the conversation and try to respond with a Use Case or Knowledge Reply. If you have multiple AI Agents in your instance, each one gets its own trigger. You can then tweak each trigger to set specific brands or support emails that AI Agent should respond to. You can thus activate an AI Agent only for specific brands or channels, as noted in the intro of this article. ## Customising the trigger That same trigger is also where you would further limit the number of tickets that reach your AI Agent. However, the more conditions you add to this trigger, the more complex troubleshooting your AI Agent becomes. You might accidentally prevent some ticket updates from reaching your AI Agent mid-conversation. Most customers add the aforementioned brand or support email limitations, but you can add any kind of condition to this trigger, just as you would with any other trigger in Zendesk. - Channels: you can choose to include or exclude only webforms or email channels - Forms: you can include or exclude specific web forms, useful for e.g. excluding requests to teams you know are not part of your automation strategy - Customer segments: you can use user data to exclude e.g. VIP customers, or your B2B segment, or customers who speak a language or live in a region you've not yet enabled in your AI Agent. One more *controversial* type of condition is one that acts upon the content of conversations. You could check for keywords, or specific subjects. But since AI Agents themselves **only** run on use cases or knowledge you made available to them, I personally see no reason why you would add a similar filter to exclude use cases to the trigger. But, if you want to exclude a specific topic temporarily until you've filled all knowledge gaps, or if you are in the process of reviewing and updating content, adding it as a filter to the trigger is perfectly acceptable. # Monitor, then expand In this article we started by looking at the Automation Potential dashboard to see how well your existing knowledge would perform if enabled for an AI Agent. We then took a look at its Knowledge Gaps to see where we can turn existing agent responses into Help Center content and give the AI Agent even more knowledge to respond with. Addressing those two items alone is a good indicator on your AI readiness and ability to enable an AI Agent for email or messaging. Once you're happy with the automation potential number the dashboard shows, you can enable your Help Center as a source for the AI Agent and launch it. But that's not the end. It's actually the start of a process where you will now implement a review rhythm. If you look back at the dashboard a week later, you'll see the numbers go up, and find new gaps to address. Doing the same for Knowledge Copilot recommendations will highlight even more articles to improve or add. Keep this rhythm up and you'll see your AI Automation rate climb week after week. ## Validating your AI Agent's effectiveness The Automation Potential dashboard tells you what could be automated. The dashboards in AI Agents' Reporting tells you what actually is working. It updates hourly, and it's where you validate whether your agents perform the way the report predicted. The Overview tab shows your headline numbers: total conversations, how many the AI Agent understood, and how many ended in an automated resolution. Those resolutions are split into tiers. An **assisted escalation** means the AI Agent contributed before a human agent completed the resolution. A **contained** **resolution** means the AI Agent handled the interaction to completion, without the customer asking for further help. And a **verified** **resolution** means the AI Agent successfully resolved the interaction. That distinction matters. Contained tells you the conversation ended with the AI Agent. Verified tells you it ended well. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/8-Metrics.png) The Contact reasons tab breaks performance down per use case and per knowledge source. For each use case you see total conversations, automated resolutions, escalations and BSAT, and you can click through to a detailed report over time. The Knowledge sources report deserves special attention. An article with high usage but a high escalation rate does not fully answer a customers' question. That's your signal to go update the article. Finally, the Conversation journey tab visualises the paths customers take, from the first use case identified all the way to the end state. Focus on the assisted escalations to find use cases that might benefit from more automation. Focus on the automated resolutions to find your fastest paths to resolution, and replicate that logic across your other use cases. The best way to start with automating those use cases, especially when it comes to email, is to think about context. For any given use case, what is the context a human agent needs before they can get to work? Things like order numbers, refund reasons, photos of a damaged product. Get your AI Agent to collect that info by adding it to a procedure as questions to ask. The AI Agent will handle the information gathering, and your team gets contextually rich tickets they can address with the help of Agent Copilot. And as you start automating actions with Agent Copilot, you can also start thinking about shifting some of those actions to the AI Agent, further automating the entire conversation. That rhythm is the Resolution Learning Loop as an operating practice. Not just a marketing term, but a rhythm that has impact: the report learns from your tickets, you act on what it recommends, the results feed the next report. # Conclusion Email automation does not start with switching something on. It starts with a signal. The Automation Potential Report takes ninety days of your own ticket history and shows you what your knowledge can already resolve, where the gaps are, and which questions need a procedure instead of an article. You launch with knowledge replies where coverage is proven. You close gaps with Knowledge Copilot. You add use cases as the data supports them, and you scope the trigger around the conversations that should stay human. None of that is a one-off project. The report refreshes, the recommendations update, and every resolution feeds the next one. That is the Resolution Learning Loop doing its job. The Automation Potential Report does not tell you to automate everything. It tells you what is ready. You decide when to move. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### New Knowledge Graph Connectors URL: https://internalnote.com/new-knowledge-graph-connectors/ Last updated: 2026-07-17T09:06:44.000Z Zendesk is adding six new [knowledge connectors](https://internalnote.com/knowledge-connectors/): Jira, Contentful, Notion, Amazon S3, Dropbox and Zendesk content from other instances. This and the new support for PDFs expands the available content for AI Agents and Agent Copilot. [https://support.zendesk.com/hc/en-us/articles/10735302080666-PDF-support-for-Knowledge-connectors-EAP](https://support.zendesk.com/hc/en-us/articles/10735302080666-PDF-support-for-Knowledge-connectors-EAP?ref=internalnote.com) ### Combining agentic procedures with embedded templates in AI Agents URL: https://internalnote.com/embedded-templates/ Last updated: 2026-07-14T08:12:01.000Z Conversational AI Agents are designed to handle customer conversations from question to resolution autonomously. They can do this by generating answers based on knowledge sources, or they can follow instructions and handle specific, more complex, use cases with logical flows. A customer might ask "*What's your return window*", and the AI Agent can use a knowledge article to generate an answer: "*You can return unopened items within 14 days*". ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/10.png) But when it comes to resolving complex questions, we need to give the AI Agent instructions on the steps it should follow, and give it the ability to execute actions across systems. It should be able to ask input from the customer, run different logic based on that input, and get or set data in external platforms. In general there are [two ways to approach these instructions](https://internalnote.com/agentic-vs-deterministic-approaches-in-zendesk/). On one side we've got deterministic flows. Hardcoded decision trees that branch based on conditions. The AI Agent follows these to the letter and all outcomes have to be defined in the flow. Any unaccounted option, or unexpected API return can result in a failure. But on the positive side, every outcome is predefined and you can write responses which are presented to the end-user verbatim. These kinds of dialogue flows used to be the default before powerful Agentic AI models became available. Nowadays, AI Agents in Zendesk have shifted towards agentic procedures. Instead of building logic step by step, you *describe* what the AI Agent should do, and the agent uses that to drive the conversation forward. One of the benefits with agentic procedures is that it *understands* the logic behind your instructions. If you tell it to ask for a six-digit order number, it automatically handles failures like customers providing 5-digit numbers, or it can inject a knowledge answer if the customer asks where it can find such number. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/image.png) Since agentic procedures can also adapt to conversations more easily by rerunning previous steps, or skipping steps when the customer already gave that context, they are a better and faster way to deploy your business logic in AI Agents. But just like most things in life, reality is never black and white. If you're building a dialogue flow you might want to make it a bit more dynamic by leveraging Generative Reply blocks that pull from Knowledge Sources or generate a specific reply based on your prompt. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Knowledge.png) And similarly there are scenarios where you want your Agentic Procedure to answer with exact strings of text, instead of generating the answer based on its instructions. Any response that contains a policy, rule ,or other legal text, for example. Or when you want to respond with the exact terms and conditions of a promotion. Specifications for a product or device. Until now, Agentic Procedures in AI Agents could only react with generative responses. But a recent update allows you to combine agentic logic with predefined logic and text in one procedure. This way you can have a dynamic conversation driven by agentic procedures, while still retaining control with exact prebuilt dialogue logic where you need it. Coincidentally, that's the exact opposite motion as Zendesk's been enabling in [Action Flows](https://internalnote.com/automating-with-action-platform/). Here you can have a deterministic action flow with hardcoded steps and conditionals, that hands off control to a Custom Agent to runs it logic in an agentic manner. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Frame-10.png) # Embedded templates for AI Agents AI Agents can react to specific use cases with either a dialogue or a procedure. But before procedures were a thing and AI Agents were still known as Ultimate, there was this concept of templates. These were reusable dialogue flows that could be invoked by other dialogues, but since they weren't linked to use cases, customers couldn't invoke them directly. Useful if you wanted rich escalation flows, or whenever you had reusable logic that a few dialogues needed to call. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Frame-9.png) When you link a template, dialogue flow, or procedure from within a procedure, these would take over control and continue the conversation. But they could not pass back control when their job was done. You could have a use case that handles broken devices, and pass off to a template or other use case that handles refunds. With the release of embedded templates this behaviour changes. Embedded templates can be invoked from a procedure **and they return control back to the procedure** once they've run their logic. This means we can now build an agentic procedure that invokes a template in the middle of its logic, and then resume its logic once the template did its thing. That *thing* can be everything a dialogue flow can do: render a carousel, have a response rendered as rich text, or reply with a canned response that will be shown to the customer verbatim. [Creating and using templates in conversation flows for AI agentsA template is a centralized reply that you can link to from multiplegenerative proceduresordialogues. Templates are useful for: What’s my plan? All Suites Team, Growth, Professional, Ent…![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/favicon-bddd0a34-8af7-4142-837e-08f34ce9d549.ico)ZendeskZendesk![](https://support.zendesk.com/static.zdassets.com/logo.png)](https://support.zendesk.com/hc/en-us/articles/8357756562330?ref=internalnote.com) # Demo Flow: Magic Spells If the above sounded a bit too abstract and high level, don't worry. In this section I'm going to dive into the product and build a procedure that combines agentic logic with a dialogue flow. As noted, you'll mostly use this either to unlock capabilities that procedures don't have yet, or to make sure you can react in the exact same way to your customer each time. In this demo flow we'll build a flow where we're going to help students at a magic school with their spells and incantations. The goal is to get the student to select a spell, and we'll give them instructions on how to perform the spell. Doing an incantation well means we need to give them *exact* instructions. Even the smallest change in wording or order can have disastrous effects. So creating a dialogue flow with the exact steps to follow is the right choice here. Additionally, there are dozens of spells to choose from. So just listing them in text is not ideal, and showing the available spells to choose from is better done in a nice carousel where we can show an image, title, and description of each spell. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Carousel-1.png) But sometimes a student might already know the spell they want to perform. *"I want to make leaf fly"*. So while showing all options in a carousel is nice, getting the AI Agent to understand the question and immediately select the right spell is a better experience for the student. And that's where an agentic procedure fits right in. It can grasp the meaning of a conversation, and select the right spell based on the conversation, without the need to manually select the right option. If we combine the requirements and insights above, we've got the perfect use case for embedded templates: 1. We'll build a procedure that asks the customer which spell they want to perform 2. We try to match it to an available spell. 3. If that fails, we show a carousel of available options to choose from. 4. And once we know which spell they need, we use an embedded template to respond with *exact* instructions. Building this procedure requires us to build the logic from the inside out. We'll start with building our embedded templates, and then write a procedure that invokes both. ## Embedded Template: Carousel The first template renders a carousel of available incantations. This is done by selecting *templates > add template > embedded template*. We first need give it a logic name (Pick a spell) and description (This shows a carousel of available spells). Within the template we can add a carousel with available spells. Each carousel item has an image, a title, and a description. In order to be able to select the spell we also need to add a button, and then add a final AI Agent message to confirm their choice. There is two ways we can retrieve the selection a student made. One way would be adding an action to the Button step which sets a `spell` parameters' value to the selected choice. The other option would be to mention a students' choice in a message, and let the procedure retrieve the choice that way. Either one works, but the latter requires less setup. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Frame-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Frame-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Frame-11.png) ## Embedded Template: Spell Casting The second template shows the incantation steps. Here too we create an embedded template with a logical name and description. This flow starts with a conditional step that reacts to the `spell` parameter. For each option we then use an AI Agent message to react with exact steps to perform the spell. We can use *rich text* formatting in our message so that the returned message reads better and looks nicer than just plain text. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Frame-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Frame-4.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Frame-12.png) ## Agentic Procedure Now that we've got our two embedded templates, we can use them in an Agentic Procedure. To start, we need to create a *Use Case* that handles the "Student asks about magic spells" questions. Within the use case we can add a procedure. This procedure will contain the logic that drives the entire conversation. #### Procedure Greet the witch or wizard and ask what they're hoping to accomplish today. Reason about their answer. If they describe a problem rather than a spell (e.g. "my room is too dark," "I'm locked out"), map it to the right spell category yourself. If it's ambiguous or covers multiple needs, ask one clarifying question. Available spells are levitate (let things fly), light (remove darkness and turn on light) and summon (make things move). If you can't identify the spell, run Pick a spell so the customer can choose their exact choice from the carousel. When a selection returns, store it as a `spell` parameter run Incantation Card to show the word-perfect instructions for the selected spell. When control returns from the card, ask whether the spell worked. If it didn't, offer one troubleshooting tip. Ask if they'd like to try another spell (loop back to step 2) or if you can close the spellbook for today (which would resolve the conversation) Within the procedure we need to add to Actions by either clicking the + button or typing / while writing the procedure. Navigate to *Use cases and Templates* and select either of the two embedded templates we built earlier. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Frame-5a.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Frame-5b.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Frame-7.png) ## End User Experience Now that we've got our template in place, we can run our logic: A student asks about "*letting their paper plane fly".* The AI Agent shows a carousel with available spells (or selects the Levitate `spell` if it can match the question). We then hand off to our other template that shows the exact instructions in rich text. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Result-2.png) # What's next? The ability to combine agentic procedures and deterministic logic in a single use case unlocks a few powerful capabilities. For one, there are the use cases where you want to have *some* responses to be exactly as written. Useful for scenarios where you need to pass legal information, or other terms and conditions. Secondly, there are scenarios where you need features not (yet) available in procedures: carousels, buttons, rich text formatting or images embedded in responses. Here you can write the entire agentic procedure, and fall back to an embedded template for just these features. And thirdly there's an opportunity. You might have already built powerful and complex dialogue flows for your AI Agent. With this new embedded mode, you can copy over your dialogue flow into a template, and call it from a procedure. You can then gradually migrate over logic from that dialogue flow towards a real agentic procedure. Context gathering for example is way more powerful and easy within a procedure. Or you can replace a complex API flow with a procedure, but keep the rest in your dialogue flow. This way you can gradually replace old dialogue flows with more modern agentic AI Agent procedures. Regardless of the adoption path you choose, it's clear that for both AI Agents and the Action Platform the future is neither fully agentic nor deterministic. A hybrid approach where we combine both approaches where each applies best seems to be where the platform is heading. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### After Relate 2026: five Zendesk releases ready for service teams today URL: https://internalnote.com/after-relate-2026-five-zendesk-releases-ready-for-service-teams-today/ Last updated: 2026-08-31T08:35:44.000Z After Relate 2026: five Zendesk releases ready for service teams today. From keynote vision to real-world service tools, find out how these releases can support your team’s workflows, knowledge, and automation right now. [https://www.zendesk.com/blog/zendesk-insights/innovation/five-zendesk-releases-to-use-today/](https://www.zendesk.com/blog/zendesk-insights/innovation/five-zendesk-releases-to-use-today/?ref=internalnote.com) ### Intelligent Triage available in Suite URL: https://internalnote.com/intelligent-triage-available-in-suite/ Last updated: 2026-07-17T10:06:06.000Z Zendesk is making its topic, sentiment, entity and language detection available for all Suite Professional or above customers, giving you automated insights in your conversations. Agent Copilot is still required if you want to leverage these findings in triggers or automations. [https://support.zendesk.com/hc/en-us/articles/10745493624730-Announcing-Copilot-intelligent-triage-for-Professional-plans-and-above](https://support.zendesk.com/hc/en-us/articles/10745493624730-Announcing-Copilot-intelligent-triage-for-Professional-plans-and-above?ref=internalnote.com) ### Messaging & Sunshine Conversations: the engine under the Resolution Platform URL: https://internalnote.com/messaging-sunshine-conversations/ Last updated: 2026-07-16T06:30:50.000Z Most admins and agents using Zendesk never think about Sunshine Conversations. And that is rather the point. It sits underneath the entire conversational experience in Zendesk. It does not show up as a tab in Agent Workspace. It is not a single feature you'll find in Admin Center. But every web widget message, every WhatsApp reply, every AI Agent handover and every piece of conversation metadata flows through it. In this article we'll dive into Sunshine Conversations, or *Messaging* as its called now. We will walk from channels, to routing, to context, to analytics. And we will look at how this one platform quietly powers the modern Zendesk Resolution Platform. Let's dig in. # A bit of history Sunshine Conversations did not start at Zendesk. It started as a separate company called Smooch. Smooch was a platform focused on one job. Connect dozens of messaging channels to bots and ticketing platforms via an easy to use API. It handled the complexity of routing conversations, maintaining status, and abstracting away the unique elements of each platform. It did this by offering generic APIs for creating conversations, sending messages, and switching ownership from bots to agents and back. In 2019 Zendesk bought Smooch and they rebranded it to Sunshine Conversations. SunCo became the engine that connects channels like WhatsApp, AI Agents, and ticketing environments like Agent Workspace together. It powers Zendesk Messaging and allows the platform to react quickly when new (social) platforms arise. [A History of Zendesk chat and messaging channelsOver the years, Zendesk evolved from simple email ticketing to offering a full suite of customer care solutions. They now support multiple channels, AI agents, social integrations, and web widgets. This article will dive into how their complex platform works, helping navigate conversational setups.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-6b7bc2e6-c341-468c-9634-9573236b1653.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/fb-deviceinfo-6-5fb23cd6-9e74-42e0-82ef-a51f810fe647.png)](https://internalnote.com/history-of-zendesk-messaging/) Zendesk’s acquisitions strategy goes hand in hand with SunCo. Ultimate, now AI Agents Advanced, already integrated over SunCo from the get go. So did Forethought. They connect to Zendesk through exactly this API, making them behave as native elements even before they joined the company. The conversation layer was shared from day one, giving customers and agents a seamless messaging experience from day one. In this article we'll dive into how Messaging powers the Resolution Platform and serves as the layer that connects all the different interfaces and products that take a conversation from question to solution. # Managing the conversation lifecycle Messaging, or the SunCo layer, controls the entire conversation from initial question until its resolved or escalated to an Agent. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Customer-Lifecycle.png) ## Channels Every conversational channel a customer uses runs over SunCo. The web widget. The mobile SDK. Facebook. Instagram. WhatsApp. When you connect a Messaging channel in Admin Center, it connects into SunCo and gets a unique `integration_id` used in the underlying platform and API calls. What this does is abstracting away the quirks of every social platform. Within Zendesk you now get one generic way to create conversations, send messages and receive replies. So instead of building and maintaining separate integration for every network, you connect them all to one place. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Messaging.png) The best way to think about this is to consider Zendesk as channel agnostic. We shouldn't care whether a message arrived from WhatsApp, a web widget or an Instagram DM. Zendesk is multi-channel, so it speaks the native language of each of those networks, while making the way you define what happens once a message arrives the same experience for your admins. This also means that once you configured how you want the platform to handle conversations, you can easily expand with support for more channels and just reuse the work you already did for your previous channels. Zendesk takes care of translating that setup to the specific of that new channel. ## Routing Connecting channels is one thing. Deciding who answers when a customers sends a message is another. That job belongs to the switchboard. Every Zendesk environment has one. Similar to the telephone switchboards of the 1900s, it routes a specific channel to a specific responder. It then handles the handover from one responder to the next. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Switchboard-v2.png) The switchboard has three key pieces. - **Switchboard integrations** are the responders. These are your bots and agent environments: AI Agents, Agent Workspace, third party bots. - **Integrations** are your actual channels. The web widgets, social accounts and mobile SDKs. Each one has a `defaultResponder` assigned to it. - **Default Responders:** this links a specific Switchboard integration to a specific channel. In this routing engine the combination of brands, channels and AI agents play a big role. Most companies have an AI Agent per brand. By linking each channel to a specific brand and agent, they can make sure customers get the right questions. But what switchboard allows is to bypass the AI Agent for specific channels, or leverage a different AI Agent altogether. For years configuring the Switchboard required direct API calls against the SunCo API. You had to know how `switchboardIntegrations` and `defaultResponder` fields worked. That was a real barrier for regular admins. That has changed. The new channel manager in Admin Center lets you assign channels to a specific AI Agent directly from the UI. Behind the scenes it updates the same `defaultResponder` fields the switchboard API always used. A once complex API process is now point and click. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Switchboard.png) [Connecting AI Agents Essentials and Advanced to channelsZendesk improved AI Agent management by introducing a new channel manager UI for AI Agents Advanced, removing the need for Switchboard API use. It simplifies linking bots to channels, especially in mixed or transitional setups, but key inconsistencies between Essentials and Advanced remain.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-058b5abd-149e-4813-888e-b9f650dd1a37.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner-2025-05-27-Switchboard-2-8165b96f-ed2a-401b-8813-db73a67d5413.png)](https://internalnote.com/connecting-ai-agents-essentials-and-advanced-to-channels) ## Passing control The switchboard does not just decide who answers. It also manages the handover between different responders. Most customers encounter this feature only at the moment an AI Agent passes a conversation to your human team. That pass control is not just a "you're in control now, good luck". It is a full handover of the entire conversation and all the metadata attached to it. But you can easily imagine a future were we're leveraging this same switchboard to pass control between different Custom Agents, each doing their own job, one after another until a conversation is resolved. Whenever SunCo passes control, it makes sure that integration gets notified whenever the customer reacts, and makes sure its answers, and no other integrations, respond back to the customer. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Convo-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Convo-2.png) # The conversation is the source of truth ## Messages SunCo holds the full conversation, the actual record of everything that happened. The customer's questions, the AI Agent's answers, and any metadata written to it along the way are all stored in the conversation database. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Knowlege.png) Every conversation is continuously synced between SunCo and Zendesk's core platform via the new [AI Agents tickets](https://internalnote.com/ai-agent-tickets-in-agent-workspace/)feature, making every message and important metadata updates available to the platform. Agents can use it to get context after an escalation, the new Agentic Analytics can use it to give deep insights, while Admin Copilot can use it to recommend improvements to your knowledge and procedures. Before we had AI Agent tickets, AI conversations that weren't escalated lived outside Agent Workspace and only escalated interactions became tickets. That left Analytics, QA and Admin Copilot working with an incomplete picture. Thanks to AI Agent tickets, every interaction is created and tracked as a ticket from the very beginning. The moment a customer starts talking to your AI Agent, a ticket exists. If the AI Agent resolves it, the ticket is marked solved. If escalation is needed, that same ticket is passed to a human. One interaction equals one ticket. And SunCo is what follows that conversation from start to finish. [AI Agent tickets in Agent WorkspaceZendesk now shows AI Agent conversations directly in Agent Workspace. This closes data gaps between human and AI-handled interactions, improves visibility, and simplifies analytics.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-9b55278b-4fd6-4d0f-b47f-9f7f3003a18f.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2025-11-AI-Agent-tickets-3-d4ff95a2-89ca-42f4-a640-db3948b2c132.png)](https://internalnote.com/ai-agent-tickets-in-agent-workspace) [How to eliminate duplicate tickets and adopt the new AI Agent ticket model for AI Agents AdvancedZendesk now creates a ticket for every interaction, unifying AI and human workflows into one ticket throughout the conversation. This might cause duplicates for previous workarounds. The article explains ticket lifecycle changes and how to adapt.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-4a6dd103-6cee-45d8-a2fe-ea002453dcc6.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Header---2025-12-WEB-WIDGET-a7222f8d-312b-4ec7-adc8-b2bafa41ef6a.png)](https://internalnote.com/ai-agent-tickets-for-ai-agents-advanced/) ## Identity Conversations are not just words. They are words said by someone. And SunCo tracks who that someone is. This is the *profile layer.* If a customer contacts you over the web widget while signed in, and contacts you again later via your mobile app, SunCo knows it is the same person. So you can show their conversation history and they can resume their conversation. The whole experience is built on that continuity. [Authenticate Zendesk MessagingZendesk recently added the ability to authenticate users in the Zendesk Messaging Web and Mobile SDK. This article shows how to set it up with sample code.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-588234e6-b057-49ff-b679-da27316ea205.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2022-05-30-Messaging-Auth-1-ba7829bb-b373-44d9-9728-1b22ab100776.png)](https://internalnote.com/jwt-messaging/) Under this sign in process there's a lot of hidden complexity in play. Each channel has their own concept of a user: an Instagram handle, WhatsApp Number, a Slack or Teams profile. All of these get mapped to a SunCo user when they first interact. Then there is the end-users in Zendesk. They are mostly based on email or phone numbers, or can be provisioned with external IDs via Enterprise SSO solutions. These two databases of users, the users in SunCo, and those in core Zendesk are linked. Each Zendesk user has one or more `messaging` identities. It points from the Zendesk profile to the SunCo user. When a user is authenticated, both SunCo and core Zendesk know we're talking about the same user. And if your agent validates that the user reaching out over WhatsApp is the same user they talked to over email before, they can merge those profiles. And you end up with a single Zendesk user containing multiple SunCo profiles. ```json { "identities": [ { "id": 17231393302930, "user_id": 17231378447250, "type": "email", "value": "maximus@gladiator.example", "verified": true, }, { "id": 35009468528402, "user_id": 17231378447250, "type": "messaging", "value": "69e8b8d873c619830a2622db", "verified": true } ] } ``` Even though there's a lot of technical complexity contained in this user management, the end result in the platform itself hides all that complexity. An authenticated user that reaches out renders as a rich profile in Agent Workspace, and all their user information and authentication state are clearly visible to the agent. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/user.png) ## Context Knowing who the customer is one side. Knowing what they're doing is the other. When a customer is on your website looking at a product, you can store the product name. If they're looking at an order they want refunded, you can note down the order details. All of it lands on the conversation as metadata. That metadata is then made available to your AI Agent. So it can open with a personalised, context aware welcome message. It can dive straight into the right use case or intent. It can resolve the request without asking the customer for information they've already given. Nobody enjoys typing their order number into a chat box that already knows their order number. If you open the web widget on this page you can see this in action. If logged in, your welcome with your name and the title of the article you're currently reading. AI Agents have access to all metadata stored in a conversation, but you'll have to explicitly capture the data you need via Actions. And during a conversation the AI Agent can also retrieve new information from the customer it can store as conversation metadata. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Action-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/07/Action-2.png) Some of that metadata syncs through to Agent Workspace as ticket field values. When a human agent opens a conversation, or Agent Copilot runs a procedure, the conversation, they see the same context the AI Agent saw. In order to pass data to Agent Workspace and fill in ticket fields you need to use a specific format `"zen:ticket_field:1234567890": "Blade Runner"`, where the number is the ticket field ID. [Working with custom fields in Zendesk Messaging and AI AgentsIn this article I’ll explore how we can interact Widget metadata in AI Agents Advanced replies, and update custom fields when we escalate to an agent.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-3dee099c-6efd-48cd-89c9-4cff55187e8b.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/fb-deviceinfo-5-b2dbd107-683e-4d42-859e-2c6fc72ebdb9.png)](https://internalnote.com/working-with-custom-fields-in-zendesk-messaging-and-ai-agents/) ## State management Because SunCo sits between your customers and your channels, it knowns the state of the conversation. A conversation can have three states. **Active**, where the customer is online and replying. **Inactive**, which shows up after roughly ten minutes of silence. And **Ended**, once the session is wrapped up and any new comment triggers a new conversation. For escalated conversations this means control is passed back to the AI Agent. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/image.png) These states are not just labels. They drive real behaviour across the platform. An inactive conversation can stop counting against an agent's capacity, freeing them to take a live one. An active conversation shows a green dot in Agent Workspace, so the agent knows a reply will land. An ended conversation is also an indicator for the system to start checking if a conversation is an actual resolution, and can trigger things like autoQA analysis or Admin Copilot recommendations. [Mapping the full lifecycle of a messaging conversation in ZendeskZendesk’s classic email-based ticket lifecycle has evolved into a far more dynamic model shaped by messaging behaviour, conversation states, and AI Agents. This article explains how modern conversations starts and ends, and move between AI and human agents across the full ticket lifecycle.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-77cb8721-dcc9-4fa4-a628-b25cb4a7faeb.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2025-12-WEB-WIDGET-3-d539275f-774f-43a9-b6ab-047c19cfec52.png)](https://internalnote.com/full-lifecycle-of-a-conversation/) ### Managing sessions For a while, ending a session was either a consequence of the customer abandoning the conversation, or an explicit agent action. They'd press End Session to stop the live portion of a conversation, which triggers SunCo and the switchboard to hand the conversation back to the AI Agent. That same control now extends to the customer. End users can end their own sessions in the Messaging web widget. The feature gives customers more control, cuts down unnecessary follow-ups, and frees up agent capacity sooner. This feature is off by default, but admins can turn it on in Admin Center | Messaging. When a conversation wraps up, users can now also download a transcript of their conversations. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/End-Session-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/End-Session-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Transscript.png) ### On top of being able to end sessions, we can now also monitor End user presence. Presence monitors whether the end user is still on the website, or whether they've abandoned the conversation by closing the page. If they leave the page, we can automatically turn the page to inactive, rather than waiting for a set period of time before the status changes. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Activity.png) This has an impact on Omnichannel Queues and Capacity. A conversation where the customer is still on the page, waiting, is more urgent than an older one they walked away from. So you can prioritise live customers over abandoned threads, and release capacity when a customer has clearly gone. # Rich interfaces We've mostly talked about SunCo as a layer to manage conversations and pass context to AI Agents and humans alike. But SunCo also offers us ways to render rich interfaces on top of conversations. These can be simple things like a button, a form or a carousel in the web widget. Or it can be rich elements like article previews or custom interfaces to get answers from the customer. Within Zendesk's own Web Widget conversations now render Help Center links as rich previews, and these articles now open inside the widget itself instead of bouncing the customer out to a separate tab. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Article-Viewer-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Article-Viewer-2.png) Resolving conversations with customers can be as simple as showing an article with the right content. But sometimes answering a question isn't enough. You need to do something for the customer. And while conversations are handy ways to interact with the customer, they're not the best fit to get all types of context. A date picker beats typing out "March 17th, 2026". A seat map beats writing "Seat A12". Picking three products from a grid beats describing them. This is what Conversation Extensions are for. They are web views you invoke as part of an AI Agent flow and they're powered by SunCo. You can design them however you like and run any custom code inside them. And because they load inside an existing conversation, they have the same SunCo context available. So they can read and write metadata, and post messages back to the conversation. Picture a flight rebooking. The procedure asks for the booking number and confirms what the customer wants to do. Then it hands off to a Conversation Extension that shows the seat map and handles the payment. When the customer finishes, control passes back to the AI Agent and the conversation resumes. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/image-1.png) [Conversation Extensions for Zendesk Messaging and AI AgentsConversation Extensions enhance Zendesk AI Agents by embedding custom web views in conversations, enabling interactive UIs for complex tasks like bookings and refunds. They integrate metadata, support context-driven actions, and improve customer experience offering flexible, reusable solutions.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-8c5178ac-7432-4ccd-931b-65036be2af30.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2026-01-Agentic-11-d5a29263-2199-4913-917e-842bff469ebd.png)](https://internalnote.com/conversation-extensions/) A word of restraint though. Extensions shouldn't be your default. Knowledge articles and agentic procedures deploy faster and handle most cases. Save extensions for the valuable interactions that genuinely need a richer interface. ## Always two there are Making things simple has always been one of Zendesk core visions when it comes to designing the product. And here too, the platform does a good job of hiding complexity. But beneath the surface, SunCo and core Zendesk are often handling the same data twice. The platform quietly keeps them in sync so that most users never notice. Three times in this article we hit that duality. There's conversation and ticket. Conversation metadata and ticket fields. The SunCo user and the Zendesk user. Each pair is a translation between two systems speaking slightly different languages. For most users, that complexity is hidden and things just work. But for those working at the API level, that duality can surface as confusion. Hopefully this article took some of that away. The platform's trajectory suggests that these translations are slowly disappearing. Switchboard routing moved from API to Channel Manager. AI Agent tickets makes every conversation natively available in Agent Workspace. [Help Center authentication](https://internalnote.com/messaging-authentication-in-the-help-center/) made single sign on a single checkbox. Each step quietly folds a SunCo concept into the native platform and removes one more seam. Sunshine Conversations remains the engine underneath all of it, silently empowering the entire messaging experience. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### New Action Builder connectors URL: https://internalnote.com/new-action-builde/ Last updated: 2026-06-26T10:56:20.000Z Zendesk is adding five new [action flow](https://internalnote.com/automating-with-action-platform/) connectors: HubSpot, Chargebee, Stripe, Calendly, and GitHub. These let teams handle CRM updates, billing tasks, scheduling, and engineering handoffs directly in Zendesk. ### Action Platform. The new way of automating Zendesk URL: https://internalnote.com/automating-with-action-platform/ Last updated: 2026-08-31T11:37:13.000Z When we talk about automation in Zendesk there's two different ways we automate. One is the resolution automation offered by our AI Agents. They use knowledge and processes to turn questions into answers. Underneath that is the automations within the platform itself. The actions that have always been performed by triggers and automations on top of your tickets. A while back I wrote about my approach to those classic automations and triggers in Zendesk. The core idea was simple. One trigger does one job. You order them so actions that run on a ticket flow from categorisation, through routing and assignment, to notification. Set defaults first. Categorise. Enrich. Route. Notify. Each trigger has a single clear purpose and a name that reflects it. It made managing your wall of triggers easier. Each trigger was categorised, and each trigger has a single job. [My approach to Zendesk TriggersThis article offers a deep-dive on how to structure and sort your Zendesk triggers starting from the concept of “one trigger does one job”![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-97a85e23-1509-4950-82e7-7e3225b09a46.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/facebook-1-bc881f8b-59cc-4905-b42a-6f805b730654.png)](https://internalnote.com/my-approach-to-zendesk-triggers/) That article was a map of every action that the system could or should take on a ticket. Those actions in itself have not changed now that we've moved towards AI Agents and conversations. A ticket still needs categorising, routing and answering today, same as it did then. What has changed is where a lot of that work lives now. Over the last few years Zendesk has rebuilt the engine underneath it. The **Action Platform** is Zendesk’s new way of building automations, integrations and logic on the platform. It is not a single feature. It is a set of connected tools that together replace what triggers, automations and hand-crafted webhooks used to do, and take it further than those tools ever could. [From Triggers to Flows: How Action Builder Automates the Support ProcessZendesk’s Action Builder introduces visual, logic-driven automation flows to replace complex trigger setups. This article explores how Action Builder simplifies business rules, integrates with external platforms, and signals a shift from reactive to process-oriented CX in Zendesk.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-13497f7c-0f2e-4e40-8da9-63437872b57a.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2025-05-13-Action-Builder-1-4abd525c-7622-4dcf-93e4-dd394d5c46d0.png)](https://internalnote.com/preview-action-builder/) This article walks the same lifecycle as the original. Same jobs, same order, defaults through to integrations. But this time each job is an example of what the Action Platform can do. Some of the work stays with triggers and automations. Most of it moves somewhere new. ## What’s in the Action Platform The Action Platform shipped across two cycles, [Relate 2025](https://internalnote.com/tag/relate25/) and the [AI Summit](https://internalnote.com/tag/ai-summit-25/), and it is worth a quick review before we dive into examples. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Action-Platform-Small.png) **Action Builder** is the centrepiece. It replaces the trigger-and-webhook pattern with a visual flow builder. A flow starts from a ticket event or a schedule, branches on conditions, runs steps against Zendesk objects or external systems, and finishes. One flow holds every variation of a use case, where before you needed a trigger per scenario. **Custom Agents** are specialised AI agents you define and deploy on the platform. You describe the agent’s purpose, give it access to actions and knowledge, and it runs autonomously. A custom agent can handle a slice of the support process end to end, or it can be called from inside a procedure to do one specific job. This is the part that goes beyond what triggers ever touched. A background agent that checks external systems, resolves what it can, and escalates what it cannot is a different class of automation entirely. **Custom Actions** are the shared action library. They are the same actions used in Agent Copilot procedures and in Action Builder flows. Build an action once and it is available everywhere. An action is an API call with a defined schema, a name, a set of inputs and a structured output the next step can read. That reuse is the point. An action that looks up an order status can be called by an AI Agent, suggested by Auto Assist, or run as a step in a background flow, all from one definition. And in addition we've got dozens of native Zendesk actions that run against tickets, users or custom object, built-in connectors to popular platforms, and the new client support for external MCP servers. Together these sit on a shared runtime. An Action Flow can call a Custom Action. A Custom Agent can follow instructions that call that same action. The building blocks are the same whether you are automating a background job or running a front-line AI Agent. ## The jobs to done. Every admin who has ever built a trigger list has been doing the same set of jobs without necessarily naming them. Here is that list, framed against where each job lives in the new platform. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Customer-Lifecycle-1.png) First is setting context and defaults: - **Set defaults.** Every ticket needs a priority, a type, a schedule and a brand before the rest of the system can act on it. This still happens in triggers. It is the one job that does not move. - **Work out what the ticket is about.** Categorising by keyword was the old way. Intelligent Triage or an AI connector reads the conversation and classifies it. The trigger fires on creation. The reasoning happens in the flow. - **Enrich the ticket.** Fetch data the ticket does not carry from an external system: a customer tier, a contract status, a VIP flag. Branch on what comes back. This is something done via Action Flows. Then comes the job of routing and managing the queue: - **Route it to the right team.** Routing has left triggers almost entirely. Omnichannel Routing and Queues own this job now. A handful of priority triggers plus a queue setup replaces a long assignment list. - **Deflect what an agent should not see.** Spam, noise, tickets that should never open. An AI step reads conversations and closes before the queue ever sees it. - **Keep tickets moving on the clock.** Time-based actions for now stay with classic automations. But automations can now hand each ticket to a flow, so we can act on these events with more nuance. And finally there's integrations and notifications: - **Tell the right people.** Customer notifications stay as triggers, where they're not replaced with actions executed by AI Agents. Team alerts, Slack and Teams pings, move to Action Builder flows with native steps. - **Hook it into everything else.** Marketplace app triggers stay. Hand-build webhooks move to Custom Action steps inside flows. New integrations are built for Action Builder from the start. # Setting conversation context ## Set the defaults The first job is the simplest. Every ticket needs a priority, a type, a schedule and a brand, or the rest of the system cannot do its work. Service Level Agreements require a priority. Omnichannel Routing requires working SLAs to allow to sort the queue correctly. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Defaults.png) This is the one job where a plain trigger is still the right tool. Set a default priority for tickets that arrive without one. Set a default type. Set a default schedule and brand. These fire on creation and they each do one thing. Zendesk now [ships a default priority trigger](https://support.zendesk.com/hc/en-us/articles/4408828984346-About-the-standard-ticket-triggers?ref=internalnote.com#topic%5Fx3f%5Fvgm%5Fm2c) on new accounts, along with a default SLA for normal priority tickets. A clear sign this pattern is the right one, and worth keeping exactly as it is. ## Work out what the ticket is about The next job is knowing what the customer wants. Understanding their intent, means the ticket routes to the right team and prevents tickets getting bounced around before anyone helps. The old way was a wall of keyword triggers. *Subject contains refund*. *form is Refunds*. Received at *refunds@company.com*. This resulted in a trigger per topic, each with a long list of conditions included in it. It works, but it's finicky and error-prone. [Moving from manual ticket categorization to AI-powered intent detection in ZendeskMigrating from ticket field categories to Zendesk Intents isn’t hard. By reviewing existing categories, refining and renaming intents, adding custom ones, and validating results, you can replace manual tagging with AI-powered triage for faster, smarter customer support.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-cc282d35-43c5-45dd-a496-4554993da4df.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2025-10-23-Categories-and-Intents-1-733e2f41-8c6e-470e-95fb-17286907fe3a.png)](https://internalnote.com/moving-from-manual-ticket-categorization-to-ai-powered-intent-detection-in-zendesk/) For understanding what a customer actually means, reasoning beats conditions. This is where **Intelligent Triage** comes into play. It parses each conversation and automatically assigns an topic to the conversation. This gives you two benefits. It replaces the complex set of triggers, and it's way more effective in finding the actual intent. Intelligent Triage also powers intent suggestions, allowing you to fill in gaps in your categorisation over time. 💡 Zendesk recently updated Intelligent Triage and [renamed](https://support.zendesk.com/hc/en-us/articles/10745237509530-Announcing-the-Intent-to-Topic-terminology-update-in-the-Copilot-add-on?ref=internalnote.com) **intents* to **topics.* There's other elements aside from contact reasons that you might need to get filled in when a ticket arrives. To find that information in the conversation, Action Builder in combination with a Custom agent, or third-party LLMs like OpenAI, Claude or Gemini, can make this a lot easier than triggers. Take *business impact* for example. You could write an action flow that leverages OpenAI to figure out of the conversation is a low, medium or high business impact. The LLM returns that status, and we can use nested branches to update the priority of our ticket or set a ticket field accordingly. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Impact-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Impact-2.png) ## Enrich the ticket Knowing what a ticket is about is half the story. The other half is data the ticket does not carry yet. *Who is this customer. What is their contract worth. Are they a VIP?*. This is where Action Flows pull ahead of triggers completely, because triggers cannot reach out to another system and act on what comes back. Action Flows can. The clearest example is setting priority by customer tier. When building these flows with triggers you need to setup three separate triggers: one for bronze, one for silver, one for gold. Plus a fourth for everyone with no contract at all. Change the logic once and you need to update the logic in four places. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Customer-Type-1.png) Action Builder does it in one flow. The ticket is created. The flow calls your CRM to fetch the contract status. It branches on the result. Bronze sets low, gold sets high, everyone else stays normal. One flow, one place to read, one place to change. If a silver customer raises a ticket about a critical topic, you add a branch inside the same flow rather than spinning up a fifth trigger. VIP handling follows the same shape. The flow looks up the account in the CRM, checks their status, and tags the ticket or sets a field when the customer is a VIP. The lookup is the whole point. And if the tier is buried in free text rather than a clean field, an OpenAI step can read it out and hand the answer to the next step. # Managing the queue ## Route it to the right team Routing was the messiest part of any trigger list. One or more trigger per group, a fallback trigger, and dozens of complex conditions to make sure tickets were routed and reassigned correctly. It was also the first job to leave triggers behind. That work now belongs to Omnichannel Routing and Queues. Queues is where you group tickets based on category or topic and present them to your team. Then you let SLA based routing decide the order of work. The dozens of assignment triggers from the original article collapse into a potential handful of priority triggers, and queues handle the assignment. [Getting up to date with Omnichannel Routing in ZendeskOmnichannel Routing was released over a year ago to shift assignment from Groups to Agent based assignment. Since its original release this feature has seen tons of updates and allows for a lot more customizability. This article shows you what’s new and explains how to use these new options.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-6a257faf-838b-4e1f-af2d-5de6144615a7.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/fb-deviceinfo-7-d2cff714-b066-48f1-8265-923258e8dea5.png)](https://internalnote.com/omnichannel-routing-update/) There is one other routing job worth flagging here. Some conversations are handled as live chats, while others might be better served as email threads from the get go. A recent Omnichannel Routing update lets you set the routing channel per ticket. That replaces an old API workaround, and, for now, still has to be done via triggers. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/image-3.png) ## Deflect what an agent should not see An agents' queue should only contain tickets they should work on. [AI Agent ticket](https://internalnote.com/ai-agent-tickets-in-agent-workspace/) hide tickets handled by AI Agents. This means that only proper support tickets show up in agents queue's. But there's a second type of tickets that shouldn't appear in a queue, and that's spam. [Automatically deflect Zendesk spam tickets via triggers and webhooksFrom time to time spammers use open API endpoint in Zendesk to flood your inbox with tickets. This article shows an efficient and automatic way to deflect these tickets.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-673e694c-0c56-48c6-b44d-e7d6dcaf3852.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/facebook-spam-1-4cb97b0e-c1f1-4955-b9e7-470a0a26c117.png)](https://internalnote.com/automatically-deflect-zendesk-spam-tickets-via-triggers-and-web-hooks/) Keyword triggers can catch the easy spam. A known phrase in the subject, a sender on a blocklist. But spammers adapt, and a keyword list never keeps up. A flow with an AI step reads the full content and judges intent, not strings. It catches the messages a keyword would miss and leaves alone the ones a keyword would wrongly flag. The flow fires on creation, the AI step makes the call, and the flow closes the ticket and suppresses notifications when it is spam. This is where Custom Agents shine. You can create one with instructions to look for Spam, which then outputs its judgement to an Action Flow which then suspends the user and moves all their tickets to the suspended list. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Spam-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Spam-2.png) #### Spam Detection Custom Agent ****Agent Instructions: Spam Check for Current Ticket Comment** You are a Zendesk custom agent that evaluates the ****current ticket comment** and determines whether it is likely ****spam**. Your job is to return a single boolean: - ****true** \= the comment is spam - ****false** \= the comment is not spam ****What to inspect** 1. ****Current ticket comment** 2. - Read the latest customer comment on the ticket. - Use only the comment content relevant to the current evaluation. 3. ****Optional Salesforce CRM lookup** 4. - If a linked Salesforce record exists and can be checked, inspect whether the customer/contact/account is tagged as spam. - If Salesforce contains a spam-related tag or flag, treat that as a strong spam signal. ****Spam indicators** Mark as spam if one or more of the following are true: - The comment is clearly promotional or unsolicited sales content - The comment contains suspicious links, phishing language, or malware-related claims - The comment is repetitive, nonsensical, or generated-like text - The comment is unrelated to support and appears mass-distributed - The comment includes obvious scam patterns - The linked Salesforce record is tagged with spam, scam, or abuse indicators ****Not spam indicators** Mark as not spam if the comment: - Looks like a normal support request - Contains legitimate product questions or troubleshooting - Is a reasonable customer inquiry even if brief, emotional, or poorly written - Has no spam indicators and Salesforce does not show a spam tag ****Decision rules** 1. If the current comment is clearly spam, return ****true**. 2. If the current comment is ambiguous, check Salesforce if available. 3. If Salesforce has a spam tag or flag, return ****true**. 4. If neither the comment nor Salesforce indicates spam, return ****false**. 5. When in doubt, prefer ****false** unless the evidence strongly suggests spam. ## Keep tickets moving on the clock Some jobs are not triggered by a ticket event at all. They are triggered by time. A pending ticket that has gone quiet. A ticket that should have closed by now. This area still belongs to *Automations.* And while Action flows might be better served to *act* on events, automations are still the only place in Zendesk that can react to time. That does not mean the old pattern stays unchanged. The smart move is to let each tool do the half it is good at. The automation looks for applicable tickets. The flow does the work on those tickets. Take *reminder-then-solve flows*. The classic version was two automations. Remind the customer after a few days. Remind again. Then solve. Every pending ticket got the same treatment, whether it needed the reminder or not. It worked, but it treated every ticket the same. And not every ticket should be. A ticket where the customer still owes us information needs a nudge. A ticket where we answered and they went quiet does not, it just needs closing. [Bump bump solve with Custom StatusesNot every ticket can be solved with a single reply. Agents often need more information from customers in order to get the full context and reply with an answer. Or, even if all info is there, they need confirmation that their suggestions worked before the ticket can be solved.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-adcb66f7-0258-47cc-b2b2-6a5f60e1179a.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Apple-TV-4K-Copy-33@0.5x-3-5a271d1c-73f1-448d-ba4f-03f5c90c12be.jpg)](https://internalnote.com/better-pending-ticket-flow-with-custom-statuses/) NATIVE REMINDER FLOWS FOR MESSAGING Zendesk has introduced native auto-release capacity settings that automatically manage ****messaging conversations** without requiring custom automations or triggers. Admins can now configure inactivity thresholds (3-15 minutes) directly within Messaging settings, and the system will automatically send up to three reminder messages to end users whose conversations have stalled. Each reminder can be timed. The first after five minutes of inactivity (moving the ticket to Pending), the second after another five minutes, and the third after one additional minute (moving to Solved), all while intelligently releasing agent capacity back into the routing pool. This eliminates the complexity of building trigger-based workflows to handle messaging inactivity. Instead of admins juggling multiple business rules and conditions to manage capacity, the feature operates natively within the platform, automatically applying ticket status changes, sending reminders, and freeing up agents to handle new conversations. [Learn more ](https://support.zendesk.com/hc/en-us/articles/7043034053658-Automatically-releasing-agent-capacity-for-inactive-messaging-conversations?ref=internalnote.com) The modern version splits the work across the two tools. The automation still runs on the clock and finds every pending ticket that has gone quiet. But instead of sending the reminder itself, it adds a tag. That tag counts as a ticket update, an Action Flow picks up that change. That flow reads the actual conversation before it decides to do anything. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Reminder-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Remind-2.png) The flow asks one question. *Are we waiting on the customer, or did we already answer?* That question can be answered by a Custom Agent, or you can leverage integrations with OpenAI, Claude or Gemini for this. If the customer owes us a reply, it sends the reminder. Or it solves quietly. The "*I can't print, try this, silence*" case. The fix probably worked, so the ticket can be closed. No reminder, no agent time. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Remind-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Remind-4.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Remind-5.png) Same reminder routine as the old as before one. But the reminder stops being a blunt instrument and becomes a judgement made per ticket, on what the flow reads in the thread. ### A note on the Schedule trigger Action Builder does have its own clock. The Schedule trigger runs a flow at a set time on a recurring basis, say every weekday at 08:00\. The catch is that these time-based events aren't related to tickets. That stays with automations for now. Where it is relevant is for reaching out to a single external source on a regular cadence and acting on what comes back. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Remind-6.png) A few ideas to build on: - **Proactive incident check.** Each morning the flow calls your status page or monitoring API. If there is an active incident, it posts a heads-up to the agent Slack channel and raises a problem ticket so the team is ahead of the first customer report. - **Renewal and expiry nudges.** The flow reads a Google Sheet or CRM endpoint of contracts expiring this week and creates a ticket for the account team to follow up. # Actions and integrations ## Tell the right people Once we know what a ticket is, who owns it and what it's status is, we can inform people. ### Inform customers Customer-facing notifications stay as triggers, and the rule from the [original article](https://internalnote.com/my-approach-to-zendesk-triggers/) still applies. Make them run by default, except in the cases you exclude. Notifying customers of proactive tickets created by your team, informing customers when an agent replies, wrapping up a conversation with a CSAT survey. One of these notifications is changing though. The "*ticket created, we'll be in touch*" confirmation made sense when the first human reply was hours away. But an email AI Agent answers on creation. So the first thing the customer gets is no longer a holding message. It is a first reply, an actual attempt at the answer. The acknowledgement notification matters less the more your AI Agent handles the opening response itself. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Notifications.png) ### Notifying your teams The team-facing alerts are where flows and integrations shine, and Slack is the clearest case. Action Builder has a native Slack action, and so does Approvals, so there is no webhook to wire up and no trigger to maintain alongside it. For example, when we need approval from Finance for a refund, we can enable the native [Approvals to Slack flow](https://support.zendesk.com/hc/en-us/articles/10684174641690-Announcing-the-ability-to-see-and-respond-to-approval-requests-in-Slack?ref=internalnote.com), and get the team to approve the action right from within Slack. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/APproval.png) But if you're not using Slack but rather Teams, you can alert your teams with an Action Builder flow that combines the "*Ask for Approval*" step with a "*Notify*" action. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Approval-2.png) One word of caution on all of this. Do not let external pings become how your agents find work. In a healthy setup agents work from Agent Home and see their queue there. External alerts are for the quiet queues, the third-line technical group, the escalation to other teams. ## Hook it into everything else The last job is connecting Zendesk to the rest of your stack. This is where triggers and webhooks came into play. And it is where Action Builder changes your setup the most. Some Marketplace apps still need a trigger and webhook to function. Sweethawk's Tasks app for example. Those triggers still live in their own category. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Tasks.png) The best practice approach changes the moment you need to configure a webhook yourself. Plenty of trigger setups end in a [webhook](https://internalnote.com/a-quality-of-life-updates-for-webhooks-in-zendesk/) action that posts a `JSON` payload to some endpoint. That pattern has no real reason to stay a trigger. ### Webhooks A webhook endpoint is just an API that accepts a POST with a body, and a custom action in Action Builder does exactly that. You point the action at the same URL, build the same JSON, and run it as a step in a flow. You gain everything a flow gives you around it, the lookups, the branches, the other steps, and you lose nothing, because the webhook was only ever an API call. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Trigger.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Trigger-2.png) What you gain though is to react to the result of that action, or execute other actions while doing so like updating a ticket or informing another system in the same run. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Custom-Action-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Custom-Action.png) ### Integrations A ticket type is changed to incident. With Action Builder you can now build a flow that reacts to this change and looks up the ticket. It confirms the type, and creates a Jira issue with the subject and description mapped across. An OpenAI step can summarise and format the bug report first, so the issue reads cleanly rather than dumping the raw ticket body. It then adds an internal note back on the ticket with the issue number, and puts the ticket on hold until IT responds. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Jira.png) This used to be a few triggers, a webhook, and a fair bit of payload wrangling. Now it is one flow you read top to bottom. # Adopting modern automation First, a word of warning. You cannot just rip out your triggers and rebuild from scratch. Triggers run live, on every ticket, and pulling them out from under a working instance breaks flows and disrupts support mid-conversation. So you do **not** start over. You rebuild the plane mid-flight, one job at a time, while everything keeps running. ## Step by step The first move is to clear the dead weight. Go through your trigger and automation list and check when each one last fired. Anything that has not run in the last 30 days is a candidate to deactivate. Deactivating is safe and reversible, so there is no risk in switching off those triggers that aren't in active use. You will be surprised how many there are. Then sort what remains by job, and move each group to where it now belongs. - Routing and assignment triggers go first. If you are not on Omnichannel Routing and Queues yet, this is the reason to move. A handful of priority triggers and a proper queue setup replace most of the assignment triggers. - Multi-step triggers, the ones that categorise and assign and notify all at once, become flows. Rebuild or combine them as Action Builder flows with branches. - Lookups and external calls move to flows too. Anything that needs data the ticket does not carry, or needs to branch on a result, belongs in Action Builder rather than a chain of triggers and webhooks. But the core approach is this: you take a single trigger and decide between still a trigger, routing or workflows. You then migrate that logic to the proper new approach, and deactivate the trigger. The second approach is to build in a habit where, whenever you plan to modify an existing trigger, you ask the question, can is do this better in the more modern tools Zendesk offers and migrate as you plan to improve them. ## Admin Copilot This migration process is where Admin Copilot can take some of the weight off the audit itself. It reads your environment and surfaces what is actually there. [Introducing Admin Copilot. Keep your Zendesk on target.Zendesk Admin Copilot turns admins from manual configuration hunters into strategic operators. It surfaces account-specific insights, recommends fixes, and helps execute changes with approval, closing the loop between data, AI, and action.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-d2960322-b77b-4c6e-a76f-cc2fd426c6d4.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2026-01-Agentic-7-e942e469-1457-4843-a210-17502d5e39a3.png)](https://internalnote.com/introducing-admin-copilot/) The recommendations can highlight triggers and automations that are not in use, making it easy to cleanup your environment before you start the migration. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Frame-2-2.png) Admin Copilots' conversational mode on the other hand are ideal to stat asking questions about when triggers fire, which routing rules are contained within them, or where automations overlap. You can describe a behaviour you want and it will point you at the configuration behind it, suggest a change, and walk you through the steps. For the investigate, plan and map stages of a migration, that is a real shortcut. It turns the trigger archaeology from a manual hunt into a conversation. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Admin-Copilot-1.png) 💡 One important limit, though. Admin Copilot does not build action flows, at least not yet. It can suggest and adjust triggers, views and routing rules, but the flow itself you still build by hand in Action Builder. So use it to understand what you have and to plan the move. Then do the actual flow construction yourself. One you wrap up this migration, what stays as triggers and automations is a small, clean set. The defaults. Customer notifications. And the integration hooks that apps still depend on. The time-based sweeps stay as automations too, because nothing else can iterate over a backlog on a clock. What changes there is the handoff. The automation finds the tickets and tags them, and a flow picks up each one to make the actual decision. # Conclusion The original article was about taming a trigger list. Order it, use each trigger for one job, and you could follow a ticket's updates from creation to resolution. That discipline still matters, and the jobs are still the same. But the frame has grown well beyond a long list of rules. Zendesk is no longer a system that reacts to tickets one event at a time. It is becoming an engine that runs your operations. And that engine has three parts, each with a clear job. AI Agents take care of the conversations. They meet the customer, answer what they can, gather what they cannot, and resolve across messaging, email and voice. Copilots take care of the learning and the configuration. They sit beside your agents and your admins, suggesting replies, surfacing insights, reading your setup and helping you change it. They are how the system improves and how you steer it. And the Action Platform takes care of your processes. Action Builder runs the flows. Custom Actions are the shared library every part of the platform draws on. And Custom Agents are where you put reasoning to work in the background, an agent that checks systems, decides, acts and escalates, without a human in the loop and without a rigid flow to follow. That is the shift. You stop wiring up individual reactions and start designing how your operation runs, then hand each part to the tool built for it. The trigger list taught you to think one job at a time. The platform asks you to think about the whole process, end to end, and gives you somewhere to build it. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### New Admin Copilot recommendation types URL: https://internalnote.com/new-admin-copilot-recommendation-types/ Last updated: 2026-07-17T09:59:34.000Z Admin Copilot now surfaces updates to Macro content, as well as improvements for Trust and Safety as part of its [recommendations](https://internalnote.com/introducing-admin-copilot/). [https://support.zendesk.com/hc/en-us/articles/10621284039962-Announcing-macro-content-suggestions-and-trust-safety-recommendations](https://support.zendesk.com/hc/en-us/articles/10621284039962-Announcing-macro-content-suggestions-and-trust-safety-recommendations?ref=internalnote.com) ### Enriching Zendesk’s Knowledge Graph With External Sources URL: https://internalnote.com/knowledge-connectors/ Last updated: 2026-06-05T08:31:52.000Z Zendesk’s Resolution Platform turns customer problems into resolutions. It does this by bringing together knowledge, processes, actionable data and rich insights. Every conversation draws on some combination of those elements, and every interaction is analysed to provide actionable recommendations on what to improve next. The basis for this platform rests on the same foundation: good knowledge. I have written about that before [in several articles](https://internalnote.com/tag/knowledge/), and the case for using knowledge in AI is already well established. We know it helps with self-service, answer quality and efficiency. This article is about something a bit different. It is about connecting knowledge. Zendesk’s Knowledge Graph is a core change in the way we handle knowledge in Zendesk. It brings together content from your Help Centre, your website and external tools like Notion, Confluence and SharePoint into one unified layer. Instead of knowledge living in separate systems and being searched separately, it can now be unified and made available wherever questions get asked. That matters because Zendesk is no longer just a place to store support content. It is a [Resolution Platform](https://internalnote.com/tag/resolution-path/) that learns from every interaction, closes gaps and improves what comes next. With the capabilities recently announced at Relate, it is becoming the platform that connects knowledge across your stack, makes it available across channels and gives you one place to measure how it performs. With the capabilities recently announced at Relate, it is becoming the platform that connects knowledge across your stack, makes it available across channels and gives you one place to measure how it performs. The rest of this article follows that lifecycle. First, getting knowledge into the graph through crawlers and connectors. Then making it available across Quick Answers, AI Agents and Agent Workspace. Next, measuring how it performs. And finally improving it with Knowledge Copilot. ## The Knowledge Graph Before getting into the how, it helps to see the graph as three distinct kinds of knowledge, where each one enters the platform in a different way. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Data.png) First, there’s your *Help Center*. This is the classic self-service approach, the content you write and own inside Zendesk specifically to answer customer questions. It is the native source, and it is still the heart of the graph. Second, there’s content that’s already public, but lives outside the Help Center. Your website, your blog, your web shop. This content is already being indexed by everyone else, by Google, Gemini and ChatGPT, and your customers are finding it through them. If the rest of the world can leverage it, your own AI Agents and Help Center should be able to do so as well. If it is public and relevant, Zendesk should be able to use it too. That is *Federated Search*, where the platform crawls your webpages and indexes their content. Third, there’s knowledge locked inside the tools you work in: Notion, Confluence, SharePoint. Until now it has lived outside the Zendesk knowledge layer. You may want to expose it to your AI Agents, Agent Copilot and Auto Assist to make their answers easier, better and richer. But because it is sensitive, you also want clear segmentation on top, so it only reaches the people who are allowed to see it. That is *Knowledge Connectors*. Taken together, these three sources are what make the Knowledge Graph more than a Help Centre feature. They turn Zendesk into the layer where knowledge is connected, governed and made available across the service experience. # Indexing your knowledge Nothing else works until the content is in the graph. So the first job is getting it indexed. That is where the connected knowledge layer begins, and there are two routes in, depending on which of the three kinds of knowledge you’re dealing with. ## Federated Search Federated Search is ideal for public content sitting outside the Help Center that you would like your AI Agents to use to answer questions. In the past, adding a website to be crawled by Zendesk required two things: a verification tag in the `` of your site to prove ownership, and the availability of a sitemap. Both requirements are now gone, which makes it much easier to add new sources. Adding new sources to Federated Search is now a three-step job: 1. From Knowledge Admin, go to Settings > Crawlers and add a new source. 2. Enter the website URL(s). 3. Choose whether to index only those URLs or the entire website. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Federated-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Federated-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Federated-3.png) That option to limit it to specific URLs is important. Even though you want your Knowledge Graph to be as rich as possible, sometimes you only want to include a few webpages to fill specific gaps, while leaving older, unrelated or duplicate content out of the indexed set. ## Knowledge Connectors Knowledge Connectors are the way to get access to knowledge locked inside your other tools. Before connectors, you could only bring pages from these external sources into Zendesk via the Federated Search API. Knowledge Connectors are a native alternative that makes it easy to connect and index other platforms, while respecting how each one is structured and governed. No more export, import, custom scripts or glue code to move data between tools. Once connected, that content is discoverable across the same surfaces as your Help Center articles: Help Centre search, Quick Answers, the Knowledge panel, Auto Assist and AI Agents. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Connector-1.png) The list of supported connectors has grown quickly over the past year, and now covers most of the tools companies actually keep their knowledge in, including Confluence, Notion, SharePoint, Document360 and Box. Google Drive Shared Drives support is coming soon too, and each new connector brings another silo into the same unified layer. Throughout this article, we’ll follow a set of indexed articles in a *Notion* database. To get started, we’ll select the Notion connector and authenticate with our workspace. Once that is done, we can select the pages we’d like to index. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Connector-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Connector-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Connector-4.png) The setup gives you proper control over what is indexed and who sees it. You scope each connection with the same audience segments you know from the Help Center, so everyone, agents only, or specific groups. You also choose which pages to include, with the option to add several. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Connector-5-1.png) 🔒 A quick word of caution, though. Just because you can connect everything does not mean you should. Watch for overlap, keep your sources high quality, and index only what is actually relevant. A handful of well-written, purposeful articles will outperform a pile of noise that happens to get indexed. The same discipline you apply to a good Help Centre applies just as much to everything you connect alongside it. ### Beyond articles: PDF ingestion Until recently, connectors handled pages and articles, but not the documents sitting next to them. A SharePoint site full of policy PDFs, for instance, would connect, but the PDFs themselves were skipped and not indexed. [PDF ingestion](https://support.zendesk.com/hc/en-us/articles/10806827407514-Announcing-PDF-Ingestion-EAP?ref=internalnote.com) closes that gap. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/PDF-3.png) Any PDFs hosted in your connected sources are automatically pulled in and indexed, extending connectors beyond pages and articles into the documents that sit alongside them. Their text is extracted and made available to generative search and AI Agents, just like any other article. It unlocks a whole category of document that used to be invisible to the graph. It starts with SharePoint, with Google Drive following once that connector reaches general availability. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/PDF-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/PDF-2.png) One principle still holds, though. Editable, structured text is always the better source. A clean article beats a PDF, because it is easier to keep current, easier to read and easier to correct when something is wrong. PDF ingestion is there for the cases where the knowledge genuinely lives in a document and converting it is not realistic, not as a way to index every file you own. # Making your content available across channels Indexing gets the content into the graph. This stage is where it becomes visible for customers, powering AI Agents, and backing up human agents. ## Quick Answers Quick Answers is Zendesk’s generative search for the Help Center. Instead of returning a list of articles, it generates a direct answer to the customer’s question and puts it at the top of the search results, with a link to the sources used. This is where the connected knowledge layer first becomes visible to customers. People are used to this now. Google, ChatGPT and Gemini have trained us to expect an answer, not a list of links that might contain the answer somewhere in paragraph six. Quick Answers brings that same experience to your Help Center, which makes Zendesk feel a good deal more modern. It is available for all Suite customers. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Help-Center---Quick-Answer-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Help-Center---Quick-Answer-2.png) 💡 If your theme does not support Quick Answers yet, getting it into your theme is easy now: the [auto theme updater](https://support.zendesk.com/hc/en-us/articles/10306108440602-Announcing-the-quick-answers-theme-updater?ref=internalnote.com) can add the generative search helper to your existing theme automatically, with no code required. Before Quick Answers shows up in the Help Center, we need to make our indexed source available as a search source. This is done in Knowledge Admin, where you can expand search to include connected sources, other Help Center brands’ content and Federated Search sources. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Help-Center-1-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Help-Center-2-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Help-Center-3.png) With our Notion connection enabled, we can head to the Help Center and run a search for something covered in those pages. Instead of a plain list of links, a generated Quick Answer appears at the top of the results, pulled straight from the Notion content, with a link to the original page underneath it. The same content that lived in a Notion Teamspace ten minutes ago is now answering a customer’s question in the Help Center. > **Worth flagging:** if you want customers to actually open that linked Notion page, the page has to be publicly accessible in Notion itself. A private page still gets used to generate the Quick Answer and still surfaces in results, but the link will not go anywhere for the customer. The answer works; the click-through does not. ### Conversational Help Center Quick Answers is no longer just a single-answer experience. If a customer has a follow-up after reading the initial answer, they can carry on the conversation directly with an AI Agent. No new conversation, the handover happens with full context. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Help-Center---Quick-Answer-3-1.png) This matters because while Quick Answers is grounded in knowledge, an AI Agent can do more than answer questions. It can handle logic, take actions, ask clarifying questions and reach into external systems. So a customer gets an immediate self-service answer, and if that is not enough, they move up to a full AI-driven conversation without starting over. This is what makes Quick Answers the first response, not the only one. ## AI Agents The new External Knowledge Source option in AI Agent Advanced allows us to select the same sources added via Federated Search or Knowledge Connectors. In AI Agent Advanced, click Content in the sidebar, then Knowledge. Select External content from the Add Source menu, and authenticate with your Zendesk domain, admin email and API token. Select the sources you need, such as the Notion connection in this example. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/AIAA-1-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/AIAA-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/AIAA-3.png) From this point, the agent can generate answers grounded in that Notion content, the same way it would from a Help Center article. The connected knowledge layer now reaches directly into the agent experience. ### Segmentation The way external sources are linked to AI Agents is, for now at least, a little different than the way it works for the Help Center or the old AI Agent Essentials. Instead of leveraging a native connection to the Knowledge Graph, AI Agents use the Zendesk API to pull in the connected sources and data. That does not affect their usage or quality, but it does mean that AI Agents, at least today, do not inherit the user segments used by the Help Center. AI Agent Advanced manages its own audience scoping separately for now, so if you only want these articles shown to a specific audience inside the agent, you need to configure matching [segments and search rules](https://support.zendesk.com/hc/en-us/articles/9413046533530-Creating-segments-to-target-specific-customers-in-AI-agent-conversations?ref=internalnote.com) there too. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/AIAA---Segment-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/AIAA---Segment-2.png) ## Auto Assist and Agent Workspace The last stop is Agent Workspace, where the human side of resolution plays out. Any sources available in Help Center search also become available in Agent Workspace. Auto Assist uses that same content to generate suggested replies for the agent to approve. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Agent-Workspace-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Agent-Workspace-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Agent-Workspace-3.png) Alongside that, the Knowledge panel in the Context Panel sidebar shows the same Quick Answer and source page, so the agent can verify it before sending. The agent stays in control, but they are no longer hunting through three different tools to answer a question that was documented all along. That is the full surface area of a single knowledge connector. I added Notion to my Knowledge Graph, and its content is now used for answering customers in the Help Center, powering AI Agents and backing up human agents in Agent Workspace. That is the Knowledge Graph doing exactly what it is meant to do. # Measuring performance with Analytics You can’t improve what you can’t measure. Once knowledge is indexed and live across your channels, the next job is understanding how it is actually performing. For now, performance insights are split across two surfaces: Analytics and AI Agents. Analytics has a specific Knowledge Dashboard that gives you insight into the performance of your Help Center channel across search and Quick Answers. It shows how searches in your Help Center are being answered, whether users got a Quick Answer, an article-only result or nothing at all. You can filter by time, brand, search channel, user role and locale. It also surfaces which result types are most common, where customers are leaving a thumbs down and a full search history for each query, including the answer text and the source article behind it. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Analytics-1-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Analytics-2.png) AI Agent reporting, on the other hand, shows you how your AI Agents are using knowledge. It shows which articles are used and where escalations happen. Two signals matter most here. A high “no result” rate points to genuine gaps, questions your knowledge cannot answer yet. And a Quick Answer that keeps getting a thumbs down points to content that exists but is not good enough. The dashboard lets you trace that bad answer straight back to the source article, so you know exactly what to fix. This is the data that feeds the final stage. Analytics tells you what is going on and how it is being used. The next step is acting on it. # Improving your knowledge with Knowledge Copilot Reporting has three jobs. You need to know what is being searched for. You need to know the results of the answers you give. And you need to know what should be improved next. Analytics covered the first two. The third, turning all that signal into actual suggestions for improvement, is where Knowledge Copilot comes in. This is the Learning Loop made real. Knowledge Copilot is currently in Early Access, and it is an extension of Admin Copilot, a dedicated admin tool that turns customer and agent activity into insights and proactive recommendations. Where Analytics tells you what is happening, Knowledge Copilot turns that signal into next-step guidance. It is best understood through the jobs it does for a knowledge manager: - **Knowledge Home:** Know the state of your knowledge at a glance. - **Recommendations:** Know what to fix next. - **AI Assistant:** Get help creating and updating knowledge. ## Knowledge Home When you open Knowledge admin, you now land on a new home page instead of a list of articles. It shows your knowledge base health across three dimensions: *coverage*, so whether there are gaps; *freshness*, so whether articles are up to date; and *AI readability*, so whether your content is easy for Zendesk AI to use. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Copilot-1.png) ## Recommendations Rather than leaving you to guess, the home page surfaces proactive recommendations, starting with suggestions to create or update articles based on real ticket trends. This puts the elements that will make an impact on your resolutions front and center. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Copilot-2.png) ## AI Assistant Knowledge Copilot adds a conversational assistant available on any page in Knowledge admin, with a set of tools built for the job: - **Article builder** generates article drafts from ticket data or custom prompts. - **Procedure builder** generates Auto Assist procedures from tickets, Help Center articles or prompts. (Requires Agent Copilot add-on) - **Knowledge management assistance** lets you ask the assistant to update article content, change visibility and permissions, or move articles between categories and sections, all in plain language. When you accept a recommendation, or if you start from scratch, the assistant guides you through the entire process: gathering context, asking you where you want to publish the article and then showing you a draft to validate. This works for brand new articles, and it can also help when you want to update an existing article. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Copilot-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Copilot-4.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/06/Copilot-6.png) 💡 Knowledge Copilot is available in EAP on Suite Professional and above. To switch it on, go to Admin Center > AI > Knowledge and enable Knowledge Copilot. # What’s next If you take one thing from this, it is that knowledge is still the first foundation worth putting in place, but the shift now is in how you handle it. The lifecycle is clear: index it, make it available, measure it, improve it. Start with one source that matters, ideally public content through Federated Search or a single external source through a Knowledge Connector. Make sure it is reaching the right surfaces, whether that is Quick Answers, AI Agents or Agent Workspace. Then watch the data, see where the gaps are and let Knowledge Copilot point you towards the next fix. Over the last year, Zendesk has evolved from a tool you worked in into a platform that runs your operations. The shift from Knowledge to Knowledge Graph is a clear example of that. It is no longer just a place to store support articles and search them. It is a knowledge layer that sits across your tools, indexes what already exists and puts it to work wherever a question gets asked. That move from writing articles to managing knowledge is not just a product update. It is a different way of thinking about what support knowledge is, where it lives and who it serves. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### Testing Zendesk's new Custom Agents URL: https://internalnote.com/testing-zendesk-custom-agents/ Last updated: 2026-05-28T11:55:57.000Z At Relate 2026, Zendesk introduced Custom Agents and Agent Builder, the next step in the [Resolution Platform](https://internalnote.com/tag/resolution-path/), and a big one at that. Where conversational agents are mostly built around a single monolithic procedure that resolves a use case, Custom Agents split that procedure into smaller, reusable pieces of logic that can work on their own or as part of a broader workflow. That shift from one-purpose procedures to modular AI matters. It makes logic easier to maintain, easier to reuse, and easier to evolve. As Zendesk showed at the Relate keynote and on the show floor, Custom Agents offer a more flexible approach than traditional procedures or deterministic action workflows. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/R26_02Shashi_04_Specialization_20.png) Each Custom Agent can hold the full context it needs to reason over. It can combine Zendesk actions, external connections, knowledge sources, or other flows and agents. They use agentic reasoning to follow instructions. Custom Agents are not limited to text either: they can also inspect images and attachments, which opens the door to a lot of practical use cases. They still expects a defined input and produces a defined output, but the path between the two can adapt to the situation. In practice, that means you can pull a block of logic out of an existing procedure and turn it into a Custom Agent, replacing a complex chain with a single action. The logic doesn’t disappear; it simply moves into a place that’s easier to manage, improve, and reuse. Because Custom Agents are self-contained, you can optimise their behaviour independently by adding new context, refining the instructions, or attaching more actions. Even if the underlying logic changes completely, the AI Agents, auto-assist procedures, or triggers that rely on them can stay exactly the same. That separation also makes them a much better fit for how teams actually work. Your CX team doesn’t own the return process itself, they own the conversation around it. Finance can own the refund eligibility logic. Logistics can own the return-label generation. Each team keeps its own responsibility, while the Custom Agents do the interoperating. # A new approach to running business logic in Zendesk Moving from the existing single-purpose conversational agent towards a network of purpose-built Custom Agents does require some rewiring in the way you think about, and configure, Zendesk. For me the best way to learn a new piece of technology is to apply it to a data-model I already know. That way I only need to think about the new parts (Custom Agents), and don’t need to think about the content (the data model and logic around it). If you’ve read this blog for a while, you might have seen this time and time again. Testing Custom Objects by [building a Pokédex](https://internalnote.com/custom-objects-part2-tickets/#getting-a-linked-object). Playing with Messaging metadata by building a [Movie Picker](https://internalnote.com/messaging-metadata/). Using [Jurassic Park](https://internalnote.com/multiple-intent-handling-for-ai-agents-advanced/) as a basis for multi-intent handling. The reason for me is simple. I have two kids. I understand how the world of *Pokémon* works. Similarly, a *movie* is a known entity: Title, genre, release date, poster and summary. I don’t need to invent a data-model or a process, I know these concepts thoroughly. So when I dove into Custom Agents, I did the exact same thing. I took a pre-existing context I knew, and tried to make it work in Custom Agents. That way I could focus on the new, and waste no time on anything else. For this article I’m applying Custom Agents to a problem I run into at home every day with my kids: ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Contrast-1.png) > What team of Pokémon should I use to counter this opponent? It’s a deceptively layered question. You need to look up a creature, infer its types, understand its strengths and weaknesses, fetch stats, and apply multi-step reasoning across several data sources. Perfect for a chain of Custom Agents. Let’s build it. ![CTA Image](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/image-2226.png) **Pokémon is the property of Nintendo, Game Freak, and Creatures, and appears here only as a friendly demo example. No Pokémon were harmed in the making of this post.* # Defining the process and logic Before you build a business process in Zendesk, it’s always recommended to map out the overall logic first and define the use cases you want to solve for it. As always, I prefer to start simple, and add complexity later. I’m building out three use cases: 1. **Single Pokémon feedback**: I have a Pokémon. What are its strengths and weaknesses? 2. **Pokémon team review**: I have a team of Pokémon. What are their combined strengths and weaknesses? 3. **Building a team**: I’ve caught a few Pokémon. What others should I add to complete the team? These use cases aren’t chosen randomly. They all play in the same field, so there’s bound to be some reuse of logic across all three. They also scale in complexity. So they’re the perfect way to learn the ropes, and grow into Custom Agents as we get experienced with them. If you want to map this to actual business use cases, you might think of retail product support. A customer may ask about a single product, a set of products they’re using together, or what’s missing to complete a setup. One flow can explain the features and limitations of a single item, another can review how multiple products work together, and a third can recommend the missing piece that rounds out the experience. ## Single Pokémon feedback This first use case is the least complex of the three. Our logic should flow as follows: 1. A trainer contacts us asking for feedback about a Pokémon. 2. We extract the creatures’ **name** . 3. We retrieve its profile to **get its type(s)**. 4. We pull the comparison sheet for each type to understands its strengths, weaknesses. 5. We need to **generate a report** with an overview of its capabilities. Additionally, We might expect trainers to ask about specific Pokémon to counter with, or specific Pokémon its strong against once they get the insights. But that’s a different use case so not answered by this one. This is the equivalent of a classic order retrieval flow where we extract an order number, and get the information of the order. We then pass this to a second API to retrieve its shipping status, and provide an overview to the customer of its status. ## Pokémon team review This second use case builds in complexity on top of the first one. 1. A trainer asks for feedback about his team of Pokémon. 2. We need to extract the team’s listing and stores **all names**. 3. **For** **each** name, we run our **get type** logic. 4. We then combine all these results into a **single overview**, aggregating the overall strengths and weaknesses Here too, we might expect trainers to ask us follow-up questions. Recommendations on how to improve their team, making sure its not skewed towards a single type or weakness. The complexity added in this logic is the **for each**, something that classic Action Flows can't do. And while doable in a conversational procedure, this is its own contained piece of logic, and we might want to reuse this in different scenarios. E.g. If we want to compare to teams in the future. When we transform this to real life use cases, this is the equivalent of having a customer asking about their warranty, and having an agent check the warranty status for every order line in that order. ## Building a team The third one basically combines and reuses parts of the logic from the previous two. 1. A trainer provides a list of Pokémon he already caught, and ask for recommendations to complete the team. 2. We **extract** the names. 3. We check **each** Pokémon’s type to get insights on what the team’s weaknesses and strengths 4. We use these profiles to **find additional Pokémon** **types** to fill the empty slots in the team 5. We return this list to the customer as a full profile. My main goal here is to see if the concept of “reusable components” actually works, and if I can use elements of previous agents, and recombine them with new logic into a completely new use case. In real life you might leverage an **Is this person a subscriber** agent and use it across both a *renewal* use case as well as a *change subscription* use case, reusing that logic across different flows. ## Recommend me a Pokémon This fourth use case comes from the follow-up questions we expect after the other ones. If we show customers a Pokémon’s strengths and weaknesses, we can reasonably expect them to ask which specific Pokémon would help fill the gaps. And since that’s not core to the main use cases, it’s best to extract it as its own piece of logic and invoke it only when needed. The core element I’m testing here is validating if we can pickup the result of a previous agent within a conversation, and use it as context for an entirely new use case. # Zendesk’s Action Platform Zendesk’s Action Platform has three elements we can use to build out business logic. There’s Action Flows, Custom Agents, and a variety of Actions. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Action-Platform-Small.png) Our next step is to break down the use cases into a set of flows, agents and actions. These will then be combined to get the expected behaviour and results. ## Action Flows Action Flows serve two purposes: Primarily they are workflows that run through logic and can invoke branching logic, actions and agents to get to a specific outcome. But, specifically for Custom Agents, they are the trigger that invokes these agents, and allows them to be called by specific updates to ticket, from AI Agents or auto-assist procedures and about a dozen more triggers. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Trigger.png) ## Custom Actions Zendesk’s Action Platform has multiple type of actions available. They can be prebuilt connectors for popular SAAS platforms, Custom API connections, MCP connections and dozens of built-in Zendesk actions. Almost all the data I need is available in the [PokéAPI](https://pokeapi.co/?ref=internalnote.com), a free service that provides tons of information about this world. These kind of services are another reason I prefer to test new features with these kinds of data models. There’s no actual customer data involved while there’s still good APIs available to work with. Other examples are [Omdb](https://www.omdbapi.com/?ref=internalnote.com), a movie database, or the [Marvel API](https://marvelapp.com/developers/documentation?ref=internalnote.com). Both are full of real data, actual API calls, perfect to test and play around with. So to get data from these endpoints, I’ll need to add a few Custom Actions: ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Custom-Actions.png) Each of these actions takes an input, calls an API endpoint, and then returns a specific output. One might for example take a Pokémon as an input, and returns an array of types. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Custom-Action.png) 👨‍💻 If this API was available as an MCP endpoint this would be a lot easier. I’d just need to add the MCP endpoint to the platform, and get access to all these actions in one go. But for now, classic API connections will do. ## Custom Agents Where Action Workflows are deterministic *if-this-th*e*n-that* flows, Custom Agents can reason and follow instructions to dynamically complete their goal. They can just use their instructions, or they can leverage actions, knowledge or even other agents and workflows, to do their job. A Custom Agent can run as a single agent, invoked by an Action Flow, or they can be part of a set of agents that work together, one after another, to complete a goal. So solve the use cases listed at the top of this article, I’ll need a series of Custom Agents that work together to resolve each use case. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Custom-Agents.png) # Building our first Custom Agent Let’s look back at our first use case **Single Pokémon feedback**. If we break this down into jobs to be done we need, extract a name, generate the profile and return it to the customer. ## Get Single Pokémon Extracting the name can be done in a few ways. We could use a ticket field and retrieve its contents. We could create an [entity](https://internalnote.com/entity-detection/) and get the platform to find the Pokémon and store it in a ticket field. While both work, I already see this not scaling if we later need to extract a team, since most ticket fields only allow for a single value, and we want this to work across email and messaging. So, instead of using these options, we’ll create a Custom Agent that extracts a Pokémon's name. We’ll give it access to the **Get Pokémon Data** action so it can easily check if the value exists. To make it possible for the agent to do so we need to give it access to **Ticket Comments** in the Action sidebar. The input of this Custom Agent is a `Ticket ID` and the output is a `Pokémon name`. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Get-Pokemon-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Get-Pokemon-2.png) ## Retrieve Type The second Custom Agent takes that retrieved Pokémon, and uses it to extract a profile for that creature. The input is the name of that Pokémon. Step one is retrieving a Pokémon’s type(s). We then use that type to retrieve all battle information for that type. This is done by adding our two Custom Actions to our agent via the sidebar. While we could do this as a deterministic flow just as well, the fact that we can have *one or many* types assigned to a Pokémon, it’s ideal for a Custom Agent. A single *“for each type”* contains all the logic we need to handle the zero, one or many use cases. What I also like is that I don’t need to be verbose. Custom Agents understand the in- and output of actions. They get the concept of a *for each*. I don’t need to declare variables or account for errors, loops or validation. I could capture these scenarios if I wanted to handle them differently, but by default the agent just handles them. The output of this Agent is a combined overview of the Pokémon’s capabilities. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Get-Type-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Get-Type-2.png) ## Generate Battle Profile Now that we have the data we need, we can generate the comment we’re sending back to the customer. In this scenario I decided to build this out as an agent that directly outputs a public comment to the customer. But we could just as well add this as an internal comment for the human agent to use. The main action of this Custom Agent is to take the output of **Retrieve Type**, and return it as a formatted reply in a specified structure. It’s here that we can jump into a short philosophical debate on how you structure your Custom Agents. The approach I took is to make **Generate Battle Profile** the wrapper for the entire use case logic. It first calls the Custom Agent that gets a Pokémon’s name. I then instruct it to get its type information via the second Custom Agent. And finally I instruct it to add a public comment to the ticket via its native Zendesk Actions. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Get-Battle-Profile-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Get-Battle-Profile-2.png) By building it this way the entire logic to generate a Battle Profile is contained in a single agent which we can then call wherever we need as a single object. The other approach would be to create a real Action Flow. That flow then first invokes the “Get Single Pokémon”, followed by a “Retrieve Type” before passing it towards “Generate Battle Profile”. It’s the exact same logic, but build as a deterministic flow chaining individual Custom Agents. While this is a valid approach, I opted for a Custom Agent wrapper approach. The reason being that I could forgo any conditionals. In an Action Flow I needed to add branching logic akin to “check if we could retrieve a Pokémon”, or “Make sure we have type data” to make sure we account for missing data and don’t fail. Whereas with Custom Agents that logic is built-in. I’ve seen the Custom Agent loop back on itself when it started with a wrong assumption. This kind of implicit validation and dynamically adapting to what’s happening is the power of agentic. So, as far as my initial explorations go, I think I prefer this approach where the entire use case logic is wrapped in a single Custom Agent, calling other agents.. But naturally, depending on the use case, we might need to combine both flows and agents. 🔎 If you wonder how I inspected the loop back behaviour: I proxy the Pokémon API through my own server for caching reasons. When inspecting the traffic I saw scenarios where the Custom Agent tried to first retrieve the Pokémon **Thomas*, failing to get its information, and then retrying with the Pokémon **Charizard*. So that shows it \*\*got an error **after* retrieving the name and using it to call the API, and then automitically going back a step to get another name, and retrying. # Expanding our workforce So that’s use case #1 covered. Now we need to expand our family of Custom Agents to handle the second use case. The main new elements here are extraction of a team of Pokémon, loop through them, and combining that information into a combined answer. ## Retrieving a team of Pokémon The basic approach of this Custom Agent is the same as the single retrieval. We give the Custom Agent access to ticket comments and our **Get Pokémon** endpoint, and ask it to find an array of Pokémon. Since trainers don’t tend to change their teams often, I thought it would be a fun exercise to try to store the retrieved team on the users’ profile by leveraging the **Update User** action available to Custom Agents. I then output the `team`. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Extract-Team-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Extract-Team-2.png) While you might expect a trainer to submit a written list of team members, the game is played on consoles and phones. So it’s easier for trainers to just send a screenshot of their team instead of writing down the names one by one. Similarly, a customer might send a PDF of their invoice, or a photo of their damaged package, instead of writing down the order number. Here too we see a scenario where Custom Agents shine. I created a second Custom Agent that contains the following actions (note this down!): - Lists ticket comments - Download ticket attachment ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Extract-Team-3.png) When adding these two actions you get the ability to read attachments. I instructed my Custom Agent to get the attachment a trainer submitted, and extract the team members’ names from that screenshot, and output them as the result. > The ability to read images or PDF files, and extract information from them directly within the platform is a game changer. I could have combined all the **“get team”** Custom Agents into one Custom Agent that first checks the comment, and then falls back to images when the comments contain no useful data. But purely for the sake of writing this article and understanding what runs when, I opted for “smaller component pieces”. In reality I might combine these two agents since they essentially have the same job: *Comment/Attachments in, team list out*. ## Generating a team profile This next Custom Agent is where the work actually happens. We first call our **Retrieve Team** Custom Agent, with a fallback to the **Retrieve Team via image**. We then do a *for each* on every team member, invoking our **Retrieve type** agent. Once we’ve got these pieces of data, we ask our Custom Agent to return them in a structured report, posting it as a public comment. To do this we need to also give it access to **All Types** via a Custom Action, so it can fill in gaps on the team and discover what types are available to fill in the gaps. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Team-Overview.png) This capability of looping over every team member and combining it into one comment is something that would have been next to impossible to build with regular Action Flows, but takes just a single line of text in a Custom Agent. ## Adding Knowledge to Custom Agents So far we’ve build two Custom Agents that combine Actions and other Custom Agents to get to the required result. But the third use case needs something else. It needs strategy. We ask our agent to take a few Pokémon, and build out a full team roster of six creatures from there. Building a team requires strategy. The Custom Agent needs to understand what a good team entails. That information is available on my [Help Center](https://support.internalnote.com/hc/en-us/articles/35883686485394-Pokemon-Team-Building-Type-Basics?ref=internalnote.com) as public information. So we can add it as an available **knowledge source** to the agent. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Knowledge-3.png) Our Custom Agent runs as follows: - First we extract the partial team of Pokémon via our existing Custom Agent. For each Pokémon we use our **Get Type** agent to get its profile. - Then, and this is the core element, we ask the Custom Agent to use the strategy outlined in our support document to list missing or overlapping types in our current team, and recommend changes. We then use the **Get Type** agent to retrieve specific Pokémon for that fit each type. The above might seem small, but it’s actually the core power of custom agents. Just like Claude or ChatGPT they can reason on information and provide output based on complex conditions. - Once we get those insights, we combine that information into a combined team of six Pokémon and return that as a public comment with the reasons why. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Knowledge-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Knowledge-2.png) Adding Knowledge to Custom Agent can be done in two ways. You can just add it within its instructions as text. That’s ideal for context that’s only relevant to that specific agent. But battle strategy information is not only relevant for our agent, its also useful for trainers directly, so it is publicly available on our Help Center anyhow, so we can add it as an external knowledge source. You might wonder why we need to explicitly add it to the Agent and why it can’t *just* find it on its own. That’s all part of Zendesk’s strict governance rules. Custom Agents only have access to those specific actions, workflows and knowledge pieces you give it access too. No outside information. No public internet. It can only see and act upon those elements you give it access too. This makes it secure and trustable. With the additional benefit that a scoped set of knowledge leads to better results since the answer is derived from relevant content. # Custom Agents in Action So far we’ve build out three powerful Custom Agents. But while we’ve seen agents invoke each other within their own logic, we haven’t configured how and when they should run within the platform itself. Custom Agents, currently, can only be invoked from within an Action Flow. In its most basic setup that means *something* triggers an Action Flow, and that flow has a single step *Hand off to Custom Agent.* ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Action-Flow-Single-1-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Action-Flow-Single-2-3.png) This means that even if all your logic is contained within a Custom Agent, you still need a flow in order to use it. This allows for some additional benefits: we can add specific conditions before we invoke the agent like checking for a tickets’ intent. Or making sure its the right brand. Or we validate a customer has a specific tag before we move forward. The downside of this setup is that an Action Flow can only have a **single trigger**. So if you want use your Custom Agent for both ticket based actions as well as AI Agents, you need to create two workflows, one for each trigger. 💡 I’d love for Zendesk to split the workflow trigger and workflow logic into separate pieces. I could image having a long list of triggers (ticket has intent “Grade my Team, AI Agent use case “Team Evaluation”, Agent Copilot Procedure “grading a team”), and each trigger invoking the same workflow. ## Configuring our triggers For this article I opted to keep things simple. I created a single Action Flow that fires on *Ticket Created*. I then check if its the right form, and if so, the flow continues. Before I built this flow I defined three custom intents in Intelligent Triage. One for each use case. I use these to tag my conversations with the right intent, so I know which Custom Agent should run. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Intents.png) My workflow then checks for these intent (tags) and branches based on the tag. It has two nested branches that check for each of the intents. I have to use nested branches here since branching in Action Flows only allow for two outcomes. I can’t do an array of options like you can with conditional logic in AI Agents Advanced. Each condition then invokes their respective Custom Agent to do its thing. Here too you can see the benefit of wrapping all logic in one Custom Agent. I just need to call a single Custom Agent per branch. Once fired, the Custom Agents’ logic runs and we see the result as comments in our tickets. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Action-Flow-Full-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Action-Flow-Full-2.png) ## End user experience Now that we have our three Custom Agents and a way to trigger them, we can *finally* put this all to the test. I sent three emails to my Zendesk environment, each targeting a specific intent. For example, when we're looking at the use case for "Hey I just caught a Pokémon, what are it's weaknesses and strengths?", the Custom Agent returned with a nice battle profile for that creature. Similarly, when I submit half a team, the *Team Recommendations* agent tells me what types I should look for next. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Result-Single-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Result-Basic-Recommendations-3-1.png) Example results for the **Single Pokémon* and **Build me a Team Use* cases The coolest use case, for me, was the one where the Custom Agent was able to parse images. This unlocks a whole new set of capabilities you can now do *in* Zendesk, without requiring external apps or tools. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Result-Team-1-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Result-Team-2-2.png) # Collaborating with other Agents There’s one more component to Custom Agents we haven’t touched upon, and that’s the way they interact with Conversational AI Agents and the auto-assist procedures for Agent Copilot. Both now have the ability to invoke Action Flows from within their procedures. Agent Copilot had this for a while, AI Agents Advanced’s support is being rolled out at this moment. The way you make Action Flows, and by extension Custom Agents, available to these agents is by adding an **Run on demand** trigger at the start of your Action Flow. When doing so you can define the inputs your flow requires, and the agentic procedures for AI Agents and Copilot will pick those up. To test this out I decided to build out the fourth use case: **Team Recommendations**. When a trainer contacts us, the Custom Agent automatically replies with feedback for the types effective against their single Pokémon or team. Implied in this use case, but not triggered, is the possibility for the trainer to ask for recommendations on how to improve their team with actual create recommendations. We might for example recommend replacing a water-type with a grass-type to cover more area, but a trainer might want to have names of good grass-type Pokémon like Bulbasaur to add to their team. I build a new Custom Agent that reacts when the customers asks for create recommendations. The agent looks for the earlier *type* *recommendations* we already provided. From these recommendations we then instruct the agent to filter out missing types, and use the same **Get Type** action to get a Pokémon that fits each type. We then return a public comment with the recommended Pokémon a trainer should add to their the team. It’s a fairly classic use case similar to how you might imagine scenarios where customers already bought a few products, and you want to recommend a perfect addition to their collection. If we combine all this logic into a Custom Agent, it looks similar to this: ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/On-Demand-2.png) Once we’ve build our Custom Agent, we can add it to a new Action Flow that gets triggered **on demand**. This on-demand trigger is what makes the flow accessible for AI Agents and Agent Copilot. In the *on demand* trigger, you should add `zendesk_ticket_id` as an input. This way we’re sure to have the Ticket ID available within our flows, and our Custom Agents that depend on it can use that input too. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/On-Demand-1.png) After activating the flow, we can go into Knowledge Admin and create a new procedure that runs when a customer asks for recommendations. 💡 It can take up to an hour for new **On Demand* flows to become available in procedures. This procedure recognises the intended use case, and then invokes our Action Flow. And with the new **Pre-approved** mode for actions, it can run autonomously when detected. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/On-Demand-3.png) Once the Procedure is active, auto-assist will trigger when a customer asks for more detailed recommendations based on the type suggestions we made earlier. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Result-Team-2-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Result-Team-3-1.png) You might wonder why I went for a procedure over a regular trigger. Mostly it depends on when I think this use case might be triggered. “*Give me feedback on my team”* might be the initial intent, “*how can I act upon that feedback”* is a follow-up. In reality, I think you probably will create procedures for AI Agents and Agent Copilot for all your use cases. “*Where is my order*”, “*Cancel a flight”*, “*Get a refund*”. These procedures, rather than Action Flow triggers, will own and run the conversation. They guide the customer from question to resolution. And while doing so they will invoke Action Flows at the right time to run Custom Agents or other actions. So while I invoked my original three Custom Agents via *Ticket created* triggers, in a real setup I’d always invoke them via AI Agent or Agent Copilot procedure instead. That way I can make sure my conversational agents can handle *every* use case, even if they hand off logic to Custom Agents from time to time. Custom Agents invoked by trigger, for me, are better for routing logic where we change the priority of tickets. Or for enriching tickets with context like VIP status, membership ID, booking dates e.a. Elements that don’t drive a conversation, but make routing, prioritisation and reporting easier. # Build experience While building these Custom Agents I did run into a few hiccups and caveats I wanted to highlight. The first one is that without an input of `Ticket ID` none of this works. Custom Agents require that input in order to be able to retrieve all context. You’d almost wonder why this is not just a default context at this point, but since this is still in early access, I assume that might change. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Input.png) The second hiccup is the fact that each time you change a Custom Agent, the Action Flow that calls it gets reset and you need to reselect the agent and define its input again. And during testing this happens *a lot*. And while this might be necessary when inputs or outputs change, from a deploy > measure > improve standpoint you would want a system that allows for improvements on one component without the requirement of reconfiguring all parents and children too. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Error.png) The third one is a lack of audibility or logging. While the *Test* mode in Action Flows allows you to inspect what’s happening, I’d love to see a log of everything the Custom Agent did. Both from an accountability point of view (what did it do?), as from a troubleshooting point of view (why did it do this?). But here too, this is an EAP, and you can’t have AI Trust without governance and logging, so I’m sure this will arrive sooner rather than later. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Test.png) Despite those three caveats, my overall experience with Custom Agents has been very positive. In my test use cases, I tried to exercise the full range of capabilities available, and they all worked right out of the box. Sure, configuring inputs by hand is annoying, and switching back and forth between Custom Agents and Action Flows in the Admin Center gets old fast. But those are UX issues, and UX issues can be fixed. From a “what do they do as agents?” perspective, they do exactly what they promise, and they’re remarkably easy to set up. # An autonomous service workforce I started with a basic question: how do Custom Agents work and can I build my logic in these agents. My use cases were complex, but achievable, and most important I fully understood them before I started building. So, how did it go? Being able to break down a process into its component pieces and build/validate each one of them as its own entity is great. Compared to monolithic procedures that need to contain *all* logic, the combination of procedures and Custom Agents makes for faster configuration. The reusability of components also made it so that configuration of the second agent got a head-start since a lot of the work was already done, to a certain extend, in the first one. And as your use cases, actions and family of agents expand, so will the available library of reusable parts in your environment. And all of these are available to build the next use case, or improve an existing one with new options. The one thing I did not like was the way these Action Flows and Custom Agents are triggered. There’s a lot of logic compressed into a single Trigger block, and it feels a bit overloaded at the moment. So what’s next for you, the reader? I’d recommend taking a use case you really know well, either a real one or a fictional one like mine, and try to build (or rebuild) it with Custom Agents and Action Flows. For a fiction-scenario like this article, you can just repeat what I did within your own world. If it’s an existing procedure, find a contained block of logic (e.g. is this a VIP?) and copy that logic over to the new Custom Agents. You can test that logic directly within the Action Flow builder, and once it works, you can inject it in your procedure, replacing the old logic. That’s it. Repeat this overtime and gradually you can migrate your procedures gradually and controlled towards this new world of a family of Custom Agents running your operations. With Custom Agents something has really changed in the way we work in Zendesk. Similar to how Queues extracted routing logic from triggers and make it more powerful while easier to manage at the same time, so do Custom Agents. They extract business logic from procedures, giving them more power, while making them easier to manage. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### Zendesk Relate 2026 - Evolving the Zendesk Resolution Platform URL: https://internalnote.com/zendesk-relate-2026/ Last updated: 2026-05-19T17:47:49.000Z Zendesk Relate is the company’s flagship annual event for customer and employee service leaders, bringing together more than 2,000 attendees for three days of keynotes, product sessions, workshops, networking, and customer conversations. This year, the conference is taking place May 18–20 in Denver, showcasing us the latest evolution of the Zendesk Resolution platform. For the last three years, Zendesk has been pushing a single vision forward. Customer and Employee service isn't about closing tickets. It's about resolving customer questions. Those resolutions are made possible by its AI Agents working autonomously, or in collaboration with your agents. At Zendesk we call that concept the Resolution Platform. A connected platform of Agents and Copilots that empower your service operations. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Frame-1000006240.png) # The evolution that got us here Zendesk's AI journey started with AI capabilities bolted onto the existing Suite. AI Agents to automate the front line. Agent Copilot to assist the human team. Zendesk QA to score the result. Analytics to surface the insights. Each useful in isolation. Each letting customers cherry-pick which part of their operation they wanted to infuse with these new AI capabilities. ![Resolution Platform.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Resolution-Platform.png) As the platform evolved, those capabilities stopped behaving like individual features. They started behaving like one connected system. AI Agents pass conversations with full context to Agent Workspace if an escalation is needed. Omnichannel Routing and Intelligent Triage make sure the ticket reaches the right agent. That agent is assisted by Agent Copilot to gather any additional context, and uses next-best actions and suggested replies via auto-assist to resolve the conversation. Each resolved conversation is picked up by Analytics and QA giving your team the insights they need. As the different features got pulled into one platform, the focus shifted away from an AI-powered ticket platform and toward a Resolution Platform. > Stop counting tickets and start measuring resolutions. At the AI Summit last October, Zendesk introduced the Resolution Learning Loop. Analytics no longer gave your team data on how they were performing, but the system also started leveraging that data to improve your operations. A continuous System of Action where insights from one step power improvements and actions for the next. They introduced resolution-based pricing and started laying the foundation for a new era of customer service. Relate 2026 is the next big step in that evolution. # Resolutions and Learning For most of Zendesk's history, the support inbox, your agents, and tickets were the centre of gravity. Anything before a human agent touched a ticket was seen as deflection. Anything after ended up as reporting. Self Service was the vision, and we measured the work of human agents by counting tickets and focusing on first reply time, average handling time and customer satisfaction. That balance has now changed. Quick Answers answer questions before a conversation even gets created. Agentic AI Agents handle more and more of the front line by automating even complex use cases. What used to be called deflection is now the bulk of the work. And your customers resolutions often happen *before* anyone on your team sees or touches the conversation. So the centre moves. In this new world resolutions sit in the middle. And two flows radiate out from it. ![1 - Loops.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/1---Loops.png) The first is the **resolution flow**. Your customers, AI Agents, Agent Copilot and your team reside here. This is where questions become answers. Where requests become refunds. Where enquiries become bookings. Every interaction leads up to a resolution. The second is the **learning flow**. This is where conversations turn into opportunities to improve. Where QA reports drive procedure updates. Where ticket patterns become new knowledge articles. Where admin insights become routing rules. Where every interaction becomes an opportunity to do better. These two flows feed each other. More resolutions generate better learning data. Better learning data drives more suggestions to improve. Implementing those changes leads to better resolutions. This is what we call the true Resolution Learning Loop. The releases at Relate 2026 strengthen both sides of the Resolution Learning Loop. And they do so in a way that makes the cycle feel more connected than ever. [![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/1---Notion-1.png)](https://internalnote.com/zendesk-relate-2026-specialised-ai-agents/) # Specialised AI Agents Gone is the differentiation between AI Agents Essential and Advanced. All Zendesk customers now have access to a team of autonomous AI Agents that run your operations. These AI Agents are now agentic first. They can reason across interactions, follow procedures and dynamically adapt to a customer's context across messaging, social, email and web forms. And later this year we'll see the availability of the previously announced AI Agents for Voice, completing the multi-channel vision announced last year. For companies that are interested in Zendesk's AI vision but are tied to older service platforms, the new Forethought AI Agents by Zendesk brings these same resolution-driven AI Agent capabilities to their current platforms. But it’s Agent Builder with its specialised Custom Agents that is the biggest announcement this year. Until now Zendesk had automation capabilities that were purpose-built to run on specific channels. AI Agents for customer-facing conversations. Agent Copilot procedures assisting human agents. Triggers and Action Builder for deterministic flows on top of tickets. But as automation and use cases grow, so does the complexity and need to automate specific business processes and handle more complex logic inside the platform. Custom Agents offer a way to handle these processes directly inside the platform. You can build a Claims Agent that extracts facts from documents, validates serials, detects failure modes and proposes remedies. You can build a Refund agent that runs that refund logic. Or create an agent for fraud detection. These Custom Agents can run autonomously on conversations, or can be invoked by AI Agents or Agent Copilot as part of their existing procedures. They offload a lot of complexity into a contained block of logic, reusable across your operations, deeply integrated with the rest of your business processes. The arrival of these autonomous service agents shows how the relationship of AI Agents and Agent Copilot with the underlying knowledge and action layers is evolving. Instead of AI Agents and Agent Copilot working as separate agents, the platform is moving towards a multi-agent environment where conversational agents can pass jobs to Custom Agents for certain sub-processes, while they retain control of the overall conversation. That gives the system the ability to automate business processes that go beyond simply handling a conversation and promotes component usage, making it quicker to scale operations and automate and resolve more complex use cases. Or as the keynote framed it: **an autonomous service workforce**. [Zendesk Relate 2026 - Specialised AI AgentsIn the previous article in this series, I laid out the new shape of the Resolution Platform. Resolution sits in the middle. Two flows feed it. The resolution flow handles the customer’s question. The learning flow makes the platform better at the next one. This article is about the first![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-c9795d9340c967d48b87c6bbb5f70b6c80d7d85baa46631b5d967c0afd1301fd.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/1---Header-1-a032e9d8fb2fef2dada7377ac592ea2a486f307fa1b493e53cdf43746692396f.png)](https://internalnote.com/zendesk-relate-2026-specialised-ai-agents/) [![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/2---Notion.png)](https://internalnote.com/zendesk-relate-2026-proactive-copilots/) # Proactive Copilots That new resolution capability feeds directly into the **learning** side. At Relate, Zendesk introduced a Copilot for every supporting element of the Resolution Learning Loop. Historically, QA and Analytics produced reports. A Zendesk admin looked at the reports and interpreted the numbers. If numbers showed an issue, the admin analysed the problem, tried to identify a cause, and planned a fix. That solution was built by the Admin in in Admin Center or Knowledge, and then deployed. Once deployed, the impact of those changes showed up in new reporting and the next round of improvements could begin. It was a human-led loop from start to finish. With these new Copilots, the old model of learning changes from a human-led reporting cycle into a genuine collaboration. Instead of simply producing dashboards and metrics for an admin to interpret, the platform now helps teams ask better questions, uncover patterns and translate insights into action. Each of these Copilots offers insights to Admins on what’s happening in their instance. They offer proactive recommendations on what can be improved. These recommendations contain context on why the suggestion is made, what the impact will be, and how to implement it. And the AI assistant part of every Copilot allows admins to dive deeper, plan solutions, approve them and have them deployed automatically - **Analyst Copilot** makes reporting feel less like "build the dashboard" and more like "ask the question." - **Knowledge Copilot** keeps your articles and procedures in step with real customer behaviour. - **Admin Copilot** goes a step further by recommending changes to setup, helping plan improvements and executing them after approval. The result is that the platform is no longer just describing what happened. It is actively helping improve the system itself, suggesting changes to procedures, knowledge and routing based on interaction data and operational metrics, while your team remains in control of the decisions that matter. This is what makes the Resolution Learning Loop real this year. It's no longer a sequence of separate activities stitched together by humans doing all the manual work. It's a collaborative system where Copilots and people work together on one platform, and where the output of one side continuously improves the other. For team leads and admins, that changes the job in a very real way. The old role was mostly "*I build.*" Triggers. Macros. Reports. Procedures. All the hands-on configuration that came with them. The new role is increasingly "*I plan.*" You bring the strategy, goals and judgment. The platform proposes the implementation. You approve, adjust or redirect. So instead of spending most of your time inside settings menus, you spend more time deciding what your CX operation should look like and how it should evolve. This enables real shift in the admin role. They’ll spend less time assembling the machine. And more time telling it where it should go next. [Zendesk Relate 2026 - Proactive CopilotsIn my introduction to Relate 2026 I described the Resolution Platform as two flows feeding each other. The resolution flow handles a customer’s question. The learning flow makes the platform better at handling the next one. The previous article in this series covered the first flow. The Autonomous Service Workforce![](https://static.ghost.org/v5.0.0/images/link-icon.svg)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/2---Header-26e0d6d6a5395ce815aee23de4f9ac8cd893598a4de28e335d99e1aed5d80573.png)](https://internalnote.com/zendesk-relate-2026-proactive-copilots/) [![3 - Notion.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3---Notion.png)](https://internalnote.com/zendesk-relate-2026-connected-ai-systems/) # Connected AI Systems Both AI Agents and Copilots run on top of Zendesk's platform. And that platform is quickly shedding its ticketing past and evolving into a connected platform ready for a world powered by AI. Zendesk's collection of integration solutions are all being combined into one Action Builder platform. Those Action flows are accessible to Agent Copilot, to classic triggers, to external webhooks and now to AI Agents. A single action can be reused at any point in a conversation's lifecycle, and improvements to its logic directly impact every part of the platform that uses it. For those who see the benefits of agentic reasoning over deterministic logic towards agentic reasoning when it comes to handling complex workflows, well, the new Custom Agents also live also within this ecosystem, making them available of part of any workflow you need. Action Builder workflows themselves become more powerful too. The set of native connectors has expanded with more than a dozen new integrations since last year. Google Drive, Asana, Microsoft Teams and Jira to name just a few. But while Zendesk has expanded the library of connectors, it isn't feasible to have a native integration for every platform. Custom Actions already let you add new capabilities one API at a time. The newly added support for the MCP protocol makes it possible to connect to external systems and ingest their entire available API library at once. And since both AI Agents and Agent Copilot can call Action Builder, they get access to those new MCP connectors too. That's not the only connectivity change though. For companies that want to integrate Zendesk into their existing tools, there's also the new Zendesk MCP server, making it easier to do things like create tickets from within Microsoft Copilot. And since more and more customer searches starts in tools like ChatGPT, the new *LLM as a Channel* allows Zendesk-powered AI Agents to resolve customer questions directly inside those tools. Service goes wherever the customer already is. As AI chatbots become more common, users are increasingly expecting every interface to feel conversational first. We’re seeing that shift in the way people search with Gemini and code with Claude Code. Zendesk is following suit by rethinking the role of its Help Center. In a world where contextual and generative AI can deliver answers directly, the traditional support-article browsing experience is losing relevance. With the launch of the new Conversational Help Center, Zendesk is replacing the familiar list of blue links with Quick Answers. Those can escalate directly to AI Agents, building on the work it introduced earlier this year with the [embeddable web widget](https://internalnote.com/embeddable-zendesk-widget/). [Zendesk Relate 2026 - Connected AI systemsThe previous two articles in this series covered the two sides of the Resolution Platform. AI Agents resolving customer questions. Copilots closing the learning loop. But underneath these processes lies the platform itself. The engine that powers the resolution flow, runs the learning flow, and connects both to the rest![](https://static.ghost.org/v5.0.0/images/link-icon.svg)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/3---Header-1-9d57c418a40c5e99d899aad28437efc588e612c824179e7e71ddb05a0ac7c29b.png)](https://internalnote.com/zendesk-relate-2026-connected-ai-systems/) ![4 - Notion.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/4---Notion.png) # Expanding the platform Sitting alongside these three main themes is an overall **platform expansion**. Employee Service and Contact Center both reach new maturity at Relate 2026. For Employee Service, there’s a new specialised AI Agent, built on top of Unleash, that pulls knowledge from Google Drive, SharePoint, Confluence and other enterprise systems, while respecting the role-based access controls already in place, making it the ideal AI Agent for IT, HR or other employee-first use cases. The release of a native ITAM offering rounds out the offering, with asset tracking, service catalogs, approval and tasks lists built into the Zendesk workspace. This allows companies to track and manage their devices, licences and peripherals directly inside Zendesk, while linking them to management tools like Intune or Jamf. All visible in the same workspace where the IT team handles tickets. Underneath this Zendesk for Employee Service sit Custom Objects. They power the entire ITAM stack, and now get support for parent-child relationship and new field types like rollup fields and currency fields. Custom Objects are now part of the Action platform too, allowing them to trigger custom flows, or be updated when something happens on a linked ticket. And with the new AI builder integrated in Admin Copilot you can now describe the objects you need, and the system builds the structure for you. For Contact Center, Zendesk now offers it bundled with AWS into a single contract, making onboarding a lot easier than before. Zendesk’s new Voice AI Agents will also run on Contact Center, and multimodal capabilities like browser-based video calling and screen sharing will arrive in EAP soon. ![0 - Notion.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/0---Notion-b.png) # A New Resolution Platform Step back from the announcements, and we can see two different paradigms in motion. ### Zendesk is changing the way you interact with the platform. For most of its history, Zendesk was a tool you used. You logged in. You configured. You read tickets. You solved them. You ran reports. The platform supported the work, but didn’t drive it. Relate 2026 is where that changes. A family of autonomous agents now drive the experience. AI Agents resolve conversations. Agent Copilot assists agents. Specialised Custom Agents handle the complex processes. Copilots recommend changes and provide insights. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/0---Agents.png) Service stops being something humans deliver with AI help. It becomes something the platform delivers, with humans in the loop where they add the most value. The Resolution Learning Loop keeps everything improving. Your team’s job is to set direction, validate outcomes, and handle the cases that genuinely need a human. ### Zendesk is refactoring the way the platform operates Instead of a platform that revolves around a ticket inbox, it’s turning into a platform that revolves around solving use cases. At the top sits a team of agents, both human and AI, driving towards resolution. They work across any channel, and the interfaces you use to interact with them quickly become irrelevant as content adapts dynamically to fit the interface. Below those interfaces, Intelligent triage detects Intent, which in turn invokes the right process to resolve that conversation, while omnichannel routing makes sure tickets end up with the right agent. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Resolution-Platform-2.png) These use cases are supported by the platform underneath: knowledge, procedures, action flows and data, together with insights and governance. Combined they give your agents the building blocks they need to resolve a conversation. Individually they each get their own Copilot, providing insights, recommending improvements, and helping your team configure the environment and create content. The platform is shifting into an engine that powers your resolutions and empowers your admins. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/0---Notion-autonomous.png) # The Autonomous Service Workforce Three years ago, Zendesk's story was *AI for the era of customer service.* Last year, the story sharpened to a single word: *resolution.* This year, the story takes its next step. *The Autonomous Service Workforce.* The Resolution Platform now runs both loops. The resolution flow handles the customer's question. The learning flow makes the platform better at handling the next one. Teams of specialised AI Agents handle the work. Proactive Copilots keep the system improving. That's the Relate 2026 story. Linked throughout this article, and also available on the homepage of [Internal Note](https://internalnote.com/tag/relate26/) are three other articles that dive deeper into the announcements. Enjoy! ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/1---Banner-4.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/2---Banner-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3---Banner-1.png) ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### Zendesk Relate 2026 - Specialised AI Agents URL: https://internalnote.com/zendesk-relate-2026-specialised-ai-agents/ Last updated: 2026-05-29T07:20:32.000Z In the [previous article in this series](https://internalnote.com/zendesk-relate-2026/), I laid out the new shape of the Resolution Platform. Resolution sits in the middle. Two flows feed it. The resolution flow handles the customer's question. The learning flow makes the platform better at the next one. This article is about the first flow. The front-end. Where an autonomous service workforce of AI Agents meets customers and turns questions into resolutions. It's the loop most Zendesk customers know best. AI Agents have been live across messaging, email for a while now. Their agentic procedures, announced at Relate 2025, are now generally available. Most teams have at least some kind of AI Agent active today. The next phase isn't about getting AI Agents to resolve more. They already do. The next phase is about specialisation. Moving from general-purpose conversational AI Agents to a coordinated team of specialised agents that reason, take action and resolve work across every channel and every workflow. This is what Zendesk is calling the **Autonomous Service Workforce**. And it's the headline of Relate 2026. # The three releases that build the workforce Zendesk frames the Relate 2026 AI Agent announcements in three connected releases. - **Agentic AI Agents.** Now generally available for messaging and recently for email. They are the foundation everything else builds on. - **Voice AI Agents.** They’ll be available later this year for both Zendesk Voice and Contact Center. The same agentic capabilities, applied to the phone channel. - **Agent Builder and Custom Agents.** A transformative way to create custom agents that let you automate your business workflows. Together these turn the AI Agent product from "one capable AI Agent" into a coordinated workforce of autonomous service agents. ## Pricing that follows the work In the last year we moved from counting tickets toward measuring resolutions. Success means actually helping customers, not just deflecting tickets. Until now, Zendesk charged a flat rate per AI Agent resolution, where resolution roughly meant "*the AI Agent didn't escalate.*" That measurement made sense when escalation was the main failure mode. As AI Agents take on more nuanced and complex work, the way we measure their effectiveness needs to be sharper. ![2 - Pricing.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/2---Pricing.png) Four new tiers replace the single resolution rate. - **Unassisted conversation** (Free) The conversation triggered only small talk or system replies and no automation was performed. - **Assisted Escalation** (Free) The AI Agent contributed to the interaction, but a human agent completed the resolution. The AI did some work, just not all of it. - **Contained Resolution** (Free) The AI Agent handled the request from start to finish. No human involvement. The customer didn't come back, so we can assume it's resolved. - **Verified Resolution** (Paid Resolution) The AI Agent fully resolved the request, and a verification step confirmed the customer's issue actually got resolved. These new resolution metrics are now visible throughout the system. They appear in AI Agents reporting, and show up in ticket audit logs of AI Agent or Support tickets. ![2 - Reporting.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/2---Reporting.png) # Agentic on every channel The agentic capabilities Zendesk announced at Relate 2025 are now generally available across messaging and email. That's a meaningful expansion. Email has historically been the hardest channel to automate well. For messaging, agentic procedures and generative knowledge replies are the new default. The Knowledge Reply (the successor to the old uGPT flow) now behaves like a procedure you can edit and extend. Procedures and dialogue flows can link to each other. For email, agentic AI just became the new default too. AI Agents understand incoming emails, answer from connected knowledge sources and execute business procedures through integrations, all without hand-built dialogue flows. For more depth on what changed, see my full overview article on [What's New for Zendesk AI Agents Advanced](https://internalnote.com/whats-new-for-zendesk-ai-agents-advanced). ![2 - Agentic Email.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/2---Agentic-Email.png) 💡 Agent Copilot’s auto-assist also resides under this umbrella. While it almost always runs in an suggesting-mode next to your team, it can also run now also run some actions autonomously for your team while they're interacting with the ticket. # Voice AI Agents Voice has been the holdout channel for serious automation capabilities. Until now most voice systems were built around routing. Get the call to the right human. Don't lose the customer on hold. That's a reasonable goal when the AI can't actually resolve the question. Voice AI Agents change that. The same agentic capabilities running on messaging and email now run on voice. The AI understands the request. Uses your knowledge and policies. Completes the task. Not just passes it along. Imagine a stranded traveller trying to rebook a cancelled flight. The classic experience is a phone tree. Press 1 for existing bookings. Press 2 for changes. Hold music. A long wait. A repeat of everything the IVR already collected when a human finally picks up. The Voice AI Agent experience is different. The AI identifies the customer, asks for context, finds the available options and confirms the booking. No human intervention. No menu navigation. No wait. ![2 - Voice.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/2---Voice.png) What makes this work at scale is the combination of capabilities Zendesk has been building. Since Voice AI runs on the same automation stack as its other AI Agents, they can pull in Knowledge, procedures and actions to automate use cases over voice, while also allowing for a seamless handover to a human agent with context. # Agent Builder: a workforce of custom agents The headline release of the AI Agents pillar has to be the new Agent Builder. A new capability in the platform that lets you create custom AI agents for unique business workflows. Custom AI agents aren't customer-facing. They handle the back-office work that sits behind a customer interaction. Validating data. Reading attachments. Processing claims. Confirming eligibility. Processes that are an extension of customer interactions, but aren't visible to the customer. ## Why Custom Agents? The Zendesk platform has always had this tendency to have multiple features that execute on the same actions in different ways. Chat and Messaging both offer conversational interactions. Views and Agent Home both surface work to be done. Triggers and Omnichannel Routing both assign tickets. Triggers and Action Builder workflows both run conditional actions. Macros and Auto-assist both automate replies. The difference between each one is the underlying technology that powers them. Views, Action Builder workflows, macros and triggers are deterministic and hardcoded elements. Omnichannel Routing, suggested replies and Agent Home are based on Zendesk's newer adaptive AI capabilities. As the platform evolves, more and more of the older capabilities get replaced with similar, but more powerful, features. The same goes for Custom Agents. They take the deterministic logic that Action Builder offers and turn it agentic. So why does that matter? ![7.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/7.png) Action Builder workflows are conditional decision trees. One step leads into the next, and you can branch flows based on a condition (*is the order older than 30 days?*). But as the number of conditions grows, so does the complexity of maintaining that flow. If you want to check three conditions, you quickly end up with an unmanageable set of branches. For those that used Dialogue Builder or Flow Builder for Zendesk's AI Agent and Answer Bot, this might sound familiar. Similar to how Agentic Procedures made it easier to define complex logic for AI Agents, Custom Agents will do the same for Action Builder workflows. Instead of building a rigid decision tree, you have instructions the Custom Agent should follow, reason about, and provide an output for powered by modern LLMs and AI capabilities. ## When to use Custom Agents Zendesk's Action Platform serves one purpose. Based on input triggers, a flow is followed, which results in an output to run business logic. Those input triggers can be AI Agent or Agent Copilot procedures. They can be things that happen to a ticket or custom object. An external webhook. Or another workflow or Custom Agent. The output can be passed back to the trigger that called the flow. Or it can pass information and actions to external systems or to Zendesk via the available integrations. And during the flow, the system uses branches, conditions, internal and external integrations to work through its logic. Action Builder workflows are great for deterministic flows where we expect A to go to B and then branch into C or D. Custom Agents are the answer for when you've got complex logic, for flows that can't easily be described as a chain of events, or when you need AI capabilities like LLMs, text generation, image classification, data extraction, summarisation or all those other cool capabilities modern AI Assistants have. So that's when to choose a Custom Agent over an Action Builder flow from a technical perspective. But there's also a decision to be made from an architecture standpoint. Both Custom Agents and AI Agents or Agent Copilot auto-assist procedures can run agentic reasoning logic. So when do you put logic in a procedure and when do you assign it to a Custom Agent? For me there are three things to look at: 1. **Complexity.** How complex is the logic? Does it overload an admin trying to understand the procedure if we contain it all in one giant procedure? 2. **Reusability.** Is this decision or reasoning something we need for a single process? Or are there multiple use cases where this logic reappears? 3. **Capabilities.** Do we need AI capabilities that procedures don't have, like image classification? If the answer to any of the above is yes, that's a good signal to extract your logic from a procedure and build a Custom Agent instead. Any part of the platform that needs to verify VIP status or check return eligibility can call a specific Custom Agent that handles that logic. The input is the context (the customer email or order number). The output is the decision (this is a VIP, and no you can't get a refund because the order is older than 30 days). This simplifies your agentic procedures a lot. An AI Agent procedure can offload the refund eligibility check to a Custom Agent, which returns just the outcome, after which the AI Agent procedure resumes. Similarly, an escalated ticket can trigger a workflow that first checks "customer type" and changes priority based on the type, which then influences routing. And Agent Copilot can alert an agent handling a ticket that this customer is a high fraud risk because they've already requested 42 refunds this year. # Action Platform, available to every kind of agent If we take a look at all features that run logic in Zendesk, we can redefine them as follows now that Custom Agents are available: - **AI Agents** autonomously resolve customer questions. They use agentic procedures to do this. These procedures can retrieve knowledge, call Action Builder workflows or Custom Agents to get the input and output they need to move forward. - **Agent Copilot** runs procedures alongside human agents. It assists agents with suggested replies and can run workflows and Custom Agents by either suggesting them or executing them autonomously or calli into knowledge and custom actions to get the input it needs. - **The ticket lifecycle** can also require logic to be run. A ticket needs context so it can be routed correctly, for example. This context can be gathered by Action Builder workflows or Custom Agents. - **Action Builder workflows** run through their determisitic decision tree when called. This can be deterministic logic, or they can invoke Custom Agents when reasoning is required. They can get and set data in Zendesk, and connect to external platforms via pre-configured connectors, custom API actions or MCP connectors. - **Custom Agents** run agentic logic when invoked. They can use their own knowledge sources, call API integrations, or invoke other workflows or Custom Agents to run their logic. Combined they turn into Zendesk’s Action Platform where multiple types of triggers can invoke workflows, custom agents, custom actions or a combination theirof. ![Action Platform.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Action-Platform.png) # Integrating Custom Agents in your environment ## Three approaches to start using Custom Agents today If you're an existing customer who already uses AI Agent and Agent Copilot procedures, you might wonder how Custom Agents fit into this setup. There’s three realities that inform that process. The first one is that procedures grow in **complexity** over time. A procedure that handles refunds might look at just the order date at the start, but can quickly grow into a complex process with multiple checks and validation steps. To keep your procedure manageable, you can use Custom Agents to extract all the "refund eligibility" logic out of the procedure into its own Refund Agent. The input is the customer and order number. The output is a yes or no with an explainer. The second opportunity lies in noticing when you're **reusing** logic. If both your "make a reservation" and "modify a reservation" use cases need to check availability, you can extract that logic from both procedures into a "check availability" workflow and call that workflow from both procedures. This way you're sure that all procedures that need that check follow the same logic, and if that logic ever changes you only need to modify it once. The third opportunity lies in that component logic. Overtime you'll build a large library of workflows and agents that all run specific business logic. As you start covering more use cases, or shift use cases from human-handled to AI agent-automated, you can reuse those exact building blocks or recombine them for new flows, or one of Zendesk’s **Copilot can suggest** an existing flows that might be a perfect fit to add to another procedure. ## Leveraging the Action Platform in procedures Take a look at the flow below. This is a typical refund use case where we first get context. We then validate the customer, check eligibility, and then offer the customer options on how they want to get repaid. Traditionally you’d write down this logic as part of an AI Agent or Agent Copilot procedure, documenting all the necessary steps in the process while leveraging API integrations to get and set data. ![Procedure 1.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Procedure-1.png) But if you take a look at this entire process, you see there are smaller elements of logic that run within that overall flow. There’s the verification step. There’s the eligibilty step. There’s the handling of each of the three choices at the end. With Zendesk’s new Action Platform approach, we can extract these elements and put them in Custom Agents, Action Flows or Custom Actions depending on the type of logic we need to run. Our Refund procedure becomes a lot more manageable, and we can contain the complexity of each of these separate pieces of business logic as separate building blocks. What type of block we choose, depends on the complexity of the decision, and the type of logic we need. Custom Actions are ideal if you want just the output of an API. We can use that to retrieve a voucher code. Action flows are good for determenistic logic, so it’s ideal to request a repayment from Finance and let the customer know it’ll happen,. And the new Custom Agents excel at complex logic that requires a lot of input and conditions like checking for fraud, or running all eligibility logic. ![Procedure 2.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Procedure-2.png) If we replace all procedure logic with actions that call each of these blocks, we can make the procedure a lot shorter. But the business logic underneath that process still exists, nicely contained with the Custom Actions, Action flows and Custom Agents, And now that we have turned one Use Case into a combination of procedure and action blocks, we can reuse some of these components for another similar flow, like this flow to replace a voucher. And if at a certain moment we need to modify a piece of logic, we can update just the Custom Agent or Action Flow. Or, we can even invoke a Custom Agent within our Finance flow that parses the invoice and extract the required billing information! ![Procedure 3.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Procedure-3.png) # One platform to rule them all I noted earlier that old technology gets replaced and improved with newer capabilities. Assignment via triggers, for example, is quickly being replaced with Omnichannel Routing. The same will happen with the arrival of Custom Agents and the integration of Action Builder workflows across all agents. Both AI Agent and Agent Copilot procedures will get simpler thanks to Custom Agents. The Custom Agent runs the decision logic. The procedure drives the conversation forward. Similarly, external logic that today runs in Zapier, Make or AI Agents built on top of other platforms, can be pulled into the platform and run on agentic models that understand your CX operations, because they're built on top of the Zendesk Context Graph. What ties these changes together is that neither Action Builder workflows nor Custom Agents drive customer-facing conversations directly. They're running business processes that previously required either a custom-coded apps or a human running through a checklist. With Agent Builder they become native objects in the platform. The Agent Builder itself is no-code. Admins describe the role, the instructions, the tools and the data in natural language. The interface is native to Zendesk, which means the agent is grounded in your existing knowledge, data, integrations and action flows. No custom code. No custom integrations. No retraining a model. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/2---Custom-Agents-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/2---Custom-Agents-2.png) CUSTOM AGENT and AGENT BUILDER DEEP-DIVE [![CTA Image](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Custom-Agent.png)](#/portal/signup/free) I will write a deep-dive on how Agent Builder and Custom Agents work after Relate. If you want to get that article in your inbox, subscribe today. It's free! [Subscribe now ](#/portal/signup/free) # Autonomous Service Workforce The agents are the platform now. AI Agents handle the customer conversation across messaging, email and voice. Custom Agents built in Agent Builder handle the logic and processes behind it. Action Builder handles the system integrations. Forethought extends the same capabilities to platforms outside Zendesk. Agent Copilot assists the humans who step in when the AI agents can't. This is the Autonomous Service Workforce. Teams of specialised agents working together on a unified platform. Each one doing what it does best. All sharing the same knowledge, the same actions, the same procedures, the same context. And that logic is quickly turning into build-once, reuse everywhere. The same knowledge, Action flows and Custom Agents are reused across AI Agents, Agent Copilot and triggers. The same AI Agents run across messaging, email, voice and soon AI Chatbots. It all uses the same platform, with different interfaces on top. That platform that lies under all of it, getting better on its own. The platform finds its own gaps. Drafts its own fixes. Tests its own changes. Measures its own results. Copilots surface those insights and recommendations, keeping your team stays in the loop where it matters and allowing them to jump in and improve their operations based on actionable data. That's the resolution flow and learning flow going hand in hand. That learning flow, the one that powers the improvements, is the subject of the next article in this series. Proactive Copilots. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### Zendesk Relate 2026 - Proactive Copilots URL: https://internalnote.com/zendesk-relate-2026-proactive-copilots/ Last updated: 2026-05-19T17:48:24.000Z In my [introduction to Relate 2026](https://internalnote.com/zendesk-relate-2026/) I described the Resolution Platform as two flows feeding each other. The resolution flow handles a customer's question. The learning flow makes the platform better at handling the next one. The previous article in this series covered the first flow. The Autonomous Service Workforce that actually helps customers. AI Agents on every channel and Custom Agents built in Agent Builder. This article covers the second flow. The Copilots that help your team improve the platform. AI Agents are powerful, but they only handle the customer interaction. But once they wrap up a conversation, we need to evaluate how and what they did. These are the moments where judgment matters. That’s were traditionally a Zendesk Admin, Analyst or Knowledge manager entered the room They read reports, gather insights, define improvements and deploy these. ![core elements.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/core-elements.png) Where these actions are traditionally driven by human action, the core elements of your Zendesk setup now all get a Copilot. **Analytics**. **Knowledge**. **Agents**. **The setup itself**. Each one turns work that used to be manual maintenance into a conversation between your team and the platform. Zendesk's Copilots sit in the middle. They translate what the system sees into something your team understands, and help your team turn their vision into changes on the platform. # From simple to sophisticated To show where Copilots shine, let's start with a concrete example of the Learning Loop in action. You start simple. When a customer asks *"where's my order?"* you solve that use case by pointing them to the order status page on your website. A simple procedure that shows a nice drop in what used to be tickets handled by your team. Then the reporting data tells you something. Half the customers can't log in to check the page or don't bother to do so and ask for a human. The amount of tickets handled by your team is still high. So you revise the procedure. The AI Agent now asks for an order number, looks it up via a Custom Action and returns the order status with a tracking link. After deploying this new and improved procedure, you see another drop in escalations. The customers who know their order number get an answer. The ones who don’t, still escalate. ![Widgets.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Widgets.png) If that escalated number is too high, you need to revise the procedure further. You can add single sign-on so customers don't have to log in to the website. Once you idenitify the customer you do a lookup against the customer's email, so they don't need to provide the order number at all. This personalisation makes the flow richer. The resolution rate climbs. For each improvement round there’s a decision to be made: Is the volume of escalated conversations more costly than the effort to improve that specific use case? The data tells you. But manually tracking the data **for each and every use case** isn't scalable. Not when you're handling hundreds of intents across multiple regions and channels. And while analytics can show you where the escalations happen, every step to improve a use case costs effort to build. Procedures get rewritten. Knowledge gets updated. Intents get tuned. Routing rules get changed. Multiply that across every use case in your business and the build cost is real. Multiply it across every team, every region and every product, and the maintenance cost gets worse. What you actually need is a system that knows wha to improve and do next. Better still, a system that does the building for you too. That's where the Resolution Learning Loop and Zendesk's Copilots come in. The platform learns from each conversation to improve the next one. Every interaction generates an outcome signal. Did the customer come back? Did the issue get resolved? Was a human needed? What did the QA score say? Those signals feed the platform's improvement engine. Knowledge gaps get detected. New articles get drafted. Underperforming procedures can get refined. The system reports on what changed and why. ![Learning Loop.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Learning-Loop.png) Pieces of this loop have been live for a while. Intelligent Triage detects intent and suggests new ones. Analytics in AI Agents show the effectiveness of use cases and where in a procedure a customer drops off. What the platform hadn't shipped, until now, was the closing step. The *"find the gap"* part has been there. The *"recommending fixes for those gaps and guiding you through the process"* part wasn't. Zendesk's Copilots close that gap. The platform proactively suggests improvements. Your team can see why the suggestion has been made and dive in to understand how to fix it. And the Copilots can execute on that plan. # Agentic Analytics: insights powered by context Last year Zendesk announced that they had bought HyperArc, an AI-first analytics platform that set itself apart from the competition by being interactive. Customers didn't just see data. They could talk to their data and ask it questions. Fast forward to Relate 2026, and we see Agentic Analytics and Analyst Copilot as the result of that acquisition. Before we dive into the specifics, let's look at Analytics as a feature first. One problem every analytics tool has is that it needs to cater to three personas. - Some people just need the number. The CSAT. The first reply time. The volume. They want a clean answer, no fuss. - Others need to understand the number. Why is the handling time up this week? Which agents are dragging the average? What's the relationship between intent and resolution time? They need narrative, not just data. - A third group builds the dashboards that produce the numbers. They write the queries. They tune the filters. They schedule the reports. Each of those jobs is served differently by traditional BI tools. Which is why most service teams end up with a patchwork of analytics surfaces nobody fully trusts. One dashboard for corporate. Another query from finance. The Zendesk Explore reports built three years ago. A weekly export for data engineering. Each measures success differently. Each captures part of the story. Nobody reconciles them. The newly introduced Agentic Analytics is Zendesk's answer to this problem. It offers a Suite of Analytics tools that span the lifecycle of a ticket. ![3 - Analytics.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3---Analytics.png) ## Context Graph Underneath Zendesk's Agentic Analytics sits the new Context Graph. This system runs alongside everything that happens in your Zendesk instance. It captures conversations, but also stores every interaction you have with your data inside Analytics. This way it can learn from previous reporting and insights, and improve your answers, recommendations and insights over time. Every Zendesk element feeds into this graph. Your AI Agent conversations. Your Agent Copilot suggestions. Intelligent Triage tagging. Omnichannel Routing. QA analysis. WFM data. It's all combined in one connected data layer you can use to get insights, recommendations and answers. The way you interact with that data happens in two ways. On one side you have the traditional reporting dashboards in Zendesk's pre-built analytics. These reports and queries are ready out of the box for Support, Copilot, Knowledge, ITAM and more. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Anaytics-Dash-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Anaytics-Dash-2.png) On the other side you've got the new Analyst Copilot which allows you to interact with your data. You can ask it questions. You can ask it to explain why something happened. And you can instruct it to build reports. AI AGENT TICKETS AI Agent tickets became the default for all Zendesk customers earlier this month, as a key input to the new Context Graph. As Zendesk shifts from counting tickets to measuring resolutions, both the platform and the people using it need access to all conversation data. By keeping every conversation available from question to resolution, the Context Graph can deliver better insights and reporting. And for accountability and auditability, those conversations must also be inspectable by admins and agents. That’s why Zendesk is moving beyond Support tickets alone to include the full conversation journey — both AI Agent and Support tickets, or automated and escalated conversations. [Learn more ](https://internalnote.com/ai-agent-tickets-in-agent-workspace/) ## Analyst Copilot: an analyst that remembers Analyst Copilot is Zendesk’s analytics assistant built for service that gets more accurate the longer you use it. That's the pitch. And the mechanism that makes it work is **Memory**. Most AI analytics tools have no memory. Every new question starts from scratch. Past analysis doesn't compound. Definitions don't carry between conversations. Teams reconcile reports endlessly because nobody remembers what *"first contact resolution"* actually means in this specific instance, or why a change in numbers today is the result of insights and actions taken last month. Analyst Copilot captures every analysis as a memory. The question that was asked. The data that was analysed. The result that was found. What happened when someone acted on it. Each memory feeds the next analysis. Over time, the recommendations sharpen because the system has a record of what you've already tried and what worked. ![3 - Analyst Copilot.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Analytics-Demo-3.png) Let's make this real with an example use case: > A fictional bank’s head of service is told ticket volume is unusually high, so they ask Analyst Copilot a plain-language question. It returns a narrative answer with data citations, pulling together both Zendesk native data and custom objects. > They see the spike is tied to disputes related to recurring subscriptions, with volume climbing steadily because of duplicate charges after cancellations. Data that was previously locked away in Custom Objects, and invisible in standard reports, is now front and center. > From there, they drill deeper. They click into a memory about dispute resolution time, see subscription cancellations driving the spike, and ask whether agents have the right guidance. They then check auto-assist usage by dispute type and notice it’s much lower on these tickets than on others. Analyst Copilot summarizes the findings in plain language, and they act on it by creating a new procedure and updating a routing rule. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Analytics-Demo-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Analytics-Demo-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Analytics-Demo-3-1.png) Every step in this flow gets captured as a memory. The next person on her team asking a similar question doesn't start from scratch. Analyst Copilot draws on the questions and insights from this previous analysis to deliver a better answer faster, because it builds on existing work. ## Real-Time Monitoring: what's happening right now Analytics and reporting happen after the resolution step. They give you insight into what you did and how you did. But as tickets are flowing through the system, you need visibility on what's happening now. Real-Time Monitoring is Zendesk's answer to that question. Three pre-built omnichannel dashboards ship for every Suite Professional (or higher) customer. Each combines real-time data with seven days of recent historical context, so you can tell normal fluctuation apart from a real spike. ![3 Real Time.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Real-Time.png) - **Incoming Tickets** shows your queue backlog with drill-in capabilities based on omnichannel routing and custom queues. It shows you what's happening before tickets reach your agents. - **Ticket Progress** covers in-progress and recently solved tickets, surfacing key metrics like average time to assignment, first reply time and full resolution time. - **Agent Productivity** provides an overview of how agents and groups are performing, with insights on availability, efficiency and productivity across email, messaging and voice. ## Quality Score: every ticket, automatically scored Sitting next to Analytics is the QA story. Zendesk QA reviews every conversation and gives you insight into your team's performance. Before Zendesk QA, managers picked a sample and scored a subset of tickets, giving you a partial and potentially biased view of your operations. None of that scales when ticket volumes rise, AI Agents handle most of the front line and human agents handle the harder cases. You need quality measured on every ticket, automatically, to find the insights you're looking for. Zendesk QA does exactly that. It reads every interaction, both those handled by AI Agents and your team, and surfaces trends, quality gaps and coaching opportunities across every channel. It scores conversations against your team's own standards (empathy, accuracy, policy adherence, tone) and flags the ones that need follow-up. All natively inside the Zendesk platform with no extra tools required. It also includes a leaderboard view for spotting top and underperforming agents, real-time SLA visibility, and the ability to detect escalations and churn risk before they become bigger problems. One of the trends this year is that Zendesk is making AI accessible to more customers.Most Suite customers get access to the new unified AI Agents. Some Agent Copilot features like summaries and writing tools are available (with usage caps) in Suite. AI-powered writing tools in Knowledge are generally available and no longer locked behind an Enterprise license. ![3 Quality 1.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Quality-1.png) That trend continues with QA. The new Zendesk Quality Score rates every solved conversation based on six ratings. - **Empathy.** Did the agent demonstrate care for the customer's situation? - **Agent tone.** Was the agent's tone appropriate and professional? - **Customer tone.** What was the customer's tone, and how did it shift? - **Solution.** Was a solution offered? - **Escalation risk.** Did the conversation need escalation, and was it handled? - **Churn risk.** Are there signals the customer might leave? Each ticket gets a composite score from the six ratings. Agents see the score right next to the ticket. Team-level trends surface on a dashboard. ![3 Quality 2.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Quality-2.png) Two things make Quality Score genuinely interesting. First, it's a different KPI from CSAT. CSAT is what customers told you. Quality Score is what the system infers from the interaction itself. They're complementary, not redundant. CSAT tells you how the customer felt. Quality Score tells you whether the interaction met your standard regardless of how the customer felt. Second, Quality Score gives the resolution-based pricing something to verify against. Verified Resolution charge per conversation when the AI Agent fully resolved an issue. Quality Score is one of the signals that allow you to verify that decision, combined with the new AI Agent analytics and Ticket Audit log that shows the resolution type. ## The new analyst Zendesk's analytics solution offers a modern answer to those three original roles reporting always had. For those who just need the number, the number still shows up in the dashboards. For those who need to understand the numbers, the effort changes. They can ask Analyst Copilot *why.* Copilot can explain in detail. They can drill down, get more insights and export a summary of your findings. More importantly, that research is stored in the platform as a memory so others can build on it and see the numbers evolve. This makes analysis more accessible. *Anyone* can ask for the why. You no longer need to be an analyst. Those who built dashboards can shift away from building reports and evolve into people who analyse and understand operations. Now that Analyst Copilot gathers and shows the data, the need to be able to manually build dashboards goes away. That makes data accessible to more people and frees up time to do what matters: act on those insights to make changes and improve your operations. More importantly, understanding what's happening in your environment sets the basis for making changes to improve the next customer interaction you have. The data in your insights helps you understand what to change next, and why. # Knowledge Graph, the foundation of your resolutions Knowledge is the foundation everything else builds on. Every AI Agent starts with it. So does every Agent Copilot procedure. So does every Help Center answer. If your knowledge isn't ready, nothing downstream works properly. I've written about this at length in [Building AI-ready Knowledge in Zendesk](https://internalnote.com/building-ai-ready-knowledge-in-zendesk) and in the [Towards Automated Resolutions](https://internalnote.com/towards-automated-resolutions-2-knowledge-as-a-resolution-engine) series. The challenge is that knowledge isn't a one-time job. Articles drift out of date. Translations lag behind the source. New procedures get added without retiring old ones. Customers ask questions nobody has answered yet. Reporting on knowledge health exists, but it's buried and rarely actionable. The result is escalations. Customers ask about a specific policy. The relevant content is outdated. The AI Agent escalates because it can't confidently answer. The human agent gets stuck because they can't find the right reference either. Quality drops. Escalations rise. ## Knowledge Copilot Knowledge Copilot is the command centre that closes that gap. Much like Admin Copilot (see below) keeps your setup tuned, Knowledge Copilot keeps your knowledge fresh. The Knowledge homepage now shows three health metrics, updated weekly. - **Coverage.** Do you have the right articles for the questions customers actually ask? - **Freshness.** Are they up to date? - **AI Readability.** Are they structured in a way AI Agents can use reliably? These three metrics give knowledge teams a quick pulse on their content. Together they answer the question every knowledge team gets asked but rarely has data to answer. Is our knowledge ready? ![3 Knowledge 1.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Knowledge-1.png) Below the metrics, Knowledge Copilot proactively recommends improvements or new content based on real customer interactions. It identifies where knowledge is missing or outdated: if end users keep asking about a specific information and the relevant content is outdated, those tickets usually show up as an escalation. Knowledge Copilot identifies that pattern, looks for the answer given by your team, surfaces the gap and generates a new draft with that additional content for you. From there, admins can generate a draft article in a few clicks. The Copilot creates a first version, asks where to save it, then opens it in the editor for review before publishing. The admin stays in control. The Copilot does the heavy lifting. In cases where you want to write an article from scratch, you can also provide the Copilot with reference material and related tickets, and the draft gets generated from there. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Knowledge-3.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Knowledge-2.png) ## Knowledge Connectors Knowledge Copilot live inside the broader Knowledge Graph story. Zendesk traditionally focused on support articles visible in a Help Center. Customers went to the Help Center, searched for an article, and got their answer. But as use cases grow, and especially now that the platform caters to both Customer and Employee service, the places where content lives has also changed. What used to be a list of articles stored in a single location, has evolved into a Knowledge Graph that combines content pulled from support articles, indexed websites, imported content and connected knowledge sources. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Connectors.png) Knowledge Connectors especially are a powerful now capability since they make it super easy to add data stored in popular external platforms like Confluence or Sharepoint. Newly announced at Relate are connectors for Google Drive, Notion, Contentful and Guru. The web crawler also got an update by which they can now automatically index and discover content on your website by following links, instead of relying solely on a sitemap. Whatever the source, the content gets unified into a single governed foundation that AI Agents and human agents both rely on. ## Bulk Translations A small but meaningful improvement is that articles can now be translated in bulk through a single workflow rather than article by article. For multi-region teams, this collapses a lot of work into a single action. But as always, while the system does the heavy lifting, you're still in control of what gets published. Particularly useful for the Translation gap detection coming later, which can flag missing translations across your knowledge base and propose them en masse. ![3 Bulk Translate.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Bulk-Translate.png) # Agent Copilot: routing and procedures that improve themselves Once knowledge is in place, auto-assist and routing are next. They're how the system and human agents both know what to do when a particular kind of ticket arrives. Writing procedures has historically been the slowest part of getting Agent Copilot to deliver real value. Relate 2026 changes that. Agent Copilot improves the onboarding experience, making it easier to get started. The first new capability is the guided setup for auto-assist that makes it work right out of the box. Customers connect their knowledge and past tickets. Agent Copilot generates procedures based on that interaction history. This means that from day one it starts suggesting responses to human agents. And as the system learns, it'll start recommending improvements to those procedures over time. ![3 AGENT COPILOT.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-AGENT-COPILOT.png) Auto-assist also analyses your solved tickets and surfaces recommendations to improve or add procedures. Undocumented steps that agents take repeatedly in tickets become draft procedures. Auto-assist suggestions with low acceptance rates get flagged. You can then review, tweak and publish those suggested changes, improving your auto-assist procedures over time. The last announcement is the new Procedure Builder. Similar to how we build procedures for AI Agents, this lets you generate new procedures based on a plain-language description. When the business evolves and you need a change, you describe the change in natural language. The Copilot rebuilds it, or writes one from scratch. Before you can publish the new procedure, the system simulates the changes against real ticket data, showing you if the changes you or it made will actually have an impact. ![3 AGENT COPILOT 2.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-AGENT-COPILOT-2.png) ## Intelligent Triage: the right ticket to the right place Procedures only work if they match the right ticket. Similarly, Omnichannel Routing needs that same input to match tickets to the right team, agent and queue. That's where Intelligent Triage comes in. Intelligent Triage gets a new guided onboarding. Similar to Agent Copilot, this is part of a new trend of slowly transforming Admin Center's wall of checkboxes into more friendly and approachable UIs that make it more accessible for new customers. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Intelligent-Triage-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Intelligent-Triage-2.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Intelligent-Triage-3.png) Also noted, but not really new, is the improved intent management I already wrote about in a previous article with intent recommendations and more capable custom intent detection. [Deep-dive into Zendesk Intent DetectionManual ticket triage and categorization waste time, delay responses, and limit automation. Zendesk’s AI-powered Intelligent Triage automatically classifies tickets by intent on arrival, enabling faster routing, accurate prioritization, and deeper reporting for smarter support workflows.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-208.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2026-01-Agentic-3.png)](https://internalnote.com/deep-dive-into-zendesk-intent-detection/) ## Predictive Routing: routing based on outcomes Intelligent Triage tells you what's in a ticket. Omnichannel Routing decides who gets it. Today that decision is based on availability, group membership, capacity and skills, and configured via queues. It works. But it doesn't account for actual performance. A ticket might be routed to an agent with availability, but they might still not be the best for a specific intent. Predictive Routing fills that gap. The system looks at the ticket's attributes and intent. It pulls each eligible agent's performance history for similar tickets. It scores agents by their likelihood of delivering a fast, high-quality resolution. The most likely match gets the assignment. Existing OCR rules still apply. Capacity, schedule, group membership and availability still act as filters. Predictive Routing chooses among the eligible. This is where the Resolution Learning Loop shows up in the routing layer. Outcomes from every resolution feed back into the model. Agent profiles update. Routing decisions sharpen. AI Agents learn from outcomes. Procedures learn from outcomes. Now routing does too. Same pattern, applied to *who* handles the ticket rather than *what* gets answered. # Admin Copilot: the setup layer Zendesk's Resolution Platform runs on top of knowledge, procedures, actions and data. Its learning loop is powered by analytics and insights. But to keep that platform running you need to keep your Zendesk configuration up to date too. Someone has to maintain and configure the triggers. Routing rules. Workspaces. Permissions. Custom roles. Macros. The list runs long, and keeps growing. Admin Copilot is the Copilot for that work. It looks at what's happening in your setup and flags what needs attention. It recommends what to improve. Your admin can inspect those recommendations, ask the AI Assistant for more context and then plan a change while talking to Admin Copilot. Once the plan looks good, the admin approves and Copilot makes the required changes. Admin Copilot is available for free for all Zendesk Suite professional (or higher) customers. I wrote a full [overview of Admin Copilot](https://internalnote.com/introducing-admin-copilot/) earlier this month, so take a look if you want to know more. [Introducing Admin Copilot. Keep your Zendesk on target.Zendesk Admin Copilot turns admins from manual configuration hunters into strategic operators. It surfaces account-specific insights, recommends fixes, and helps execute changes with approval, closing the loop between data, AI, and action.![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/icon/internalnote_social_eggshell@2x-209.png)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2026-01-Agentic-7.png)](https://internalnote.com/introducing-admin-copilot/) What’s new at Relate on top of this existing release, is the launch of the new Custom Object Builder. It allows you to talk to Admin Copilot to describe the object you need, and a new visualiser will build out the entire structure for you including object fields, lookup relationships and other required elements. Here too we see a shift from building towards planning. Building custom objects, especially when it comes to planning out the relationship between the objects can be daunting. By having a Copilot running alongside you that turns your ideas into real objects, creating them becomes a lot easier and approachable ![3 Custom Objects.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/3-Custom-Objects.png) # Zendesk Copilot, applied to every layer For Admin Copilot specifically, but also applicable to all the other Copilots, is the shift it implies for the role of a Zendesk admin. Traditionally you had people who built your Zendesk. An Analyst who knew how to build reports. A Knowledge Manager who could write good content. A Team Lead who owned routing and assignment. But now big parts of those roles get automated. It's the Copilot that builds, drafts and routes. It bridges the gap between coding an crafting. That takes away big parts of work that used to be done manually by product specialists in your team. At the same time, it also makes those same elements more accessible, since you no longer need to have deep knowledge on how to build or configure the platform. ![Roles.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Roles.png) The roles of specific product specialists will evolve into more general service architect roles who can operate across the entire Zendesk platform, assisted by Copilot. The time they gain can be used to focus on strategy. They can look forward and plan, using the insights Copilot gives them to get the data they need to impact the future. Zendesk Copilot sits between your team and the platform, keeping the humans and the machines talking to each other. Or in other words.. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/s-blob-v1-IMAGE-iBqozxFMOEU-1.png) #### I am C-3PO, human-cyborg relations How might I serve you? ## Potential risks There are two risks worth flagging: optimisation without a goal, and accepting without understanding. The first is optimisation without a goal. Once the platform starts suggesting improvements, it’s tempting to optimise for whatever it measures. But if you don’t set clear goals and values for your team upfront, you can end up with a system that performs beautifully on paper and badly in practice since it's optimising for the wrong things. What's a high valuable conversation for one company, might be a low value one for another. The fix isn’t to slow the Copilots down. It’s to define what success actually looks like for your business, not just for the metric, but for the experience the metric is meant to represent. What values should guide the trade-offs? What edge cases still need human judgment, even when the data says automate? Copilots are tools for executing strategy faster. They don’t replace strategy; they make the absence of strategy more visible. The second risk is accepting without understanding: taking the recommendation and skipping the reasoning behind it. That’s the quieter danger, a slow drift toward not understanding what's actually happening doing. People can end up knowing which buttons to press, but not why those buttons exist. That’s why Zendesk’s Admin Copilot shows the insight, recommends the change, and explains **why** it’s making that recommendation and what impact it will have. Because in the end, you still want to understand what happened and how it works, for accountability, and for good judgment. ## Three new admin paradigms The Proactive Copilots release is what makes the Resolution Learning Loop real. They also indicate three significant changes in the way admins interact with the platform. - Without Copilots, operation management runs at the speed of admin time. With them, the loop runs at the speed of the platform. Faster insights, better recommendations. - Secondly we see a big shift from building towards planning. The role of an admin moves towards validating insights and approving them. The manual building of more and more automated. - And thirdly we see a change in the interface admins use. New onboarding flows turn walls of checkboxes into best-practices. Manual configuration turns into prompting. This article focused on the learning flow. Where every conversation becomes an input to learn and do better. The previous article focused on the resolution flow. The Autonomous Service Workforce that meets customers. Both flows need something underneath them to actually make them run. A platform that connects to the rest of your business. Reaches the systems where the work happens. Speaks the integration standards that vendors are converging on. That's what's we're going to explore in the the third set of announcements, Connected AI Systems, the next article in this series. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### Zendesk Relate 2026 - Connected AI systems URL: https://internalnote.com/zendesk-relate-2026-connected-ai-systems/ Last updated: 2026-05-19T17:49:00.000Z The [previous two articles in this series](https://internalnote.com/404/) covered the two sides of the Resolution Platform. AI Agents resolving customer questions. Copilots closing the learning loop. But underneath these processes lies the platform itself. The engine that powers the resolution flow, runs the learning flow, and connects both to the rest of your business. When we look back at Zendesk from a few years ago, you had clearly defined interfaces for each operation. The Help Center ran self-service and ticket deflection. Agent Workspace was where the work happened. Explore was where you went for reporting on that effort. But as we shift from human-driven work toward automated resolutions, so does the way we interact with the platform. The Help Center has shifted toward a knowledge graph whose content serves the Help Center, AI Agents, auto-assist and human agents. Tickets in Agent Workspace evolved into conversations that start with an AI Agent and end up in QA. Reporting evolved from static dashboards toward proactive recommendations and interactive insights provided by Copilots. This turns Zendesk from "the tool your team logs into" into "the engine your operations run on." The UI becomes something you choose. Maybe it's Agent Workspace. Maybe it's the Help Center. Maybe it's a custom app you built. Maybe it's ChatGPT. But what powers all of these interactions is the platform underneath. That's the Resolution Platform. And it's quickly evolving from predefined interfaces into a customizable Zendesk you can build into and on top of. The brain that powers your operations, accessible via multiple interfaces by customers, agents and admins. ## From code to conversation There's a shift happening across the entire software industry that Zendesk's announcements this year sit inside. Similar to how an admin's job has evolved from configuring to describing, so has integrating Zendesk with the rest of your company. Building integrations used to be a developer job. You wrote, shipped and maintained code. Every connection between two systems was a separate engineering project. That model is breaking down. On one side you have a new expectation of connectivity. The more adoption ChatGPT, Claude or Gemini get, the more customers expect those AI tools to connect to their other tools. Their task manager. Their email inbox. Their meeting notes. Most platforms that used to be standalone SaaS environments are quickly evolving into data layers that these AI Agents interact with. The same data, but a new interface. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Code-1.png) On the other side of the coin, Anthropic's Claude Code and OpenAI's Codex have spent the last few years proving you can now describe what you want in plain English and get working software back. Custom apps, integrations, automations and agents are increasingly built by prompt rather than by hand. Building custom interfaces to work in, or custom logic to run your business, is becoming very accessible to anyone. Zendesk's platform is evolving to meet those new customer expectations. Action Builder is replacing triggers and webhooks with visual flows that run deterministic logic and are easier to configure. The built-in connectors and custom actions let you interact with the data stored in Jira, Asana, Notion or any other business platform you have. Knowledge Connectors brought external content into the Knowledge Graph. App Builder turned Zendesk apps from a developer task into a no-code prompt. Each release connects the Zendesk platform deeper into your business data and tools, and moves business logic in Zendesk from "building what you need" more and more toward "describing what you need." Relate 2026 takes the next logical step in this trajectory. Connected AI Systems brings together four releases that turn Zendesk's integration story into a connected whole. - **Action flows for AI Agents.** AI Agents can now invoke any Action Builder flow. The same flows that human agents and Agent Copilot already use. - **MCP Client.** Zendesk connects out to any third-party MCP Server. The integration backbone expands without custom code. - **MCP Server.** External AI tools connect into Zendesk. Microsoft Copilot, ChatGPT and others can create tickets and trigger workflows. - **LLM as a Channel.** ChatGPT becomes a governed service surface. Customers get on-brand answers directly where they are. The bigger consequence of these releases isn't just a faster road to integration. It's that integrating stops being something you build and starts being something you switch on. # Action flows for AI Agents Action Builder is the integration backbone of the Resolution Platform. It lets you define deterministic workflows that run logic and interact with both Zendesk's platform and external systems. Until now, Action Builder flows were only available to Agent Copilot, or could be triggered by actions in the platform or via external webhooks. The big exception was AI Agents. Anything an AI Agent needed to do via API had to be configured separately as an API integration. That's about to change. From now on, AI Agents can access the same Action Builder workflows the rest of the system already uses. This gives you a couple of benefits. 1. You can reuse the exact same logic across AI Agents and Agent Copilot. A flow that looks up an order, retrieves its tracking code and returns a shipping status can now be built once and reused across any procedure that needs it. 2. Action Builder combines logic with integrations. This means that instead of writing out the entire refund eligibility logic in a procedure, you can extract that logic from the procedure and codify it in a workflow. Your procedure becomes less complex, and it's easier to improve the conversational experience it offers your customers, while abstracting away the business logic from those writing down the procedures. ![4 Actions for AI.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/4-Actions-for-AI.png) Aside from these two benefits, there's also the simplification of the platform itself. Instead of building the same API integration in the AI Agent dashboard and in a Custom Action, you now only need the latter. There's no overhead of learning two integration systems anymore. Your admins and developers only need to learn and configure one. This pairs directly with Agent Builder, covered in the [Specialised AI Agents article](https://internalnote.com/relate-2026-specialised-ai-agents). Both are about extracting logic out of the conversation and giving it a predictable, reusable home. The AI Agent procedure stays focused on the conversation. Action Builder handles the deterministic business logic. Custom agents handle the processes that need reasoning. Together they make the AI Agent the orchestrator of your conversations rather than the place where everything lives. There's a bonus tucked into this release. Via its Action Builder integration AI Agents also gain access to many of the existing external connectors: Shopify. Salesforce. Jira. At the same time, Action Builder itself gains a couple of new features too. You can now trigger workflows based on a schedule trigger. There's now actions for users and custom objects. There's expanded support for objects and arrays, and drop-downs (finally) support variables. As Zendesk is evolving into a family of autonomous agents, underneath the platform itself is evolving into a platform that makes it easier to connect with other tools, making those same agents smarter and deeper integrated with your company. # Model Context Protocol Although Action Builder comes with a dozen pre-built connectors, these will never cover every integration any customer needs. There's always a system that isn't on the list. Always a custom API. Always a specific vendor that doesn't natively integrate with Zendesk. The traditional answer to that gap is adding new API calls to the platform where you need them, and building logic around those. A Custom Action to get an order status. Another to cancel an order. Another to check its shipping status. As your procedure and use case coverage grows, so grows the library of integrations needed. Any new procedure needs a potential new capability to be integrated. And until now, that meant looking up the API call in the documentation and adding it as a custom action to the platform. It works, but it scales with manual effort. The answer to that problem is [MCP](https://modelcontextprotocol.io/docs/getting-started/intro?ref=internalnote.com), or Model Context Protocol. A standardised framework for AI-to-system integrations. ## Model Context Protocol, explained briefly MCP is to AI integration what USB-C is to peripherals. A single connector pattern that any AI system can speak. Before MCP, integrating AI with a software platform required a number of API endpoints and custom integrations. Each one a separate setup. Each one built when you needed it. Each one requiring maintenance every time the platform updated. After MCP, that same platform houses all its tools in a single MCP Server. An AI agent connects to the server once, via an MCP Client, and gets access to every action the server exposes. When the platform adds a new capability, the platform sees it automatically. No new integration. No rebuild. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/MCP.png) Let's say you want to connect to your booking platform to let customers manage their flight bookings. This means you need to retrieve flight details. Search for flights. Book new ones. Doing this with classic APIs means adding and maintaining a dozen of separate actions, and defining the input and output for each. When you connect to your booking platform's MCP server however, the platform gets added to Action Builder's external actions. With one integration you get access to all of the actions available for that platform. Whenever the booking platform adds a new capability, the list gets automatically updated. ```json { name: "searchFlights", description: "Search for available flights", inputSchema: { type: "object", properties: { origin: { type: "string", description: "Departure city" }, destination: { type: "string", description: "Arrival city" }, date: { type: "string", format: "date", description: "Travel date" } }, required: ["origin", "destination", "date"] } }, { name: "bookFlight", description: "Book a selected flight", inputSchema: { type: "object", properties: { flightId: { type: "string", description: "Unique flight identifier" }, passengerName: { type: "string", description: "Name of the passenger" }, email: { type: "string", format: "email", description: "Passenger email address" } }, required: ["flightId", "passengerName", "email"] } } ``` ## MCP Client support: Accessing MCP connections in Zendesk MCP connections join the native connectors and Custom Actions available in Action Builder workflows. When building out your workflows or custom agents, admins can now select an MCP connector and get access to all the capabilities it provides. This also means AI Agents can more easily integrate with other platforms, since they too can use Action Builder and its new MCP Client capabilities. In the future, Zendesk plans to add direct entry points in Copilot and AI Agents, so MCP connections become directly callable without going through Action Builder. What this all amounts to is that Action Builder can now connect to anything. Existing pre-built connectors. Classic APIs. Custom agents built in Agent Builder. MCP servers. Webhooks. All shapes of integration sit behind the same surface. The choice of integration type becomes a question of which is most convenient. Not whether it's possible. ![4 MCP Client.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/4-MCP-Client.png) ## Zendesk MCP Server: when external AI tools connect into Zendesk The third release in the Connected AI Systems pillar inverts the direction. Aside from being able to ingest other MCP Servers, Zendesk will soon offer its own MCP server. So far in this article, every release has been about Zendesk connecting to external systems. The MCP Server release is about allowing external AI systems to connect into Zendesk. A customer wants to use Microsoft Copilot to create employee service tickets inside Zendesk. Without an MCP Server, that's a custom integration project where they need to build out a service that connects to Zendesk's HTTP API. But now you can add Zendesk's MCP Server to Microsoft Copilot (or Claude, or ChatGPT) directly. Tickets get created. Workflows get triggered. All without code. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/MCP-Server.png) Product in development, screenshot not final This matters because more and more enterprises are building their own AI infrastructure or interfaces. Internal Copilots. Agentic systems. Custom workflow tools. Those tools need access to the data and workflows that live in Zendesk. The MCP Server makes that connection a standard pattern rather than a bespoke project. This all fits into the broader concept of turning Zendesk into a System of Aaction. One where AI Agents, knowledge, procedures, actions and insights run your CX and ES operations. On top of that platform, people should be able to build their own interfaces, or integrate with their existing tools. We see that with Slack and the new AI Agents for Employee Service powered by Unleash. And we see that with MCP connecting to Microsoft Copilot. The MCP Server launches in EAP later in 2026. # New conversational interfaces Connected AI Systems isn't only about making it easier for the platform to reach out to other services. It's also about making the way customers and employees interact with your teams ready for an era where the interface is quickly turning into a conversational one driven by AI assistants. ## AI Agents for Employee Service Last year Zendesk acquired Unleash. Unleash is an AI-powered enterprise search platform designed to connect knowledge across systems. This year's Relate shows the result of that acquisition with the release of AI Agents for Employee Service. Different from customer-facing AI Agents, Employee Service has its own constraints. Knowledge sits across dozens of internal systems. Information is sensitive, role-based and has strict permissions. Work doesn't happen in support portals. It happens in Slack and Microsoft Teams. ![4 Server.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/4-Server.png) The new AI Agents for Employee Service provide an answer to those unique requirements. - **Pulls knowledge from popular enterprise systems.** Google Drive. SharePoint. Confluence. Notion. AI Agents for ES index the platforms where internal documentation actually lives. That content is indexed without duplication or migration, so it can stay where it lives. - **Delivers answers where employees work.** While Zendesk does offer a portal for service requests, most employees work and live in Slack or Microsoft Teams. They don't have to leave these tools to get help. Resolutions happen where the work happens, as conversations inside those platforms. - **Honours permissions at the source.** The AI Agent operates within existing role-based access. It doesn't see what the requesting employee shouldn't see. This is what Zendesk calls "permission-aware AI." ## LLM as a channel LLM as a channel turns ChatGPT into a real service surface. Customers asking questions get on-brand answers grounded in your approved knowledge by using ChatGPT's new apps platform. They can take approved actions. They can escalate to a Zendesk human agent with the full conversation context preserved. Service has historically been delivered on the brand's surfaces. Help center. Messaging widget. Voice line. But ChatGPT now serves more than 900 million users per week. For an entire category of customer questions, the first stop is no longer Google or your help centre. The traditional service model has no answer to that. If your customer asks ChatGPT about your return policy and ChatGPT hallucinates, your customer leaves with the wrong information. You have no way to be there. No control. No data. No follow-up. Similar to how AI Agents that integrate with social channels, service should go wherever the customer is. The customer stays in their preferred AI assistant. The brand stays in control of the experience. LLM as a channel is Zendesk's answer to this new behaviour. Businesses can build apps in the ChatGPT App Store and connect those apps to Zendesk. When a customer interacts with a company's app inside ChatGPT, they get on-brand answers grounded in the company's approved knowledge. They can take approved actions. They can be escalated to a Zendesk AI or human agent with the full conversation context preserved. ![4 ChatGPT.png](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/4-ChatGPT.png) Here too, the concept of Zendesk as a platform shows up. Your Zendesk-powered AI Agent already runs on messaging, on email, on voice, on social, in the Help Center, on mobile, and now, it runs inside ChatGPT (and soon Gemini, Claude or other platforms). The same logic, the same knowledge, the same procedures. Just on different surfaces, all powered by the same engine underneath. # A connected and customisable AI platform For most of Zendesk's history, the product was the thing your team logged into. Agent Workspace. Admin Center. The Help Center your customers visited. The mobile SDK in your app. Zendesk was a set of UIs, with a platform underneath that you configured to make those UIs work for you. Relate 2026 inverts that relationship. The platform moves to the centre. The UIs become consumers of the platform. AI Agents on the front-end. Copilots on the back-end. Action Builder, Custom Objects and App Builder turn it from a closed system into something you can build on. MCP support means anything you build connects to anything else, without code. Your AI Agent on messaging is the same agent running inside ChatGPT. Your Custom Objects schema is the same data backing the apps you build in App Builder. Your knowledge from SharePoint is the same knowledge feeding your help centre. Your action flows are the same flows running inside human agent procedures and AI Agent reasoning. One engine. Many faces. That's what makes the Resolution Platform actually a platform rather than a suite of products. ## Sign up for Internal Note Turning Zendesk into practice. – A weekly newsletter written by Thomas Verschoren. Subscribe Email sent! Check your inbox to complete your signup. No spam. Unsubscribe anytime. ### How to embed Zendesk in your customer experience - Integrating Internal Note with Zendesk URL: https://internalnote.com/how-to-embed-zendesk-in-your-customer-experience-integrating-internal-note-with-zendesk/ Last updated: 2026-05-07T08:17:17.000Z Most people look at Zendesk, or any other CX platform, and might see it as a standalone environment where their agents interact with customers. And while this might have been true in the early 2000s, it's wrong today. Today, Zendesk functions as a resolution platform. It connects to your content, your customers, and your wider business operations. Your knowledge base feeds your AI Agents. Your website data enriches conversations. Your CRM informs routing decisions. In this article, I'll walk you through how I've integrated Zendesk across the full Internal Note experience, and what you can take from that for your own setup. Similarly, where the Help Center used to be a standalone destination to search articles, it has now evolved into the Knowledge Graph. It aggregates content from your website and help centre articles, and connects to platforms like Confluence, SharePoint or Notion to provide a broader range of knowledge. That in turn allows for a higher resolution rate for knowledge-based questions. The Help Center itself has evolved too. Gone are the days of a list of search results. It's quickly being replaced with a generated answer at the top of your search results. Where content and the Help Center were once tightly interlinked, that web experience is now just one of the ways your customers and agents can interact with your data. AI Agents pull from those same sources to generate responses. Agent Copilot uses it for suggested replies. And while search is the original interface, conversations are the new way most customers interact with your company. The Zendesk Web Widget, Mobile SDK and the [ChatGPT app](https://support.zendesk.com/hc/en-us/articles/10622210192154-Announcement-Allowing-businesses-to-provide-customer-support-over-OpenAI-s-ChatGPT-EAP?ref=internalnote.com) allow you to easily embed the Zendesk experience in your apps and websites, while the rich API platform offers codeable ways to talk to Zendesk. Zendesk's platform integrates deeply with your business' operations. Its Action Builder platform allows you to pull in data from your CRM or order system, while also allowing you to send data to Slack, Google Sheets, Jira or a myriad of other platforms. Beyond simple data exchange, Action Builder supports full automation workflows. These can be triggered by ticket events, status changes or conversation signals. Within them, you can use native connectors for platforms like Salesforce, HubSpot and Slack, or define Custom Actions to call any API endpoint you need. Where a native connector doesn't exist, a Custom Action covers the gap. No hosting, no external scripts, just configuration inside the platform. Action Builder isn't just there to do this though. It's also there to gather context. Combined with our Conversational platform, it can pull in metadata to enrich your conversations. It can be used to inform routing or move forward in procedures, removing manual input steps for your customers and agents. And to offer this kind of support to your customers, you need to know who they are. By linking Zendesk to your current customer database, importing users, enriching profiles and enabling authentication, your AI Agents and team know who the customer is, what their context and preferences are, and can offer deeper, more personal support. All of these are available right out of the box in the Zendesk Resolution Platform. But knowing where to start leveraging these integration capabilities might seem daunting. So in this article I'm going to show you how I use these capabilities to run Internal Note, and how I deeply integrated this website with Zendesk to offer a more personalised and more powerful experience to you, the reader. Most of what I do here is equally applicable to your website, so you can use this for inspiration, or as a guide. # Knowledge Graph Internal Note is first and foremost a content blog. Similar to how your own website's blog or newsroom might serve as a good additional source for your Knowledge Graph, I wanted to leverage Internal Note as a source of content for my Help Center and Echo, my AI Agent. But the opposite is true too. While people might search for Internal Note content via the AI Agent, the AI Agent needs information from the broader Zendesk platform to fill in gaps the content doesn't address. An article about a certain topic might raise questions that our support documentation can answer. So when indexing content to use across your Knowledge Graph, try to look for both the obvious (support content) and the supportive (blog content, marketing landing pages,...), while staying away from duplicate content. ## Index content via Federated Search Adding any external website to Zendesk's Knowledge Graph is done via Federated Search. This used to be an Enterprise feature, but is now available to all customers. By adding your website's sitemap as a source, Zendesk will index all public content and make it available across your Help Center as an additional Knowledge Source. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Federated-Search.png) ## Surface generated answers with Quick Answer After doing so, when I search my [Help Center](https://support.internalnote.com/hc/en-us/search?utf8=%E2%9C%93&query=federated+search&ref=internalnote.com) the Quick Answer will also use content sourced from Internal Note, while the search results will contain links to articles. Quick Answer is Zendesk's generative search capability. When a visitor searches the Help Center, they don't get a list of links. They get a synthesised answer, pulled from all indexed content. That includes your Help Center articles and any external sources added via Federated Search. It works similarly to how an AI Agent generates a response, but it happens in the search context, at the top of the results page, without needing to start a conversation. For visitors who want a fast answer before reading further, that's a meaningfully better experience than a page of blue links. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Quick-Answer.png) Since my Help Center now knows my entire website's content, it actually offers better search results than my website's own search does. I'm considering replacing the site search entirely with one that lands on my Help Center's results page. Quick Answer's capabilities alone make it worth considering for your site too. ### Add your website to AI Agents Once a website is added via Federated Search, you can also go to your AI Agent Essential in Admin Center and add the website as an additional external source for the AI Agent. It'll then source from both your Help Center and website to generate responses. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Essential.png) For now, Zendesk's AI Agents Advanced leverage their own indexed knowledge sources to generate knowledge replies to customers. You can add your Zendesk Help Center or your website to the list of indexed sources and the system will make that content available to your replies and use cases. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Advanced.png) ### Answer questions with Knowledge Reply By default the Knowledge Reply will pull from all indexed resources to reply to the customer. You can however use Search Rules based on customer segment or conversation context to limit replies to only specifically applicable resources. This is extremely useful when you have a single AI Agent that serves multiple user segments. For example, my AI Agent mostly only uses [internalnote.com](https://internalnote.com/) to react to enquiries, and only rarely dives into the broader [support.zendesk.com](http://support.zendesk.com/?ref=internalnote.com) resource. The same logic applies wherever you have multiple audiences being served by the same agent. [What’s new for Zendesk AI Agents AdvancedZendesk is unifying its AI Agent offering and making agentic email GA. This roundup covers every notable AI Agents Advanced release in 2026 so far, from hybrid procedures and knowledge replies to new governance tools and conversation journey reports.![](https://static.ghost.org/v5.0.0/images/link-icon.svg)Internal NoteThomas Verschoren![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/thumbnail/Banner---2026-01-Agentic-4.png)](https://internalnote.com/whats-new-for-zendesk-ai-agents-advanced/#knowledge-reply) ### Summarise content on demand But while offering Knowledge Replies is nice, the real power comes when we integrate Knowledge into Use Cases. The content on this website is longform and detailed. Any reader who wants to know about a specific detail for a certain topic can ask my AI Agent, Echo, and it'll respond with an answer covering only that specific paragraph or section. But sometimes readers want to know *what* an article is about before spending the time reading it. And while I could write a `TLDR;` myself, since we have an AI Agent right there, we can also leverage Use Cases and their new Knowledge Reply blocks to do that work for us. You can write a Use Case that uses Search Rules or specific guidance to pull from a specific article, and then instruct it to generate a summary. It's a simple process, but it solves an actual ask from readers. This concept is also applicable to your own scenarios. A use case that summarises a new product release while always framing it in the value that update brings. Or a use case that lists current marketing promotions, filtered to the current user's segment. The list goes on. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Use-Case-1.png) ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Use-Case-2.png) This summary flow also leverages conversational metadata to understand which webpage and article we're talking about. This metadata is passed via the Zendesk Web Widget (see below). 💡 ****Try it yourself.** Click the summary button at the top of this article, or ask Echo for a summary directly. ## Embed Help Center content on your website So far we've mostly described how we can pull external content into Zendesk. But the opposite is equally important. If you use your Help Center to make announcements, offer product updates or highlight important changes, you might want to embed that information on your product, marketing or customer pages. While embedding the Zendesk Widget is *the* best way to offer inline support, sometimes you just want to show a list of articles. I'm doing exactly that on Internal Note. On my home page I show a list of recent product announcements pulled from our [Help Center](https://support.zendesk.com/hc/en-us/sections/4405298833818-Announcements?ref=internalnote.com). Because while I try to write about all updates on the platform, our release cadence is such that there is always more released than I get the chance to write about. By embedding our release notes on Internal Note, readers get a quick way to see what's happening alongside my own content. The same approach works for any company that wants to surface support content, release notes or product updates outside the Help Center itself. ![](https://storage.ghost.io/c/ca/c0/cac0c82b-bc4d-4404-9eb4-9cc75e8d045e/content/images/2026/05/Sidebar.png) ### Pull content via the Help Center API Enabling this is Zendesk's API layer. Most, if not all, data and configuration elements in the Zendesk Platform are accessible over API, meaning you can build your own interface or UI to render that data. So similar to how the Help Center has grown from a website into a graph that empowers the Help Center, AI Agents and Quick Answers, you can use it as a data source for your website too. The code below is a simple version of how I use the Help Center API endpoints to pull in articles from four specific sections that highlight our release notes, what's new announcements and developer updates. I then combine them into a single object, sort them newest first and render them out. ```javascript const API_BASE_URL = 'https://yourdomain.zendesk.com/api/v2/help_center/sections'; const sectionIds = ['4405298833818', '4405298889242', '4405298877338', '4405298847002' ]; (async () => { try { const fetchPromises = sectionIds.map(async (id) => { const res = await fetch(`${API_BASE_URL}/${id}/articles.json?per_page=10&sort_by=created_at&sort_order=desc`); const data = await res.json(); return data.articles || []; }); const results = await Promise.all(fetchPromises); const allArticles = results .flat() .sort((a, b) => new Date(b.created_at) - new Date(a.created_at)) .slice(0, 10); setCachedData(allArticles); //Cache the data to lower API usage renderArticles(allArticles); //Show articles in the UI } catch (error) { console.error('Error fetching Zendesk announcements:', error); } })(); ``` Once the articles are fetched, I render them out on the page. ```javascript const listHTML = allArticles.map(article => { const cleanedTitle = cleanTitle(article.title); const formattedDate = formatDate(article.created_at); return `
  • ${cleanedTitle} ${formattedDate}
  • `; }).join(''); announcements.innerHTML = `
      ${listHTML}
    `; ``` ### A note on security and caching What is important when doing this is to take caching and security into account. I'm pulling in public Help Center content, so there's no API token being exchanged, allowing me to call this code client-side. If you want to access content locked to specific user segments, or from a Help Center that requires sign-in, you'd need to run this server-side and make sure you only run it for applicable users. Additionally, you're calling the Zendesk API, and every environment has usage and rate limits. So I use a `setCachedData()` function to store each fetch in `localStorage` for at least 12 hours. This way most readers only fetch articles once a day, making sure I do not overload any API endpoints. Pulling Help Center content into your website creates a useful feedback loop. Your readers get a live view of what's changing on the platform. Your Help Center becomes a content engine, not just a support destination. And because it's API-driven, the presentation is entirely yours to define. This approach works well for release notes and announcements. But it applies equally to documentation pages, onboarding flows or product tooltips. If the content lives in your Help Center, it can live on your website too. The key benefit is a single source of truth. Your support team maintains the content once. You distribute it wherever it's needed. # Integrating conversations Indexing your content is one way to integrate your company and Zendesk better, and to leverage the work that other teams are doing to support your customer support operations, and vice versa. The second step is to make your support teams more easily accessible to your customers. Especially now that AI Agents are taking over more and more of the work, and self-service is turning into automated resolutions, there's no reason to hide your support channels anymore. ## Make support available everywhere with the Web Widget By embedding the Zendesk Web Widget on every page of your website you make customer support available where customers run into a problem. And while the idea of making support available anywhere might invoke the idea of "customers will reach out without deflection", the fact that AI Agents are there to offer answers pulled from knowledge or procedures actually turns that idea on its head. A more accessible support channel will not lead to more escalated conversations, as long as your knowledge and processes are set up to handle your most common use cases. Embedding the Zendesk widget can be as easy as adding a one-line snippet to your website's `` or `