rooster-supervision

Slack Interactivity

Slack's Interactivity target: a button tap on Rooster's DM asking whether to send a floor person home early (#3571, Frederick 2026-10-03; floor_blocks.send_home). The ONE Slack interactivity surface in Roost -- a Slack app has exactly one Interactivity Request URL, so every button family dispatches from this loop by action_id: send-home, bank-rule batches and expense flags (#3669), salary-payment confirmations (#3711), and, since 2026-10-04 (FLOOR-GPS-SCHEDULER-001 S5b, #2981), the postage ask's "Load $X" / "Wait" buttons (rooster.postage_taps.handle_tap; this docstring used to say they were "still a typed yes" -- CORRECTED 2026-10-04, left standing here as the record of what was believed).

Authenticated exactly like /slack/events: the HMAC signature over the raw body is the whole boundary. Slack posts application/x-www-form- urlencoded with the JSON in a payload field. A tap counts only from the configured recipient's own Slack user (the same check a typed reply gets); anyone else's tap is ignored. The answer itself is claim-once (send_home.resolve), so a double tap, a tap after a typed reply and the timeout racing a tap are one answer.

⛔NEEDS A SLACK-CONSOLE STEP nobody can do from code: the Rooster app's Interactivity Request URL must point here (docs/runbooks/FLOOR_SEND_HOME_APPROVAL.md). Until then a typed reply in the DM thread, and the timeout (which keeps the person working), carry the decision.

post/api/rooster/supervision/slack/interactivity

Request

  • Base URL: https://api.pigeonly.com (the document declares no server; this is the origin it was published from)
  • URL: https://api.pigeonly.com/api/rooster/supervision/slack/interactivity
  • Auth: none declared

Response

Successful Response

object required

Changes

No recorded changes to this operation across all 1 revision of this API.