@fonoster/voice

中文文档
0.61.0发布于 2026/11/15MITTypeScriptCommonJS构建来源已验证近 30 天下载 8971

长老会语音应用程序的会话 SDK

中文使用文档
文档目录28 节
  1. 安装
  2. 示例
  3. 会议
  4. 会议
  5. 中间
  6. 会话
  7. say( )
  8. 语句。 stopSay ()
  9. 会话.gather ()
  10. 届会。 listen ()
  11. 会话. 订阅()
  12. 转移()
  13. 交接器( )
  14. 页 次
  15. 挂起( )
  16. 页:1
  17. 页:1
  18. 答题( )
  19. 收到( )
  20. 会议闭幕()
  21. 会话. command ()
  22. 语法
  23. 语音服务员
  24. 语音服务器. listen ()
  25. 语音服务器. attach ()
  26. 语音服务器. handle Update ()
  27. 会话错误
  28. 会话结束错误

语音

Voice Version Downloads/week License

长老会语音应用的SDK会话. 每一次电话,长老会的Appbridge 打开一个签名的 WebSocket 第二届会议 给您的应用程序; VoiceServer 接受并运行您的处理器 与届会。 协议在 docs/session-protocol.md,完整的 SDK 向导在 docs/voice-sdk.md示例 examples/。 。 。 .

安装

$ npm install --save @fonoster/voice

示例

import { VoiceServer } from "@fonoster/voice";

// AppBridge signs every connection with the app's signing secret.
new VoiceServer({ port: 3000, signingSecret: process.env.APP_SIGNING_SECRET }).listen(
  async (session) => {
    await session.say("Hi there! What's your name?");
    const { speech: name } = await session.gather();
    await session.say(`Nice to meet you ${name}!`);

    await session.say("Please enter your 4 digit pin.");
    const { digits } = await session.gather({ maxDigits: 4, finishOnKey: "#" });
    await session.say(`Your pin is ${digits}`);

    await session.hangup();
  }
);

attach(server, handler) 在已有的 HTTP 或 Express 服务器上挂载同一服务器 .

会议

方法对
say(text | asyncIterable, options?)发声; 决定 { interrupted, heardText, heardMs }
gather(options?)等待演讲或按键maxDigits, (中文(简体) ), finishOnKey, (中文(简体) ), timeout(中文(简体) )
play(url), (中文(简体) ), playDtmf(digits)播放媒体或 DTMF 声调
transfer(to, { mode }), (中文(简体) ), completeTransfer()冷,温暖或 refer 转让
hold(), (中文(简体) ), resume(), (中文(简体) ), handoff(app, payload), (中文(简体) ), hangup()调用控制
audio.onFrame, (中文(简体) ), audio.send, (中文(简体) ), audio.mark, (中文(简体) ), audio.clear原始调用音频
on(event, cb), (中文(简体) ), subscribe(events)转弯、部分记录、按键

字段 : callRef, (中文(简体) ), appRef, (中文(简体) ), from, (中文(简体) ), to, (中文(简体) ), direction, (中文(简体) ), metadata。 。 。 .

来自gRPC SDK(英语:(req, res) 处理者, VoiceResponse, (中文(简体) ), stream, (中文(简体) ), sgather, (中文(简体) ), dial{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 这些不见了,看 docs/migrating-to-sessions.md。 。 。 . @fonoster/voice/session 决心 软件包,再放一次.

会议

一通电话的会话以fonost.session.v1消息(voice-sdk S8)为基础. 动词是 方便:每个都发出一个命令,并解答事件.

仁爱: 全球类

中间

呼叫者是中转:一个转弯. user 开始没有转弯. 已定.

仁爱: 实例财产 Session

会话

一次集会放弃了目前的转折;其后转折. 已取消,而不是缓冲.

仁爱: 实例财产 Session

say( )

讲出文字,或一流的文字片段作为单词,并报告所听到的.

仁爱: 实例方法 Session

语句。 stopSay ()

切断代理: 每个待决的语句和播放解析作为中断 .

仁爱: 实例方法 Session

会话.gather ()

等待发言(turn.dested)或数字(dtmf),以先到者为准.

仁爱: 实例方法 Session

届会。 listen ()

开始聆听或改变 AppBridge 如何聆听(listen.update: 识别语言, 暗示和坚忍low, (中文(简体) ), normal 或者说 high) (中文(简体) ).

仁爱: 实例方法 Session

会话. 订阅()

请求选入事件:"turn.present","transcript.".

仁爱: 实例方法 Session

转移()

调用; 当 AppBridge 结束会话时, 以 理由 调用 .

仁爱: 实例方法 Session

交接器( )

完成待定的取暖转移:代理机离开,呼叫机和新方停留. 决定: 当会话以理由转移结束时; 用会话错误拒绝 (单位:千美元)transfer_not_answered),当新党尚未答复,这就留下了转移 待决:等待 transfer.answered {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}再打个电话 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}我记得.

