جاسازی: مرکز تلفن را در نرمافزار خود قرار دهید
اگر 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% |
autoHeight | true اگر ارتفاع محتوای قاب را تطبیق میدهد |
نمونه کلیک-جستجو (jQuery):
$('.musteri-telefon').on('click', function () { Buluthat.dial($(this).text()); });
پیامها تنها از آدرس سرور Buluthat پذیرفته میشوند. Buluthat نیز تنها دستورات دریافتی از دامنههای مجاز شما را گوش میدهد.
6. یادداشتهای امنیتی
- جلسه جاسازی در یک کوکی جداگانه نگهداری میشود و فقط صفحههای انتخاب شده را باز میکند. صفحههای اشتراک، پرداخت، رمز عبور و کلید API هرگز در جاسازی باز نمیشوند.
- هر ورود و تغییر کد جاسازی مشتری است تاریخچه تراکنش'چگونه نوشته میشود.'
- حذف یا غیرفعال کردن یک کد جاسازی، صفحه را در تمام صفحاتی که از آن استفاده میکنند بهطور آنی میبندد.
- کلید API خود را در کد مرورگر، برنامه موبایل یا مخزن عمومی قرار ندهید. جزئیات: امنیت API.
