mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
feat: Add Chat Trigger node (#7409)
Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com> Co-authored-by: Jesper Bylund <mail@jesperbylund.com> Co-authored-by: OlegIvaniv <me@olegivaniv.com> Co-authored-by: Deborah <deborah@starfallprojects.co.uk> Co-authored-by: Jan Oberhauser <janober@users.noreply.github.com> Co-authored-by: Jon <jonathan.bennetts@gmail.com> Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in> Co-authored-by: Michael Kret <88898367+michael-radency@users.noreply.github.com> Co-authored-by: Giulio Andreini <andreini@netseven.it> Co-authored-by: Mason Geloso <Mason.geloso@gmail.com> Co-authored-by: Mason Geloso <hone@Masons-Mac-mini.local> Co-authored-by: Mutasem Aldmour <mutasem@n8n.io>
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
import type { AuthenticationChatOption, LoadPreviousSessionChatOption } from './types';
|
||||
|
||||
export function createPage({
|
||||
instanceId,
|
||||
webhookUrl,
|
||||
showWelcomeScreen,
|
||||
loadPreviousSession,
|
||||
i18n: { en },
|
||||
initialMessages,
|
||||
authentication,
|
||||
}: {
|
||||
instanceId: string;
|
||||
webhookUrl?: string;
|
||||
showWelcomeScreen?: boolean;
|
||||
loadPreviousSession?: LoadPreviousSessionChatOption;
|
||||
i18n: {
|
||||
en: Record<string, string>;
|
||||
};
|
||||
initialMessages: string[];
|
||||
mode: 'test' | 'production';
|
||||
authentication: AuthenticationChatOption;
|
||||
}) {
|
||||
const validAuthenticationOptions: AuthenticationChatOption[] = [
|
||||
'none',
|
||||
'basicAuth',
|
||||
'n8nUserAuth',
|
||||
];
|
||||
const validLoadPreviousSessionOptions: LoadPreviousSessionChatOption[] = [
|
||||
'manually',
|
||||
'memory',
|
||||
'notSupported',
|
||||
];
|
||||
|
||||
const sanitizedAuthentication = validAuthenticationOptions.includes(authentication)
|
||||
? authentication
|
||||
: 'none';
|
||||
const sanitizedShowWelcomeScreen = !!showWelcomeScreen;
|
||||
const sanitizedLoadPreviousSession = validLoadPreviousSessionOptions.includes(
|
||||
loadPreviousSession as LoadPreviousSessionChatOption,
|
||||
)
|
||||
? loadPreviousSession
|
||||
: 'notSupported';
|
||||
|
||||
return `<doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Chat</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/normalize.css@8.0.1/normalize.min.css" rel="stylesheet" />
|
||||
<link href="https://cdn.jsdelivr.net/npm/@n8n/chat/style.css" rel="stylesheet" />
|
||||
</head>
|
||||
<body>
|
||||
<script type="module">
|
||||
import { createChat } from 'https://cdn.jsdelivr.net/npm/@n8n/chat@latest/chat.bundle.es.js';
|
||||
|
||||
(async function () {
|
||||
const authentication = '${sanitizedAuthentication}';
|
||||
let metadata;
|
||||
if (authentication === 'n8nUserAuth') {
|
||||
try {
|
||||
const response = await fetch('/rest/login', {
|
||||
method: 'GET'
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error('Not logged in');
|
||||
}
|
||||
|
||||
const responseData = await response.json();
|
||||
metadata = {
|
||||
user: {
|
||||
id: responseData.data.id,
|
||||
firstName: responseData.data.firstName,
|
||||
lastName: responseData.data.lastName,
|
||||
email: responseData.data.email,
|
||||
},
|
||||
};
|
||||
} catch (error) {
|
||||
window.location.href = '/signin?redirect=' + window.location.href;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
createChat({
|
||||
mode: 'fullscreen',
|
||||
webhookUrl: '${webhookUrl}',
|
||||
showWelcomeScreen: ${sanitizedShowWelcomeScreen},
|
||||
loadPreviousSession: ${sanitizedLoadPreviousSession !== 'notSupported'},
|
||||
metadata: metadata,
|
||||
webhookConfig: {
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Instance-Id': '${instanceId}',
|
||||
}
|
||||
},
|
||||
i18n: {
|
||||
${en ? `en: ${JSON.stringify(en)},` : ''}
|
||||
},
|
||||
${initialMessages.length ? `initialMessages: ${JSON.stringify(initialMessages)},` : ''}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>`;
|
||||
}
|
||||
Reference in New Issue
Block a user