Deployment procedure for Zendesk Support

Install the Coveo application in Zendesk

  1. Install the Coveo Search App.

  2. On the installation page, enter your Coveo organization ID.

  3. (Optional) Enter specific field names to add to the allowlist.

  4. (Optional) Enter specific field names to add to the blocklist.

    Notes
    • By default, all ticket fields are sent to Coveo as context and are used to automatically surface support content to agents in the Coveo Search app. If you wish to only use part of the ticket content, add the field names to the Fields Allowlist and Fields Blocklist accordingly. The field names must be specified as follows: Ticket_<FIELD_NAME>.

      For example, you want to add the ticket description to the blocklist. In that case, in Fields Blocklist, you would enter Ticket_Description.

    • You can view or edit the ticket fields as required, or you can create a custom field to add to the ticket.

  5. Select the roles that should have access to the Coveo application.

  6. Select the roles that should be restricted from the Coveo Application.

  7. Click Install.

Create search pages

  1. On the Search Pages (platform-ca | platform-eu | platform-au) page, create the following search pages with the Interface Editor:

    • zd_support_new_ticket_sidebar

    • zd_support_ticket_sidebar

  2. Once the pages are created, click Edit Interface, and then Code View for each page, and replace the existing code with the this code.

  3. Create another search page named zd_support_top_bar for the top toolbar.

Note

This search page can be further customized at a later time as needed.

Generate API key

To authorize the search interface to send queries and retrieve results from your Coveo organization, you must generate an API Key in the Coveo Administration Console.

  1. Create an API key with the following privileges:

    Service Domain Required access level

    Analytics

    Analytics Data

    Push

    Search

    Impersonate

    Allowed

    Note

    The API key is used only once to authorize the search interface and isn’t re-used afterwards. Once the authorization is complete, you can delete the key.

  2. Copy the API key.

  3. Back on the Agent Dashboard, click the Coveo icon located on the top bar.

  4. Paste the API key and click Authorize.

    Zendesk API key | Coveo
  5. In the Coveo for Zendesk by Coveo pop-up, click Allow.

View ticket with Insight Panel

The Top Bar appears on the top of the Agent Dashboard with a Coveo search box. By selecting a ticket, the Coveo for Zendesk Insight Panel will appear on the right side of the ticket.

zendesk-coveo-search-app | Coveo

Leading practices

To improve the relevance of search results in the Insight Panel, you can do the following with the default query pipeline:

  • Add query parameter rules.

    Query parameter rules allow you to modify the query parameters before they’re sent to the index. For example, the parameter Override query parameter lq with <@+ $context.ticket_Subject $context.ticket_Description+@> can be used to override the lq query parameter with the ticket subject and description. With that, the search results will be filtered to show only those that are relevant to the ticket being viewed. This can help agents find the required information quicker to resolve the ticket.

  • Create and associate an Automatic Relevance Tuning (ART) model.

    The ITD (Intent to Detail) feature of the ART model allow you to boost results based on user behavior. When used in conjunction with query parameter rules, the ART model can be even more effective. For example, you can create an ART model that boosts results based on the ticket status. When the ticket status is set to Solved, the ART model will boost results that are relevant to solved tickets.

Reference

Search page code

Enter this code into the Code View of the zd_support_new_ticket_sidebar and the zd_support_ticket_sidebar search pages.

