一句话定位

callflow-server + callflow-webpage 是平台的管理控制台:一个 Web 后台,用来
查看 FreeSWITCH 运行数据、管理业务路由与号码映射、在线调整 callflow-esl 的运行时
配置(TTS / 录音),以及试听 TTS 音色——不用改配置文件、不用重启服务。

它把”看通话数据、配号码路由、调 TTS 参数、试音色”这些日常运维动作,从改 JSON +
重启,变成网页上点几下。

架构与数据流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
┌────────────────────┐   HTTP    ┌────────────────────────┐
│ callflow-webpage │ ───────► │ callflow-server │
│ (Quasar 19913) │ │ (Bun :9913) │
└────────────────────┘ └───────┬─────────┬──────┘
│ │
read-only 视图 │ │ 读写运行时配置
┌────────────────────────────┘ └──────────────┐
▼ ▼
┌──────────────────┐ ┌────────────────────────┐
│ FreeSWITCH DB │ │ callflow DB │
│ channels / calls │ │ call_businesses │
│ registrations … │ │ *_number_mappings │
└──────────────────┘ │ callflow_runtime_configs│
└───────────┬────────────┘
POST /api/tts/audition │ /health │ 同一套表
▼ ▼ (callflow-esl 读取)
┌──────────────────┐ reload ┌────────────────────────────────────────┐
│ sherpa-tts-server│ ◄───────── │ callflow-server → callflow-esl │
│ (:9080) │ │ POST /runtime-configs/reload (:9912) │
└──────────────────┘ └────────────────────────────────────────┘

关键点:callflow-server 写的运行时配置,落在 callflow-esl 同一套 callflow schema
表里
callflow_runtime_configs)。前端”保存”后再点”重载”,callflow-server 会
POST 到 callflow-esl 的 /runtime-configs/reload,让其重新读取配置——新通话立即生效。

四块功能

1. 看板(/

调用 GET /api/freeswitch/overview,展示实时活动通道数、当前通话数、SIP 注册数,
以及最近通道 / 注册明细。数据全部来自 FreeSWITCH 数据库,只读

2. FreeSWITCH 数据浏览(/tables/:name

通用表浏览器:下拉切换任意 FreeSWITCH 表(channels、calls、registrations、
sip_dialogs、basic_calls / detailed_calls 视图等),全文搜索 + 分页,点击单元格
查看完整内容。对应 GET /api/freeswitch/tablesGET /api/freeswitch/tables/{name}

3. 配置管理(/callflow

  • 运行时配置:在线编辑 ttsrecording 两组配置(sherpaHttpEndpoint
    streamingEnabledstreamPlaybackPrefixspeakerIdspeedplaybackTarget
    录音 directory / publicBaseUrl 等),保存后一键”重载”通知 callflow-esl 生效;
  • 业务与号码映射:查看已注册业务(call_businesses),增删改”被叫号码 → 业务”
    的映射(call_business_number_mappings),即号码路由由谁接管。

4. TTS 音色试听(/tts-audition,音色试听)

这是控制台最实用的小工具:

  1. 进入时读取 GET /api/callflow/runtime-configs 拿到当前 TTS 端点与默认参数;
  2. POST /api/tts/health 读取 TTS 服务的 model.numSpeakers按说话人数量动态
    渲染音色卡片
    ——多说话人模型(如默认的 Kokoro,103 个音色)自动列出全部 speaker,
    单说话人模型(如 Matcha)只显示 1 个;
  3. 输入文本、调节语速(0.5–1.8)、选择 speaker,点试听即 POST /api/tts/audition
    合成并就地播放,返回里带 cached 标识命中缓存与否,还能一键复制该音色的请求 JSON。

音色试听让”换 TTS 模型 / 挑哪个 speakerId / 调语速”从盲调变成所见即所得,挑好的
speakerId + speed 直接填进 callflow-esl 的 tts 配置或业务的 ctx.speak 入参。

HTTP API 一览

所有响应统一用 { ok, data } / { ok, error } 信封。

方法 路径 用途
GET /health 服务 + 两个数据库连通性
GET /api/freeswitch/overview 看板计数与最近通道 / 注册
GET /api/freeswitch/tables 可浏览的 FreeSWITCH 表清单
GET /api/freeswitch/tables/{name} 某表的分页 / 搜索数据
GET /api/callflow/businesses 业务列表(分页)
GET / POST /api/callflow/number-mappings 号码映射查询 / 新建
PUT / DELETE /api/callflow/number-mappings/{id} 号码映射更新 / 软删除
GET /api/callflow/runtime-configs 当前 tts + recording 运行时配置
PUT /api/callflow/runtime-configs/tts 更新 TTS 运行时配置
PUT /api/callflow/runtime-configs/recording 更新录音运行时配置
POST /api/callflow/runtime-configs/reload 转发到 callflow-esl 触发重载
POST /api/tts/audition 合成一段试听音频 → { wavUrl, fileName, sampleRate, cached }
POST /api/tts/health 探测 TTS 服务 /health → 模型信息(numSpeakers 等)

配置

callflow-server 没有 config.json,全部走环境变量(见 src/config.ts):

环境变量 默认 说明
CALLFLOW_SERVER_HOST 0.0.0.0 HTTP 监听地址
CALLFLOW_SERVER_PORT 9913 HTTP 监听端口
FREESWITCH_DB_URL …@192.168.2.246:5432/freeswitch FreeSWITCH 数据库(只读视图)
CALLFLOW_DB_URL …@localhost:5432/freeswitch?options=-c search_path=callflow callflow 数据库(读写)
CALLFLOW_ESL_BASE_URL http://127.0.0.1:9912 callflow-esl HTTP,用于配置重载

前端 callflow-webpage 开发端口 19913,通过 VITE_CALLFLOW_API_BASE(默认
http://127.0.0.1:9913)连接后端,路由为 hash 模式。

控制台同样没有内置鉴权。生产环境请置于内网或加反代鉴权层,参见
部署拓扑

下一步