جاسازی: مرکز تلفن را در نرم‌افزار خود قرار دهید

اگر CRM شما، برنامه خدمات فنی یا هر برنامه وب دیگری دارید، می‌توانید صفحه‌های مرکز تماس و وب‌فون را درون رابط خود باز کنید. تماس‌های زنده، ضبط تماس‌ها، ضبط صدا، وقفه، تماس خودکار، مسدود کردن شماره و تلفن مرورگر به این روش قابل جاسازی است.

نیاز به PHP نیست. با HTML ساده، jQuery، React یا هر فریم‌ورک دیگری کار می‌کند. صفحه‌ها فقط در دامنه‌هایی که شما مشخص کرده‌اید باز می‌شوند.

نشانی پایه: https://api.buluthat.com

1. کد گنجاندن ایجاد کنید

در پنل عملیات اشتراک > کدهای گم شده (CRM) صفحه را باز کنید. اگر نماینده هستید، این کار را در پنل نمایندگی > جاسازی و API از صفحه، با انتخاب مشتری انجام می‌دهید.

حوزهتوضیح
دامنه‌های مجازآدرس CRM شما، مثلاً. https://crm.firmaniz.com. برای هر خط یک آدرس بنویسید. https://*.firmaniz.com اگر بنویسید، تمام زیر دامنه‌ها پوشش داده می‌شوند. در سایتی که در لیست نیست، صفحه باز نمی‌شود؛ این را مرورگر اعمال می‌کند.
صفحاتصفحه‌های مرکز تلفن که نمایش داده می‌شوند. کاربر فقط می‌تواند این‌ها را باز کند.
ورودورود درون iframe (پیش‌فرض) یا بدون ورود. لینک امضا شده از سرور در هر دو حالت کار می‌کند.
برنداگر برند نماینده باز باشد، نام، لوگو و رنگ نماینده در صفحات نمایش داده می‌شود.

کد جاسازی شما wk_ با شروع می‌شود. این کد مخفی نیست؛ در منبع صفحه شما قابل مشاهده است. از لیست دامنه‌های مجاز امنیتی و روش‌های ورود زیر می‌آید.

2. کد را به صفحه خود بچسبانید

یک خط

<div id="santral" style="height:720px"></div>
<script src="https://api.buluthat.com/assets/js/embed.js" data-key="wk_..." data-page="live_monitor" data-target="#santral"></script>

jQuery

<script src="https://api.buluthat.com/assets/js/embed.js"></script>
<script>
  $(function () {
    var santral = $('#santral').buluthat({ key: 'wk_...', page: 'report_calls' }).data('buluthat');
  });
</script>

iframe ساده

<iframe src="https://api.buluthat.com/embed.php?w=wk_...&page=live_monitor"
        style="width:100%;height:720px;border:0" allow="microphone; autoplay"></iframe>

در iframe برای وب‌فون allow="microphone" ضروری است. embed.js او خود اضافه می‌کند.

3. نمایشگرها

pageصفحه
live_monitorپیگیری تماس زنده
status_panelوضعیت مرکز تماس زنده
webphoneوب‌فون (تماس/پاسخ از مرورگر)
report_callsتماس و ضبط صدا
report_recordingsضبط‌های صوتی
report_queue_liveنظارت آنی بر صف
breaksمدیریت استراحت
auto_callsتماس خودکار
mediaفایل‌های صوتی
blocked_numbersمسدودسازی شماره
voice_otpتأیید با تلفن
contactsدفترچه تلفن
voicebot_liveدستیار صوتی، تماس‌های زنده
voicebot_sessionsگزارش تماس دستیار صوتی
voicebot_inboxیادداشت‌های دستیار
dialer_agentصفحه نمایش نماینده فروش dialer
dashboardخلاصه روزانه

4. احراز هویت

الف) ورود در iframe

روش پیش‌فرض است. کاربر در اولین ورود، ایمیل و رمز عبور را درون فریم وارد می‌کند؛ اگر تأیید دو مرحله‌ای فعال باشد، کد نیز درخواست می‌شود. جلسه تنها برای این کد جاسازی شده و صفحه‌های انتخاب شده معتبر است.

برخی مرورگرها (به‌ویژه سافاری) کوکی‌های سایت‌های دیگر را به‌طور کامل مسدود می‌کنند. در این صورت در صفحه ورود در پنجره جدید باز کنید لینک حذف می‌شود. برای راه‌حل دائمی از لینک امضا شده استفاده کنید.

کاربر CRM شما قبلاً در سیستم خود وارد شده است. سرور شما برای آن کاربر از Buluthat است 2 دقیقه معتبر، یکبار مصرف یک لینک ورود دریافت می‌کند و iframe را src به مقدار می‌دهد. کاربر همچنین رمز عبور وارد نمی‌کند.

کلید: در حساب مشتری کلیدهای API از صفحه جاسازی یک کلید جامع تولید کنید. اگر نماینده هستید، پنل نمایندگی > گنجاندن و API > کلید API نماینده استفاده کنید؛ این کلید برای تمام مشتریان متصل به شما معتبر است. کلید فقط در سرور شما قرار دارد و به مرورگر نمی‌رود.

