Problem Description
Incoming messages work perfectly, but outgoing friend messages are not delivered to recipients despite implementing both modern unified messaging and legacy protocols with comprehensive debugging.
What Works ✅
- Authentication: Complete Steam Guard login flow
- Incoming messages: Successfully receive messages via
ClientFriendMsgIncoming packets
- Friend management: List, add, accept, remove friends all working
- Persona state: Can set and maintain Online status (with
PersonaSetByUser=true)
- Client initialization: Full SteamKit-compatible setup with
ClientSessionStart handshake
What Doesn't Work ❌
- Outgoing messages: Neither unified messaging nor legacy protocols deliver messages to recipients
- Messages are "sent" without errors but never received by the target user
- Tested with multiple service method names and protobuf encodings
Technical Implementation
Protocols Tested
-
Unified Messaging (FriendMessages.SendMessage#1)
- Manual protobuf encoding with all required fields
- Tried multiple service method variations
- Added client_message_id field matching SteamKit
- Gets no responses from Steam (tested Job IDs 2-6)
-
Legacy Protocol (ClientFriendMsg)
- Direct protobuf message with
EMsg_ClientFriendMsg
- Byte-encoded message content (not string)
- Same approach as SteamKit's
SendChatMessage
- Sends without errors but messages not delivered
Key Enhancements Made
- ClientSessionStart: Added missing critical handshake from SteamKit analysis
- Enhanced login: OS type, machine ID, chat mode, UI mode, package version
- PersonaSetByUser=true: Proper user-initiated persona state changes
- Offline message request: Initialize message delivery system
- Comprehensive debugging: Packet monitoring, job ID tracking, raw data analysis
Debug Evidence
Successful Incoming Message
[DAEMON] 📨 Message from 76561198025077538: test20
🔍 CLIENT DEBUG: Received packet - EMsg: EMsg_ClientFSOfflineMessageNotification (7523)
Outgoing Message Attempts
🐛 DEBUG: Sending unified message - Service: FriendMessages.SendMessage#1, Job ID: 2, Data length: 50
✅ SUCCESS: FriendMessages.SendMessage#1 sent with Job ID: 2
🐛 DEBUG: Using legacy ClientFriendMsg protocol (EMsg_ClientFriendMsg)...
✅ Message sent to Steam servers\!
No responses received for any outgoing message attempts despite comprehensive logging.
Questions
-
Service Authentication: Do unified messaging services require additional authentication that we're missing?
-
Protocol Evolution: Has Steam deprecated certain outgoing message protocols for third-party clients?
-
Client State: Are we missing critical client state initialization that enables outgoing message delivery?
-
Rate Limiting: Could Steam be silently dropping messages due to rate limiting or anti-spam measures?
Environment
- Go Version: 1.24.5
- Platform: macOS (Darwin 24.6.0)
- go-steam Version: Latest (commit a4cfc61)
- Steam Account: Not restricted, can send/receive via official Steam client
Request
Looking for insights on:
- What enables outgoing message delivery in Steam's protocol
- Whether there are additional handshakes or authentication steps required
- If modern Steam has different requirements for third-party clients
- Protocol analysis tools or approaches that could help identify the missing piece
The comprehensive debugging infrastructure is now in place to quickly test any suggested solutions.
References
- Commit: a4cfc61 - Complete implementation with extensive debugging
- All protocols implemented following SteamKit patterns
- Incoming message delivery works perfectly, proving client setup is largely correct
Problem Description
Incoming messages work perfectly, but outgoing friend messages are not delivered to recipients despite implementing both modern unified messaging and legacy protocols with comprehensive debugging.
What Works ✅
ClientFriendMsgIncomingpacketsPersonaSetByUser=true)ClientSessionStarthandshakeWhat Doesn't Work ❌
Technical Implementation
Protocols Tested
Unified Messaging (
FriendMessages.SendMessage#1)Legacy Protocol (
ClientFriendMsg)EMsg_ClientFriendMsgSendChatMessageKey Enhancements Made
Debug Evidence
Successful Incoming Message
Outgoing Message Attempts
No responses received for any outgoing message attempts despite comprehensive logging.
Questions
Service Authentication: Do unified messaging services require additional authentication that we're missing?
Protocol Evolution: Has Steam deprecated certain outgoing message protocols for third-party clients?
Client State: Are we missing critical client state initialization that enables outgoing message delivery?
Rate Limiting: Could Steam be silently dropping messages due to rate limiting or anti-spam measures?
Environment
Request
Looking for insights on:
The comprehensive debugging infrastructure is now in place to quickly test any suggested solutions.
References