跳到正文

callflow-esl

callflow-esl 是 FreeSWITCH outbound ESL 通话业务编排服务,也是系统一的语音 runtime 与 系统二流程脚本的执行端。它接收 FreeSWITCH 回连,调用流式 ASR、TTS、NLU / Chat,向业务层 提供播报、识别、DTMF、外呼、桥接、会议和录音能力。

模块不负责系统二的名单、调度、权限和经营数据;这些职责属于 callout-server

文档

当前结构

text
apps/callflow-esl/
├── index.ts                  # 进程入口
├── config.json              # 外置运行配置
├── src/
│   ├── business/            # 业务实现与注册
│   ├── runtime/             # 通话 runtime、组件与会话生命周期
│   ├── http/                # 健康检查、外呼与运行时配置接口
│   ├── esl/                 # outbound ESL 协议层
│   ├── freeswitch/          # FreeSWITCH 控制与事件处理
│   ├── speech/              # ASR / TTS 适配
│   ├── db/                  # Drizzle 数据访问
│   ├── config/              # 配置加载与校验
│   └── types/               # 公共类型
└── docs/                    # 配置、接口、业务与场景专题

识别链路为 FreeSWITCH mod_audio_fork → WebSocket ASR → callflow-esl;播报链路为 callflow-esl → HTTP TTS → FreeSWITCH playback。不要补回已移除的 unimrcp 链路。

运行

在仓库根目录:

bash
bun run dev:callflow-esl

或进入本目录:

bash
bun run dev
bun run start
bun run typecheck
bun test

默认监听、健康检查和依赖服务以服务目录为准。远端 FreeSWITCH 联调时,freeswitch.callbackHost 必须是 FreeSWITCH 能访问到的本机地址。

构建可执行文件

bash
bun run build
bun run build:all

build 在类型检查后构建 Windows x64 独立可执行文件;build:all 构建 Windows 与 Linux x64,并复制外置 config.jsondist/。可执行文件默认读取同目录配置,也可通过 CALLFLOW_ESL_CONFIG_PATH 指定。

配置

最小联调需校准以下分组:

  • esl-server:FreeSWITCH outbound 回连监听。
  • http-server:健康检查、外呼与运行时配置接口及 token。
  • freeswitch:ESL 地址、密码、回连地址和 originate 模板。
  • audioFork:ASR WebSocket 地址与音频约定。
  • tts.defaults / tts.use / tts.profiles:WAV 与流式播放策略。
  • businessConfig:业务级下游依赖。
  • db / redis:持久化与运行时状态。

字段、默认值、路径解析和完整示例只在配置参考维护。

快速验证

服务启动后先验证 HTTP 健康状态,再确认 FreeSWITCH originate 后能回连 outbound ESL。完整 命令、依赖顺序与收尾方式见开发测试手册。涉及识别或播报时, 同时检查对应 ASR / TTS 服务健康状态。

最低代码检查:

bash
bun run typecheck
bun test

外呼 API

外呼请求、鉴权、响应与错误约定已迁移到 HTTP 与运行时接口

运行时配置接口

业务列表、配置读取与更新接口见 HTTP 与运行时接口

业务路由

号码到业务的解析、业务注册方式和内置业务清单见 业务开发内置业务

注意事项

  • src/runtime/ 是通用通话能力,具体业务优先放入 src/business/
  • 新增业务需在注册表中显式注册;只新增文件不会自动生效。
  • config.json 中不要写入机器专属绝对路径或真实生产凭据。
  • 修改识别、播报、会议、桥接或清理逻辑后,至少执行类型检查和相关 bun test
  • 任务中启动的服务必须在结束前停止。
  • 运维问题从故障排查进入。

文档与代码在同一仓库维护,现有 Markdown 是唯一内容源。