# Slack now answers messages whose first delivery was lost

> Agno's Slack interface now deduplicates retried events by event_id, so AgentOS answers a message even when Slack's first delivery never arrived.

- Published: 2026-09-16
- Author: Himanshu Singh
- Categories: Changelog
- Canonical: https://www.agno.com/articles/slack-now-answers-messages-whose-first-delivery-was-lost
- Markdown: https://www.agno.com/articles/slack-now-answers-messages-whose-first-delivery-was-lost.md

The Agno Slack interface in AgentOS now remembers the `event_id` of each event it receives and uses it to sort Slack's retries. Slack retries any event it can't confirm within 3 seconds and marks the retry with `X-Slack-Retry-Num`. The Slack interface used to treat every retry as a duplicate and drop it. When the original delivery never reached AgentOS, the user's message got no reply and no error.

Now the Slack interface skips a retry only when it has already seen that ID. A retry for an event it hasn't seen runs like a first delivery.

![How the Slack interface handles a retry, before and now. When the first delivery never arrived, the retry was dropped with no reply and is now answered. Retries of received deliveries and retries without an event_id are skipped both times.](https://www.agno.com/images/v3-0-10-slack-retries.png)

The Slack interface now acknowledges a signed request whose body isn't valid JSON and logs it at warning level. It used to return `500`, which made Slack retry the request.

The Slack interface keeps seen event IDs in memory for each process, for ten minutes. If you run several workers or replicas, a retry that lands on a different process can run a second time. Run one process per Slack app to avoid duplicate replies.

See the [cookbook](https://github.com/agno-agi/agno/blob/main/cookbook/05_agent_os/17_slack/basic.py), and learn more about the [Slack interface](https://docs.agno.com/agent-os/interfaces/slack/introduction) in the documentation.
