Node Reference

Full node list for visual builder with safe placeholder examples and validation-aligned structure.

Each example below is a graph-save node object, so it includes required groupKey, position, and config.


Quick Jump


send_text

Required fields: groupKey, position, config.message

{
  "id": "node_send_text",
  "type": "send_text",
  "groupKey": "send_message",
  "position": { "x": 160, "y": 120 },
  "config": {
    "message": "Hello! Welcome to our healthcare service. How can we help you today?"
  }
}

send_media

Required fields: groupKey, position, config.mediaType, config.mediaAssetId | config.mediaUrl | config.mediaId

{
  "id": "node_send_media",
  "type": "send_media",
  "groupKey": "send_message",
  "position": { "x": 160, "y": 120 },
  "config": {
    "mediaType": "image",
    "mediaUrl": "https://assets.smsport.in/clinics/banner.png",
    "message": "Here is your prescription copy."
  }
}

send_template

Required fields: groupKey, position, config.templateName, config.languageCode

{
  "id": "node_send_template",
  "type": "send_template",
  "groupKey": "send_message",
  "position": { "x": 160, "y": 120 },
  "config": {
    "templateName": "appointment_reminder_v2",
    "languageCode": "en",
    "bodyVariables": ["John Doe", "Dr. Sharma", "10:30 AM"]
  }
}

send_whatsapp_flow

Required fields: groupKey, position, config.flowId

{
  "id": "node_send_flow",
  "type": "send_whatsapp_flow",
  "groupKey": "send_message",
  "position": { "x": 160, "y": 120 },
  "config": {
    "flowId": "849302194829",
    "screenId": "SCREEN_APPOINTMENT_FORM",
    "ctaLabel": "Book Appointment",
    "bodyText": "Please tap below to fill out your appointment request directly in WhatsApp."
  }
}

send_location

Required fields: groupKey, position, config.latitude, config.longitude

{
  "id": "node_send_location",
  "type": "send_location",
  "groupKey": "send_message",
  "position": { "x": 160, "y": 120 },
  "config": {
    "latitude": 12.9716,
    "longitude": 77.5946,
    "locationName": "Apex City Clinic",
    "locationAddress": "123 Healthcare Blvd, Bangalore, KA"
  }
}

ask_text

Required fields: groupKey, position, config.message

{
  "id": "node_ask_text",
  "type": "ask_text",
  "groupKey": "ask_questions",
  "position": { "x": 160, "y": 120 },
  "config": {
    "message": "Please enter your full name as shown on your medical ID card:",
    "outputVariable": "patient_name"
  }
}

ask_number

Required fields: groupKey, position, config.message

{
  "id": "node_ask_number",
  "type": "ask_number",
  "groupKey": "ask_questions",
  "position": { "x": 160, "y": 120 },
  "config": {
    "message": "Please enter your age:",
    "outputVariable": "patient_age"
  }
}

ask_phone

Required fields: groupKey, position, config.message

{
  "id": "node_ask_phone",
  "type": "ask_phone",
  "groupKey": "ask_questions",
  "position": { "x": 160, "y": 120 },
  "config": {
    "message": "Enter your 10-digit mobile number for appointment confirmation:",
    "outputVariable": "contact_phone"
  }
}

ask_email

Required fields: groupKey, position, config.message

{
  "id": "node_ask_email",
  "type": "ask_email",
  "groupKey": "ask_questions",
  "position": { "x": 160, "y": 120 },
  "config": {
    "message": "Please share your email address to receive your laboratory invoice:",
    "outputVariable": "patient_email"
  }
}

ask_date

Required fields: groupKey, position, config.message

{
  "id": "node_ask_date",
  "type": "ask_date",
  "groupKey": "ask_questions",
  "position": { "x": 160, "y": 120 },
  "config": {
    "message": "Please provide your preferred appointment date (YYYY-MM-DD):",
    "outputVariable": "preferred_date"
  }
}

ask_location

Required fields: groupKey, position, config.message

{
  "id": "node_ask_location",
  "type": "ask_location",
  "groupKey": "ask_questions",
  "position": { "x": 160, "y": 120 },
  "config": {
    "message": "Please share your current location pin for home nursing dispatch:",
    "outputVariable": "home_location"
  }
}