仁爱: 实例方法 Session

页 次

用有效载荷将电话交给另一个应用程序;当本届会议结束时,就决定了.

仁爱: 实例方法 Session

挂起( )

挂起; 会话结束后决定 . failure 结束调用为调用记录失败 (@ 内部: 留给长老会自己的应用( Autopilot); AppBridge 忽略了他人的应用).

仁爱: 实例方法 Session

页:1

在呼叫记录中添加一个注释(record.note).

仁爱: 实例方法 Session
内部: 为长老会自己的应用软件(Autopilot)预留;不是公共SDK的一部分,可能改变.

页:1

将模型符号用法添加到调用中(usage.report, add-usage-metering).

仁爱: 实例方法 Session
内部:预留给长老会自己的"自动驾驶";AppBridge拒绝其他应用.

答题( )

即刻决定:AppBridge响应连接(voice-sdk S2)的呼叫.

仁爱: 实例方法 Session

收到( )

从套接字中提供一个框架.

仁爱: 实例方法 Session

会议闭幕()

插座关了.

仁爱: 实例方法 Session

会话. command ()

发送唯一答案为可能错误的命令( 以会话错误记录) .

仁爱: 实例方法 Session

语法

应用程序拥有中断( appbridge B22) : 当呼叫者开始谈论中断时 说或玩,SDK以清晰的方式切断它;一个无间断的不断播放.

仁爱: 实例方法 Session

语音服务员

接受通过 WebSocket 的 Appbridge 会话并运行每次会话的处理器 (voice-sdk,"VoiceServer通过WebSocket接受AppBridge会话").

仁爱: 全球类

语音服务器. listen ()

启动独立的服务器。 决心一旦它听.

仁爱: 实例方法 VoiceServer

语音服务器. attach ()

挂载在 HTTP 服务器上的挂载( 包括 Express): 会话到达 path。 。 。 .

仁爱: 实例方法 VoiceServer

语音服务器. handle Update ()

处理一个升级请求:验证签名,然后运行会话.

仁爱: 实例方法 VoiceServer

会话错误

命令失败: AppBridge 已发送 error 与 relatesTo 设置到命令的id.

仁爱: 全球类

会话结束错误

会话在命令待决时结束(或致命错误已到来).

仁爱: 全球类

版本与发布记录

@fonoster/voice 共发布 334 个版本,首次发布于 2021/11/01;过去 12 个月发布了 70 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.61.0latest2026/11/15今天
0.60.02026/11/151 天前
0.59.02026/11/141 天前
0.58.02026/11/141 天前
0.57.02026/11/114 天前
0.56.02026/11/114 天前

其他发布通道:next → 0.9.51。

关于 @fonoster/voice 的常见问题

@fonoster/voice 是什么?

长老会语音应用程序的会话 SDK

如何安装 @fonoster/voice?

在项目目录运行 npm install @fonoster/voice,或使用 pnpm add / yarn add / bun add。

@fonoster/voice 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fonoster/voice 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@fonoster/voice 可以商用吗?

@fonoster/voice 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fonoster/voice 的下载量有多少?

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

@fonoster/voice 还在维护吗?

最新版本 0.61.0 发布于 2026/11/15(今天);至今共发布 334 个版本,其中过去 12 个月发布了 70 个;首次发布于 2021/11/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。