class Clacky::Channel::Adapters::Feishu::WSClient
def handle_data_frame(frame, headers)
def handle_data_frame(frame, headers) return unless headers["type"] == "event" payload_bytes = frame[:payload] return unless payload_bytes && !payload_bytes.empty? event_json = payload_bytes.force_encoding("UTF-8") event_data = JSON.parse(event_json) # Send ACK response send_frame( seq_id: frame[:seq_id], log_id: frame[:log_id], service: frame[:service], method: 1, headers: frame[:headers], payload: JSON.generate({ code: 200 }) ) event_type = event_data.dig("header", "event_type") || event_data["type"] Clacky::Logger.info("[feishu-ws] Dispatching event: #{event_type}") @on_event&.call(event_data) rescue JSON::ParserError => e Clacky::Logger.warn("[feishu-ws] Failed to parse event payload: #{e.message}") end