PayloadCMS рдореЗрдВ Asyntai AI рдЪреИрдЯрдмреЙрдЯ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ
PayloadCMS-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛
рдорд╣рддреНрд╡рдкреВрд░реНрдг: PayloadCMS рдПрдХ рд╣реЗрдбрд▓реЗрд╕ CMS рд╣реИред рдЪреИрдЯрдмреЙрдЯ рдХреЛрдб рдХреЛ рдЖрдкрдХреЗ frontend application рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ Payload рдПрдбрдорд┐рди рдкреИрдирд▓ рдореЗрдВред
рдЪрд░рдг 1: рдЕрдкрдирд╛ рдПрдореНрдмреЗрдб рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдкрдиреЗ Asyntai рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдиреАрдЪреЗ "Embed Code" рдЕрдиреБрднрд╛рдЧ рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВред рдЕрдкрдирд╛ рдпреВрдирд┐рдХ рдПрдореНрдмреЗрдб рдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВ, рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
<script>(function(){var l=function(){var s=document.createElement("script");s.src="https://widget.asyntai.com/static/js/chat-widget.js";s.async=true;s.setAttribute("data-asyntai-id","YOUR_WIDGET_ID");document.head.appendChild(s)};if(document.readyState==="complete"){l()}else{window.addEventListener("load",l)}})();</script>
рдиреЛрдЯ: рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдбреИрд╢рдмреЛрд░реНрдб рд╕реЗ рдЕрдкрдирд╛ рдЕрджреНрд╡рд┐рддреАрдп рдПрдореНрдмреЗрдб рдХреЛрдб рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдкрдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рдЬреЗрдЯ ID рд╣реЛрддреА рд╣реИред
рдЪрд░рдг 2: Next.js рдлреНрд░рдВрдЯрдПрдВрдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ (рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп)
PayloadCMS рдЖрдорддреМрд░ рдкрд░ рдЕрдкрдиреЗ рдлреНрд░рдВрдЯрдПрдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ Next.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЪреИрдЯрдмреЙрдЯ рдХреЛ рдЕрдкрдиреЗ рд░реВрдЯ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
App Router (Next.js 13+)
app/layout.tsx рдЦреЛрд▓реЗрдВ рдФрд░ Script рдХрдВрдкреЛрдиреЗрдВрдЯ рдЬреЛрдбрд╝реЗрдВ:
import Script from 'next/script'
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
<Script
src="https://asyntai.com/static/js/chat-widget.js"
data-asyntai-id="YOUR_WIDGET_ID"
strategy="afterInteractive"
/>
</body>
</html>
)
}
Pages Router
рдпрджрд┐ Pages Router рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ pages/_app.tsx рдЦреЛрд▓реЗрдВ:
import Script from 'next/script'
export default function MyApp({ Component, pageProps }) {
return (
<>
<Component {...pageProps} />
<Script
src="https://asyntai.com/static/js/chat-widget.js"
data-asyntai-id="YOUR_WIDGET_ID"
strategy="afterInteractive"
/>
</>
)
}
рд╕реБрдЭрд╛рд╡: strategy="afterInteractive" рд╡рд┐рдХрд▓реНрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЪреИрдЯрдмреЙрдЯ рдкреГрд╖реНрда рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд▓реЛрдб рд╣реЛ, рдЬрд┐рд╕рд╕реЗ рдкреГрд╖реНрда рд▓реЛрдб рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдорд┐рд▓реЗред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 1: рдХрд╕реНрдЯрдо React рдлреНрд░рдВрдЯрдПрдВрдб
рдпрджрд┐ рдЖрдкрдХрд╛ PayloadCMS рдкреНрд░реЛрдЬреЗрдХреНрдЯ Next.js рдХреЗ рдмрдЬрд╛рдп рдХрд╕реНрдЯрдо React рдлреНрд░рдВрдЯрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк useEffect рд╣реБрдХ рдХреЗ рд╕рд╛рде рдЪреИрдЯрдмреЙрдЯ рдХреЛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
// App.tsx or App.jsx
import { useEffect } from 'react';
function App() {
useEffect(() => {
const script = document.createElement('script');
script.src = 'https://asyntai.com/static/js/chat-widget.js';
script.setAttribute('data-asyntai-id', 'YOUR_WIDGET_ID');
script.async = true;
document.body.appendChild(script);
return () => {
document.body.removeChild(script);
};
}, []);
return (
// ... your app content
);
}
рдиреЛрдЯ: YOUR_WIDGET_ID рдХреЛ рдбреИрд╢рдмреЛрд░реНрдб рд╕реЗ рдЕрдкрдиреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдЬреЗрдЯ рдЖрдИрдбреА рд╕реЗ рдмрджрд▓реЗрдВред рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдХреНрд▓реАрдирдЕрдк рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЕрдирдорд╛рдЙрдВрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рдЯрд╛ рджреА рдЬрд╛рдПред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 2: Payload рдХреЗ рдХрд╕реНрдЯрдо рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдХреЗрд╡рд▓ рдПрдбрдорд┐рди рдкреИрдирд▓)
рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЪреИрдЯрдмреЙрдЯ рд╕реНрд╡рдпрдВ Payload рдПрдбрдорд┐рди рдкреИрдирд▓ рдХреЗ рдЕрдВрджрд░ рджрд┐рдЦрд╛рдИ рджреЗ (рдЖрдВрддрд░рд┐рдХ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП), рддреЛ рдЖрдк рдЕрдкрдиреЗ payload.config.ts рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдХрдВрдкреЛрдиреЗрдВрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
// payload.config.ts
import { buildConfig } from 'payload/config';
export default buildConfig({
admin: {
components: {
afterDashboard: ['/components/AsyntaiChatbot'],
},
},
// ... rest of your config
})
рдлрд┐рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
// components/AsyntaiChatbot.tsx
'use client'
import { useEffect } from 'react';
const AsyntaiChatbot = () => {
useEffect(() => {
const script = document.createElement('script');
script.src = 'https://asyntai.com/static/js/chat-widget.js';
script.setAttribute('data-asyntai-id', 'YOUR_WIDGET_ID');
script.async = true;
document.body.appendChild(script);
return () => {
document.body.removeChild(script);
};
}, []);
return null;
};
export default AsyntaiChatbot;
рд╕реБрдЭрд╛рд╡: рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ Payload рдПрдбрдорд┐рди рдкреИрдирд▓ рдореЗрдВ рдЪреИрдЯрдмреЙрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЖрдкрдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЪрд░рдг 2 рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 3: рд╕рд╛рдзрд╛рд░рдг HTML/рд╕реНрдЯреИрдЯрд┐рдХ рд╕рд╛рдЗрдЯ
рдпрджрд┐ рдЖрдкрдХреА PayloadCMS-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕рд╛рдЗрдЯ Payload API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдзрд╛рд░рдг HTML рдпрд╛ рд╕реНрдЯреИрдЯрд┐рдХ рдлреНрд░рдВрдЯрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рдПрдореНрдмреЗрдб рдХреЛрдб рдХреЛ рд╕реАрдзреЗ рдЕрдкрдиреЗ HTML рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
- рдЕрдкрдиреА рдореБрдЦреНрдп HTML рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ (рдЖрдорддреМрд░ рдкрд░ index.html)
- рдХреНрд▓реЛрдЬрд┐рдВрдЧ </body> рдЯреИрдЧ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдПрдореНрдмреЗрдб рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
<script>(function(){var l=function(){var s=document.createElement("script");s.src="https://widget.asyntai.com/static/js/chat-widget.js";s.async=true;s.setAttribute("data-asyntai-id","YOUR_WIDGET_ID");document.head.appendChild(s)};if(document.readyState==="complete"){l()}else{window.addEventListener("load",l)}})();</script>
</body>
</html>
рдЪрд░рдг 3: рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
рдЕрдкрдиреЗ рдлреНрд░рдВрдЯрдПрдВрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж:
- рдЕрдкрдиреЗ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЛ рдЕрдкрдиреЗ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ (Vercel, Netlify, рдЖрджрд┐) рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ
- рдЕрдкрдиреА рд▓рд╛рдЗрд╡ рд╕рд╛рдЗрдЯ рдПрдХ рдирдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдореЗрдВ рдЦреЛрд▓реЗрдВ
- рдЖрдкрдХреЛ рдиреАрдЪреЗ рджрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ рдЪреИрдЯ рд╡рд┐рдЬреЗрдЯ рдмрдЯрди рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП
- рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЦреБрд▓рддрд╛ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рд╡рд┐рдЬреЗрдЯ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ YOUR_WIDGET_ID рдХреЛ рдбреИрд╢рдмреЛрд░реНрдб рд╕реЗ рдЕрдкрдиреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдЬреЗрдЯ рдЖрдИрдбреА рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм (F12 > Network) рдореЗрдВ рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИред рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдлреНрд░рдВрдЯрдПрдВрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдбрд┐рдкреНрд▓реЙрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Next.js рдХреЗ рд▓рд┐рдП, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк next/script рд╕реЗ Script рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рди рдХрд┐ рдирд┐рдпрдорд┐рдд <script> рдЯреИрдЧ рдХрд╛ред рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ рдпрд╛ рдЧреБрдкреНрдд рдореЛрдб (incognito mode) рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
Weebly