import JsSIP from "jssip"; import { RTCSession, SessionDirection, DTFMOptions, RenegotiateOptions, EndEvent, IncomingDTMFEvent, ConnectingEvent, ReferOptions, HoldOptions, IceCandidateEvent, SDPEvent, TerminateOptions } from "jssip/lib/RTCSession"; import { CallOptions, IncomingRTCSessionEvent, UAConfiguration, DisconnectEvent, RegisteredEvent } from "jssip/lib/UA"; export declare const Originator: { readonly LOCAL: "local"; readonly REMOTE: "remote"; readonly SYSTEM: "system"; }; /** * События линий */ export type LineEvents = { /** Добавлена новая линия */ onLineAdded: (line: CallLine) => void; /** Удалена линия */ onLineRemoved: (lineId: string) => void; /** Изменилось состояние линии */ onLineChanged: (line: CallLine) => void; /** Изменилась активная линия */ onActiveLineChanged: (lineId: string | null) => void; }; /** * Конфигурация для создания SIP-клиента */ export type CreateSipInstanceProps = { /** URL WebSocket сервера. По умолчанию используется webrtc.exolve.ru */ WSUrl?: string; /** SIP домен. По умолчанию используется 80.75.132.120 */ realm?: string; /** Дополнительные настройки JsSIP UA */ UAConfig?: UAConfiguration; /** Список STUN серверов. По умолчанию используется webrtc.exolve.ru:3479 */ stunServers?: string[]; /** Настройки для исходящих и входящих звонков */ callOptions?: CallOptions; /** SIP логин */ sipLogin: string; /** SIP пароль */ sipPassword: string; /** Включить режим отладки */ debug?: boolean; /** Использовать защищенное соединение (WSS вместо WS) */ ssl?: boolean; /** Максимальное количество линий */ maxLines?: number; /** События линий */ lineEvents?: LineEvents; }; /** * Аргументы колбэка для входящего звонка */ export type OnIncomingCallCbArgs = { /** Событие входящего звонка */ event: IncomingRTCSessionEvent; /** Принять звонок */ accept(): void; /** Отклонить звонок */ decline(): void; }; /** * События SIP-соединения */ export type SipConnectionEvents = { /** Начало подключения к серверу */ connecting: () => void; /** Успешное подключение к серверу */ connected: () => void; /** Отключение от сервера */ disconnected: (event: DisconnectEvent) => void; /** Регистрация на сервере скоро истечет */ registrationExpiring: () => void; /** Успешная регистрация на сервере */ registered: (event: RegisteredEvent) => void; }; /** * События звонка */ export type CallSessionEvents = { /** Начало установки соединения */ connecting: (event: ConnectingEvent) => void; /** Звонок в процессе установки */ progress: () => void; /** Ошибка при звонке */ failed: (event: EndEvent) => void; /** Звонок завершен */ ended: (event: EndEvent) => void; /** Звонок установлен */ confirmed: () => void; /** Микрофон выключен */ muted: () => void; /** Микрофон включен */ unmuted: () => void; /** Звонок поставлен на удержание */ held: () => void; /** Звонок снят с удержания */ unheld: () => void; /** Получен DTMF сигнал */ newDTMF: (event: IncomingDTMFEvent) => void; /** Получен запрос на переадресацию */ refer: () => void; /** Получен запрос на замену звонка */ replaces: () => void; /** События ICE кандидатов */ icecandidate: (event: IceCandidateEvent) => void; /** События SDP */ sdp: (event: SDPEvent) => void; }; /** * Информация о звонковой линии */ export type CallLine = { /** Уникальный идентификатор линии */ id: string; /** Номер или SIP URI собеседника */ target: string; /** Направление звонка */ direction: SessionDirection; /** Статус звонка */ status: RTCSession["status"]; /** Находится ли на удержании */ isHeld: boolean; }; /** * Информация об аудио устройстве */ export type AudioDevice = { /** ID устройства */ deviceId: string; /** Название устройства */ label: string; /** Тип устройства */ kind: "audioinput" | "audiooutput"; }; /** * Создает экземпляр SIP-клиента * @param props Конфигурация клиента */ export declare function createSipInstance(props: CreateSipInstanceProps): { /** Получить экземпляр JsSIP UA */ readonly SIPInstance: JsSIP.UA; /** * Зарегистрироваться на SIP-сервере * @throws {Error} Если регистрация не удалась или таймаут */ register(): Promise; /** * Отменить регистрацию на SIP-сервере */ unregister(): Promise; /** * Обработчик входящих звонков * @param cb Функция обратного вызова */ onIncomingCall(cb: (args: OnIncomingCallCbArgs) => void): void; /** * Подписаться на события SIP-соединения * @param events Обработчики событий */ onConnectionEvent(events: Partial): void; /** * Совершить исходящий звонок * @param target Номер телефона или SIP URI * @param events Обработчики событий звонка */ call(target: string, events?: Partial): Promise<{ /** Оригинальная сессия JsSIP */ session: RTCSession; /** Завершить звонок */ terminate(): void; /** Выключить микрофон */ mute(): void; /** Включить микрофон */ unmute(): void; /** Поставить звонок на удержание */ hold(): void; /** Снять звонок с удержания */ unhold(): void; /** * Отправить DTMF сигнал * @param tone DTMF тон (0-9,A-D,*,#) * @param options Дополнительные настройки */ sendDTMF(tone: string, options?: DTFMOptions): void; /** * Перезапустить медиа-переговоры * @param options Настройки переговоров */ renegotiate(options?: RenegotiateOptions): void; /** Проверить, находится ли звонок на удержании */ isOnHold(): boolean; /** Проверить, выключен ли микрофон */ isMuted(): any; /** * Перевести звонок на другой номер * @param target Номер телефона или SIP URI * @param options Настройки переадресации */ refer(target: string, options?: ReferOptions): void; /** * Сбросить локальные медиа-настройки * Полезно при проблемах с аудио */ resetLocalMedia(): void; /** * Проверить, установлен ли звонок */ isEstablished(): boolean; /** * Проверить, завершен ли звонок */ isEnded(): boolean; /** * Проверить, идет ли установка звонка */ isInProgress(): boolean; /** * Проверить, готов ли звонок к повторным медиа-переговорам */ isReadyToReOffer(): boolean; /** * Поставить звонок на удержание с дополнительными опциями * @param options Настройки удержания * @param done Колбэк после выполнения */ holdWithOptions(options?: HoldOptions, done?: () => void): boolean; /** * Снять звонок с удержания с дополнительными опциями * @param options Настройки удержания * @param done Колбэк после выполнения */ unholdWithOptions(options?: HoldOptions, done?: () => void): boolean; /** * Управление медиа-потоками * @param constraints Ограничения медиа */ muteWithConstraints(constraints: { audio?: boolean; video?: boolean; }): void; /** * Управление медиа-потоками * @param constraints Ограничения медиа */ unmuteWithConstraints(constraints: { audio?: boolean; video?: boolean; }): void; /** * Получить время начала звонка */ getStartTime(): Date; /** * Получить время завершения звонка */ getEndTime(): Date; /** * Получить направление звонка (входящий/исходящий) */ getDirection(): SessionDirection; /** * Получить информацию о собеседнике */ getRemoteIdentity(): JsSIP.NameAddrHeader; /** * Получить локальный SIP URI */ getLocalIdentity(): JsSIP.NameAddrHeader; /** * Получить текущий статус звонка */ getStatus(): import("jssip/lib/RTCSession").SessionStatus; /** * Получить RTCPeerConnection для прямого управления WebRTC */ getConnection(): import("jssip/lib/RTCSession").RTCPeerConnectionDeprecated; /** * Получить ID линии */ getLineId(): string; /** * Проверить, является ли линия активной */ isCurrentLine(): boolean; }>; /** * Завершить все активные звонки * @param options Настройки завершения */ terminateSessions(options?: TerminateOptions): void; /** * Проверить, зарегистрирован ли клиент на SIP-сервере */ isRegistered(): boolean; /** * Проверить, установлено ли соединение с SIP-сервером */ isConnected(): boolean; /** * Получить список активных звонков */ getCallLines(): CallLine[]; /** * Получить текущую активную линию */ getCurrentLine(): string | null; /** * Переключиться на другую линию * @param lineId ID линии для активации */ switchLine(lineId: string): Promise; /** * Проверить, можно ли добавить новую линию */ canAddLine(): boolean; /** * Слепой перевод звонка (без сопровождения) * @param fromLineId ID линии, которую переводим * @param target Номер телефона или SIP URI для перевода */ blindTransfer(fromLineId: string, target: string): Promise; /** * Объединить две линии (перевод звонка) * @param fromLineId ID линии, которую переводим * @param toLineId ID линии, на которую переводим */ transferCall(fromLineId: string, toLineId: string): Promise; /** * Найти линию по номеру телефона * @param target Номер телефона или SIP URI */ findLineByTarget(target: string): CallLine | null; /** * Завершить конкретную линию * @param lineId ID линии для завершения */ terminateLine(lineId: string): void; /** * Получить список доступных аудио устройств * @returns Список аудио устройств * @throws {Error} Если нет доступа к медиа устройствам */ getAudioDevices(): Promise; /** * Получить текущий микрофон */ getCurrentMicrophone(): string | null; /** * Получить текущий динамик */ getCurrentSpeaker(): string | null; /** * Установить микрофон для всех активных звонков * @param deviceId ID микрофона */ setMicrophone(deviceId: string): Promise; /** * Установить динамик для всех активных звонков * @param deviceId ID динамика */ setSpeaker(deviceId: string): Promise; }; export type SIPInstance = ReturnType; //# sourceMappingURL=index.d.ts.map