Dash Messaging

Messaging Protocol Management System

Nodes, templates, timing, keywords, and variables. One protocol, delivered across multiple channels.

Protocol is the product

Nodes, templates, timing, keywords, and variables define the flow. Channels deliver it across networks.

  • Messaging nodes

    Each node picks the next send from replies, conditions, and state.

  • Templates

    Localized message copy, reused across nodes without rebuilding the graph.

  • Timing & keywords

    Schedule outbound sends. Map inbound keywords to the next node.

  • Variables

    Participant context flows through the protocol into every template.

Version the whole flow

Export or import a protocol bundle. Validate with dry run before you apply.

Export
{
"schema_version": "2.0",
"timing_rules": [
{
"name": "SEND_NOW",
"offset_direction": "after",
"offset_days": 0,
"offset_hours": 0,
"offset_minutes": 0
}

{
"name": "WAIT_30_MIN",
"offset_direction": "after",
"offset_days": 0,
"offset_hours": 0,
"offset_minutes": 30
}

{
"name": "WAIT_2_HOURS",
"offset_direction": "after",
"offset_days": 0,
"offset_hours": 2,
"offset_minutes": 0
}

{
"name": "WAIT_1_DAY",
"offset_direction": "after",
"offset_days": 1,
"offset_hours": 0,
"offset_minutes": 0
}

{
"name": "WAIT_3_DAYS",
"offset_direction": "after",
"offset_days": 3,
"offset_hours": 0,
"offset_minutes": 0
}
]
,
"variables": [
{
"name": "mood",
"variable_type": "text",
"source_kind": "internal"
}

{
"name": "streak_days",
"variable_type": "integer",
"source_kind": "internal",
"default_value": "0"
}

{
"name": "language",
"variable_type": "text",
"source_kind": "internal",
"default_value": "en"
}
]
,
"conditions": [
{
"name": "always_true",
"condition_text": true
}

{
"name": "mood_is_good",
"condition_text": {"op":"eq","var":"mood","value":"good"}
}

{
"name": "mood_needs_help",
"condition_text": {"op":"eq","var":"mood","value":"help"}
}

{
"name": "language_is_english",
"condition_text": {"op":"eq","var":"language","value":"en"}
}

{
"name": "language_is_spanish",
"condition_text": {"op":"eq","var":"language","value":"es"}
}

{
"name": "streak_at_least_3",
"condition_text": {"op":"gte","var":"streak_days","value":3}
}
]
,
"templates": [
{
"name": "WELCOME",
"template_kind": "broadcast",
"localizations": [
{
"locale": "en",
"content": "Welcome! Text JOIN to start."
}
]
}

{
"name": "DAILY_CHECKIN",
"template_kind": "broadcast",
"localizations": [
{
"locale": "en",
"content": "How are you? Reply GOOD or HELP."
}
]
}

{
"name": "THANK_YOU",
"template_kind": "broadcast",
"localizations": [
{
"locale": "en",
"content": "Thanks for checking in today!"
}
]
}

{
"name": "SUPPORT_TIP",
"template_kind": "broadcast",
"localizations": [
{
"locale": "en",
"content": "Here is a quick tip. Reply GOOD when ready."
}
]
}
]
,
"nodes": [
{
"name": "WELCOME",
"timing_rule_name": "SEND_NOW",
"message_template_name": "WELCOME"
}

{
"name": "DAILY_CHECKIN",
"timing_rule_name": "WAIT_1_DAY",
"message_template_name": "DAILY_CHECKIN"
}

{
"name": "THANK_YOU",
"timing_rule_name": "SEND_NOW",
"message_template_name": "THANK_YOU"
}

{
"name": "SUPPORT_TIP",
"timing_rule_name": "SEND_NOW",
"message_template_name": "SUPPORT_TIP"
}
]
,
"edges": [
{
"parent_node_name": "WELCOME",
"child_node_name": "DAILY_CHECKIN"
}

{
"parent_node_name": "DAILY_CHECKIN",
"child_node_name": "THANK_YOU"
}

{
"parent_node_name": "DAILY_CHECKIN",
"child_node_name": "SUPPORT_TIP"
}

{
"parent_node_name": "THANK_YOU",
"child_node_name": "DAILY_CHECKIN"
}

{
"parent_node_name": "SUPPORT_TIP",
"child_node_name": "DAILY_CHECKIN"
}

{
"parent_node_name": "WELCOME",
"child_node_name": "SUPPORT_TIP"
}
]
,
"keywords": [
{
"keyword_text": "JOIN",
"action_type": "enroll",
"language_code": "en",
"messaging_node_name": "WELCOME"
}

{
"keyword_text": "START",
"action_type": "enroll",
"language_code": "en",
"messaging_node_name": "WELCOME"
}

{
"keyword_text": "GOOD",
"action_type": "trigger",
"messaging_node_name": "THANK_YOU"
}

{
"keyword_text": "OK",
"action_type": "trigger",
"messaging_node_name": "THANK_YOU"
}

{
"keyword_text": "HELP",
"action_type": "trigger",
"messaging_node_name": "SUPPORT_TIP"
}

{
"keyword_text": "BIEN",
"action_type": "trigger",
"language_code": "es",
"messaging_node_name": "THANK_YOU"
}

{
"keyword_text": "AYUDA",
"action_type": "trigger",
"language_code": "es",
"messaging_node_name": "SUPPORT_TIP"
}
]
}

Channels attach to the protocol

One protocol, delivered across multiple channels. Attach a channel without redesigning nodes or templates.

Dash Mobile app channel

Built-in app channel that runs the same protocol as your other channels. Participants engage in the app instead of SMS alone.

Search in chat

Home

Edit protocols in the dashboard

Open a project to edit nodes and templates, attach channels, or run simulation.