🇬🇧 EN
🇮🇹 IT

5.1 Questionnaire Node Reference

Every step inside a Flusso questionnaire is a node. This reference documents all available node types: what each one does, how to configure it, and what role it plays in a respondent's session. Nodes are connected by edges on the graph canvas to define the flow a respondent follows.

💬
Question
Ask a question and branch on the answer
Completion
End the session with a success or failure message
🌐
HTTP
Fire an outbound HTTP request as a side-effect
Trigger Flow
Launch a Flusso Workflow with collected answers
🪝
Webhook
Send a webhook notification to an external URL

Question

The core building block of every questionnaire. A Question node presents a prompt to the respondent and waits for their reply before advancing the session to the next node. The node's answer type determines what kind of input is accepted and how many output ports the node exposes on the canvas.

FieldDescription
Question text The prompt shown to the respondent. Plain text only.
Answer type Controls what kind of reply is accepted and how output ports are generated. See the Answer Types table below.
Options (Single Choice and Single Choice + Other only) The list of choices presented to the respondent. Each option has a key (used internally as the port handle and answer identifier) and a label (shown to the respondent).

Answer Types and Output Ports

Each answer type generates a different set of output ports on the right edge of the node. Connect each output port to the node the session should advance to when that answer is given.

Answer type Output ports Notes
Boolean (Yes / No) Yes, No Two fixed ports. Connect each to a different branch of your graph. When delivered via WhatsApp, Flusso accepts common affirmative/negative phrases and, if ambiguous, falls back to the configured AI provider.
Single Choice One port per option Define the list of choices. Each option becomes a named output port using the option's key. When delivered via WhatsApp, the respondent can reply with the option number, the label text, or a paraphrase — the AI classifier resolves ambiguous replies.
Single Choice + Other One port per option, plus Other Same as Single Choice but adds an extra Other port. If the respondent types a reply that does not match any listed option and AI classification cannot map it to a known choice, the session routes through Other.
Free Text Answer A single output port. The respondent types a free-form reply which is stored as-is. The AI classifier is not involved — all replies pass through the Answer port regardless of content.
Numeric Rating One port per value (up to 10), or Answer The respondent selects a numeric value from a configurable range. Configure Min, Max, and Step to define the scale (e.g. 1–5, 0–10). If the range produces 10 or fewer values, each value gets its own output port for per-value branching. If more than 10, a single Answer port is used instead. In the web embed, values are displayed as a horizontal row of buttons.
Multi-Select Answer The respondent selects one or more options from a list of checkboxes. Configure Min Selections (default 1) and optionally Max Selections to constrain how many options can be chosen. A single Answer port is used — the selected keys are stored as a comma-separated string. On WhatsApp, a "Done" button confirms the selection.
Validated Text Answer A single output port. Like Free Text, but the input is validated against a specific format: Email, Phone, or URL. Invalid entries are rejected with a validation error (you can set a custom error message). The web embed shows a format hint below the input field.
Likert Scale One port per scale point The respondent chooses from a set of labelled scale points (e.g. "Strongly Disagree" through "Strongly Agree"). Define each point with a key and label. Each point becomes a named output port, enabling per-sentiment branching. In the web embed, points are displayed as a horizontal row.
WhatsApp answer matching: For Boolean, Single Choice, and Single Choice + Other questions, incoming WhatsApp replies are first matched by exact text or numeric index (e.g. "1", "2"). Only when the reply cannot be matched is the configured AI provider called to classify the intent. If no AI provider is configured and the reply is ambiguous, Flusso sends a clarification prompt asking the respondent to choose again.

Attachments

Each question node can have up to 5 attachments — images, PDFs, or documents. Attachments are uploaded from the question node's config drawer in the editor. In the web embed, image attachments appear as a horizontal gallery above the answer controls, while non-image files (PDFs, docs) are shown as downloadable file cards with name and size. On WhatsApp, attachments are not sent inline — respondents access them via the web embed URL.

DetailValue
Max attachments per node5
Max file size10 MB
Allowed formatsPDF, JPG, JPEG, PNG, GIF, WebP, TXT, DOC, DOCX
StorageFiles are stored privately on the server and served through a public token-gated endpoint. No external file storage is required.
CleanupWhen a node or questionnaire is deleted, its attachment files are automatically removed from storage.

FAQs

Each question node can include up to 20 FAQ entries — pairs of question and answer text that help respondents understand what is being asked. FAQs are added from the question node's config drawer in the editor.


