Встраивание: Внедрите систему в ваше программное обеспечение
Если у вас есть адрес вашего 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 | Экран представителя продаж-автодайлер |
dashboard | Ежедневный отчет |
4. Аутентификация
a) Вход в iframe
Это метод по умолчанию. Пользователь вводит свой адрес электронной почты и пароль в рамку при первом открытии; если включена двухфакторная аутентификация, также запрашивается код. Сессия действительна только для этого встроенного кода и выбранных экранов.
Некоторые браузеры (особенно Safari) полностью блокируют куки с других сайтов в рамках. В этом случае на экране входа Открыть в новом окне ссылка удаляется. Для постоянного решения используйте подписанную ссылку.
b) Подписанная ссылка с сервера (рекомендуется)
Ваш пользователь 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: проверяет ключ.
c) Режим без входа
Встраиваемый код открывается для выбранного пользователя без пароля. Для этого есть два условия:
- Запрос должен поступать из разрешенного доменного имени вашего фрейма.
- Если хотите, можно также потребовать, чтобы это приходило из вашего списка IP.
Предупреждение: wk_ поскольку код находится в исходном коде страницы, этот режим имеет низкую безопасность. Только для экранов в вашей внутренней сети, с ограниченными правами персонал используйте с вашим аккаунтом.
5. JavaScript 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. Записки по безопасности
- Код встраивания хранится в отдельном cookie и открывает только выбранные экраны. Экраны подписки, оплаты, пароля и API ключа никогда не открываются при встраивании.
- Каждый вход и изменение встроенного кода клиента История операций'как написать.'
- Удаление или отключение встраиваемого кода немедленно закроет экран на всех страницах, где он используется.
- Не размещайте ваш API ключ в коде браузера, мобильном приложении или общедоступном репозитории. Подробности: Безопасность API.
