85
Total
43
High
37
Medium
1
Low

Chatbot Flows

IDTest CasePreconditionsStepsExpected ResultPriority
AUTO-001 List all flows Logged in as Agent, org has 3 active flows 1. Navigate to /automation?tab=flows 2. Wait for page load List of 3 flows appears in descending creation order. No error message shown High
AUTO-002 Create flow with keyword trigger Logged in as Agent with manage_automations permission, at least one WhatsApp account connected 1. Navigate to /automation?tab=flows 2. Click 'New Flow' button 3. Enter name "Pricing Flow" 4. Select trigger type "Keyword" 5. Enter keyword "pricing" 6. Click Save Modal closes. Flow appears in list with status "Draft". Success toast shows "Flow created" High
AUTO-003 Create flow with intent trigger and examples Logged in as Agent with manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Support Flow" 4. Select trigger type "Intent (AI)" 5. Select predefined intent "support_request" 6. Enter examples in text area 7. Click Save Flow created with trigger_intent="support_request" and trigger_intent_examples populated. Flow appears in list High
AUTO-004 Create flow with custom intent Logged in as Agent with manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Select trigger type "Intent (AI)" 4. Select "Custom Intent" from dropdown 5. Enter intent name "refund_request" 6. Enter examples 7. Click Save Flow created with custom intent label. List shows the flow High
AUTO-005 Create flow with new_conversation trigger Logged in as Agent with manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Welcome Flow" 4. Select trigger type "New Conversation" 5. Click Save Flow created with trigger_type="new_conversation". No keyword field required or shown High
AUTO-006 Create flow with new_contact trigger Logged in as Agent with manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Onboarding Flow" 4. Select trigger type "New Contact" 5. Click Save Flow created with trigger_type="new_contact" High
AUTO-007 Create flow with all_messages trigger Logged in as Agent with manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Catch-All Flow" 4. Select trigger type "All Messages" 5. Click Save Flow created with trigger_type="all_messages" High
AUTO-008 Edit flow name and description Logged in as Agent with manage_automations permission, "Pricing Flow" exists as draft 1. Navigate to /automation?tab=flows 2. Click "Pricing Flow" row 3. Click Edit button 4. Change name to "Pricing & Plans Flow" 5. Change description to "Handles pricing queries" 6. Click Save Edit modal closes. Flow list shows updated name. Success toast displays High
AUTO-009 Edit flow trigger keyword Logged in as Agent, "Pricing Flow" exists with keyword "pricing" 1. Navigate to /automation?tab=flows 2. Click "Pricing Flow" 3. Click Edit 4. Change keyword from "pricing" to "price, cost" 5. Click Save Flow updated. Trigger keyword now accepts multiple comma-separated keywords High
AUTO-010 Delete flow with confirmation Logged in as Agent with manage_automations permission, "Test Flow" exists 1. Navigate to /automation?tab=flows 2. Click trash icon on "Test Flow" row 3. Confirmation modal appears asking "Delete flow 'Test Flow'?" 4. Click "Delete" button Flow removed from list immediately. Success toast shows "Flow deleted". API returns 204 High
AUTO-011 Cancel delete operation Logged in as Agent, "Test Flow" exists 1. Navigate to /automation?tab=flows 2. Click trash icon 3. Confirmation modal appears 4. Click "Cancel" button Modal closes without deleting. Flow still in list Medium
AUTO-012 Open flow builder Logged in as Agent, "Pricing Flow" exists as draft 1. Navigate to /automation?tab=flows 2. Click on "Pricing Flow" row (not edit icon) 3. Wait for flow builder to load Flow builder canvas opens showing trigger node. Flow definition is loaded. Back arrow visible in header High
AUTO-013 Save flow changes in builder Logged in as Agent, flow builder is open with a flow 1. Click on empty canvas to add new Send Message node 2. Enter message text "Hello!" 3. Connect trigger node to message node 4. Click Save button in builder header Success toast shows "Flow saved". Updated definition persisted. Flow shows as "Active" or "Draft" depending on state High
AUTO-014 Cannot create flow without manage_automations permission Logged in as Agent without manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' button Button disabled or not visible. No modal opens Medium
AUTO-015 Cannot edit flow without manage_automations permission Logged in as Agent without manage_automations permission, flow exists 1. Navigate to /automation?tab=flows 2. Click flow row 3. Click Edit button Edit button disabled or not visible. No modal opens Medium
AUTO-016 Cannot delete flow without manage_automations permission Logged in as Agent without manage_automations permission 1. Navigate to /automation?tab=flows 2. Hover over flow row Trash icon not visible or disabled. Click has no effect Medium
AUTO-017 Create flow with specific WhatsApp account Logged in as Agent, 2 WhatsApp accounts connected 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Account-Specific Flow" 4. Select trigger type "Keyword" 5. Select first WhatsApp account from dropdown 6. Enter keyword 7. Click Save Flow created with whatsapp_account_id set to selected account. Shown in account filter if present High
AUTO-018 Create flow for all WhatsApp accounts Logged in as Agent, multiple accounts connected 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Leave WhatsApp account selection empty or select "All Accounts" 4. Enter required fields 5. Click Save Flow created with whatsapp_account_id=null. Flow triggers on any connected account High
AUTO-019 Missing required field - flow name Logged in as Agent 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Leave name empty 4. Click Save Error text appears under name field: "Name is required". Save button disabled. Modal stays open Medium
AUTO-020 Missing required field - trigger type and keyword Logged in as Agent 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Test" 4. Leave trigger_type as "Keyword" but leave keyword empty 5. Click Save Error text: "Keyword is required for keyword trigger". Save button disabled Medium
AUTO-021 Flow list empty state Logged in as Agent, no flows exist 1. Navigate to /automation?tab=flows Empty state message: "No flows yet. Create your first flow to get started." Create button visible Medium
AUTO-022 Flow list search/filter (future enhancement) Logged in as Agent, 5 flows exist 1. Navigate to /automation?tab=flows 2. Observe list Flows displayed in reverse creation order (newest first). No search box present currently Low
AUTO-023 Activate/deactivate flow toggle Logged in as Agent, "Pricing Flow" exists as draft 1. Navigate to /automation?tab=flows 2. Locate "Pricing Flow" row 3. Click toggle or "Activate" button Flow status changes to "Active". Toggle state reflected in list. Success toast: "Flow activated" Medium
AUTO-024 Deactivate active flow Logged in as Agent, "Pricing Flow" is active 1. Navigate to /automation?tab=flows 2. Click toggle/deactivate button on "Pricing Flow" Flow status changes to "Inactive". Toggle reflected. Success toast: "Flow deactivated" Medium
AUTO-025 Chatbot session idle timeout configuration via inbound automation settings Logged in as Admin with manage_automations permission 1. Navigate to /automation?tab=settings or organization settings 2. Locate "Inbound Automation" section 3. Check if "Chatbot Session Idle Timeout (minutes)" field is visible 4. Enter value "30" 5. Click Save Settings saved successfully. Organization now has chatbot_session_idle_timeout_minutes=30. Success toast shows "Settings updated" High
AUTO-026 Chatbot session idle timeout default value is NULL Logged in as Admin, organization created without idle timeout configured 1. Navigate to organization settings 2. Locate "Chatbot Session Idle Timeout" field in inbound automation section Field displays empty or shows placeholder "Not set". chatbot_session_idle_timeout_minutes=NULL in database Medium
AUTO-027 Update chatbot session idle timeout from NULL to value Logged in as Admin, chatbot_session_idle_timeout_minutes=NULL 1. Navigate to automation settings 2. In "Chatbot Session Idle Timeout" field, enter "45" 3. Click Save Organization updated. chatbot_session_idle_timeout_minutes=45. Success message displayed High
AUTO-028 Update chatbot session idle timeout from value to NULL Logged in as Admin, chatbot_session_idle_timeout_minutes=30 1. Navigate to automation settings 2. Clear the "Chatbot Session Idle Timeout" field 3. Click Save Organization updated. chatbot_session_idle_timeout_minutes=NULL. Idle timeout feature disabled High
AUTO-029 Chatbot session idle timeout only updates if field present in request Logged in as Admin, using API to update automation_mode without including idle timeout 1. PATCH /orgs/{org_id}/automation-mode with body: {"automation_mode": "flows_first"} (no chatbot_session_idle_timeout_minutes field) 2. Send request automation_mode updated. chatbot_session_idle_timeout_minutes unchanged from previous value. Only modified fields are updated High
AUTO-030 Chatbot session idle timeout accepted values range Logged in as Admin 1. Navigate to automation settings 2. Test entering various timeout values: 1, 5, 60, 1440 All positive integer values accepted and saved. Field validates as positive integer or empty Medium
AUTO-031 Chatbot session idle timeout invalid input Logged in as Admin 1. Navigate to automation settings 2. Enter "abc" or "-10" in timeout field 3. Click Save Error message: "Chatbot Session Idle Timeout must be a positive number or empty". Save button disabled. No update made Medium
AUTO-032 Chatbot session expires on idle timeout during flow execution Logged in as Agent, flow is active and running, chatbot_session_idle_timeout_minutes=15, last_interaction_at was 16 minutes ago 1. New message arrives for this contact/flow 2. Flow engine checks session and calls expire_chatbot_session_if_idle() 3. Session's last_interaction_at is >15 minutes old expire_chatbot_session_if_idle() returns True. bot_session.is_complete=True. Session marked as complete. Log entry: "flow_session_expired_idle". Flow execution stops gracefully. New incoming message starts fresh flow High
AUTO-033 Chatbot session does not expire within idle timeout window Logged in as Agent, flow running, chatbot_session_idle_timeout_minutes=15, last_interaction_at was 5 minutes ago 1. New message arrives 2. Flow engine checks expire_chatbot_session_if_idle() 3. Session's last_interaction_at is 5 minutes old (within 15-minute window) expire_chatbot_session_if_idle() returns False. bot_session.is_complete NOT set. Session remains active. Flow execution continues. No log entry High
AUTO-034 Chatbot session idle timeout disabled returns False Logged in as Agent, flow running, chatbot_session_idle_timeout_minutes=NULL (not configured), last_interaction_at is old 1. New message arrives 2. Flow engine calls expire_chatbot_session_if_idle() 3. idle_minutes retrieved is None expire_chatbot_session_if_idle() returns False immediately. Session not marked complete. Timeout feature is disabled globally High
AUTO-035 Chatbot session idle timeout with naive datetime handling Logged in as Agent, flow running, bot_session.last_interaction_at is naive datetime (no timezone), chatbot_session_idle_timeout_minutes=10 1. New message triggers expiry check 2. expire_chatbot_session_if_idle() detects naive datetime and adds UTC timezone 3. Comparison proceeds Naive datetime converted to UTC-aware datetime. Expiry calculation proceeds correctly. Session expired or active based on timeout window Medium
AUTO-036 Chatbot session idle timeout comparison uses UTC Logged in as Agent across different timezones, chatbot_session_idle_timeout_minutes=20 1. Session last_interaction_at recorded in database 2. New message arrives, expiry check executes using datetime.now(UTC) Comparison uses UTC timezone consistently. Timeout calculation is independent of user's local timezone. Expiry determined by UTC clock Medium

