im_workbench

工作台服务从 im_server 拆分后的独立 Go 工程。当前阶段只拆服务和接口边界,数据库暂不迁移,继续访问现有租户库中的工作台表。

路由

  • GET /healthz
  • GET /metrics
  • GET /v1/workbench
  • /v1/workbench/organization/*
  • /v1/workbench/attendance/*
  • /v1/workbench/meetings*
  • /v1/workbench/meeting-notes
  • /v1/workbench/reports/daily*
  • /v1/workbench/reports/monthly*
  • /v1/workbench/executive-mailbox/*
  • /internal/admin/workbench/*,HotGo 后台内部管理接口,使用服务间 HMAC 鉴权

本地运行

IM_WORKBENCH_CONFIG=configs/workbench.local.json \
IM_WORKBENCH_INTERNAL_SECRET=local-workbench-secret \
go run ./cmd/workbench

默认监听 :6061,默认连接本地 tinode 库和本地 Redis。

开发联调可在 configs/workbench.local.json 打开 allow_dev_header_auth,请求头带:

X-User-ID: 1
X-Tenant-ID: 1
X-Tenant-Code: default

正式链路使用:

Authorization: Bearer {token}
X-MeetingIM-APIKey: {apikey}
X-Tenant-Code: default
X-IM-Schema: 1
X-Request-ID: {uuid}

服务从 Redis 读取 im:session:token:{sha256(token)} 校验登录态。

usr... 用户 ID 编解码优先从 IM Manager 内部配置接口读取 UID 加密 key,读不到时回退到 auth.uid_key 或环境变量 IM_WORKBENCH_UID_KEY。测试环境需要配置:

IM_WORKBENCH_MANAGER_BASE_URL=https://admin.118im.com
IM_WORKBENCH_MANAGER_SERVICE_NAME=im-workbench
IM_WORKBENCH_MANAGER_SECRET={IM_CONFIG_API_SECRET}

默认读取 GET /internal/im-config/third-party/im?keys=uid_encryption_key,UID_ENCRYPTION_KEY,uid_key。 如果后台配置使用了其他 group/key,可通过 IM_WORKBENCH_MANAGER_UID_KEY_GROUP 和 IM_WORKBENCH_MANAGER_UID_KEY_KEYS 调整。

HotGo 后台访问 /internal/admin/workbench/* 时需要配置同一组内部鉴权参数:

IM_WORKBENCH_INTERNAL_SERVICE_NAME=hotgo-admin
IM_WORKBENCH_INTERNAL_SECRET={shared-secret}

测试环境也可以复用已有内部服务密钥:HotGo 的 IM_WORKBENCH_API_SECRET 为空时会使用 IM_INTERNAL_API_SECRET,im_workbench 的 IM_WORKBENCH_INTERNAL_SECRET 为空时也会使用 IM_INTERNAL_API_SECRET。

HotGo 后台在测试集群中建议直连工作台服务内网地址:

IM_WORKBENCH_API_BASE_URL=http://im-workbench.workbench-system.svc.cluster.local:6061

测试镜像默认使用 hotgo-workbench-internal 作为工作台内部签名密钥;正式环境建议通过 IM_WORKBENCH_API_SECRET 和 IM_WORKBENCH_INTERNAL_SECRET 覆盖为真实密钥。

Kafka 事件

工作台写操作统一投递到 im.workbench.event。本地配置默认关闭 Kafka:

IM_WORKBENCH_KAFKA_ENABLED=true \
IM_WORKBENCH_KAFKA_BROKERS=127.0.0.1:9092 \
IM_WORKBENCH_CONFIG=configs/workbench.local.json \
go run ./cmd/workbench

测试环境使用 configs/workbench.test.json,Kafka 为明文 PLAINTEXT 直连,不配置 SASL/TLS。

事件体字段:

{
  "event_id": "wbe_xxx",
  "trace_id": "request-id",
  "tenant_id": 1,
  "tenant_code": "default",
  "actor_user_id": 42,
  "module": "meeting",
  "action": "meeting.created",
  "resource_id": "mtg_xxx",
  "target_user_ids": [42, 43],
  "title": "会议通知",
  "summary": "项目周会",
  "occurred_at": "2026-09-13T14:00:00Z",
  "data": {}
}

构建

make test
make build

数据库原则

服务启动不自动建库建表,不执行 CREATE TABLE / ALTER TABLE。所有表结构和种子数据继续通过 SQL 审核后人工执行。

S
Description
No description provided
Readme
30 MiB