feat(BOOK-68): Added kindly chatbot

Approved-by: Linus Flood
This commit is contained in:
Erik Tiekstra
2025-09-11 12:44:47 +00:00
parent def079021b
commit 15a352ea99
6 changed files with 73 additions and 0 deletions

View File

@@ -17,6 +17,7 @@ import TrpcProvider from "@/lib/trpc/Provider"
import { SessionRefresher } from "@/components/Auth/TokenRefresher"
import { BookingFlowProviders } from "@/components/BookingFlowProviders"
import ChatbotScript from "@/components/ChatbotScript"
import CookieBotConsent from "@/components/CookieBot"
import Footer from "@/components/Footer"
import Header from "@/components/Header"
@@ -53,6 +54,7 @@ export default async function RootLayout(
<FontPreload />
<AdobeSDKScript />
<GTMScript />
<ChatbotScript />
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
<Script id="ensure-adobeDataLayer">{`
window.adobeDataLayer = window.adobeDataLayer || []

View File

@@ -0,0 +1,34 @@
"use client"
import { usePathname } from "next/navigation"
import { useEffect } from "react"
import useLang from "@/hooks/useLang"
import { CHATBOT_HIDE_ROUTES } from "./constants"
interface ChatbotRouteChangeProps {
liveLangs: string[]
}
export function ChatbotRouteChange({ liveLangs }: ChatbotRouteChangeProps) {
const pathName = usePathname()
const currentLang = useLang()
useEffect(() => {
const isLive = liveLangs.includes(currentLang)
const shouldHideChatbot = CHATBOT_HIDE_ROUTES.some((route) =>
pathName.includes(route)
)
if (window.kindlyChat) {
if (shouldHideChatbot || !isLive) {
window.kindlyChat.closeChat()
window.kindlyChat.hideBubble()
} else {
window.kindlyChat.showBubble()
}
}
}, [pathName, liveLangs, currentLang])
return null
}

View File

@@ -0,0 +1 @@
export const CHATBOT_HIDE_ROUTES = ["/hotelreservation"]

View File

@@ -0,0 +1,25 @@
import Script from "next/script"
import { env } from "@/env/server"
import { ChatbotRouteChange } from "@/components/ChatbotScript/RouteChange"
import { getLang } from "@/i18n/serverContext"
export default async function ChatbotScript() {
const lang = await getLang()
const liveLangs = env.CHATBOT_LIVE_LANGS
return (
<>
<Script
id="kindly-chat"
src="https://chat.kindlycdn.com/kindly-chat.js"
data-bot-key="910bd27a-7472-43a1-bcfc-955b41adc3e7"
data-shadow-dom
data-language={lang}
defer
></Script>
<ChatbotRouteChange liveLangs={liveLangs} />
</>
)
}

View File

@@ -164,6 +164,10 @@ export const env = createEnv({
.refine((s) => s === "true" || s === "false")
.transform((s) => s === "true")
.default("false"),
CHATBOT_LIVE_LANGS: z
.string()
.optional()
.transform((s) => s?.split(",") || []),
},
emptyStringAsUndefined: true,
runtimeEnv: {
@@ -246,6 +250,7 @@ export const env = createEnv({
CAMPAIGN_PAGES_ENABLED: process.env.CAMPAIGN_PAGES_ENABLED,
WEBVIEW_SHOW_OVERVIEW: process.env.WEBVIEW_SHOW_OVERVIEW,
ENABLE_NEW_OVERVIEW_SECTION: process.env.ENABLE_NEW_OVERVIEW_SECTION,
CHATBOT_LIVE_LANGS: process.env.CHATBOT_LIVE_LANGS,
},
})

View File

@@ -17,4 +17,10 @@ interface Window {
}
Cookiebot: { changed: boolean; consented: boolean }
ApplePaySession: (() => void) | undefined
kindlyChat: {
showBubble: () => void
closeChat: () => void
showChat: () => void
hideBubble: () => void
}
}