Main Site
C2 Overview

Automation Flows

Automate repetitive staff tasks by triggering actions when profile, rank, or event changes happen.

Automation flows help your team save time and stay consistent.

Think of each flow as:

  • When this happens (an event trigger),
  • Do this automatically (one or more actions).

What A Flow Looks Like

A flow has two parts:

  1. Trigger event: the thing that starts the flow.
  2. Actions: the tasks C2 runs in order.

Example in plain English:

  • When a new profile is created,
  • send a welcome DM,
  • assign a starter rank,
  • and notify staff in a channel.

Build Your First Flow

Prerequisites

  • You can access the Automation area.
  • You know what result you want before creating the flow.
  • You have the Discord channels/roles and C2 profile values ready.

Steps

  1. Open Automation -> Create Flow.
  2. Enter a clear flow name.
  3. Choose the trigger event.
  4. Add actions in the exact order you want them to run.
  5. Configure each action.
  6. Save and enable the flow.
  7. Run a test with one safe profile or one test event.

Flow Fields Explained

FieldWhat It MeansExample
NameStaff-facing flow name. Keep it short and clear.New Member Onboarding
DescriptionOptional context for other admins.Runs starter setup for all new signups
Event TypeThe trigger that starts this flow.COMMUNITY_PROFILE_CREATED
EnabledTurns the flow on or off.On for live, Off while editing
StepsThe ordered action list.DM first, profile updates second, staff alert last

Supported Trigger Events

Use these event names when selecting a trigger:

EventIn Plain English
COMMUNITY_PROFILE_CREATEDA new person profile is created (new signup/onboarding).
COMMUNITY_PROFILE_UPDATEDAn existing profile is updated.
COMMUNITY_RANKS_CREATEDA new rank is created in your rank list.
COMMUNITY_RANKS_UPDATEDA rank entry is edited.
COMMUNITY_EVENTS_CREATEDA new event is created.
COMMUNITY_EVENTS_UPDATEDAn existing event is edited.

Supported Actions (Current Set)

ActionWhat It DoesExample Use
DISCORD_DMSends a direct message.Welcome message to a new member.
DISCORD_CHANNEL_MESSAGEPosts in a Discord channel.Notify staff that a new profile joined.
DISCORD_ADD_ROLEAdds a Discord role.Give Recruit Discord role on signup.
PROFILE_SET_RANKSets one profile rank.Set rank to Recruit.
PROFILE_SET_POSITIONSets one primary position.Set position to Rifleman (Trainee).
PROFILE_SET_UNITSets one primary unit.Set unit to Intake Platoon.
PROFILE_ADD_ROLESAdds one or more C2 roles.Add New Member access role.
PROFILE_REMOVE_ROLESRemoves one or more C2 roles.Remove Pending Review role after approval.
PROFILE_ADD_QUALIFICATIONSAdds qualifications.Add Basic Training after onboarding.
PROFILE_REMOVE_QUALIFICATIONSRemoves qualifications.Remove outdated qualification tags.
PROFILE_ADD_AWARDSAdds awards.Add Campaign Ribbon.
PROFILE_REMOVE_AWARDSRemoves awards.Remove mistaken award assignment.
PROFILE_ADD_UNITSAdds profile-to-unit assignments.Add person to Reserve Company.
PROFILE_REMOVE_UNITSRemoves unit assignments.Remove person from previous unit on transfer.
PROFILE_ADD_POSITIONSAdds additional positions.Add Radio Operator as secondary duty.
PROFILE_REMOVE_POSITIONSRemoves positions.Remove old duty position after reassignment.

Discord Messaging And Variables

Discord message actions (DISCORD_DM and DISCORD_CHANNEL_MESSAGE) can use variables so each message automatically includes live event details.

You can think of variables as placeholders:

  • You write ${alias} in the message template.
  • C2 replaces it with the real value when the flow runs.

Message Actions And Fields

ActionMain Fields You SetWhat It Does
DISCORD_CHANNEL_MESSAGEchannel, messagePosts a formatted message to a channel.
DISCORD_DMtarget, messageSends a formatted direct message to one target user.

How To Add Variables To A Message

  1. Choose your trigger event first (for example COMMUNITY_PROFILE_CREATED).
  2. Add a Discord messaging action (DISCORD_DM or DISCORD_CHANNEL_MESSAGE).
  3. Write your message using plain text plus variables like ${alias}.
  4. Save and run a test so you can confirm the final output looks right.

Common Variables (All Automation Events)

These are available for every automation trigger:

VariableWhat It Means
${eventType}The trigger event type that fired the flow.
${entityType}The type of record that changed.
${entityId}The ID of the changed record.
${communityId}The community ID where this happened.
${triggeredBy}Who triggered the change.
${action}The action that occurred.
${occurredAt}When the event happened.
${resource}The event resource payload.

