# @deltachat/calls-webapp 中文文档

规范地址：https://npmcn.com/package/%40deltachat/calls-webapp/

版本：0\.12\.1-beta-debug
npm 元数据更新时间：2026-02-17T17:41:58.540Z
中文译文更新时间：2026-11-13T03:48:32.118Z
软件包许可：未声明

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

原始 npm 页面：https://www.npmjs.com/package/%40deltachat/calls-webapp
原文对照：https://npmcn.com/package/%40deltachat/calls-webapp/?lang=original

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

- 包体积（解压后）：602 kB，4 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：1 个
- 首次发布：2025-10-13T15:38:10.452Z
- 最新版本发布：2026-02-17T17:41:58.313Z
- 近 30 天下载量：2366（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：4（近 12 个月 2 个）

## 中文简介

P2P视频通过WebRTC进行调用,以融入Delta Chat客户端.

## 安装

```sh
npm install @deltachat/calls-webapp
```

也可以使用：`pnpm add @deltachat/calls-webapp`、`yarn add @deltachat/calls-webapp`、`bun add @deltachat/calls-webapp`

## README

# 打电话

P2P视频通过WebRTC进行调用,以融入Delta Chat客户端.

## 如何运作

以下是Delta Chat如何与这个应用程序合作的序列图. 如果你看到一个字组而不是一个图表,请去 [这里](https://mermaid.ink/svg/pako:eNqtVstu2zAQ_JUFL7UBx43ltxCkiJ0ecmgQJA6MFr7Q0tomSokqSSV1g_x7l5QUO34UaVpDB0ncndmdHVJ-YpGKkYXM4I8c0wgvBV9qnsxSoF_GtRWRyHhq4UKKCIGb4uaDgUuUlsN4xe2B4Mn97fV2sH_-CHeT-2swqB9Qm_2sUZU1UvPDOWdzfQ61SOUyhjmCXSEYnmyXVT8Aq-Yb0O2qi9BrZREUoRcQYdlpptEY9IwzdmcJD8ZcSngUduWwZqxIL6JPzs-LpkOYEjYRJWvI8jktAo9jh_XpSPyNRG4QNEq-9lk8-o62lKcQ8sSHF9V9VbmuIEH4-jpBs7rCVtDudN3LmtEL-RMinsYi5tTikpNcGuP6MeQr6o0aLApZO5qyFA_nw2t-sb5BdUs7wHt6TrmwsFC6RH6VS2_dihUJqtzuKkQyh1DDhAtZd-W5aVoFxk-DE5KUTfiy3pID9rRolDTUkKOmIni0AucZ69T2bRXuavo-pzi_nYxBLRao6_se8SU5R5X-gBm7iCLMCndUpnABvoE3WWIn-i2G2ExtNJkWw1JuCked0Q67nXbQKgk3s_f9HPJUu1ldYdf93uKpXdz_7iiP-rd-quQtBav8dJdrbIBEN5kVf8BjhtoV4p2G4ql53HKUVCor7jaWPzvbSHcT3MCDiNG5nRgSqIkFZMoYMZdYP5C5OVC8LBi_SveVEIKDTZU9iOQrL5BG_4Q02kZyzbwDB9O4kmr0Yvli8_3R8DvT6m3rDRepCxdWqJRLKAdD1qHJr3iaovQDpQ8L0hFDG9WsqOjag-Cl1WjqWZDVHREdQ5lWiXNmojTC1fjzxokG-MJSbe77JFLiI7ZIEUHkqJ2rtgh2Z_nSKPlwt0U4sqEP2Pxg9r46pdaswZZaxCy0OscGS1DTJqFH9uRCZoyQEpyxkG5jXPBcWnfUPVMafWK_KZVUmVrlyxULF1waesozJ0f5n-LlrSZC1GOVp5aFrdbAg7Dwif1kYdBu9vrdoNNvDYP2IBi0ggZbs_Ck1eq3m8Ne93TQHwxPe0H3ucF-eV7Soke9tPuD_vA0GFDA82_Bo8ZW)。 。 。 .

```mermaid
sequenceDiagram
    participant Alice as Alice's Delta Chat
    participant ATURN as Alice's TURN / STUN servers
    participant BTURN as Bob's TURN / STUN servers<br> (could be the same as Alice's)
    participant Bob as Bob's Delta Chat

    Note over Alice: Alice presses<br>"Start Call with Bob"
    Alice ->> ATURN: What's my public address?
    Alice ->> ATURN: Please relay my packets
    ATURN -->> Alice: Your address is<br>42.42.42.42:12345<br>(srflx candidate gathered)
    ATURN -->> Alice: I will relay your packets<br>(TURN (relay) candidate<br>gathered)
    Note over Alice: Wait for relay candidate<br>or for timeout
    Alice ->> Bob: (email) I want to start a call. My address is 42.42.42.42:12345,<br>or you can reach me at my TURN server.<br>(WebRTC offer)

    Note over Bob: Bob presses "Accept Call"
    Bob ->> BTURN: What's my public address?
    Bob ->> BTURN: Please relay my packets
    ATURN ->> Alice: BTW your other address is<br>42.42.42.43:54321
    BTURN -->> Bob: Your address is<br>43.43.43.43:55555<br>(srflx candidate gathered)
    BTURN -->> Bob: I will relay your packets<br>(TURN (relay) candidate<br>gathered)
    Note over Bob: Wait for relay candidate<br>or for timeout
    Bob ->> Alice: (email) Sure, let's have a call. My address is 43.43.43.43:55555,<br>or you can reach me at my TURN server.<br>(WebRTC answer)

    loop
        Alice <<-->> Bob: P2P video stream (if possible)
        Alice <<->> ATURN: relayed video stream<br>(if P2P not possible)
        ATURN <<->> BTURN: relayed video stream<br>(if P2P not possible)
        BTURN <<->> Bob: relayed video stream<br>(if P2P not possible)
    end

    BTURN ->> Bob: BTW your other address is<br>43.43.43.43:55556

    loop An additional WebRTC data channel can be established (via relay or P2P)<br>to promote more ICE candidates after the initial connection is established
        Alice ->> Bob: My other address is 42.42.42.43:54321
        Bob ->> Alice: My other address is 43.43.43.43:55556
    end
```

## 整合

要融入您的 Delta 聊天客户端, 您需要提供 `window.calls` 下列 API 对象 :

-   `startCall: (offerPayload: string) => void` (执行必须调用 `dc_place_outgoing_call` 聊天邮件核心 API)
-   `acceptCall: (answerPayload: string) => void` (执行必须调用 `dc_accept_incoming_call` 聊天邮件核心 API)
-   `endCall: () => void` (执行必须调用 `dc_end_call` 聊天邮件核心 API)
-   `getIceServers: () => string | Promise<string>` (返回 JSON 字符串,并按预期设置冰上服务器配置) [https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/setConfuguation 互联网档案馆的存檔,存档日期2013-12-22](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/setConfiguration)(中文(简体) )
-   `getAvatar: () => string` (返回聊天的外观图像 URL;可以是普通的URL或数据-URL,前. `"data:image/png;base64,..."`(中文(简体) )

通过 URL 散列给予应用程序命令 :

-   `#startCall`: 告诉应用程序生成要约有效载荷并呼叫 `startCall()`,这就是当用户开始发出一个调用时应用程序应该如何打开.
-   `#offerIncomingCall=PAYLOAD`:告诉应用程序显示"来电". 回答吗? 屏幕 然后,如果用户点击"Answer",则生成一个WebRTC对所提供的报价的回答 `PAYLOAD`电话 `window.calls.acceptCall(webrtcAnswer)`。如果用户拒绝调用,应用程序将引用 `window.calls.endCall`。 。 。 .
-   `#acceptCall=PAYLOAD`: 与 `#offerIncomingCall`,但并没有显示"来电。 回答,”然后自动并立即接受电话.
-   `#onAnswer=PAYLOAD`:通知应用程序,发出呼叫被接受,并提供应答有效载荷

**关键是:** `PAYLOAD` **必须** 被 Base64 编码( NOTE: 您可能还需要 URL- encode 该 base64 字符串才能成为有效的 URL 散列) , 然后再将其传递到 URL 散列中的应用 .

为了在音频模式下启动应用程序, 提供 `noOutgoingVideoInitially` 在查询(搜索)字符串中 初始URL,例如:. `/index.html?noOutgoingVideoInitially#startCall`。 。 。 .

为了完全禁用进出视频, 提供 `disableVideoCompletely` 在 URL 查询字符串中. 见 [https://github.com/deltachat/calls-webapp/issues/31 互联网档案馆的存檔,存档日期2013-12-02](https://github.com/deltachat/calls-webapp/issues/31)。 。 。 .

## 捐款

### 安装依赖关系

复制后, 安装依赖性 :

```
pnpm i
```

### 正在检查代码格式

```
pnpm check
```

### 在浏览器中测试应用程序

开发时要在浏览器中测试您的工作 :

```
pnpm start
```

在两个单独的分页中打开模拟实例(模拟器中实例上的"共享"按钮). 然后添加 `#startCall` 到一个实例的 URL 结尾.

在Safari上的macOS上,您可能无法同时给相机两个分页的访问权限;在这种情况下,尝试Firefox.

### 大楼

要构建用于释放的应用程序:

```
pnpm build
```

在 Delta Chat 中以开发工具包装应用程序以调试 `NODE_ENV` 用于“ 调试” 的环境变量 :

```
NODE_ENV=debug pnpm build
```

由此产生的优化 `.html` 文件保存于 `dist/` 文件夹.

### 释放

自动创建并创建新的 GitHub 版本 `.html` 文件 :

```
git tag -a v1.0.1
git push origin v1.0.1
```

### 贷项

灵感来自 [无服务器 WebRTC](https://github.com/cjb/serverless-webrtc/) 但从零开始建造 简单得多: 没有支持数据通道、文件传输和仅支持浏览器.

请参看博客文章

-   [WebRTC 无信号服务器](https://blog.printf.net/articles/2013/05/17/webrtc-without-a-signaling-server/)
-   [无服务器的 WebRTC 继续](https://blog.printf.net/articles/2014/07/01/serverless-webrtc-continued/)

## 常见问题

### @deltachat/calls-webapp 是什么？

P2P视频通过WebRTC进行调用,以融入Delta Chat客户端\.

### 如何安装 @deltachat/calls-webapp？

在项目目录运行 npm install @deltachat/calls-webapp，或使用 pnpm add / yarn add / bun add。

### @deltachat/calls-webapp 支持 TypeScript 吗？

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

### @deltachat/calls-webapp 支持 ESM 还是 CommonJS？

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

### @deltachat/calls-webapp 可以商用吗？

@deltachat/calls-webapp 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @deltachat/calls-webapp 的下载量有多少？

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

### @deltachat/calls-webapp 还在维护吗？

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

