itqbot
v0.4.1
Published
AI call bot
Downloads
29
Readme
npm version patch
npm run build
npm publish --access publicITQ Voice Bot (itqbot)
Голосовой виджет для сайта: исходящий SIP‑звонок (JsSIP) с авторизацией по email и OTP, темами и простым UI. Поставляется в двух формах — CDN/IIFE для быстрого подключения через <script> и как npm‑пакет с ESM ядром и React‑обёрткой.
Содержание
- Быстрый старт (CDN)
- Установка (npm)
- Варианты интеграции: Core (ESM) и React
- Конфигурация (LiveBotConfig)
- Публичный API (BotAPI)
- Темизация
- Логи и отладка
- Сборка/скрипты и экспорты
Быстрый старт (CDN)
JsSIP входит в бандл, поэтому достаточно подключить один файл скрипта. Виджет поднимется автоматически с базовой конфигурацией из сборки и положит API в window.LiveBot.
<!doctype html>
<meta charset="utf-8">
<body>
<script src="https://cdn.jsdelivr.net/npm/itqbot@latest/dist/index.global.js"></script>
<script>
// Примеры вызовов:
window.LiveBot?.open?.();
// window.LiveBot?.startCall?.();
</script>
<!-- Для локальной песочницы см. index.html в репо -->
</body>Установка (npm)
npm i itqbotВарианты интеграции
- Core (ESM, без сайд‑эффектов)
import createBot from 'itqbot/core'
import type { LiveBotConfig } from 'itqbot/core'
const bot = createBot({
telephony: {
WSS_URL: 'wss://<pbx>/asterisk/ws',
SIP_USER: '<user>',
SIP_PASS: '<pass>',
SIP_DOMAIN: '<realm>',
ICE_SERVERS: [],
},
callTarget: '1000',
persistUA: true,
});
bot.init();
// bot.open(); bot.startCall(); ...- React — компонент
import { LiveBot } from 'itqbot/react'
export default function Page() {
return (
<LiveBot
telephony={{
WSS_URL: 'wss://<pbx>/asterisk/ws',
SIP_USER: '<user>',
SIP_PASS: '<pass>',
SIP_DOMAIN: '<realm>',
}}
callTarget="1000"
persistUA
onReady={(api) => {
// api.open(); api.startCall(); ...
}}
style={{ position: 'fixed', inset: 0, pointerEvents: 'none' }}
/>
);
}- React — хук
import { useLiveBot } from 'itqbot/react'
export function Widget() {
const { mountRef, api, ready } = useLiveBot({
telephony: { WSS_URL: 'wss://<pbx>/asterisk/ws', SIP_USER: '<u>', SIP_PASS: '<p>', SIP_DOMAIN: '<realm>' },
callTarget: '1000',
});
return (
<div>
<div ref={mountRef} />
<button onClick={() => api?.open?.()} disabled={!ready}>Open</button>
</div>
);
}Примечания
- Core/React не создают глобалов и не трогают DOM при
import. - В IIFE/ CDN режиме API доступен как
window.LiveBot.
Конфигурация (LiveBotConfig)
telephony: настройки SIP/WSWSS_URL:wss://host:port/asterisk/wsSIP_USER,SIP_PASS,SIP_DOMAINICE_SERVERS?: массивRTCIceServer
callTarget: строка или функция, вычисляющая целевой номер/URImount?: контейнер (HTMLElement или селектор). По умолчаниюdocument.bodytexts?: частичный словарь текстов интерфейсаtheme?: CSS‑переменные для темы (см. Темизация)otpProvider?: кастомный провайдер OTP (по умолчанию — встроенные HTTP эндпоинты)persistUA?(bool): сохранять/не останавливать SIP UA при закрытии виджета (по умолчанию true)autoOpen?(bool): открыть панель сразу после initexposeGlobalAs?: имя для публикации API вwindow["..."](обычно нужно только в IIFE)onEvent?: хук событий для аналитики
Публичный API (BotAPI)
init() / destroy()open() / close()startCall() / endCall()getState(): ViewStategetConfig?(): LiveBotConfigsetTheme?(vars)— применить CSS‑переменные темыupdateConfig(partial)— обновить конфиг на лету (перезапускает телефонию)
Темизация
- Через конфиг:
theme: { '--lb-accent': '#0ea5e9', ... } - Во время работы:
api.setTheme({ '--lb-accent': '#ec4899' }) - Предопределённые пресеты см. в
src/utils/const.ts
Логи и отладка
- В IIFE для быстрой проверки доступен
window.SipMiniс методамиsipInit,sipCall,sipHangup,sipDispose,sipGetState. - Включение сайдбара логов (экспериментально): параметр
?logs=trueдобавит боковую панель и подключится к WS (wss[s]://<host>/wsилиwss://api.ai-qubedev.ru/ws).
Сборка/скрипты и экспорты
Скрипты
npm run build # сборка dist/
npm run dev # watch
npm version patch # семвер
npm publish --access publicЭкспорты пакета
itqbot→ ESM + IIFE (CDN). Типы:dist/index.d.tsitqbot/core→ ESM ядро без сайд‑эффектов. Типы:dist/core.d.tsitqbot/react→ React компонент/хук (ESM). Типы:dist/react/index.d.ts
Требования
- Браузерная среда (WebRTC/MediaDevices для звонка)
- Для React:
react,react-domкак peerDependencies
