外观
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:allbuild 在类型检查后构建 Windows x64 独立可执行文件;build:all 构建 Windows 与 Linux x64,并复制外置 config.json 到 dist/。可执行文件默认读取同目录配置,也可通过 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。 - 任务中启动的服务必须在结束前停止。
- 运维问题从故障排查进入。