Sanity рдореЗрдВ Asyntai AI рдЪреИрдЯрдмреЙрдЯ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ
Sanity-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЧрд╛рдЗрдб
рдорд╣рддреНрд╡рдкреВрд░реНрдг: Sanity рдПрдХ рд╣реЗрдбрд▓реЗрд╕ CMS рд╣реИ рдЬреЛ API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдВрдЯреЗрдВрдЯ рдбрд┐рд▓реАрд╡рд░ рдХрд░рддрд╛ рд╣реИред рдЪреИрдЯрдмреЙрдЯ рдХреЛрдб рдХреЛ рдЖрдкрдХреЗ frontend application (Next.js, Gatsby, Nuxt, рдкреНрд▓реЗрди HTML, рдЖрджрд┐) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд╕реНрд╡рдпрдВ Sanity Studio рдореЗрдВред
рдЪрд░рдг 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 рдлреНрд░рдВрдЯрдПрдВрдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ (рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп)
рдпрджрд┐ рдЖрдкрдХреА Sanity-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕рд╛рдЗрдЯ Next.js (рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдкреЗрдпрд░рд┐рдВрдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рдЕрдкрдиреЗ рд░реВрдЯ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЪреИрдЯрдмреЙрдЯ рдЬреЛрдбрд╝реЗрдВ:
App Router (Next.js 13+)
app/layout.js (рдпрд╛ 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.js рдЦреЛрд▓реЗрдВ:
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 рдлреНрд░рдВрдЯрдПрдВрдб
рдпрджрд┐ рдЖрдкрдХреА Sanity рд╕рд╛рдЗрдЯ Gatsby рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ 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: Nuxt.js рдлреНрд░рдВрдЯрдПрдВрдб
рдпрджрд┐ рдЖрдкрдХреА Sanity рд╕рд╛рдЗрдЯ Nuxt.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ nuxt.config.js (рдпрд╛ nuxt.config.ts) рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ:
// nuxt.config.ts
export default defineNuxtConfig({
app: {
head: {
script: [
{
src: 'https://asyntai.com/static/js/chat-widget.js',
'data-asyntai-id': 'YOUR_WIDGET_ID',
async: true
}
]
}
}
})
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 3: рд╕рд╛рдзрд╛рд░рдг HTML рдлреНрд░рдВрдЯрдПрдВрдб
рдпрджрд┐ рдЖрдкрдХреА Sanity-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕рд╛рдЗрдЯ рдкреНрд▓реЗрди HTML рдпрд╛ Sanity API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреИрдЯрд┐рдХ рд╕рд╛рдЗрдЯ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ:
- рдЕрдкрдиреА рдореБрдЦреНрдп 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>
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 4: React (Vite рдпрд╛ Create React App)
рдпрджрд┐ рдЖрдкрдХрд╛ рдлреНрд░рдВрдЯрдПрдВрдб Vite рдпрд╛ Create React App рдХреЗ рд╕рд╛рде React рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
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.jsx or App.tsx
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: рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
рдЕрдкрдиреЗ рдлреНрд░рдВрдЯрдПрдВрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж:
- рдЕрдкрдиреЗ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЛ рдЕрдкрдиреЗ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ (Vercel, Netlify, рдЖрджрд┐) рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ
- рдЕрдкрдиреА рд▓рд╛рдЗрд╡ рд╕рд╛рдЗрдЯ рдПрдХ рдирдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдореЗрдВ рдЦреЛрд▓реЗрдВ
- рдЖрдкрдХреЛ рдиреАрдЪреЗ рджрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ рдЪреИрдЯ рд╡рд┐рдЬреЗрдЯ рдмрдЯрди рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП
- рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЦреБрд▓рддрд╛ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рд╡рд┐рдЬреЗрдЯ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ YOUR_WIDGET_ID рдХреЛ рдбреИрд╢рдмреЛрд░реНрдб рд╕реЗ рдЕрдкрдиреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдЬреЗрдЯ рдЖрдИрдбреА рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм (F12 > Network) рдореЗрдВ рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИред рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдлреНрд░рдВрдЯрдПрдВрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдбрд┐рдкреНрд▓реЙрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Next.js рдХреЗ рд▓рд┐рдП, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк next/script рд╕реЗ Script рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рди рдХрд┐ рдирд┐рдпрдорд┐рдд <script> рдЯреИрдЧ рдХрд╛ред рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ рдпрд╛ рдЧреБрдкреНрдд рдореЛрдб (incognito mode) рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
Weebly