feat: add chatwoot integration (#39)

This commit is contained in:
Abhishek 2025-11-04 18:12:57 +05:30 committed by GitHub
parent d58f37ff42
commit 5c1fe2c6af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 82 additions and 0 deletions

View file

@ -34,6 +34,8 @@ ENV NEXT_PUBLIC_DEPLOYMENT_MODE="oss"
ENV NEXT_PUBLIC_BACKEND_URL="http://localhost:8000"
ENV BACKEND_URL="http://api:8000"
ENV NEXT_TELEMETRY_DISABLED="1"
ENV NEXT_PUBLIC_CHATWOOT_URL="https://chat.dograh.com"
ENV NEXT_PUBLIC_CHATWOOT_TOKEN="3fkFx2mCEjNHjM9gaNc4A82X"
# Build the application with standalone mode
RUN npm run build && \

View file

@ -4,6 +4,7 @@ import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import { Suspense } from "react";
import ChatwootWidget from "@/components/ChatwootWidget";
import PostHogIdentify from "@/components/PostHogIdentify";
import SpinLoader from "@/components/SpinLoader";
import { Toaster } from "@/components/ui/sonner";
@ -44,6 +45,7 @@ export default function RootLayout({
<PostHogIdentify />
{children}
<Toaster />
<ChatwootWidget />
</OnboardingProvider>
</UserConfigProvider>
</Suspense>

View file

@ -0,0 +1,78 @@
"use client";
import { useEffect } from "react";
declare global {
interface Window {
chatwootSDK?: {
run: (config: {
websiteToken: string;
baseUrl: string;
}) => void;
};
chatwootSettings?: {
position?: "left" | "right";
type?: "standard" | "expanded_bubble";
launcherTitle?: string;
};
}
}
const CHATWOOT_BASE_URL = process.env.NEXT_PUBLIC_CHATWOOT_URL;
const CHATWOOT_WEBSITE_TOKEN = process.env.NEXT_PUBLIC_CHATWOOT_TOKEN;
export default function ChatwootWidget() {
useEffect(() => {
// Don't initialize if environment variables are not set
if (!CHATWOOT_BASE_URL || !CHATWOOT_WEBSITE_TOKEN) {
console.warn("Chatwoot not configured: Missing NEXT_PUBLIC_CHATWOOT_URL or NEXT_PUBLIC_CHATWOOT_TOKEN");
return;
}
// Prevent duplicate initialization
if (window.chatwootSettings) {
return;
}
// Configure Chatwoot widget settings
window.chatwootSettings = {
position: "right",
type: "standard",
launcherTitle: "Chat with us",
};
// Check if script is already loaded
const existingScript = document.querySelector(
`script[src="${CHATWOOT_BASE_URL}/packs/js/sdk.js"]`
);
if (existingScript) {
// Script already exists, just initialize if SDK is available
if (window.chatwootSDK) {
window.chatwootSDK.run({
websiteToken: CHATWOOT_WEBSITE_TOKEN,
baseUrl: CHATWOOT_BASE_URL,
});
}
return;
}
// Create and inject the Chatwoot SDK script
const script = document.createElement("script");
script.src = `${CHATWOOT_BASE_URL}/packs/js/sdk.js`;
script.async = true;
script.defer = true;
script.onload = () => {
if (window.chatwootSDK) {
window.chatwootSDK.run({
websiteToken: CHATWOOT_WEBSITE_TOKEN,
baseUrl: CHATWOOT_BASE_URL,
});
}
};
document.body.appendChild(script);
}, []);
return null;
}