Important:

  • First-level fields from the event resource are also available as top-level variables.
  • Nested paths are not supported. ${rank.name} will not resolve.
  • Use first-level variables only, such as ${rank}.

Community Profile Event Variables

For COMMUNITY_PROFILE_CREATED and COMMUNITY_PROFILE_UPDATED, available first-level variables include:

${id}, ${createdAt}, ${updatedAt}, ${createdBy}, ${updatedBy}, ${community}${alias}, ${avatar}, ${background}, ${meta}${rank}, ${roles}, ${qualifications}, ${positions}, ${units}, ${awards}${position}, ${unit}, ${statusId}, ${status}

Community Rank Event Variables

For COMMUNITY_RANKS_CREATED and COMMUNITY_RANKS_UPDATED, available first-level variables include:

${id}, ${createdAt}, ${updatedAt}, ${createdBy}, ${updatedBy}, ${community}${position}, ${folder}, ${folderId}${name}, ${description}, ${abbreviation}, ${profiles}, ${image}

Community Event Variables

For COMMUNITY_EVENTS_CREATED and COMMUNITY_EVENTS_UPDATED, available first-level variables include:

${id}, ${createdAt}, ${updatedAt}, ${createdBy}, ${updatedBy}, ${community}${name}, ${description}, ${image}, ${meta}${dateTime}, ${locked}, ${lockedAt}${discordChannel}, ${discordMessage}, ${discordPingable}${draft}${recurrenceType}, ${recurrenceDayOfWeek}, ${recurrenceDayOfMonth}, ${recurrenceEnd}, ${recurrenceActive}, ${recurrenceSeriesId}, ${recurrenceNextInstanceAt}, ${recurrenceLastResult}, ${recurrenceLastError}

Copy/Paste Message Templates

New profile created:

"New profile: ${alias} | Status: ${statusId} | Rank: ${rank} | Profile ID: ${entityId}"

Rank updated:

"Rank updated: ${name} (${abbreviation}) at position ${position}"

Event created:

"Event: ${name} | Starts: ${dateTime} | Draft: ${draft}"

Profile updated:

"Profile updated: ${alias} | Updated: ${updatedAt}"

This is the most useful starter flow for most communities.

Trigger

  • COMMUNITY_PROFILE_CREATED

Action Order Example

  1. DISCORD_DM
  2. PROFILE_SET_RANK
  3. PROFILE_SET_UNIT
  4. PROFILE_SET_POSITION
  5. PROFILE_ADD_ROLES
  6. DISCORD_CHANNEL_MESSAGE

Example Outcome

When a new person signs up:

  • they get a welcome DM,
  • they are placed into your intake rank/unit/position,
  • they receive your starter C2 role,
  • and staff are notified in your onboarding channel.

Suggested Message Example (DM)

Welcome ${alias}. Your profile has been created in community ${communityId}. Please complete onboarding and attend the next training event.

Suggested Staff Channel Message

New profile created: ${alias} | Status: ${statusId} | Rank: ${rank} | Profile ID: ${entityId}

Recipe 2: Event Creation Announcement

Trigger

  • COMMUNITY_EVENTS_CREATED

Action Order Example

  1. DISCORD_CHANNEL_MESSAGE

Example Outcome

Every new event automatically posts to your #operations channel with a short summary so staff do not miss it.

Recipe 3: Profile Update Routing

Trigger

  • COMMUNITY_PROFILE_UPDATED

Action Ideas

  • Post a staff update when important profile changes happen.
  • Add or remove C2 roles as part of your review lifecycle.
  • Add/remove units or positions if your process uses staged assignment.

Example Outcome

Staff no longer need to manually send "profile updated" messages or repeat the same assignment steps.

Recipe 4: Rank List Governance Alert

Trigger

  • COMMUNITY_RANKS_CREATED or COMMUNITY_RANKS_UPDATED

Action Order Example

  1. DISCORD_CHANNEL_MESSAGE

Example Outcome

When someone changes rank definitions, your admin channel is notified so leadership can quickly confirm it was intentional.

Good Practices

  1. Keep flows small and focused.
  2. Use clear names so other staff know what each flow does.
  3. Put actions in the safest order:
  • notify or log,
  • then assignment changes,
  • then secondary updates.
  1. Test with one profile first before enabling community-wide.
  2. Review automation logs regularly.

Common Issues

  • Action order is wrong, so messages go out before assignments are complete.
  • Flow is saved but not enabled.
  • Discord target (role/channel) is outdated.
  • A flow tries to do too much at once and becomes hard to troubleshoot.
Copyright © 2026