ask_button

Required fields: groupKey, position, config.message, config.options (max 3, each <= 20 chars)

{
  "id": "node_ask_button",
  "type": "ask_button",
  "groupKey": "choices",
  "position": { "x": 160, "y": 120 },
  "config": {
    "message": "Which department would you like to schedule an appointment with?",
    "options": ["General Medicine", "Pediatrics", "Dental Care"]
  }
}

ask_list

Required fields: groupKey, position, config.message, config.options (max 10)

{
  "id": "node_ask_list",
  "type": "ask_list",
  "groupKey": "choices",
  "position": { "x": 160, "y": 120 },
  "config": {
    "message": "Select your doctor from the panel below:",
    "options": ["Dr. Anjali Gupta (Cardio)", "Dr. Rajesh Kumar (Neuro)", "Dr. Meera Nair (Derm)"]
  }
}

condition

Required fields: groupKey, position, config.expression, branches true/false/default

{
  "id": "node_condition",
  "type": "condition",
  "groupKey": "logic_utilities",
  "position": { "x": 160, "y": 120 },
  "config": {
    "expression": "gt({{patient_age}}, 60)"
  }
}

switch

Required fields: groupKey, position, config.variableKey, config.options[]

{
  "id": "node_switch",
  "type": "switch",
  "groupKey": "logic_utilities",
  "position": { "x": 160, "y": 120 },
  "config": {
    "variableKey": "triage_priority",
    "options": ["emergency", "urgent", "routine"]
  }
}

data_lookup

Required fields: groupKey, position, config.variableKey, config.recordsJson

{
  "id": "node_lookup",
  "type": "data_lookup",
  "groupKey": "logic_utilities",
  "position": { "x": 160, "y": 120 },
  "config": {
    "variableKey": "doctor_id",
    "outputVariableKey": "doctor_name",
    "recordsJson": "{\"doc_101\":\"Dr. Rajesh Mehta\", \"doc_102\":\"Dr. Sarah Thomas\"}"
  }
}

set_variable

Required fields: groupKey, position, config.variableKey, config.expression | config.value

{
  "id": "node_set_var",
  "type": "set_variable",
  "groupKey": "logic_utilities",
  "position": { "x": 160, "y": 120 },
  "config": {
    "variableKey": "discount_rate",
    "expression": "if(gt({{loyalty_points}}, 100), 20, 5)"
  }
}

delay

Required fields: groupKey, position, config.delaySeconds (positive integer)

{
  "id": "node_delay",
  "type": "delay",
  "groupKey": "logic_utilities",
  "position": { "x": 160, "y": 120 },
  "config": {
    "delaySeconds": 5
  }
}

human_handoff

Required fields: groupKey, position

{
  "id": "node_handoff",
  "type": "human_handoff",
  "groupKey": "operations",
  "position": { "x": 160, "y": 120 },
  "config": {
    "message": "Connecting you with an on-duty medical triage officer..."
  }
}

google_sheets

Required fields: groupKey, position, config.credentialId, config.operation, config.documentId, config.sheetName

{
  "id": "node_google_sheets",
  "type": "google_sheets",
  "groupKey": "logic_utilities",
  "position": { "x": 160, "y": 120 },
  "config": {
    "credentialId": "google_sheets_account_1",
    "resource": "sheet_within_document",
    "operation": "get_rows",
    "documentId": "1AbCdEfGhIjKlMnOpQrStUv",
    "sheetName": "Appointments",
    "lookupVariableKey": "mrn_number",
    "keyColumn": "MRN",
    "resultColumn": "Status",
    "outputVariableKey": "appointment_status"
  }
}

ai_agent

Required fields: groupKey, position, config.agentPrompt, config.tools

{
  "id": "node_ai_agent",
  "type": "ai_agent",
  "groupKey": "ai_engine",
  "position": { "x": 160, "y": 120 },
  "config": {
    "agentPrompt": "You are a clinical assistant for SMSPort clinics. Answer triage questions and schedule appointments.",
    "tools": ["doctor_lookup", "calendar_availability", "book_slot"]
  }
}