چطور این جاسازی کار می‌کند؟

۱. یک تگ اسکریپت

سایت شما فقط یک فایل جاوااسکریپت را بارگذاری می‌کند. هیچ ابزار build، هیچ پکیج npm، هیچ React لازم نیست.

۲. یک تگ HTML

با سه ویژگی (mode، api-base، allowed-origins) مشخص می‌کنید چه چیزی و کجا بالا بیاید.

۳. یک دست‌دادن امن

مرورگر شما توکن را با پیام امن به پنل می‌دهد. توکن هیچ‌وقت در آدرس صفحه یا تاریخچه مرورگر ذخیره نمی‌شود.

نمونه‌ی کد کامل

<script src="https://cdn.finoticket.ir/fino-console.js"></script>

<fino-console
  mode="agent"
  api-base="https://api.finoticket.ir"
  allowed-origins="https://shop-aftab.ir"
  locale="fa"
  primary-color="#f59e0b"
></fino-console>

<script>
  // ۱. به پنل بگویید که آماده‌ایم
  const console = document.querySelector('fino-console');

  window.addEventListener('message', async (e) => {
    if (e.origin !== 'https://api.finoticket.ir') return;

    // ۲. پنل می‌گوید «توکن می‌خواهم»
    if (e.data.type === 'fino:auth-required') {
      // ۳. توکن را از بک‌اند خودتان بگیرید (سکرت را در مرورگر نگه ندارید)
      const res = await fetch('/api/finoticket-token');
      const { access_token, expires_in } = await res.json();

      // ۴. توکن را به پنل بدهید
      console.postMessage
        ? console.postMessage({ type: 'fino:init', token: access_token, expiresIn: expires_in },
            'https://api.finoticket.ir')
        : window.postMessage({ type: 'fino:init', token: access_token, expiresIn: expires_in },
            'https://api.finoticket.ir');
    }

    // ۵. ارتفاع را خودکار تنظیم کنید تا اسکرول تودرتو نداشته باشید
    if (e.data.type === 'fino:resize') {
      console.style.height = e.data.height + 'px';
    }
  });
</script>

ویژگی‌های پنل

mode

agent برای پنل کارشناس · widget برای ویجت مشتری

api-base

آدرسی که پنل با آن صحبت می‌کند.

allowed-origins

فهرست دامنه‌هایی که اجازه دارند به پنل پیام بدهند، جدا شده با کاما.

primary-color

رنگ اصلی برند شما. بقیه‌ی رنگ‌ها خودشان هماهنگ می‌شوند.

locale

fa یا en — جهت متن هم خودکار تغییر می‌کند.

theme

light یا dark.

پیام‌هایی که می‌توانید بشنوید

fino:ready

پنل بالا آمد و آماده‌ی دریافت پیام است.

fino:auth-required

پنل توکن ندارد. حالا باید fino:init بفرستید.

fino:resize

ارتفاع جدید پنل — آن را روی المان اعمال کنید.

fino:toast

پیامی که بهتر است در سایت خودتان نشان دهید.

fino:navigate

کاربر داخل پنل جابه‌جا شد.

fino:error

خطای جدی — مثلاً دامنه‌ی غیرمجاز.

سوالات متداول

آیا استایل سایت من پنل را خراب می‌کند؟

نه. پنل داخل یک Shadow DOM جدا اجرا می‌شود. این سایت عمداً استایل‌های تهاجمی دارد و پنل سالم می‌ماند.

سکرت را کجا نگه دارم؟

هرگز در مرورگر. سکرت باید روی سرور شما باشد؛ مرورگر فقط توکن کوتاه‌عمر را می‌گیرد.

چند وقت یک‌بار توکن را عوض کنم؟

هر بار که کاربر صفحه را باز می‌کند. توکن‌ها کوتاه‌عمر هستند و به‌صورت خودکار منقضی می‌شوند.