curl -X POST 'https://api.buluthat.com/api/embed.php?action=session' \
  -H 'Authorization: Bearer bt_...' \
  -H 'Content-Type: application/json' \
  -d '{"widget":"wk_...","user_email":"temsilci@firma.com","extension":"1000","page":"webphone"}'

درخواست با کلید نماینده به این صورت انجام می‌شود:

curl -X POST 'https://api.buluthat.com/api/embed.php?action=session' \
  -H 'X-Bt-Partner-Key: bp_...' -H 'Content-Type: application/json' \
  -d '{"tenant_id":123,"user_email":"temsilci@musteri.com","page":"live_monitor"}'
حوزهالزامیتوضیح
widgetخیرکد جاسازی (wk_...). اگر ارائه نشود، از کد گم شده فعال اولیه مشتری استفاده می‌شود.
user_emailخیردر پنل به عنوان کاربر ثبت‌نام شده با این ایمیل وارد می‌شود. پرسنل نیز مجوزهای خود را دارند.
user_idخیرuser_email می‌تواند جایگزین شود.
extensionخیرشماره داخلی که وب‌فون استفاده خواهد کرد (مثلاً 1000).
pageخیرصفحه‌ای که باز می‌شود. باید در کد گم شده مجاز باشد.
tenant_idنمایندهفقط با کلید نمایندگی: شماره مشتری وابسته به شما.

اگر کاربر داده نشود، کاربر بدون ورود در کد جاسازی استفاده می‌شود، و اگر آن هم نباشد، نماینده مشتری استفاده می‌شود.

پاسخ:

{ "ok": true, "url": "https://api.buluthat.com/embed.php?w=wk_...&sso=...", "expires_in": 120, "user": "temsilci@firma.com" }

نمونه PHP:

$ch = curl_init('https://api.buluthat.com/api/embed.php?action=session');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('BULUTHAT_KEY'), 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode(['widget' => 'wk_...', 'user_email' => $kullanici['email'], 'page' => 'live_monitor']),
]);
$cevap = json_decode(curl_exec($ch), true);
echo '<iframe src="' . htmlspecialchars($cevap['url']) . '" style="width:100%;height:720px;border:0" allow="microphone"></iframe>';

سایر انتها:

  • GET ?action=widgets: کدهای گم شده را لیست می‌کند. با کلید نمایندگی tenant_id نیاز است.
  • GET ?action=ping: کلید را آزمایش می‌کند.

ج) حالت بدون ورود

کد جاسازی به عنوان کاربر انتخابی شما بدون رمز عبور باز می‌شود. برای این کار دو شرط وجود دارد:

  • درخواست باید از قاب دامنه مجاز شما بیاید.
  • اگر بخواهید، می‌توان شرط کرد که از لیست IP شما بیاید.

هشدار: wk_ به دلیل اینکه کد در منبع صفحه قرار دارد، این حالت امنیت پایینی دارد. فقط برای نمایشگرهای داخلی شبکه خود، با مجوز محدود کارمندان با حساب خود استفاده کنید.

5. API جاوا اسکریپت و رویدادها

var s = Buluthat.mount('#tel', { key: 'wk_...', page: 'webphone' });

s.dial('05321234567');           // web telefonundan ara
Buluthat.dial('05321234567');    // sayfadaki ilk web telefonundan ara
s.go('report_calls');            // ekran değiştir

s.on('call', function (c) {
  // c.state: idle | ringing | dialing | incall ; c.number: karşı numara
  if (c.state === 'ringing') { musteriKartiniAc(c.number); }
});
s.on('ready', function (d) { /* ekran yüklendi: d.page */ });
s.on('resize', function (d) { /* içerik yüksekliği: d.height */ });

mount گزینه‌ها:

گزینهتوضیح
keyکد جاسازی
pageنمایشگر اول
urlلینک امضا شده (که از سرور دریافت کرده‌اید) url); key جایگزین استفاده می‌شود
heightارتفاع. عدد (px) یا مقدار CSS؛ پیش‌فرض 100%
autoHeighttrue اگر ارتفاع محتوای قاب را تطبیق می‌دهد

نمونه کلیک-جستجو (jQuery):

$('.musteri-telefon').on('click', function () { Buluthat.dial($(this).text()); });

پیام‌ها تنها از آدرس سرور Buluthat پذیرفته می‌شوند. Buluthat نیز تنها دستورات دریافتی از دامنه‌های مجاز شما را گوش می‌دهد.

6. یادداشت‌های امنیتی

  • جلسه جاسازی در یک کوکی جداگانه نگهداری می‌شود و فقط صفحه‌های انتخاب شده را باز می‌کند. صفحه‌های اشتراک، پرداخت، رمز عبور و کلید API هرگز در جاسازی باز نمی‌شوند.
  • هر ورود و تغییر کد جاسازی مشتری است تاریخچه تراکنش'چگونه نوشته می‌شود.'
  • حذف یا غیرفعال کردن یک کد جاسازی، صفحه را در تمام صفحاتی که از آن استفاده می‌کنند به‌طور آنی می‌بندد.
  • کلید API خود را در کد مرورگر، برنامه موبایل یا مخزن عمومی قرار ندهید. جزئیات: امنیت API.