# @frejun/softphone-web-sdk 中文文档

规范地址：https://npmcn.com/package/%40frejun/softphone-web-sdk/

版本：2\.0\.1
npm 元数据更新时间：2026-11-12T13:54:57.206Z
中文译文更新时间：2026-11-15T13:57:18.065Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40frejun/softphone-web-sdk
原文对照：https://npmcn.com/package/%40frejun/softphone-web-sdk/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：38.7 kB，10 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：2 个
- 首次发布：2024-05-24T15:01:17.988Z
- 最新版本发布：2026-11-06T16:57:54.798Z
- 近 30 天下载量：3193（2026-10-16 至 2026-11-14，npm 官方下载统计）
- 已发布版本数：13（近 12 个月 3 个）

## 中文简介

此 SDK 提供了基于 SIP 的 Softphone , 用于使用 FreJun 给浏览器拨打/接收呼叫

## 安装

```sh
npm install @frejun/softphone-web-sdk
```

也可以使用：`pnpm add @frejun/softphone-web-sdk`、`yarn add @frejun/softphone-web-sdk`、`bun add @frejun/softphone-web-sdk`

## README

# 目录

-   [概览](https://npmcn.com/package/%40frejun/softphone-web-sdk/#readme-overview)
-   [所需资源](https://npmcn.com/package/%40frejun/softphone-web-sdk/#readme-requirements)
-   [使用量](https://npmcn.com/package/%40frejun/softphone-web-sdk/#readme-usage)
-   [软电话](https://npmcn.com/package/%40frejun/softphone-web-sdk/#readme-softphone)
-   [会议](https://npmcn.com/package/%40frejun/softphone-web-sdk/#readme-session)
-   [活动听众](https://npmcn.com/package/%40frejun/softphone-web-sdk/#readme-event-listeners)
-   [日志处理出错( E)](https://npmcn.com/package/%40frejun/softphone-web-sdk/#readme-logging-error-handling)

* * *

# 概览

SDK 提供了基于 SIP 的 [软电话](https://en.wikipedia.org/wiki/Softphone) 在浏览器上使用 [弗雷琼](https://frejun.com/)。 。 。 .

# 所需资源

1.  [FreJun 账户](https://product.frejun.com/)
2.  OAuth 2.0 访问托肯

## 使用量

```js
import {Softphone} from "@frejun/softphone-web-sdk";

const softphone = new Softphone();

// Authenticating the softphone
const res = await softphone.login({
  type: "OAuth2.0",
  token: "<OAUTH_TOKEN>",
  email: "<USER_EMAIL>"
});

// Configuring Audio elements
const audioElements = {
  remote: document.getElementById("sip-remote-audio"),
  local: document.getElementById("sip-local-audio"),
}

// Configuring Listeners
const listeners = {
  onConnectionStateChange: (type, newState, attemptReconnection, error) => {
    // type : "UserAgentState" | "RegisterState"
    // if type is "UserAgentState", newState: "Started" | "Stopped"
    // if type is "RegisterState", newState: "Initial" | "Registered" | "Terminated" | "Unregistered"
  },
  
  onCallCreated: (type, details) => {
    // type: "Incoming" | "Outgoing"
    // details : Object {candidate: "+91936*******"}
  },

  onCallRinging: (type, details) => {
    // type: "Incoming" | "Outgoing"
    // details : Object {candidate: "+91936*******"}
    // show on call action buttons to user
  },

  onCallHangup: (type, details) => {
   // type: "Incoming" | "Outgoing"
   // details : Object {candidate: "+91936*******"}
   // show apt ui
  },
}

const options = {
  //End any ongoing call when user navigates away, default value is false
  endSessionOnNavigate: true,
  //Log out and end any ongoing call when user navigates away, default value is false
  logoutOnNavigate: true
}
//NOTE: Logout and termination of any ongoing call will always happen on page reload/refresh. This parameter is optional and is supported only on Chrome, Edge and Opera.

// Starting the Softphone
await softphone.start(listeners, audioElements, options);

// Initiating a call
const phoneNumber = "+919711******";
const virtualNumber = "+919368******"
const options = {
  metadata: {
    transactionId: "",
    candidateId: "",
    jobId: ""
  }
}
await softphone.makeCall(phoneNumber, virtualNumber, options);

// Ending a call
await softphone.getSession.end();

//Include HTML Elements
<audio controls id="sip-local-audio"></audio>
<audio autoPlay controls id="sip-remote-audio"></audio>
```

## 软电话

这个 `Softphone` 类提供了以下方法.

##### `login({type: String, token: String, email: String})`

用 FreJun 认证软手机。 类型值 : "OAuth2.0" .

##### `start(listeners: Object, audioElements: Object, options: Object)`

注册所提供的音频元素、听众和选项。 (如果需要,还提示用户使用麦克风权限)

##### `makeCall(phoneNumber: String, virtualNumber: String, options: Object)`

启动呼叫并创建新 `Session` 举个例子. `virtualNumber` 财务报告和审定财务报表 `options` 参数是可选的。 元数据ID可以使用样本执行中显示的选项对象来传递.

##### `updateAccessToken(token: String)`

更新 OAuth 访问令牌, 应在接收时调用 `InvalidTokenException` 调自除 `login`。 。 。 .

##### `logout()`

通过去引用类变量处理数据清理.

##### `reset()`

重新连接并重新注册了"软手机".

##### _注:_

断开时,软手机会自动重试连接到服务器. 如果尝试重新连接参数为 `onConnectionStateChange` 听者是真实的,表示这些(自动)重联尝试已经用尽, `reset` 应呼吁恢复电话服务,基于 `type` 内容如下:

若为 `type` 实值 `UserAgentState`, (中文(简体) ), `Softphone.reset(true)` 应等待.

若为 `type` 实值 `RegistererState`, (中文(简体) ), `Softphone.reset()` 应等待.

## 会议

这个 `Session` 对象通过 `Softphone.getSession` 并提供下列方法: 管理本届会议/电话会议.

##### `accept()`

接受接通电话.

##### `end()`

拒绝/结束呼叫 .

##### `mute()`

停止通话.

##### `unmute()`

释出召相.

##### `hold()`

暂时搁置电话.

##### `unhold()`

如果被搁置,就恢复通话.

##### `sendDTMF(signal: String)`

发送DTMF信号.

## 活动听众

下列收听器可以在 `Softphone` 初始化.

| 听众 | 需求 | 说明 |
| --- | --- | --- |
| `onConnectionStateChange` | 对 | 当软手机的连接状态或注册状态发生变化时调用. |
| `onCallCreated` | 对 | 创建新会话时调用 . |
| `onCallRinging` | 对 | 当一个会话连接时调用 . |
| `onCallHangup` | 对 | 当会话结束时调用 . |

## 日志处理出错( E)

默认日志级别是 `debug`。它现在不习惯.

#### 错误类别

SDK所抛出的错误的完整列表介绍如下.

| 错误 | 原因 |
| --- | --- |
| `MissingParameterException` | 方法调用时没有一个或多个必要的参数. |
| `InvalidValueException` | 方法调用一个或多个参数的无效值 . |
| `InvalidTokenException` | 这个 `token` 哪个 `login` 被调用的方法是 INVALID 或 EXPIRED |
| `UnauthorizedException` | 方法 `Softphone` 或者说 `Session` 当Softphone没有认证时调用. |
| `InvalidSessionTypeException` | 对调用的方法来说会话类型无效 . |
| `InvalidSessionStateException` | 对调用的方法来说, 会话状态无效 . |
| `PermissionDeniedException` | 用户没有执行动作所需的权限. |
| `UnknownException` | 因不明原因出错 . |

## 常见问题

### @frejun/softphone-web-sdk 是什么？

此 SDK 提供了基于 SIP 的 Softphone , 用于使用 FreJun 给浏览器拨打/接收呼叫

### 如何安装 @frejun/softphone-web-sdk？

在项目目录运行 npm install @frejun/softphone-web-sdk，或使用 pnpm add / yarn add / bun add。

### @frejun/softphone-web-sdk 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/frejun\_\_softphone-web-sdk 是否存在。

### @frejun/softphone-web-sdk 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @frejun/softphone-web-sdk 可以商用吗？

@frejun/softphone-web-sdk 使用 ISC 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @frejun/softphone-web-sdk 的下载量有多少？

根据 npm 官方下载统计，@frejun/softphone-web-sdk 在 2026/10/16 – 2026/11/14 这 30 天内被下载 3,193 次，日均约 106 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @frejun/softphone-web-sdk 还在维护吗？

最新版本 2\.0\.1 发布于 2026/11/07（9 天前）；至今共发布 13 个版本，其中过去 12 个月发布了 3 个；首次发布于 2024/05/24。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

