# Callback Contract ## Goal Define a stable callback payload contract between channel-specific button handlers and the reusable reply-end-controls core. ## Telegram V1 callback values - `rec:continue` - `rec:stop` ## Optional message-scoped extension If V1 needs tighter message binding later, extend to: - `rec:continue:` - `rec:stop:` ## Normalized internal event Suggested normalized structure after channel parsing: ```json { "choice": "continue | stop", "conversationId": "string", "sessionKey": "string | null", "sourceMessageId": "string", "sourceCallbackId": "string", "channel": "telegram", "timestamp": "ISO timestamp" } ``` ## Why normalize The Telegram parser should convert platform-specific callback payloads into one internal structure, so the reusable policy/state layer does not need to know Telegram details.