IntegrationsGatsby

Add AI Chat to your Gatsby app

What is Gatsby

Gatsby is a React-based open source framework for creating websites.

Install the component library

npm install @inkeep/uikit
bun add @inkeep/uikit
pnpm add @inkeep/uikit
yarn add @inkeep/uikit

Customize your settings

First, create a useInkeepSettings.ts file that will contain a hook that returns configuration for the Inkeep component(s).

Below is an example with common customizations:

const useInkeepSettings = () => {
  const baseSettings = {
    apiKey: process.env.INKEEP_API_KEY,
    integrationId: process.env.INKEEP_INTEGRATION_ID,
    organizationId: process.env.INKEEP_ORGANIZATION_ID,
    primaryBrandColor: "#26D6FF", // your brand color, widget color scheme is derived from this
    organizationDisplayName: "Inkeep",
    // ...optional settings
  };
 
  const modalSettings = {
    // optional settings
  };
 
  const searchSettings = {
    // optional settings
  };
 
  const aiChatSettings = {
    // optional settings
    botAvatarSrcUrl: "/img/logo.svg", // use your own bot avatar
    quickQuestions: [
      "Example question 1?",
      "Example question 2?",
      "Example question 3?",
    ],
  };
 
  return { baseSettings, aiChatSettings, searchSettings, modalSettings };
};
 
export default useInkeepSettings;
import type {
  InkeepAIChatSettings,
  InkeepSearchSettings,
  InkeepBaseSettings,
  InkeepModalSettings,
} from "@inkeep/uikit";
 
type InkeepSharedSettings = {
  baseSettings: InkeepBaseSettings;
  aiChatSettings: InkeepAIChatSettings;
  searchSettings: InkeepSearchSettings;
  modalSettings: InkeepModalSettings;
};
 
const useInkeepSettings = (): InkeepSharedSettings => {
  const baseSettings: InkeepBaseSettings = {
    apiKey: "INKEEP_API_KEY",
    integrationId: "INKEEP_INTEGRATION_ID",
    organizationId: "INKEEP_ORGANIZATION_ID",
    primaryBrandColor: "#26D6FF", // your brand color, widget color scheme is derived from this
    organizationDisplayName: "Inkeep",
    // ...optional settings
  };
 
  const modalSettings: InkeepModalSettings = {
    // optional settings
  };
 
  const searchSettings: InkeepSearchSettings = {
    // optional settings
  };
 
  const aiChatSettings: InkeepAIChatSettings = {
    // optional settings
    botAvatarSrcUrl: "/img/logo.svg", // use your own bot avatar
    quickQuestions: [
      "Example question 1?",
      "Example question 2?",
      "Example question 3?",
    ],
  };
 
  return { baseSettings, aiChatSettings, searchSettings, modalSettings };
};
 
export default useInkeepSettings;

Define the component

Next, create an InkeepChatButton.tsx file for the Chat Button component.

import * as React from "react";
import { useEffect, useState } from "react";
import useInkeepSettings from "@/utils/useInkeepSettings";
 
export default function InkeepChatButton() {
  const [ChatButton, setChatButton] = useState(null);
 
  const { baseSettings, aiChatSettings, searchSettings, modalSettings } =
    useInkeepSettings();
 
  // load the library asynchronously
  useEffect(() => {
    const loadChatButton = async () => {
      try {
        const { InkeepChatButton } = await import("@inkeep/uikit");
        setChatButton(() => InkeepChatButton);
      } catch (error) {
        console.error("Failed to load ChatButton:", error);
      }
    };
 
    loadChatButton();
  }, []);
 
  const chatButtonProps = {
    baseSettings,
    aiChatSettings,
    searchSettings,
    modalSettings,
  };
 
  return ChatButton && <ChatButton {...chatButtonProps} />;
}
import * as React from "react";
import { useEffect, useState } from "react";
import useInkeepSettings from "@/utils/useInkeepSettings";
import type { InkeepChatButtonProps } from "@inkeep/uikit";
 
export default function InkeepChatButton() {
  const [ChatButton, setChatButton] =
    useState<(e: InkeepChatButtonProps) => JSX.Element>();
 
  const { baseSettings, aiChatSettings, searchSettings, modalSettings } =
    useInkeepSettings();
 
  // load the library asynchronously
  useEffect(() => {
    const loadChatButton = async () => {
      try {
        const { InkeepChatButton } = await import("@inkeep/uikit");
        setChatButton(() => InkeepChatButton);
      } catch (error) {
        console.error("Failed to load ChatButton:", error);
      }
    };
 
    loadChatButton();
  }, []);
 
  const chatButtonProps: InkeepChatButtonProps = {
    baseSettings,
    aiChatSettings,
    searchSettings,
    modalSettings,
  };
 
  return ChatButton && <ChatButton {...chatButtonProps} />;
}

For a full list of customizations, check out the Chat Button documentation.

On this page