What is Zendesk

Zendesk is a customer service solution for handling support tickets.

Get an API key

  1. Go to the Inkeep Dashboard
  2. Select your project under Projects
  3. Go to the Integrations tab
  4. Click on Create integration
  5. Select Web
  6. Provide a Name and URL (optional) for the integration
  7. Click on Create
  8. Click the Example < /> button to get your API key and view suggested settings

Connect the script

  1. Click the Zendesk Products in the top bar, then select Guide
  2. Navigate to Guide Admin
  3. Click Customize on the theme you want to edit
  4. Click Edit code. Which will open theme code editor

In the templates section, find the document_head.hbs file and paste the code below:

<script id="inkeep-script" src="https://unpkg.com/@inkeep/uikit-js@0.3.18/dist/embed.js" type="module" defer></script>

Creating the container

Add a container for the widget:

  1. Open the home_page.hbs and section_page.hbs files
  2. Add an element with the ID - inkeepSearchBarNav and inkeepSearchBarHero
  3. Apply the below before -> after changes to home_page.hbs:
  1. Apply the below before -> after changes to section_page.hbs:
  1. Click Publish

Custom CSS

Zendesk allows you to add a custom css file to the assets directory:

  1. Create an inkeep-styles.css stylesheet and paste in the below::
inkeep-styles.css
[data-theme="light"] .ikp-search-bar-trigger__wrapper {
  background: white;
  border-radius: 6px;
  width: 100%;
}
  1. In the theme code editor, click Add
  2. Click on Asset
  3. Upload the created css file

Initialize the widgets

Next, go back to the header.hbs file and add the following code at the end of the file:

<script type="text/javascript" defer>
  const inkeepScript = document.getElementById("inkeep-script");

  // configure and initialize the widget
  const addInkeepWidget = (componentType, targetElementId) => {
    const inkeepStyles = "{{asset 'inkeep-styles.css'}}"; // <--- should match the uploaded file
    const inkeepWidget = Inkeep().embed({
      componentType,
      targetElement: targetElementId,
      properties: {
        baseSettings: {
          apiKey: "INKEEP_API_KEY", // required
          integrationId: "INKEEP_INTEGRATION_ID", // required
          organizationId: "INKEEP_ORGANIZATION_ID", // required
          primaryBrandColor: "#26D6FF", // your brand color, widget color scheme is derived from this
          organizationDisplayName: "Inkeep",
          // ...optional settings,
          theme: {
            stylesheetUrls: [inkeepStyles], // optional
          },
        },
        modalSettings: {
          // optional settings
        },
        searchSettings: {
          // optional settings
        },
        aiChatSettings: {
          // optional settings
          botAvatarSrcUrl: "https://mydomain.com/mylogo", // use your own bot avatar
          quickQuestions: [
            "Example question 1?",
            "Example question 2?",
            "Example question 3?",
          ],
        },
      },
    });
  };

  inkeepScript.addEventListener("load", () => {
    if (document.body) {
      const navSearchBarContainer =
        document.getElementById("inkeepSearchBarNav");
      const heroSearchBarContainer = document.getElementById(
        "inkeepSearchBarHero"
      );

      addInkeepWidget("ChatButton"); // initialize the ChatButton widget
      navSearchBarContainer &&
        addInkeepWidget("SearchBar", "#inkeepSearchBarNav"); // initialize the nav SearchBar widget
      heroSearchBarContainer &&
        addInkeepWidget("SearchBar", "#inkeepSearchBarHero"); // initialize the hero SearchBar widget
    }
  });
</script>

Different styles between hero and nav bar

You can conditionally apply different stylesheets to the navigation bar or hero search bar.

// ...

const inkeepSearchBarNavStyles = "{{asset 'inkeep-styles.css'}}"; // <--- should match the uploaded file
const inkeepSearchBarHeroStyles = "{{asset 'inkeep-hero-styles.css'}}"; // <--- should match the uploaded file

const stylesheetUrls =
  componentType === "ChatButton"
    ? []
    : targetElementId === "inkeepSearchBarHero"
    ? [inkeepSearchBarHeroStyles]
    : [inkeepSearchBarNavStyles];

const inkeepWidget = Inkeep().embed({
  componentType,
  targetElement: targetElementId,
  properties: {
    // ...other settings,
    baseSettings: {
      // ...other baseSettings,
      theme: {
        stylesheetUrls,
      },
    },
  },
});
// ...

Save custom code

Click on the Publish. Navigate to your web application to make sure the widget is installed correctly.

For a full list of customizations, check out the Common Settings.