Hi!
This is a really good question - duplicate clicks and retries are a very real problem in Digital Bot Flows, especially when you start doing side-effect actions (create ticket, call external API, etc.).
You can handle idempotency in a Digital Bot Flow using Participant Data and, when possible, backend logic. Inside the flow, one common pattern is to store a simple action key + timestamp (e.g., "createTicket|orderId=123" and lastActionTimestamp). Before executing a side-effect (Data Action, ticket creation, etc.), you compare the current action key with the last one and check if it happened within a short time window; if yes, treat it as a duplicate and skip. For more critical steps, you can also use a lightweight lock flag (e.g., processingCreateTicket = true/false) so that if a duplicate message arrives while processing is still true, you simply ignore it or route to an alternative path.
For a more robust solution, push idempotency to your backend/API. Send an idempotency key from the bot (based on conversation ID + action key) and make the external service either return the same result or ignore repeated requests with the same key. Since DBF doesn't expose a direct message/turn ID, combining conversation context, Participant Data (last action + timestamp or lock flags), and backend idempotency usually gives a solid deduplication strategy against double clicks, retries, and duplicated messages.
------------------------------
Vinicius Campos
Analista de Pré Vendas
------------------------------