UserTyping

Tổng quan luồng xử lý

  1. Client gửi sự kiện "UserTyping" qua WebSocket tới

    cs-chat-realtime-svc

    .

  2. cs-chat-realtime-svc chuyển tiếp sự kiện tới

    cs-event-center-svc

    .

  3. cs-event-center-svc đẩy sự kiện vào Kafka.

  4. cs-consumer đọc Kafka và gọi sang

    cs-agent-svc

    (thông qua gRPC

    NotifyUserTyping

    ).

  5. cs-agent-svc (dự đoán) sẽ xử lý logic thông báo cho Agent hoặc AI Bot, và có thể đẩy ngược lại sự kiện socket cho người nhận (tương tự luồng realtime).


Chi tiết từng bước

1. Tiếp nhận sự kiện: cs-chat-realtime-svc

  • Tương tự như Send/Seen,

    cs-chat-realtime-svc

    nhận sự kiện từ WebSocket.

  • Nó sẽ gọi sang

    cs-event-center-svc

    với EventType là KafkaEventUserTyping (hoặc tương tự).

2. Điều phối sự kiện: cs-event-center-svc

  • Nhận request gRPC.

  • Đẩy message vào Kafka Topic tương ứng với sự kiện User Typing.

3. Xử lý logic nghiệp vụ: cs-consumer

  • Vị trí xử lý: internal/controller/event/user_typing.go -> internal/logic/event/message.go.

  • Logic:

    • Consume message từ Kafka.

    • Hàm ProcessUserTyping (trong internal/logic/event/message.go) gom nhóm các sự kiện theo

      để tránh spam (debounce/throttle).

    • Tạo danh sách

      .

    • Gọi gRPC sang

      (biến

      ).

    • Hàm được gọi là

      .

4. Điểm khác biệt quan trọng

  • Không lưu DB: Sự kiện "đang gõ" là tạm thời (ephemeral), không có giá trị lưu trữ lâu dài nên không gọi sang

    để lưu vào MongoDB.

  • Đích đến là Agent Service: Thay vì Storage, consumer gọi sang

    . Điều này gợi ý rằng việc hiển thị "User is typing..." cho Agent (nhân viên hỗ trợ) hoặc để AI Bot biết đường xử lý là trách nhiệm của

    .

Last updated