Create Contact Node

IDTest CasePreconditionsStepsExpected ResultPriority
AUTO-108 Add create_contact node to flow Logged in as Agent, flow builder is open 1. Open flow builder for a draft flow 2. Click on empty canvas area 3. Select node type dropdown 4. Select "Create Contact" 5. Click to place node on canvas Create Contact node appears on canvas with default configuration. Node has two output handles: "success" and "error" High
AUTO-109 Configure create_contact node with phone session variable Logged in as Agent, flow builder open with create_contact node 1. Click on create_contact node to open config panel 2. In "Phone session key" field, enter "phone" 3. Leave other fields empty 4. Click Save Node config persists. phone_session_key="phone" stored High
AUTO-110 Configure create_contact node with name session variable Logged in as Agent, create_contact node in builder 1. Click node to open config panel 2. In "Name session key" field, enter "user_name" 3. Click Save Node stores name_session_key="user_name" Medium
AUTO-111 Configure create_contact node with email session variable Logged in as Agent, create_contact node in builder 1. Click node 2. Enter "user_email" in "Email session key" field 3. Click Save Node stores email_session_key="user_email" Medium
AUTO-112 Configure create_contact node with tags session variable Logged in as Agent, create_contact node in builder 1. Click node 2. Enter "user_tags" in "Tags session key" field 3. Click Save Node stores tags_session_key="user_tags". Tags can be comma-separated string or JSON array string Medium
AUTO-113 Configure create_contact node output variable Logged in as Agent, create_contact node in builder 1. Click node 2. In "Output Contact ID key" field, enter "created_contact_id" 3. Click Save Node stores output_contact_id_key="created_contact_id". On success, new contact's ID stored in session as this key Medium
AUTO-114 Configure merge_on_duplicate setting Logged in as Agent, create_contact node in builder 1. Click node to open config 2. Check "Merge on duplicate phone" toggle 3. Click Save Node stores merge_on_duplicate=true. If phone exists, contact is updated instead of error High
AUTO-115 Configure contact assignment to user Logged in as Agent, create_contact node in builder 1. Click node 2. Select "Assign to User" from assignment dropdown 3. Select a user from the list 4. Click Save Node stores contact_assignment_mode="user" and assigned_user_id. Created contact assigned to selected user High
AUTO-116 Configure contact assignment to team Logged in as Agent, create_contact node in builder 1. Click node 2. Select "Assign to Team" from assignment dropdown 3. Select a team from the list 4. Click Save Node stores contact_assignment_mode="team" and assigned_team_id. Created contact assigned to team Medium
AUTO-117 Configure contact assignment to conversation agent Logged in as Agent, create_contact node in builder 1. Click node 2. Select "Assign to Conversation Agent" from assignment dropdown 3. Click Save Node stores contact_assignment_mode="conversation_agent". Created contact assigned to whoever is assigned to current conversation Medium
AUTO-118 Create contact node success path Logged in as Agent, flow running with create_contact node 1. Flow receives WhatsApp message with phone number in phone session key 2. Create contact node executes with valid phone and merge_on_duplicate=false 3. New contact created successfully 4. Flow connects success output to next message node Contact created with provided phone, name, email, tags. output_contact_id_key populated with new ID. Flow advances via success path. Log entry "flow_create_contact_started" High
AUTO-119 Create contact node missing phone error Logged in as Agent, flow running with create_contact node 1. Flow receives message but phone session key is empty or missing 2. Create contact node executes Node logs warning "create_contact_missing_phone" with org_id. Flow advances via error path (if connected) High
AUTO-120 Create contact node duplicate phone without merge Logged in as Agent, contact with phone "+1234567890" exists, create_contact node with merge_on_duplicate=false 1. Flow attempts to create contact with existing phone 2. Node executes ValueError raised. Node logs "create_contact_duplicate_phone" with org_id and merge_on_duplicate flag. Flow advances via error path High
AUTO-121 Create contact node merge on duplicate Logged in as Agent, contact "+1234567890" exists with name "John", merge_on_duplicate=true 1. Flow receives new data: phone="+1234567890", name="Jonathan", tags=["Premium"] 2. Create contact node executes with merge_on_duplicate=true Existing contact updated. Name changed to "Jonathan" (only if contact had no name before, or updated if configured). Tags merged: ["Premium", ...existing tags]. output_contact_id_key set to existing ID. Flow advances via success High
AUTO-122 Create contact node with tags parsing from comma-separated string Logged in as Agent, session contains tags_key="Premium, VIP, Support" 1. Create contact node configured with tags_session_key="tags_key" 2. Node executes Tags parsed as ["Premium", "VIP", "Support"] (whitespace trimmed). Contact created with these tags Medium
AUTO-123 Create contact node with tags parsing from JSON array Logged in as Agent, session contains tags_key='["Early", "Adopter"]' 1. Create contact node with tags_session_key="tags_key" 2. Node executes Tags parsed as ["Early", "Adopter"] from JSON array. Contact created with these tags Medium
AUTO-124 Create contact node with empty tags Logged in as Agent, tags_session_key points to empty string or missing key 1. Create contact node with tags_session_key set 2. Node executes with valid phone Contact created with no tags. Empty tag list handled gracefully Medium
AUTO-125 Create contact node assignment to user succeeds Logged in as Agent, create_contact node with contact_assignment_mode="user", assigned_user_id set 1. Create contact node executes successfully 2. New contact is created Contact created and immediately assigned to specified user. Assignment visible in contact detail view High
AUTO-126 Create contact node assignment to conversation agent Logged in as Agent, conversation assigned to User "Alice", create_contact node with mode="conversation_agent" 1. Create contact node executes in this conversation context 2. New contact created Contact assigned to "Alice" (conversation's assigned user). Assignment copied from conversation context Medium
AUTO-127 Create contact node assignment with invalid UUID Logged in as Agent, create_contact node with contact_assignment_mode="user" but assigned_user_id is invalid format 1. Create contact node executes 2. Invalid UUID cannot be parsed Warning logged "create_contact_assignment_invalid_user_id". Contact created but assignment skipped. Flow continues Medium
AUTO-128 Create contact node assignment mode none Logged in as Agent, contact_assignment_mode="none" 1. Create contact node executes and creates contact Contact created with no assignment. Not assigned to user or team Medium
AUTO-129 Create contact normalizes phone number Logged in as Agent, phone_session_key contains "+1 (234) 567-8900" 1. Create contact node executes with this phone value Phone normalized via conversation_service.normalize_phone(). Variations like spaces, dashes, parentheses standardized Medium
AUTO-130 Create contact skips phone normalization if empty Logged in as Agent, phone_session_key is empty string after strip() 1. Create contact node executes Phone treated as empty. Error path triggered. No contact created Medium
AUTO-131 Create contact name field optional Logged in as Agent, name_session_key set but not populated in session 1. Create contact node with name_session_key but session has no value or empty string 2. Phone is valid 3. Node executes Contact created with name=None (no name set). Email and tags applied if provided. Flow continues on success Medium
AUTO-132 Create contact email field optional Logged in as Agent, email_session_key set but session has no value 1. Create contact node executes with valid phone, no email 2. Node executes Contact created with email=None. Other fields applied. Flow continues Medium
AUTO-133 Create contact exception handling Logged in as Agent, database error or unexpected exception occurs during contact creation 1. Create contact node executes 2. Unhandled exception raised in contact_service.create_contact() Exception logged with "flow_create_contact_failed_persist" including org_id, flow_id, node_id, and error_type. Error path triggered. Flow continues Medium
AUTO-134 Create contact output variable populated on success Logged in as Agent, output_contact_id_key="new_cid", contact created successfully 1. Create contact node executes 2. Contact created with ID "12345678-abcd-..." 3. Subsequent node uses {{new_cid}} Session variable new_cid set to string UUID of created contact. Subsequent nodes can access via {{new_cid}} High
AUTO-135 Create contact output variable not set on error Logged in as Agent, output_contact_id_key="new_cid", phone is invalid/missing 1. Create contact node executes 2. Error path triggered Session variable new_cid NOT set. Flow advances via error path Medium
AUTO-136 Configure mark_as_lead setting on create_contact node Logged in as Agent, create_contact node in builder 1. Click create_contact node to open config panel 2. Locate "Mark as Lead" checkbox 3. Check the checkbox 4. Click Save Node config persists. mark_as_lead=true stored High
AUTO-137 Create contact with mark_as_lead enabled Logged in as Agent, flow running with create_contact node where mark_as_lead=true 1. Flow receives WhatsApp message with phone number 2. Create contact node executes with valid phone and mark_as_lead=true 3. New contact created successfully Contact created with provided phone, name, email, tags. Contact automatically marked as lead. Lead record created with source="chatbot". "lead" tag added to contact tags. System logs "create_contact_mark_as_lead" High
AUTO-138 Create contact with mark_as_lead disabled Logged in as Agent, flow running with create_contact node where mark_as_lead=false 1. Flow receives message with valid phone 2. Create contact node executes with mark_as_lead=false or unchecked Contact created without lead record. No "lead" tag automatically added. Contact treated as regular contact High
AUTO-139 Mark as lead on duplicate contact merge Logged in as Agent, existing contact without "lead" tag, create_contact node with merge_on_duplicate=true and mark_as_lead=true 1. Flow attempts to create contact with existing phone 2. Create contact node executes with merge_on_duplicate=true and mark_as_lead=true Existing contact merged with new data. If contact is not already tagged as "lead", "lead" tag added. Lead record created for contact if not already a lead. Flow advances via success High
AUTO-140 Mark as lead on duplicate with existing lead tag Logged in as Agent, existing contact already tagged as "lead", create_contact node with merge_on_duplicate=true and mark_as_lead=true 1. Flow attempts to create contact with existing phone and existing lead tag 2. Create contact node executes Contact updated with merge. No duplicate "lead" tag added (idempotent). Lead record already exists. Flow advances via success Medium
AUTO-141 Flow simulation shows mark_as_lead note Logged in as Agent, flow builder is open with create_contact node configured with mark_as_lead=true 1. Open flow builder with create_contact node 2. Click Simulate or Preview button 3. Observe simulation panel or builder UI showing node details Node configuration description or simulation notes include "; mark as lead" text indicating the option is enabled Medium
AUTO-142 [REMOVED] Create contact node with mark_as_lead syncs lead assignees to contact [REMOVED] [REMOVED] [REMOVED] [REMOVED]
AUTO-143 [REMOVED] Create contact node with mark_as_lead syncs team assignees to lead [REMOVED] [REMOVED] [REMOVED] [REMOVED]
AUTO-144 [REMOVED] Create contact node with mark_as_lead and no assignment [REMOVED] [REMOVED] [REMOVED] [REMOVED]
AUTO-145 [REMOVED] Create contact node mark_as_lead updates existing lead assignees on merge [REMOVED] [REMOVED] [REMOVED] [REMOVED]
AUTO-146 Create contact node assignment to conversation agent with "current_agent" alias Logged in as Agent, create_contact node in builder with contact_assignment_mode="current_agent" 1. Open flow builder with create_contact node 2. Click node to open config panel 3. Select "Assign to Conversation Agent" from assignment dropdown 4. Observe the assignment configuration is saved Node stores contact_assignment_mode="current_agent". Flow engine treats "current_agent" as alias for conversation agent assignment High
AUTO-147 Create contact node assignment to conversation agent with "same_as_conversation" alias Logged in as Agent, create_contact node in builder with contact_assignment_mode="same_as_conversation" 1. Flow builder is open 2. Create contact node configured with contact_assignment_mode="same_as_conversation" 3. Flow executes in conversation context where assigned_user_id="alice-123" Node stores contact_assignment_mode="same_as_conversation". During execution, contact assigned to same user as conversation. contact.assigned_user_id="alice-123" High
AUTO-148 Create contact node assignment to conversation agent with "same_conversation" alias Logged in as Agent, create_contact node configured with contact_assignment_mode="same_conversation" 1. Flow runs in conversation with assigned_user_id="bob-456" 2. Create contact node executes contact_assignment_mode="same_conversation" recognized as conversation agent mode. Contact assigned to "bob-456" Medium
AUTO-149 Create contact node assignment to conversation agent with "same_as_this_conversation" alias Logged in as Agent, create_contact node with contact_assignment_mode="same_as_this_conversation" 1. Flow executes in conversation context with assigned_user_id="charlie-789" 2. Create contact node executes contact_assignment_mode="same_as_this_conversation" recognized. Contact assigned to "charlie-789" from conversation context Medium
AUTO-150 Flow simulation shows conversation agent assignment note for multiple aliases Logged in as Agent, flow builder open with create_contact node configured with contact_assignment_mode="current_agent" 1. Open flow builder with create_contact node 2. Click Simulate or Preview button 3. Observe simulation showing node details with assignment info Node configuration description includes "; assign like conversation assignee" note for all conversation agent modes: "conversation_agent", "current_agent", "same_as_conversation", "same_conversation", "same_as_this_conversation" Medium
AUTO-151 Lead assignee no longer synced from create_contact node to Lead record Logged in as Agent, flow running with create_contact node where mark_as_lead=true and contact_assignment_mode="user" 1. Flow receives WhatsApp message with phone number 2. Create contact node executes with valid phone, mark_as_lead=true, assigned to user "alice-123" 3. New contact and lead created Contact created and assigned to user "alice-123". Lead record created with source="chatbot". Lead's assigned_user_id is NOT set from contact assignment (assignment ownership is Contact only). Lead remains unassigned or with default value. sync_assignees NOT passed to lead upsert High
AUTO-152 Lead record ownership consolidated to Contact after mark_as_lead Logged in as Agent, flow running with mark_as_lead=true, contact assigned to user 1. Flow executes create_contact node with mark_as_lead=true 2. Contact created and assigned to user 3. Lead created and linked to contact Contact and Lead both exist. Contact.assigned_user_id="alice-123". Lead has no independent assignee sync from node config. Assignment is read from Contact only. Future assignee changes on Contact will apply to Lead High
AUTO-158 Configure create_contact node with custom field static value Logged in as Agent, flow builder open with create_contact node, org has custom contact field "company" 1. Click create_contact node to open config panel 2. Click "Add Custom Field" 3. Select "company" field from dropdown 4. Select "Static Value" as source 5. Enter "TechCorp Inc" 6. Click Save Node stores custom_fields array with entry: {field_id: "...", value_source: "static", static_value: "TechCorp Inc"}. Custom field configuration persists High
AUTO-159 Configure create_contact node with custom field session variable Logged in as Agent, flow builder open with create_contact node, org has custom field "designation" 1. Click create_contact node 2. Click "Add Custom Field" 3. Select "designation" field 4. Select "Session Variable" as source 5. Enter "user_job_title" in "Session Key" field 6. Click Save Node stores custom_fields: {field_id: "...", value_source: "session", session_key: "user_job_title"}. Session variable mapping persists High
AUTO-160 Configure multiple custom fields on create_contact node Logged in as Agent, create_contact node in builder, org has custom fields "company", "designation", "industry" 1. Click node 2. Click "Add Custom Field" 3. Add "company" with static value "TechCorp" 4. Click "Add Custom Field" again 5. Add "designation" with session variable "user_job" 6. Click "Add Custom Field" again 7. Add "industry" with static "Technology" 8. Click Save Node stores three custom field entries. All configurations persisted in custom_fields array High
AUTO-161 Create contact applies custom field static value Logged in as Agent, flow running with create_contact node with custom field "company" = "TechCorp Inc" (static) 1. Flow receives message with valid phone 2. Create contact node executes 3. Node applies custom field mapping Contact created. Custom field "company" set to "TechCorp Inc" on new contact. Log entry "flow_create_contact_custom_fields_applied" with field_count=1 High