RaisFast Chat Widget 集成测试页

网页内嵌客服组件的入口测试:填一个已配置的 widget 渠道,点“加载 Widget”, 右下角即出现悬浮气泡。所有消息走真实后端(widget JWT + SSE),可与工作台 / 机器人联动。

1 配置渠道一次性

  1. 启动后端:just dev
  2. 创建 widget 渠道 + 收件箱(可用下方 curl,或走 admin 界面)
  3. 创建机器人并绑定收件箱(可选;不绑定 = 纯人工)
# 渠道:verify_kind=jwt-widget,落 chat_message,入站触发 chat.ingress
curl -s -X POST http://localhost:9898/api/v1/admin/integration/channels \
  -H 'Authorization: Bearer <ADMIN_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{
    "channel_key": "chat-widget-demo",
    "provider": "widget",
    "mode": "push",
    "transport": "http1",
    "framing": "raw",
    "codec": "json",
    "verify_kind": "jwt-widget",
    "mapping": {
      "external_id": "$.id",
      "sender": "$.user",
      "payload": { "body": "$.text" }
    },
    "target_type": "chat/chat_messages",
    "route_extra": { "jobs": [{ "job_type": "chat.ingress", "max_attempts": 1 }] }
  }'

# 收件箱:channel_id 填上面渠道返回的 id;bot_id 为空 = 纯人工(安全默认)
curl -s -X POST http://localhost:9898/api/v1/admin/cms/chat/chat_inboxes \
  -H 'Authorization: Bearer <ADMIN_TOKEN>' -H 'Content-Type: application/json' \
  -d '{
    "channel_id": <CHANNEL_ID>,
    "name": "网站咨询",
    "greeting": "您好,有什么可以帮您?",
    "widget_theme": { "color": "#4f46e5", "position": "right" }
  }'

# 注:收件箱缺失时发消息会 404;渠道与收件箱都必须存在。

2 加载 Widget

切换渠道会换一套独立的 localStorage 会话(raf.widget.{channel}.*),互不串扰。

3 验证链路

  1. 点右下角气泡 → 问候语出现 → 发消息 你好
  2. 若收件箱绑定机器人:机器人自动回复(SSE 实时回流)
  3. 若纯人工:消息进入工作台会话列表,坐席回复后实时收到
  4. 测试转人工:发送含机器人转人工关键词的消息(如 转人工
  5. 断网重连 / 刷新页面:历史通过 since 增量恢复,零丢失
页面刷新后 Widget 的匿名身份(visitor_id)存于 localStorage,会归并到同一联系人的 同一会话。若要测试“新访客”,点“重置会话”再加载。