MedusaCMS рдореЗрдВ Asyntai AI рдЪреИрдЯрдмреЙрдЯ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ
Medusa-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛
рдорд╣рддреНрд╡рдкреВрд░реНрдг: Medusa рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рдИ-рдХреЙрдорд░реНрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИред рдЪреИрдЯрдмреЙрдЯ рдХреЛрдб рдЖрдкрдХреЗ рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, Medusa рд╕рд░реНрд╡рд░/рдПрдбрдорд┐рди рдореЗрдВ рдирд╣реАрдВред
рдЪрд░рдг 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 рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ (рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп)
Medusa рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рд╕реНрдЯрд╛рд░реНрдЯрд░ 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/_document.tsx рдпрд╛ pages/_app.tsx рдЦреЛрд▓реЗрдВ:
// 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: Gatsby рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ
рдпрджрд┐ рдЖрдкрдХрд╛ Medusa рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ Gatsby рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ onRenderBody рдФрд░ setPostBodyComponents рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ gatsby-ssr.js рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ:
// gatsby-ssr.js
import React from 'react'
export const onRenderBody = ({ setPostBodyComponents }) => {
setPostBodyComponents([
<script
key="asyntai"
async
src="https://asyntai.com/static/js/chat-widget.js"
data-asyntai-id="YOUR_WIDGET_ID"
/>
]);
};
рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдЬреЗрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдмрдирд╛ рд░рд╣реЗ рддреЛ рдЖрдкрдХреЛ gatsby-browser.js рдореЗрдВ рднреА рд╡рд╣реА рдХреЛрдб рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдЕрдкрдиреЗ рд░реВрдЯ рд▓реЗрдЖрдЙрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 2: рдХрд╕реНрдЯрдо React рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ
рдпрджрд┐ рдЖрдкрдХрд╛ Medusa рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдХрд╕реНрдЯрдо React рд╕реЗрдЯрдЕрдк (Vite, Create React App, рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
рдХреНрд▓реЛрдЬрд╝рд┐рдВрдЧ </body> рдЯреИрдЧ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ public/index.html рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ:
<!DOCTYPE html>
<html lang="en">
<head>
<!-- ... existing head content ... -->
</head>
<body>
<div id="root"></div>
<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>
рдпрд╛ рдЕрдкрдиреЗ рд░реВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ 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
);
}
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 3: рдХреЛрдИ рднреА рдХрд╕реНрдЯрдо рдлреНрд░рдВрдЯрдПрдВрдб
рдпрджрд┐ рдЖрдкрдХрд╛ Medusa-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕реНрдЯреЛрд░ рдХрд┐рд╕реА рдЕрдиреНрдп 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>
рд╕реБрдЭрд╛рд╡: рдпрд╣ рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рдлреНрд░рдВрдЯрдПрдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдпрд╛ рд╕реНрдЯреИрдЯрд┐рдХ рд╕рд╛рдЗрдЯ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ рдЬреЛ HTML рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ Vue, Svelte, Angular, Astro, рдФрд░ Medusa рдмреИрдХрдПрдВрдб рд╕реЗ рдЬреБрдбрд╝реЗ рдЕрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЪрд░рдг 3: рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
рдЕрдкрдиреЗ рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж:
- рдЕрдкрдирд╛ рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдЕрдкрдиреЗ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛ (Vercel, Netlify, Railway, рдЖрджрд┐) рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ
- рдЕрдкрдирд╛ рд▓рд╛рдЗрд╡ рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдПрдХ рдирдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдореЗрдВ рдЦреЛрд▓реЗрдВ
- рдЖрдкрдХреЛ рдиреАрдЪреЗ рджрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ рдЪреИрдЯ рд╡рд┐рдЬреЗрдЯ рдмрдЯрди рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП
- рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЦреБрд▓рддрд╛ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рд╡рд┐рдЬреЗрдЯ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ YOUR_WIDGET_ID рдХреЛ рдбреИрд╢рдмреЛрд░реНрдб рд╕реЗ рдЕрдкрдиреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдЬреЗрдЯ ID рд╕реЗ рдмрджрд▓рд╛ рд╣реИред рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ Network рдЯреИрдм (F12 > Network) рдореЗрдВ рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИред рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдХреЛ рдкреБрдирдГ рдбрд┐рдкреНрд▓реЙрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Next.js рдХреЗ рд▓рд┐рдП, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдирд┐рдпрдорд┐рдд <script> рдЯреИрдЧ рдХреЗ рдмрдЬрд╛рдп next/script рд╕реЗ Script рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╛рдж рд░рдЦреЗрдВ, рдХреЛрдб рд╕реНрдЯреЛрд░рдлреНрд░рдВрдЯ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, Medusa рд╕рд░реНрд╡рд░ рдореЗрдВ рдирд╣реАрдВред рдЕрдкрдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреИрд╢ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ рдпрд╛ рдЗрдирдХреЙрдЧреНрдирд┐рдЯреЛ рдореЛрдб рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
Weebly