AI call bot
npm install itqbot``bash`
npm version patch
npm run build
npm publish --access public
ITQ Voice Bot (itqbot)
======================
Голосовой виджет для сайта: исходящий SIP‑звонок (JsSIP) с авторизацией по email и OTP, темами и простым UI. Поставляется в двух формах — CDN/IIFE для быстрого подключения через
`
Установка (npm)
---------------
`bash`
npm i itqbot
Варианты интеграции
-------------------
1) Core (ESM, без сайд‑эффектов)
`ts
import createBot from 'itqbot/core'
import type { LiveBotConfig } from 'itqbot/core'
const bot = createBot({
telephony: {
WSS_URL: 'wss://
SIP_USER: '
SIP_PASS: '
SIP_DOMAIN: '
ICE_SERVERS: [],
},
callTarget: '1000',
persistUA: true,
});
bot.init();
// bot.open(); bot.startCall(); ...
`
2) React — компонент
`tsx
import { LiveBot } from 'itqbot/react'
export default function Page() {
return (
WSS_URL: 'wss://
SIP_USER: '
SIP_PASS: '
SIP_DOMAIN: '
}}
callTarget="1000"
persistUA
onReady={(api) => {
// api.open(); api.startCall(); ...
}}
style={{ position: 'fixed', inset: 0, pointerEvents: 'none' }}
/>
);
}
`
3) React — хук
`tsx
import { useLiveBot } from 'itqbot/react'
export function Widget() { ', SIP_DOMAIN: ' return (
const { mountRef, api, ready } = useLiveBot({
telephony: { WSS_URL: 'wss://
callTarget: '1000',
});
);
}
`
Примечания
- Core/React не создают глобалов и не трогают DOM при import.window.LiveBot
- В IIFE/ CDN режиме API доступен как .
Конфигурация (LiveBotConfig)
----------------------------
- telephony: настройки SIP/WSWSS_URL
- : wss://host:port/asterisk/wsSIP_USER
- , SIP_PASS, SIP_DOMAINICE_SERVERS?
- : массив RTCIceServercallTarget
- : строка или функция, вычисляющая целевой номер/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(): ViewState
- getConfig?(): LiveBotConfig
- setTheme?(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]:// или wss://api.ai-qubedev.ru/ws).
Сборка/скрипты и экспорты
-------------------------
Скрипты
`bash`
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