Complete guide to creating campaigns with flow builder, nodes, edges, and advanced features
Campaign Creation Process
Campaigns are created through a visual flow builder that defines the messaging sequence. Each campaign consists of nodes (actions) connected by edges (flow paths).
Step 1: Basic Information
Campaign Name
Required field that identifies the campaign:
Displayed in campaign list, statistics, and audit logs
Used for filtering and searching
Best practice: Use descriptive names like “Welcome Sequence - Q1 2024”
Description
Optional field for campaign documentation:
Visible to team members in organization mode
Useful for explaining campaign goals and strategy
Not used in processing logic
Telegram Account
Required - Select which Telegram account sends messages:
Must have at least one connected account
Account must be healthy and connected
Campaign cannot send without valid account
Account Selection:
Dropdown shows all available accounts
Account health status displayed
Unhealthy accounts cannot be selected
Campaigns cannot send messages if the Telegram account is disconnected or unhealthy. Ensure account is connected before creating campaign.
Step 2: Flow Builder
The flow builder is a visual interface for creating campaign workflows. It uses a node-based system where each node represents an action or decision point.
Start Node
Every campaign begins with a START node that defines when execution begins.Start Type: Immediate
Campaign starts as soon as it’s launched
All executions begin processing immediately
next_execution_at set to now()
Start Type: Scheduled
Campaign starts at specific date/time
Requires scheduled_start_at (date + time)
Requires timezone (e.g., “America/Sao_Paulo”)
Worker checks scheduled campaigns every 30 seconds
Automatically transitions to active when time reached
Timezone Handling:
Scheduled time stored in UTC in database
Displayed in selected timezone in UI
Worker converts UTC to campaign timezone for comparison
Ensures campaigns start at correct local time
Node Types
SEND_MESSAGE Node
Sends a message to the lead.Message Content:
Plain text message
Supports dynamic tags and spintax
Optional media URL (image, video, document)
Message Processing:
Spintax processed first (variations resolved deterministically)
START (Scheduled: 2024-01-15 09:00 America/Sao_Paulo) → SEND_MESSAGE (Announcement) → END
Execution Flow:
Campaign status: scheduled
Worker checks every 30 seconds
When scheduled time reached: Status → active
Executions begin processing
SEND_MESSAGE: Send announcement
END: Mark execution completed
A/B Test Campaign
START → A/B SELECTION ├─ Variation A: SEND_MESSAGE (Version A) → END ├─ Variation B: SEND_MESSAGE (Version B) → END └─ Variation C: SEND_MESSAGE (Version C) → END
Execution Flow:
START: Initialize execution
A/B service selects variation based on contact_id hash
Execution uses selected variation’s flow
Variation tracked in execution (ab_variation field)
Statistics updated per variation
Best Practices
Test Flow First: Create draft, review flow visually, test with small audience
Use Descriptive Names: Make campaigns easy to identify
Set Correct Timezone: Ensure scheduled campaigns start at right time
Add Fallbacks: Always provide fallback values for tags: {firstName|Guest}
Respect Rate Limits: Space out messages with WAIT nodes
Monitor Responses: Enable pause on response to stop when lead engages
Use A/B Testing: Test variations to optimize performance
Document Strategy: Use description field to explain campaign goals
Common Mistakes
Missing START Node: Every campaign needs START node
No Telegram Account: Campaign cannot send without account
Invalid Timezone: Scheduled campaigns need valid IANA timezone
No Contacts: Campaign needs at least one contact
Condition Without Branches: Condition nodes need edges for all paths
Circular References: Avoid loops in flow (causes infinite execution)
Missing Fallbacks: Tags without fallbacks may break messages
Too Aggressive Rate Limiting: Sending too fast causes FloodWaitError
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Reach Documentation","colors":{"primary":"#30aabc","light":"#07C983","dark":"#03363d"},"logo":{"light":"https://reach.raysium.com/reach-wide-nobg.png","dark":"https://reach.raysium.com/reach-wide-nobg.png"},"favicon":"/favicon.svg","styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"raysium","hasAudioNarration":false,"actualSubdomain":"raysium","customDomains":["docs.reach.raysium.com"],"gitSource":{"type":"github","owner":"frebecchi","repo":"reach-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"issues":false},"entitlements":{},"buildId":"6ae941a407a05072f8f0c324:success","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"Telegram Accounts","count":7},{"language":"default","tag":"Campaigns","count":6},{"language":"default","tag":"Deals \u0026 Pipeline","count":5},{"language":"default","tag":"Leads \u0026 CRM","count":5},{"language":"default","tag":"Security \u0026 Limits","count":4},{"language":"default","tag":"Segments","count":4},{"language":"default","tag":"Companies","count":3},{"language":"default","tag":"Dashboard","count":3},{"language":"default","tag":"Getting Started","count":3},{"language":"default","tag":"Organizations","count":3}]},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"campaigns/creating-campaigns","slug":"/campaigns/creating-campaigns","pageMetadata":{"title":"Creating Campaigns","description":"Complete guide to creating campaigns with flow builder, nodes, edges, and advanced features","href":"/campaigns/creating-campaigns","hidden":false},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Complete guide to creating campaigns with flow builder, nodes, edges, and advanced features\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`campaign-creation-process`,children:`Campaign Creation Process`}),`\n`,_jsx(_components.p,{children:`Campaigns are created through a visual flow builder that defines the messaging sequence. Each campaign consists of nodes (actions) connected by edges (flow paths).`}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-basic-information`,children:`Step 1: Basic Information`}),`\n`,_jsx(Heading,{level:`3`,id:`campaign-name`,children:`Campaign Name`}),`\n`,_jsx(_components.p,{children:`Required field that identifies the campaign:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Displayed in campaign list, statistics, and audit logs`}),`\n`,_jsx(_components.li,{children:`Used for filtering and searching`}),`\n`,_jsx(_components.li,{children:`Best practice: Use descriptive names like “Welcome Sequence - Q1 2024”`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`description`,children:`Description`}),`\n`,_jsx(_components.p,{children:`Optional field for campaign documentation:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Visible to team members in organization mode`}),`\n`,_jsx(_components.li,{children:`Useful for explaining campaign goals and strategy`}),`\n`,_jsx(_components.li,{children:`Not used in processing logic`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`telegram-account`,children:`Telegram Account`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Required`}),` - Select which Telegram account sends messages:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Must have at least one connected account`}),`\n`,_jsx(_components.li,{children:`Account must be healthy and connected`}),`\n`,_jsx(_components.li,{children:`Campaign cannot send without valid account`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Account Selection:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Dropdown shows all available accounts`}),`\n`,_jsx(_components.li,{children:`Account health status displayed`}),`\n`,_jsx(_components.li,{children:`Unhealthy accounts cannot be selected`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Campaigns cannot send messages if the Telegram account is disconnected or unhealthy. Ensure account is connected before creating campaign.`})}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-flow-builder`,children:`Step 2: Flow Builder`}),`\n`,_jsx(_components.p,{children:`The flow builder is a visual interface for creating campaign workflows. It uses a node-based system where each node represents an action or decision point.`}),`\n`,_jsx(Heading,{level:`3`,id:`start-node`,children:`Start Node`}),`\n`,_jsx(_components.p,{children:`Every campaign begins with a START node that defines when execution begins.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Start Type: Immediate`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Campaign starts as soon as it’s launched`}),`\n`,_jsx(_components.li,{children:`All executions begin processing immediately`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`next_execution_at`}),` set to `,_jsx(_components.code,{children:`now()`})]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Start Type: Scheduled`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Campaign starts at specific date/time`}),`\n`,_jsxs(_components.li,{children:[`Requires `,_jsx(_components.code,{children:`scheduled_start_at`}),` (date + time)`]}),`\n`,_jsxs(_components.li,{children:[`Requires `,_jsx(_components.code,{children:`timezone`}),` (e.g., “America/Sao_Paulo”)`]}),`\n`,_jsx(_components.li,{children:`Worker checks scheduled campaigns every 30 seconds`}),`\n`,_jsxs(_components.li,{children:[`Automatically transitions to `,_jsx(_components.code,{children:`active`}),` when time reached`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Timezone Handling:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Scheduled time stored in UTC in database`}),`\n`,_jsx(_components.li,{children:`Displayed in selected timezone in UI`}),`\n`,_jsx(_components.li,{children:`Worker converts UTC to campaign timezone for comparison`}),`\n`,_jsx(_components.li,{children:`Ensures campaigns start at correct local time`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`node-types`,children:`Node Types`}),`\n`,_jsx(Heading,{level:`4`,id:`send_message-node`,children:`SEND_MESSAGE Node`}),`\n`,_jsx(_components.p,{children:`Sends a message to the lead.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Message Content:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Plain text message`}),`\n`,_jsx(_components.li,{children:`Supports dynamic tags and spintax`}),`\n`,_jsx(_components.li,{children:`Optional media URL (image, video, document)`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Message Processing:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Spintax processed first (variations resolved deterministically)`}),`\n`,_jsx(_components.li,{children:`Tags replaced with actual values (with fallbacks)`}),`\n`,_jsx(_components.li,{children:`Rate limiting checked`}),`\n`,_jsx(_components.li,{children:`Message sent via Telegram API`}),`\n`,_jsx(_components.li,{children:`Execution log created`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Dynamic Tags:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`{firstName}`}),`, `,_jsx(_components.code,{children:`{lastName}`}),`, `,_jsx(_components.code,{children:`{username}`}),`, `,_jsx(_components.code,{children:`{phoneNumber}`}),`, `,_jsx(_components.code,{children:`{groupName}`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`{cf-fieldName}`}),` for custom fields`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`{tag|fallback}`}),` for fallback values`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Spintax:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`{option1|option2|option3}`}),` for message variations`]}),`\n`,_jsx(_components.li,{children:`Same lead always gets same variation (deterministic)`}),`\n`,_jsx(_components.li,{children:`Supports nested spintax`}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`wait-node`,children:`WAIT Node`}),`\n`,_jsx(_components.p,{children:`Pauses execution for specified duration or until response.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Duration-Based Wait:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Specify days, hours, minutes`}),`\n`,_jsxs(_components.li,{children:[`Execution status: `,_jsx(_components.code,{children:`waiting`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`next_execution_at`}),` calculated: `,_jsx(_components.code,{children:`now() + duration`})]}),`\n`,_jsx(_components.li,{children:`Worker resumes execution when time reached`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Response-Based Wait:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Waits for lead to reply`}),`\n`,_jsx(_components.li,{children:`Configurable timeout (days/hours/minutes)`}),`\n`,_jsxs(_components.li,{children:[`Execution status: `,_jsx(_components.code,{children:`waiting`})]}),`\n`,_jsx(_components.li,{children:`If response detected: execution continues immediately`}),`\n`,_jsx(_components.li,{children:`If timeout reached: execution continues to next node`}),`\n`,_jsx(_components.li,{children:`If no timeout: waits indefinitely`}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`condition-node`,children:`CONDITION Node`}),`\n`,_jsx(_components.p,{children:`Branches flow based on evaluation result.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Condition Types:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Response check: Did lead reply?`}),`\n`,_jsx(_components.li,{children:`Variable check: Does variable match value?`}),`\n`,_jsx(_components.li,{children:`Custom condition: Evaluate expression`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Branching:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Edges define paths: `,_jsx(_components.code,{children:`condition: \"yes\"`}),` or `,_jsx(_components.code,{children:`condition: \"no\"`})]}),`\n`,_jsx(_components.li,{children:`Next node determined by condition result`}),`\n`,_jsx(_components.li,{children:`If no matching edge: execution stops (error)`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Edge Configuration:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Source: Condition node ID`}),`\n`,_jsx(_components.li,{children:`Target: Next node ID`}),`\n`,_jsxs(_components.li,{children:[`Condition: `,_jsx(_components.code,{children:`\"yes\"`}),` or `,_jsx(_components.code,{children:`\"no\"`}),` (or custom value)`]}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`end-node`,children:`END Node`}),`\n`,_jsx(_components.p,{children:`Marks execution as completed.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Completion Behavior:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Execution status: `,_jsx(_components.code,{children:`completed`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`completed_at`}),` timestamp set`]}),`\n`,_jsx(_components.li,{children:`Campaign checks if all executions done`}),`\n`,_jsxs(_components.li,{children:[`If all done: campaign status → `,_jsx(_components.code,{children:`completed`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`adding-nodes`,children:`Adding Nodes`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`From Node Palette:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Click ”+” button or node type icon`}),`\n`,_jsx(_components.li,{children:`Node added to flow canvas`}),`\n`,_jsx(_components.li,{children:`Auto-connected to previous node (if sequential)`}),`\n`,_jsx(_components.li,{children:`Configure node properties in sidebar`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Node Properties:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Each node type has specific properties`}),`\n`,_jsx(_components.li,{children:`SEND_MESSAGE: message text, media URL`}),`\n`,_jsx(_components.li,{children:`WAIT: duration or response timeout`}),`\n`,_jsx(_components.li,{children:`CONDITION: condition expression`}),`\n`,_jsxs(_components.li,{children:[`Properties saved in node `,_jsx(_components.code,{children:`data`}),` field`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`connecting-nodes`,children:`Connecting Nodes`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Sequential Connections:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Nodes processed in array order by default`}),`\n`,_jsx(_components.li,{children:`Edges created automatically for sequential flow`}),`\n`,_jsx(_components.li,{children:`Manual edges only needed for condition branches`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Conditional Branches:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Drag edge from condition node to target node`}),`\n`,_jsxs(_components.li,{children:[`Set edge `,_jsx(_components.code,{children:`condition`}),` to `,_jsx(_components.code,{children:`\"yes\"`}),` or `,_jsx(_components.code,{children:`\"no\"`})]}),`\n`,_jsx(_components.li,{children:`Multiple edges from same condition node allowed`}),`\n`,_jsx(_components.li,{children:`Each edge represents different branch path`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Edge Properties:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`source`}),`: Source node ID`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`target`}),`: Target node ID`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`condition`}),`: Branch condition (for condition nodes)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`label`}),`: Optional display label`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`flow-validation`,children:`Flow Validation`}),`\n`,_jsx(_components.p,{children:`Before saving, flow is validated:`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Required Checks:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Must have START node`}),`\n`,_jsx(_components.li,{children:`Must have at least one SEND_MESSAGE node`}),`\n`,_jsx(_components.li,{children:`All nodes must be connected (directly or via edges)`}),`\n`,_jsx(_components.li,{children:`Condition nodes must have edges for all branches`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Warnings:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Unconnected nodes`}),`\n`,_jsx(_components.li,{children:`Condition nodes without branches`}),`\n`,_jsx(_components.li,{children:`Empty message nodes`}),`\n`,_jsx(_components.li,{children:`Invalid wait durations`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-3-advanced-features`,children:`Step 3: Advanced Features`}),`\n`,_jsx(Heading,{level:`3`,id:`a/b-testing`,children:`A/B Testing`}),`\n`,_jsx(_components.p,{children:`Enable A/B testing to test multiple flow variations.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Configuration:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Toggle `,_jsx(_components.code,{children:`ab_test_enabled`}),` to enable`]}),`\n`,_jsx(_components.li,{children:`Create variations (A, B, C, etc.)`}),`\n`,_jsx(_components.li,{children:`Each variation has independent flow configuration`}),`\n`,_jsx(_components.li,{children:`Variations can be enabled/disabled independently`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Variation Selection:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Deterministic: Same lead always gets same variation`}),`\n`,_jsxs(_components.li,{children:[`Uses hash of `,_jsx(_components.code,{children:`contact_id`}),` as seed`]}),`\n`,_jsx(_components.li,{children:`Weighted distribution: Configure weights per variation`}),`\n`,_jsx(_components.li,{children:`Default: Uniform distribution (equal weights)`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Optimization:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Automatic optimization based on performance`}),`\n`,_jsx(_components.li,{children:`Compares response rates between variations`}),`\n`,_jsx(_components.li,{children:`Adjusts weights to favor better performers`}),`\n`,_jsxs(_components.li,{children:[`Threshold: `,_jsx(_components.code,{children:`ab_test_optimization_threshold`}),` (default: 0.1)`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Statistics:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Tracked per variation: sent, responses, response rate`}),`\n`,_jsx(_components.li,{children:`Updated every 5 minutes`}),`\n`,_jsx(_components.li,{children:`View via campaign statistics page`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`response-handling`,children:`Response Handling`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Pause on Response:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`pause_on_response`}),`: If `,_jsx(_components.code,{children:`true`}),`, execution stops immediately when response detected`]}),`\n`,_jsxs(_components.li,{children:[`If `,_jsx(_components.code,{children:`false`}),`, execution completes current node before stopping`]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`false`})]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Response Timeout:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`response_timeout_hours`}),`: Maximum wait time for response`]}),`\n`,_jsx(_components.li,{children:`If no response after timeout, execution continues`}),`\n`,_jsx(_components.li,{children:`Default: No timeout (waits indefinitely)`}),`\n`,_jsx(_components.li,{children:`Only applies to response-based WAIT nodes`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`timezone-configuration`,children:`Timezone Configuration`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Campaign Timezone:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Required for scheduled campaigns`}),`\n`,_jsx(_components.li,{children:`Used for converting scheduled time`}),`\n`,_jsx(_components.li,{children:`Format: IANA timezone (e.g., “America/Sao_Paulo”, “Europe/London”)`}),`\n`,_jsx(_components.li,{children:`Default: “UTC”`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Timezone Impact:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Scheduled start time displayed in campaign timezone`}),`\n`,_jsx(_components.li,{children:`Worker converts to UTC for storage`}),`\n`,_jsx(_components.li,{children:`Ensures campaigns start at correct local time`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-4-contact-selection`,children:`Step 4: Contact Selection`}),`\n`,_jsx(Heading,{level:`3`,id:`adding-contacts`,children:`Adding Contacts`}),`\n`,_jsx(_components.p,{children:`Contacts can be added during creation or after:`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`During Creation:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Select contacts from available list`}),`\n`,_jsx(_components.li,{children:`Filter by segment, custom fields, etc.`}),`\n`,_jsx(_components.li,{children:`Executions created immediately when campaign saved`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`After Creation:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Add contacts via campaign detail page`}),`\n`,_jsxs(_components.li,{children:[`Executions created with status `,_jsx(_components.code,{children:`pending`})]}),`\n`,_jsx(_components.li,{children:`For active campaigns: executions processed immediately`}),`\n`,_jsxs(_components.li,{children:[`For completed campaigns: campaign reactivated to `,_jsx(_components.code,{children:`active`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`contact-filtering`,children:`Contact Filtering`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Available Filters:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Segment membership`}),`\n`,_jsx(_components.li,{children:`Custom field values`}),`\n`,_jsx(_components.li,{children:`Tags`}),`\n`,_jsx(_components.li,{children:`Organization (in org mode)`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Execution Creation:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`One execution per contact`}),`\n`,_jsxs(_components.li,{children:[`Status: `,_jsx(_components.code,{children:`pending`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`next_execution_at`}),`: `,_jsx(_components.code,{children:`now()`}),` for immediate processing`]}),`\n`,_jsx(_components.li,{children:`Context initialized with contact data`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-5-save-and-launch`,children:`Step 5: Save and Launch`}),`\n`,_jsx(Heading,{level:`3`,id:`save-as-draft`,children:`Save as Draft`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Draft Status:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Campaign saved but not launched`}),`\n`,_jsxs(_components.li,{children:[`Status: `,_jsx(_components.code,{children:`draft`})]}),`\n`,_jsx(_components.li,{children:`Can be edited freely`}),`\n`,_jsx(_components.li,{children:`No executions processed`}),`\n`,_jsx(_components.li,{children:`Can launch later`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`save-and-launch`,children:`Save and Launch`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Launch Behavior:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Status changes to `,_jsx(_components.code,{children:`active`}),` (or `,_jsx(_components.code,{children:`scheduled`}),` if scheduled)`]}),`\n`,_jsx(_components.li,{children:`Executions created for all selected contacts`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`next_execution_at`}),` set to `,_jsx(_components.code,{children:`now()`}),` (or scheduled time)`]}),`\n`,_jsx(_components.li,{children:`Worker picks up executions on next cycle`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Launch Requirements:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Campaign must be enabled (`,_jsx(_components.code,{children:`enabled = true`}),`)`]}),`\n`,_jsx(_components.li,{children:`Telegram account must be connected and healthy`}),`\n`,_jsx(_components.li,{children:`At least one contact selected`}),`\n`,_jsx(_components.li,{children:`Flow must be valid`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`flow-examples`,children:`Flow Examples`}),`\n`,_jsx(Heading,{level:`3`,id:`simple-sequence`,children:`Simple Sequence`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`START → SEND_MESSAGE (Welcome) → WAIT (24 hours) → SEND_MESSAGE (Follow-up) → END`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Execution Flow:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`START: Initialize execution`}),`\n`,_jsx(_components.li,{children:`SEND_MESSAGE: Send welcome message`}),`\n`,_jsxs(_components.li,{children:[`WAIT: Set `,_jsx(_components.code,{children:`next_execution_at`}),` to 24 hours later`]}),`\n`,_jsx(_components.li,{children:`Worker resumes after 24 hours`}),`\n`,_jsx(_components.li,{children:`SEND_MESSAGE: Send follow-up message`}),`\n`,_jsx(_components.li,{children:`END: Mark execution completed`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`conditional-flow`,children:`Conditional Flow`}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`START → SEND_MESSAGE (Initial) → CONDITION (Response?) `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ├─ Yes → SEND_MESSAGE (Thank you) → END`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` └─ No → WAIT (48 hours) → SEND_MESSAGE (Reminder) → END`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Execution Flow:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`START: Initialize execution`}),`\n`,_jsx(_components.li,{children:`SEND_MESSAGE: Send initial message`}),`\n`,_jsx(_components.li,{children:`CONDITION: Check for response`}),`\n`,_jsx(_components.li,{children:`If response: Branch to “Yes” path → Send thank you → END`}),`\n`,_jsx(_components.li,{children:`If no response: Branch to “No” path → Wait 48h → Send reminder → END`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Edge Configuration:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Edge 1: `,_jsx(_components.code,{children:`source: condition_node_id`}),`, `,_jsx(_components.code,{children:`target: thank_you_node_id`}),`, `,_jsx(_components.code,{children:`condition: \"yes\"`})]}),`\n`,_jsxs(_components.li,{children:[`Edge 2: `,_jsx(_components.code,{children:`source: condition_node_id`}),`, `,_jsx(_components.code,{children:`target: wait_node_id`}),`, `,_jsx(_components.code,{children:`condition: \"no\"`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`scheduled-campaign`,children:`Scheduled Campaign`}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`START (Scheduled: 2024-01-15 09:00 America/Sao_Paulo) `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` → SEND_MESSAGE (Announcement) → END`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Execution Flow:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Campaign status: `,_jsx(_components.code,{children:`scheduled`})]}),`\n`,_jsx(_components.li,{children:`Worker checks every 30 seconds`}),`\n`,_jsxs(_components.li,{children:[`When scheduled time reached: Status → `,_jsx(_components.code,{children:`active`})]}),`\n`,_jsx(_components.li,{children:`Executions begin processing`}),`\n`,_jsx(_components.li,{children:`SEND_MESSAGE: Send announcement`}),`\n`,_jsx(_components.li,{children:`END: Mark execution completed`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`a/b-test-campaign`,children:`A/B Test Campaign`}),`\n`,_jsx(CodeBlock,{numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`START → A/B SELECTION`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ├─ Variation A: SEND_MESSAGE (Version A) → END`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ├─ Variation B: SEND_MESSAGE (Version B) → END`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` └─ Variation C: SEND_MESSAGE (Version C) → END`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Execution Flow:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`START: Initialize execution`}),`\n`,_jsxs(_components.li,{children:[`A/B service selects variation based on `,_jsx(_components.code,{children:`contact_id`}),` hash`]}),`\n`,_jsx(_components.li,{children:`Execution uses selected variation’s flow`}),`\n`,_jsxs(_components.li,{children:[`Variation tracked in execution (`,_jsx(_components.code,{children:`ab_variation`}),` field)`]}),`\n`,_jsx(_components.li,{children:`Statistics updated per variation`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best Practices`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Test Flow First`}),`: Create draft, review flow visually, test with small audience`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Use Descriptive Names`}),`: Make campaigns easy to identify`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Set Correct Timezone`}),`: Ensure scheduled campaigns start at right time`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Add Fallbacks`}),`: Always provide fallback values for tags: `,_jsx(_components.code,{children:`{firstName|Guest}`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Respect Rate Limits`}),`: Space out messages with WAIT nodes`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Monitor Responses`}),`: Enable pause on response to stop when lead engages`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Use A/B Testing`}),`: Test variations to optimize performance`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Document Strategy`}),`: Use description field to explain campaign goals`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`common-mistakes`,children:`Common Mistakes`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Missing START Node`}),`: Every campaign needs START node`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No Telegram Account`}),`: Campaign cannot send without account`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Invalid Timezone`}),`: Scheduled campaigns need valid IANA timezone`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No Contacts`}),`: Campaign needs at least one contact`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Condition Without Branches`}),`: Condition nodes need edges for all paths`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Circular References`}),`: Avoid loops in flow (causes infinite execution)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Missing Fallbacks`}),`: Tags without fallbacks may break messages`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Too Aggressive Rate Limiting`}),`: Sending too fast causes FloodWaitError`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Creating Campaigns","description":"Complete guide to creating campaigns with flow builder, nodes, edges, and advanced features","href":"/campaigns/creating-campaigns","hidden":false}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Campaign Creation Process","slug":"campaign-creation-process","depth":2,"children":[]},{"title":"Step 1: Basic Information","slug":"step-1-basic-information","depth":2,"children":[{"title":"Campaign Name","slug":"campaign-name","depth":3,"children":[]},{"title":"Description","slug":"description","depth":3,"children":[]},{"title":"Telegram Account","slug":"telegram-account","depth":3,"children":[]}]},{"title":"Step 2: Flow Builder","slug":"step-2-flow-builder","depth":2,"children":[{"title":"Start Node","slug":"start-node","depth":3,"children":[]},{"title":"Node Types","slug":"node-types","depth":3,"children":[]},{"title":"SEND_MESSAGE Node","slug":"send_message-node","depth":4,"children":[]},{"title":"WAIT Node","slug":"wait-node","depth":4,"children":[]},{"title":"CONDITION Node","slug":"condition-node","depth":4,"children":[]},{"title":"END Node","slug":"end-node","depth":4,"children":[]},{"title":"Adding Nodes","slug":"adding-nodes","depth":3,"children":[]},{"title":"Connecting Nodes","slug":"connecting-nodes","depth":3,"children":[]},{"title":"Flow Validation","slug":"flow-validation","depth":3,"children":[]}]},{"title":"Step 3: Advanced Features","slug":"step-3-advanced-features","depth":2,"children":[{"title":"A/B Testing","slug":"a/b-testing","depth":3,"children":[]},{"title":"Response Handling","slug":"response-handling","depth":3,"children":[]},{"title":"Timezone Configuration","slug":"timezone-configuration","depth":3,"children":[]}]},{"title":"Step 4: Contact Selection","slug":"step-4-contact-selection","depth":2,"children":[{"title":"Adding Contacts","slug":"adding-contacts","depth":3,"children":[]},{"title":"Contact Filtering","slug":"contact-filtering","depth":3,"children":[]}]},{"title":"Step 5: Save and Launch","slug":"step-5-save-and-launch","depth":2,"children":[{"title":"Save as Draft","slug":"save-as-draft","depth":3,"children":[]},{"title":"Save and Launch","slug":"save-and-launch","depth":3,"children":[]}]},{"title":"Flow Examples","slug":"flow-examples","depth":2,"children":[{"title":"Simple Sequence","slug":"simple-sequence","depth":3,"children":[]},{"title":"Conditional Flow","slug":"conditional-flow","depth":3,"children":[]},{"title":"Scheduled Campaign","slug":"scheduled-campaign","depth":3,"children":[]},{"title":"A/B Test Campaign","slug":"a/b-test-campaign","depth":3,"children":[]}]},{"title":"Best Practices","slug":"best-practices","depth":2,"children":[]},{"title":"Common Mistakes","slug":"common-mistakes","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"raysium","siteName":"Reach Documentation","title":"Creating Campaigns - Reach Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2025-11-10T16:24:23.652Z","originalFileLocation":"campaigns/creating-campaigns.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Complete guide to creating campaigns with flow builder, nodes, edges, and advanced features\">\u003cmeta data-mint-head name=\"application-name\" content=\"Reach Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/raysium/3OeB62L91NFLnWQX/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/raysium/3OeB62L91NFLnWQX/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/raysium/3OeB62L91NFLnWQX/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/raysium/3OeB62L91NFLnWQX/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/raysium/3OeB62L91NFLnWQX/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/raysium/3OeB62L91NFLnWQX/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/raysium/3OeB62L91NFLnWQX/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/raysium/3OeB62L91NFLnWQX/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/raysium/3OeB62L91NFLnWQX/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Creating Campaigns - Reach Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Complete guide to creating campaigns with flow builder, nodes, edges, and advanced features\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Reach Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.reach.raysium.com/campaigns/creating-campaigns\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://raysium.mintlify.site/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=Creating+Campaigns\u0026amp;description=Complete+guide+to+creating+campaigns+with+flow+builder%2C+nodes%2C+edges%2C+and+advanced+features\u0026amp;theme=fb30119d8a28c56810e750bd\u0026amp;signature=5d9053b937f90d5d5889ad74c6c00b3adcb161c7532198dc68a59e3ae8bfc276\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Creating Campaigns - Reach Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Complete guide to creating campaigns with flow builder, nodes, edges, and advanced features\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://raysium.mintlify.site/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=Creating+Campaigns\u0026amp;description=Complete+guide+to+creating+campaigns+with+flow+builder%2C+nodes%2C+edges%2C+and+advanced+features\u0026amp;theme=fb30119d8a28c56810e750bd\u0026amp;signature=5d9053b937f90d5d5889ad74c6c00b3adcb161c7532198dc68a59e3ae8bfc276\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/raysium/3OeB62L91NFLnWQX/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Reach Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#30aabc\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.reach.raysium.com/campaigns/creating-campaigns\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/campaigns/creating-campaigns.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.reach.raysium.com/#organization\",\"name\":\"Reach Documentation\",\"url\":\"https://docs.reach.raysium.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://reach.raysium.com/reach-wide-nobg.png\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.reach.raysium.com#website\",\"name\":\"Reach Documentation\",\"url\":\"https://docs.reach.raysium.com\",\"publisher\":{\"@id\":\"https://docs.reach.raysium.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.reach.raysium.com/campaigns/creating-campaigns#webpage\",\"url\":\"https://docs.reach.raysium.com/campaigns/creating-campaigns\",\"name\":\"Creating Campaigns\",\"description\":\"Complete guide to creating campaigns with flow builder, nodes, edges, and advanced features\",\"dateModified\":\"2025-11-10T16:24:23.652Z\",\"isPartOf\":{\"@id\":\"https://docs.reach.raysium.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.reach.raysium.com/campaigns/creating-campaigns#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.reach.raysium.com/campaigns/creating-campaigns#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Campaigns\",\"item\":\"https://docs.reach.raysium.com/campaigns/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creating Campaigns\",\"item\":\"https://docs.reach.raysium.com/campaigns/creating-campaigns\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.reach.raysium.com/campaigns/creating-campaigns#article\",\"headline\":\"Creating Campaigns\",\"name\":\"Creating Campaigns\",\"description\":\"Complete guide to creating campaigns with flow builder, nodes, edges, and advanced features\",\"url\":\"https://docs.reach.raysium.com/campaigns/creating-campaigns\",\"mainEntityOfPage\":{\"@id\":\"https://docs.reach.raysium.com/campaigns/creating-campaigns#webpage\"},\"dateModified\":\"2025-11-10T16:24:23.652Z\",\"publisher\":{\"@id\":\"https://docs.reach.raysium.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.reach.raysium.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Reach Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Reach Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/campaigns/creating-campaigns.md","siteName":"Reach Documentation","nav":{"global":null,"groups":[{"group":"Getting Started","pages":[{"title":"Welcome to Reach","href":"/index"},{"title":"Getting Started with Reach","href":"/getting-started/overview"},{"title":"Authentication \u0026 Account Setup","href":"/getting-started/authentication"}]},{"group":"Dashboard","pages":[{"title":"Dashboard Overview","href":"/dashboard/overview"},{"title":"Understanding Dashboard Metrics","href":"/dashboard/metrics"},{"title":"Dashboard Charts \u0026 Visualizations","href":"/dashboard/charts"}]},{"group":"Campaigns","pages":[{"title":"Campaigns Overview","description":"Comprehensive guide to understanding campaigns, their architecture, and processing logic","href":"/campaigns/overview"},{"title":"Creating Campaigns","href":"/campaigns/creating-campaigns"},{"title":"Managing Campaigns","description":"Complete guide to managing campaigns, permissions, editing, and operations","href":"/campaigns/managing-campaigns"},{"title":"Campaign Statuses","href":"/campaigns/campaign-statuses"},{"title":"Bulk Campaign Operations","href":"/campaigns/bulk-operations"},{"title":null,"href":"/campaigns/campaigns-beta"}]},{"group":"Leads \u0026 CRM","pages":[{"title":"Leads Overview","href":"/leads/overview"},{"title":"Managing Leads","href":"/leads/managing-leads"},{"title":"Crawling","href":"/leads/crawling"},{"title":"CRM View \u0026 Lead Details","href":"/leads/crm-view"},{"title":"Custom Fields","href":"/leads/custom-fields"},{"title":null,"href":"/leads/leads-beta"}]},{"group":"Companies","pages":[{"title":null,"href":"/companies/overview"},{"title":null,"href":"/companies/managing-companies"},{"title":null,"href":"/companies/company-intelligence"}]},{"group":"Deals \u0026 Pipeline","pages":[{"title":"Deals Overview","href":"/deals/overview"},{"title":"Deal Pipeline Management","href":"/deals/pipeline"},{"title":"Managing Deals","href":"/deals/managing-deals"},{"title":"Deal Fields \u0026 Pipeline Configuration","href":"/deals/deal-fields"},{"title":"Deal Values","href":"/deals/deal-values"}]},{"group":"Segments","pages":[{"title":"Segments Overview","href":"/segments/overview"},{"title":"Creating Segments","href":"/segments/creating-segments"},{"title":"Segment Rules Reference","href":"/segments/segment-rules"},{"title":"Managing Segments","href":"/segments/managing-segments"}]},{"group":"Sequences","pages":[{"title":"Sequences Overview","href":"/sequences/overview"},{"title":"Creating Sequences","href":"/sequences/creating-sequences"},{"title":"Managing Sequences","href":"/sequences/managing-sequences"}]},{"group":"Telegram Accounts","pages":[{"title":"Telegram Accounts Overview","href":"/accounts/overview"},{"title":"Adding Telegram Accounts","href":"/accounts/adding-accounts"},{"title":"Phone Number Authentication","href":"/accounts/phone-authentication"},{"title":"QR Code Authentication","href":"/accounts/qr-authentication"},{"title":"Managing Telegram Accounts","href":"/accounts/managing-accounts"},{"title":null,"href":"/accounts/warmup-accounts"},{"title":"Proxy System","href":"/accounts/proxy-system"}]},{"group":"Security \u0026 Limits","pages":[{"title":"Security \u0026 Rate Limits","href":"/security/overview"},{"title":"Rate Limiting","href":"/security/rate-limiting"},{"title":"Security Best Practices","href":"/security/best-practices"},{"title":null,"href":"/security/circuit-breakers"}]},{"group":"Settings \u0026 Admin","pages":[{"title":null,"href":"/settings/overview"},{"title":null,"href":"/settings/ai-agents"},{"title":null,"href":"/settings/user-management"}]},{"group":"Reports","pages":[{"title":null,"href":"/reports/organization-reports"},{"title":null,"href":"/reports/analytics"}]},{"group":"Organizations","pages":[{"title":"Organizations Overview","href":"/organizations/overview"},{"title":"Organization Permissions","href":"/organizations/permissions"},{"title":"Managing Organizations","href":"/organizations/managing-organizations"}]}]},"basePath":"","title":"Creating Campaigns - Reach Documentation","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}