<div id="search" class="CoveoSearchInterface" data-results-per-page="5">
  <div class="CoveoFolding"></div>
  <div class="CoveoAnalytics"></div>
  <div class="coveo-tab-section">
    <a class="CoveoTab" data-id="All" data-caption="All"></a>
    <a class="CoveoTab" data-id="Confluence" data-caption="Wiki" data-expression="@connectortype==Confluence2Crawler AND NOT @documenttype==Space"></a>
    <a class="CoveoTab" data-id="GoogleDrive" data-caption="KB" data-expression="@connectortype==GoogleDriveCrawler AND @documenttype==(File,Folder)"></a>
    <a class="CoveoTab" data-id="Lithium" data-caption="Community" data-expression="@litopicid @filetype==lithiummessage" data-sort="date descending"></a>
    <a class="CoveoTab" data-id="ServiceNow" data-caption="ServiceNow" data-expression="@snsysid"></a>
    <a class="CoveoTab" data-id="YouTube" data-caption="YouTube" data-expression="@filetype==&quot;youtubevideo&quot;"></a>
  </div>
  <div class="CoveoUserActions"></div>
  <div class="coveo-search-section">
    <div class="CoveoSearchbox" data-enable-omnibox="true"></div>
  </div>
  <div class="coveo-main-section">
    <div class="coveo-facet-column">
      <div class="CoveoDynamicFacet" data-title="Type" data-field="@objecttype" data-tab="All"></div>
      <div class="CoveoDynamicFacet" data-title="FileType" data-field="@filetype" data-tab="All"></div>
      <div class="CoveoDynamicFacet" data-title="Author" data-field="@author" data-tab="All"></div>
      <div class="CoveoDynamicFacet" data-title="Type" data-field="@confdocumenttype" data-tab="Confluence"></div>
      <div class="CoveoDynamicFacet" data-title="Space" data-field="@confspacename" data-tab="Confluence"></div>
      <div class="CoveoDynamicFacet" data-title="FileType" data-field="@filetype" data-tab="Confluence"></div>
      <div class="CoveoDynamicFacet" data-title="Author" data-field="@author" data-tab="Confluence"></div>
      <div class="CoveoDynamicFacet" data-title="FileType" data-field="@filetype" data-tab="GoogleDrive"></div>
      <div class="CoveoDynamicFacet" data-title="Origin" data-field="@gdfilesource" data-tab="GoogleDrive"></div>
      <div class="CoveoDynamicFacet" data-title="Owner" data-field="@author" data-tab="GoogleDrive"></div>
      <div class="CoveoDynamicFacet" data-title="Last modified By" data-field="@gdfilelastmodifyinguserdisplayname" data-tab="GoogleDrive"></div>
      <div class="CoveoDynamicFacet" data-title="Shared To" data-field="@to" data-tab="GoogleDrive"></div>
      <div class="CoveoDynamicFacet" data-title="Shared From" data-field="@from" data-tab="GoogleDrive"></div>
      <div class="CoveoDynamicFacet" data-title="Category" data-field="@licategoryshorttitle" data-tab="Lithium">
      </div>
      <div class="CoveoDynamicFacet" data-title="Board" data-field="@liboardshorttitle" data-tab="Lithium"></div>
      <div class="CoveoDynamicFacet" data-title="Author" data-field="@limessageauthor" data-tab="Lithium"></div>
      <div class="CoveoDynamicFacet" data-title="Year" data-field="@year" data-tab="Lithium"></div>
      <div class="CoveoDynamicFacet" data-title="Month" data-field="@month" data-tab="Lithium"></div>
      <div class="CoveoDynamicFacet" data-title="Type" data-field="@objecttype" data-tab="Salesforce"></div>
      <div class="CoveoDynamicFacet" data-title="Status" data-field="@sfstatus" data-tab="Salesforce"></div>
      <div class="CoveoDynamicFacet" data-title="Close quarter" data-field="@sfopportunityclosedquarterc" data-tab="Salesforce"></div>
      <div class="CoveoDynamicFacet" data-title="Salesforce Account" data-field="@sfaccountname" data-tab="Salesforce"></div>
      <div class="CoveoDynamicFacet" data-title="Salesforce Owner" data-field="@sfownername" data-tab="Salesforce"></div>
      <div class="CoveoDynamicFacet" data-title="Opportunity Type" data-field="@sfopportunitytype" data-tab="Salesforce"></div>
      <div class="CoveoDynamicFacet" data-title="Opportunity Stage" data-field="@sfopportunitystagename" data-tab="Salesforce"></div>
      <div class="CoveoDynamicFacet" data-title="Lead Source" data-field="@sfleadsource" data-tab="Salesforce"></div>
      <div class="CoveoDynamicFacet" data-title="Created By" data-field="@sfcreatedbyname" data-tab="Salesforce"></div>
      <div class="CoveoDynamicFacet" data-title="Type" data-field="@objecttype" data-tab="ServiceNow"></div>
      <div class="CoveoDynamicFacet" data-title="Priority" data-field="@snpriority" data-tab="ServiceNow"></div>
      <div class="CoveoDynamicFacet" data-title="Urgency" data-field="@snurgency" data-tab="ServiceNow"></div>
      <div class="CoveoDynamicFacet" data-title="Opened By" data-field="@snopenedbytitle" data-tab="ServiceNow"></div>
      <div class="CoveoDynamicFacet" data-title="State" data-field="@snstate" data-tab="ServiceNow"></div>
      <div class="CoveoDynamicFacet" data-title="Category" data-field="@sncategory" data-tab="ServiceNow"></div>
      <div class="CoveoDynamicFacet" data-title="Product" data-field="@sncmdbciname" data-tab="ServiceNow"></div>
      <div class="CoveoDynamicFacet" data-title="Author" data-field="@author" data-tab="YouTube"></div>
    </div>
    <div class="coveo-results-column">
      <div class="CoveoShareQuery"></div>
      <div class="CoveoPreferencesPanel">
        <div class="CoveoResultsPreferences"></div>
        <div class="CoveoResultsFiltersPreferences"></div>
      </div>
      <div class="CoveoTriggers"></div>
      <div class="CoveoBreadcrumb"></div>
      <div class="CoveoDidYouMean"></div>
      <div class="coveo-results-header">
        <div class="coveo-summary-section">
          <span class="CoveoQuerySummary"><div class="coveo-show-if-no-results"></div></span>
        </div>
        <div class="coveo-result-layout-section">
          <span class="CoveoResultLayout"></span>
        </div>
        <div class="coveo-sort-section">
          <span class="CoveoSort" data-sort-criteria="relevancy" data-caption="Relevance"></span>
          <span class="CoveoSort" data-sort-criteria="date descending,date ascending" data-caption="Date"></span>
        </div>
      </div>
      <div class="CoveoHiddenQuery"></div>
      <div class="CoveoErrorReport" data-pop-up="false"></div>
      <div class="CoveoResultList" data-layout="list" data-wait-animation="fade" data-auto-select-fields-to-include="true">
        <script id="Salesforce" class="result-template" type="text/html" data-layout="list" data-field-filetype="SalesforceItem">
          <div class="coveo-result-frame">
                        <div class="CoveoResultActionsMenu">
                            <div class="CoveoQuickview" data-use-advanced-quickview="true"></div>
                        </div>
                        <div class="coveo-result-cell" style="vertical-align: top;">
                            <div class="coveo-result-row" style="margin-top:0;">
                                <div class="coveo-result-cell" style="vertical-align:top;font-size:16px;">
                                    <span class="badge" data-field="@filetype" style="margin-right:5px; background-color: #03363D; color: white; border-radius: 2px; padding: 2px; font-size: 14px;">Knowledge</span>
                                    <span></span>
                                    <a class="CoveoResultLink"></a>
                                </div>
                            </div>
                            <div class="coveo-result-row" style="">
                                <div class="coveo-result-cell">
                                    <span class="CoveoExcerpt" data-html-value="true"></span>
                                </div>
                            </div>
                            <div class="coveo-result-row">
                                <div class="coveo-result-cell">
                                    <div class="CoveoMissingTerms"></div>
                                </div>
                            </div>
                        </div>
                    </div>
                </script>
        <script id="YouTubeVideo" class="result-template" type="text/html" data-layout="list" data-field-filetype="YouTubeVideo">
          <div class="coveo-result-frame">
                        <div class="CoveoResultActionsMenu">
                            <div class="CoveoQuickview" data-use-advanced-quickview="true"></div>
                        </div>
                        <div class="coveo-result-row">
                            <div class="coveo-result-cell">
                                <div class="coveo-result-row">
                                    <div class="coveo-result-cell" style="font-size:16px">
                                        <a class="CoveoResultLink">
                                        </a>
                                    </div>
                                </div>
                                <div class="coveo-result-row" style="margin-top:10px;">
                                    <div class="coveo-result-cell">
                                        <span class="CoveoYouTubeThumbnail">
          </span>
                                    </div>
                                </div>
                                <div class="coveo-result-row" style="margin-top:10px;">
                                    <div class="coveo-result-cell">
                                        <span class="CoveoFieldValue" data-field="@author" data-text-caption="Author" style="margin-right:30px;"></span>
                                        <span class="CoveoFieldValue" data-field="@ytvideoduration" data-helper="timeSpan" data-helper-options-is-milliseconds="false"
                                         data-text-caption="Length" style="margin-right:30px;"></span>
                                        <span class="CoveoFieldValue" data-field="@ytviewcount" data-text-caption="Views" style="margin-right:30px;"></span>
                                        <span class="CoveoFieldValue" data-field="@language" data-text-caption="Language" style="margin-right:30px;"></span>
                                    </div>
                                </div>
                                <div class="coveo-result-row">
                                    <div class="coveo-result-cell">
                                        <div class="CoveoMissingTerms"></div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </script>
        <script id="Answer" class="result-template" type="text/html" data-layout="list" data-field-filetype="kb_social_qa_answer">
          <div class="coveo-result-frame">
                        <div class="CoveoResultActionsMenu">
                            <div class="CoveoQuickview" data-use-advanced-quickview="true"></div>
                        </div>
                        <div class="coveo-result-cell" style="vertical-align: top;">
                            <div class="coveo-result-row" style="margin-top:0;">
                                <div class="coveo-result-cell" style="vertical-align:top;font-size:16px;">
                                    <span class="CoveoFieldValue badge" data-field="@filetype" style="margin-right:5px; background-color: #03363D; color: white; border-radius: 2px; padding: 2px; font-size: 14px;"
                                     data-helper="translatedCaption"></span>
                                    <span></span>
                                    <a class="CoveoResultLink"></a>
                                </div>
                            </div>
                            <div class="coveo-result-row" style="margin-top:5px;">
                                <div class="coveo-result-cell">
                                    <span class="CoveoFieldValue answer" data-field="@snanswer" data-html-value="true"></span>
                                </div>
                            </div>
                            <div class="coveo-result-row">
                                <div class="coveo-result-cell">
                                    <div class="CoveoMissingTerms"></div>
                                </div>
                            </div>
                        </div>
                    </div>
                </script>
        <script id="Default" class="result-template" type="text/html" data-layout="list">
          <div class="coveo-result-frame">
                        <div class="CoveoResultActionsMenu">
                            <div class="CoveoQuickview" data-use-advanced-quickview="true"></div>
                        </div>
                        <div class="coveo-result-cell" style="vertical-align: top;">
                            <div class="coveo-result-row" style="margin-top:0;">
                                <div class="coveo-result-cell" style="vertical-align:top;font-size:16px;">
                                    <span class="CoveoFieldValue badge" data-field="@filetype" style="margin-right:5px; background-color: #03363D; color: white; border-radius: 2px; padding: 2px; font-size: 14px;"
                                     data-helper="translatedCaption"></span>
                                    <span></span>
                                    <a class="CoveoResultLink"></a>
                                </div>
                            </div>
                            <div class="coveo-result-row" style="">
                                <div class="coveo-result-cell">
                                    <span class="CoveoExcerpt" style="font-size: 14px;"></span>
                                </div>
                            </div>
                            <div class="coveo-result-row" style="font-size: 12px;">
                                <div class="coveo-result-cell">
                                    <span class="CoveoFieldValue" data-field="@author" data-text-caption="Author" style="margin-right:10px;"></span>
                                    <span class="CoveoFieldValue" data-field="@source" data-text-caption="Source" style="margin-right:10px;"></span>
                                </div>
                            </div>
                            <div class="coveo-result-row">
                                <div class="coveo-result-cell">
                                    <div class="CoveoMissingTerms"></div>
                                </div>
                            </div>
                        </div>
                    </div>
                </script>
      </div>
      <div class="CoveoPager"></div>
      <div class="CoveoLogo"></div>
    </div>
  </div>
</div>