Completion

A terminal node that ends the respondent's session. Every branch in a questionnaire graph must end at a Completion node — a session cannot advance past this point. The node is rendered in green on the canvas.

FieldDescription
Status Success or Failure. Controls the icon and visual treatment shown to the respondent when the session ends.
Success message Text displayed to the respondent when the session ends with Success status.
Failure message Optional. Shown when status is Failure instead of the success message.
Redirect URL Optional. After displaying the completion message, the web embed automatically redirects the respondent's browser to this URL. Has no effect for WhatsApp delivery.

Google Sheets Export

Each completion node can optionally export the respondent's answers to a Google Sheets spreadsheet when the session completes. This is configured in the completion node's config drawer under the Google Sheets Export section.

Setup

  1. Connect Google Drive In the completion node drawer, click Connect Google Drive. A Google OAuth consent screen opens in a new tab. Sign in and grant access. When you return to the editor, the connection status updates automatically showing the connected email.
  2. Enable the export Check Enable export on completion.
  3. Enter the Spreadsheet ID Copy the ID from your Google Sheets URL — it's the long string between /spreadsheets/d/ and /edit.
  4. Choose a mode Select Auto or Manual (see below).

Export Modes

ModeDescription
Auto Automatically exports all answers as a single row. Columns correspond to question nodes in graph traversal order. Headers are the question text (or node key if empty). Three metadata columns are appended: Session ID, Channel, and Completed At. On the first export to an empty sheet, a header row is inserted automatically before the data row.
Manual Uses a custom JSON template to define exactly which values to export. The template is a JSON array of values with {{ "{{" }}answer.KEY{{ "}}" }} placeholders that are resolved against the session's collected answers. Use this mode when you need a specific column layout or want to include calculated values.
Prerequisites: Google Sheets export requires a Google OAuth connection configured in Settings → Integrations (Client ID and Client Secret). The OAuth token is scoped to the questionnaire, not the workflow — each questionnaire has its own Google connection.
Tip: To track which respondents fully completed the questionnaire (versus those who abandoned mid-way), place a Trigger Flow node immediately before the Completion node. The workflow trigger fires only when the respondent reaches the end — giving you a reliable completion signal in your workflow run history.

HTTP

Makes an outbound HTTP request when the session reaches this node. The request fires in the background — the respondent is not blocked waiting for the response. Use this node to push session data to external APIs, CRMs, or webhooks mid-questionnaire. The node is rendered in amber on the canvas.

FieldDescription
URL The endpoint to call. Must be a fully qualified URL (include https://).
Method GET, POST, PUT, PATCH, or DELETE.
Body JSON body sent with the request (applicable for POST/PUT/PATCH). You can reference answers collected earlier in the session using variable syntax: {{ answers.question_key }}.
Fire-and-forget: The HTTP node does not expose an output port for the response — the session continues to the next connected node immediately. If you need conditional branching based on a response, use a Trigger Flow node to hand off to a full Workflow instead.

Trigger Flow

Fires a Flusso Workflow when the session reaches this node. Use this to hand off data collected during the questionnaire — such as answers, respondent metadata, or session state — into a full automation workflow for processing, enrichment, or notification. The node is rendered in purple on the canvas.

FieldDescription
Workflow ID The ID of the Flusso workflow to trigger. The target workflow must have a Manual Trigger node as its entry point so it can accept an external payload.
Payload Mapping Maps questionnaire answer keys to workflow input variable names. Each row defines one mapping: answer keyworkflow variable name. The mapped values are available in the triggered workflow as {{ trigger.output.variable_name }}.
Completion tracking: Placing a Trigger Flow node just before a Completion node is the recommended pattern for detecting when a respondent finishes the questionnaire. The workflow run history then serves as the completion log.

Webhook

Sends an HTTP POST notification to an external URL when the session reaches this node. Similar to the HTTP node but specifically designed for webhook delivery patterns — it always sends a POST with a configurable JSON payload. The node is rendered in pink on the canvas.

FieldDescription
Webhook URL The destination URL for the POST request.
Payload JSON body to send. You can embed session answers using variable syntax: {{ answers.question_key }}.
HTTP vs Webhook node: Both nodes fire outbound requests without blocking the respondent. The HTTP node supports all methods (GET, PUT, PATCH, DELETE) and is suited for REST API calls. The Webhook node is a simpler POST-only option suited for notification endpoints and integration webhooks.