Concept
When aFLOW step infers a value, it can store the value at once or hold it until the customer agrees. The property infer_confirm decides. Its default is true, so the platform asks unless you turn it off.
Choose
true for a value that triggers a payment, a booking, or a change to a record. Choose false for a low-risk value that the customer clearly stated. See Infer values from conversation context for how inference finds the value.
Confirmation exists only in FLOW steps. A reasoning agent applies no confirmation.
Minimal working example
A trip assistant infers the destination and party size from the first answer. The destination needs confirmation. The party size is stored at once.purposeis asked in the first step.destinationandparty_sizeare inferred from earlier customer messages. The destination waits for confirmation. The party size does not.
How it works
- The
collect_tripstep starts and infers values from earlier messages. - The runtime writes the
party_sizevalue directly, becauseinfer_confirmisfalse. - The runtime holds the
destinationvalue as pending. The pending value is not visible toCOMPLETE, conditions, or later steps. - The step asks one confirmation question for all pending values, for example: “I’ll assume destination: Lisbon. Does that work?”
- The customer answers. The runtime reads the answer as one of three outcomes.
Rules that apply:
- The confirmation covers all pending fields at once. The customer cannot accept one and decline another.
- A typed correction after a decline, such as “No, Rome”, is read as the answer to the same field. A bare “no” asks the normal prompt.
- The confirmation also accepts a button action whose ID starts with
inference_confirmation, such asinference_confirmation.acceptandinference_confirmation.decline. - A field marked
sensitiveshows its value through the sensitive display rules in the confirmation text. - The confirmation text is fixed. You cannot change its wording in ABL.
- An accepted value is written as a system write, not as customer input. A field with
satisfied_by: [user_input]rejects it. The rejection is silent for the customer, andinference_acceptedlists no fields. Addsystemtosatisfied_by, or leavesatisfied_byoff a field that uses inference.
Common variations
Store without asking
Setinfer_confirm: false on every inferred field when the customer clearly stated the values. See Infer values from conversation context.
Mix confirmed and direct values
Use both settings in one step, as the example does. The runtime stores the direct values first. It then asks one question for the pending ones.Add your own confirmation step
Useinfer_confirm: false and add a FLOW step that restates the value and asks for a yes or no. Choose this when you need custom wording or a per-field decision.
Verification
- Run the validator. Expect no errors and no warnings.
- In the first turn, say “A trip to Lisbon for 3 people”. Expect the agent to ask “I’ll assume destination: Lisbon. Does that work?” and not ask for the party size.
- Answer “yes”. Expect the final reply to include the destination.
- Repeat and answer “no, Rome”. Expect the agent to use Rome.
- Repeat and answer “no”. Expect the agent to ask “Where are you travelling to?”.
- In the trace, open the
inference_confirmation_interactionevents.decisionshowsaccept,decline,defer, orunresolved. - Check the
inference_acceptedandinference_rejectedevents for the field names.
Production readiness checklist
- Each inferred field that has a business effect keeps
infer_confirm: true. - Each field sets
infer_confirmon purpose, not by default. - The step has a normal
promptfor each field, because a decline returns to it. - Tests cover accept, decline, decline with a correction, and an unclear answer.
- Buttons for the confirmation use the action IDs
inference_confirmation.acceptandinference_confirmation.decline, if your channel shows buttons. - Sensitive fields follow Collect sensitive or PII fields safely.
Common mistakes
Troubleshooting
Related articles: