Concept
A welcome message is the first assistant message in a session. In ABL, write it inON_START. The runtime runs ON_START once, when it initializes the session.
The user sees the welcome only when both the start type and the channel allow it.
A channel that suppresses the welcome still runs the
SET and CALL actions in ON_START. The trace shows a dsl_on_start_skipped event.
If the agent has a FLOW, the kind of welcome decides what runs next:
- A top-level
RESPONDis a prelude. The runtime sends it, then runs the entry step in the same start. - A welcome chosen by
BRANCHESowns the startup turn. The entry step does not run during startup.
COMPLETE ends the session at startup. Use a GATHER step to ask the first question.
Keep the welcome short. Name the service and make the first action obvious.
Minimal working example
This agent sends a welcome, then asks for a support topic and waits for the answer.How it works
The runtime does these steps when it starts the session:- Loads memory and resolves the interaction language.
- Runs the
SETandCALLactions inON_START. - Renders the welcome and sends it when the start type and channel allow it.
- Writes the welcome to the assistant history, so later turns can see what the user already read.
- Runs the entry step.
ON_START runs once per session. A second message in the same session does not run it again.
Common variations
Add buttons or rich content
UseFORMATS for rich content and ACTIONS for buttons. RICH_CONTENT is an accepted alias for FORMATS.
Each button needs a handler. An ACTION_HANDLERS entry uses the button ID, which is the name after ->. In this example, each handler sets topic and moves to confirm_topic.
Send a welcome from an agent with no flow
An agent with noFLOW sends the welcome and then answers each message with reasoning. Use this form when the agent has no fixed first step.
Verification
- Open a web debug or Web SDK session. Confirm the welcome appears before you type.
- Open the trace. Confirm a
dsl_on_startevent, then adsl_respondevent withsource: on_start. - For a branch welcome, confirm
responseSource: on_start_branchon thedsl_respondevent. - Send a message through HTTP chat. Confirm the agent answers the message and does not send the welcome.
- On a suppressing channel, confirm the trace shows
dsl_on_start_skippedwith the reasonchannel_contract_no_on_start_proactive_delivery. - In the buttons example, select each button. Confirm the agent replies with the matching topic.
- Send a second message. Confirm the welcome does not repeat.
Production readiness checklist
- Test the welcome on every channel you deploy. Use the channel table to know which channels suppress it.
- Keep the welcome short enough for the smallest channel.
- Include a next step, not only a greeting.
- Keep the entry step waiting for input with
GATHER, or use an agent with no flow. - Add an
ACTION_HANDLERSentry for every button ID. - Keep required setup in
SETandCALL, not in the visible text. Suppressing channels and lazy starts drop the text. - Confirm the first flow step does not repeat the welcome.