In-App Checkin


SMS Checkin


We’re Glad You Here: A Look LCBC’s Adult Main Gathering Check-in Process

The Why

At LCBC, check-in is part of our culture. Check-in is the starting point for so many things. Checkin is the start of someone being connected and known. When you check-in, it lets us start praying for you, lets us check in on you, lets us keep you in the loop of what is going on. Checkin is also the starting point of our attendee onboarding process and one of the ways we measure engagement. 

Checkin started for us with a pen and paper.  Then it evolved into a hybrid of app and paper check-in.  Due to limitations with our previous mobile app and previous ChMS, our in-app check-in wasn't much different than our paper check-in.  Every Monday morning someone would export the app check-in and the same army of amazing volunteers, that entered the paper check-in, would manually enter the in-app attendance.  This got the job done but was a ton of work.  When we migrated to rock we promised our campus staff that we would be able to integrate with our app and streamline this process.

Then we decided to stop meeting in person and go digital-only for a few weeks. Did you guys do that too? I hear it was a thing. Our 18-month plan became our 6-month plan and a new method for check-in was needed for the end of the week. Like I said check-in is part of who we are. So SMS to check-in it was and we starting building just like everyone else in the community. (Ben Murphy from Harvest Bible Chapel Pittsburgh North & Chuck Bump from Southeast Christian Church have great recipes that we love).   

Our goal was to have as close to the same experience as in-person paper check-in as possible.  We needed you to tell us what location you were physically at, give you the option to check-in your spouse and kids (14 yrs & older), and tell us who you were if we didn't know who you were. This started as an SMS process, however, as we were getting close to launching our new rock integrated mobile app, built on the Apollos Project, we saw that we could quickly adapt what we had built for our new fantastic app. I'm sure you could easily use this with Rock Mobile or any mobile app that lets you send an authenticated person to a workflow entry page.

This all started as one big MASSIVE workflow. Don't build stuff like this, it's silly and a bear to maintain.  Don't be like past us.  We have taken our one workflow and broken it up into a handful.  The best part of this is now that we have these workflow modules we can string together with other things and use them for more than just adult main gathering check-in.

The How
Drawing3.pngSMS Entry Workflow

This workflow was initially part of our larger check-in workflow, but we found that we kept using these same actions repeatedly. So we broke it off on its own. The workflow takes the following attributes from the SMS Pipeline. 

  • FromPerson - This the person who rock thinks sent the message. {{ FromPerson.PrimaryAlias.Guid }}
  • FromPhone - The phone number that sent the message {{ FromPhone }}
  • MessageBody - The body of the message that was sent {{ MessageBody }}
  • WorkflowType - The GUID of the workflow type that should launch at the end of this workflow.

The first thing this workflow does is checks how many people have the phone number. Sometimes a mobile phone number ends up on multiple profiles for various reasons. We want to make sure we are checking in the correct person and not say their six-month-old baby. We also don't like checking in namesless people in this process. There are times we are ok with nameless people, but, this isn't one of them. We run the following SQL to get the matching person count.

FROM PhoneNumber as on
JOIN Person as p on p.Id=pn.PersonId and p.RecordTypeValueId != 2069
WHERE Number = @PhoneNumber 
OR Number = REPLACE(@PhoneNumber, '+1', '')
OR concat('1',Number) = @PhoneNumber;

If only one person has this phone number, we enable SMS on the person's profile and create the workflow of the specified workflow type to move them on in the check-in process. Here are the workflow actions for this first step.
Start Activity Actions:

  1. Set Matching People Count (SQL Run) - This runs the code and gets the matching person count.
  2. Update SMS (Person Phone Update) - This runs if only one known person was matched.  This enabled SMS on the mobile number.
  3. Create Workflow (Activate Workflow) - This creates the next workflow in the process.  The workflow type that is created is specified by the GUID passed from the SMS pipeline.
  4. Complete Workflow (Workflow Complete) - Yay this workflow is done.  This is all done before the workflow is persisted.  We only persist the workflow if we need user input.
  5. Go To Get The Person (Activate Activity) - This starts the other activity in this workflow.  This activity handles if we don't know exactly who we are is trying to check-in.

If we don't know exactly who they are we send them a message with a link to a workflow form where we ask for some basic information. We feed this information into a person from attributes workflow action

Get The Person Actions:

  1. Persist (Workflow Persist) - We persist the workflow since we know we are going to have to wait for the user.  The workflow needs to be here when they get back.
  2. Generate Link To Workflow (Lava Run) - We create a short link to the workflow so it looks nice and fits in the SMS message.
  3. Set SMS Response (Lava Run) - We assigned the message to an attribute to send it to the user. 
  4. Send SMS (SMS Send) - Send a reply with the link.
  5. End User Form (Form) - Get user input so we can figure out who it is.


  6. Get/Created The Person (Person Attribute From Fields) - Use the fields to set the FromPerson attribute to the actual person.  If no person is found rock now creates a new person.
  7. Launch Phone Number Cleanup Workflow (Activate Workflow) - If more than one person had the phone number we launch the mobile clean-up workflow.  We tell the workflow who the person is at that owns the number and the workflow handles the rest.
  8. Update SMS Setting (Person Phone Update) - Since we now know whose mobile number this is we enable SMS messaging.
  9. Create Workflow (Activate Workflow) - This creates the next workflow in the process. The workflow type that is created is specified by the GUID passed from the SMS pipeline.
  10. Confirmation HTML (Workflow Entry Show HTML) - Show them some confirmation message to thank them for their information.
  11. Workflow Complete (Workflow Complete) - Yay this workflow is done
Mobile Clean Up Workflow 

This workflow was created after we started with our more modular approach. This workflow is only launched from other workflows. We pass it a Person and Phone number and it does the rest.  It looks for people who are associated with the mobile number we passed it and removes it from everyone except the person to who the number actually belongs. This workflow also uses the for/each action included in plugin Workflow Stimpack by Blue Box Moon. 

Start Actions:

  1. Get Person Ids (Lava Run)
  2. Loop Phone Numbers (For Each) - using the for/each action launch activities to clean up phone numbers from people who shouldn't have them.

Clean Up Phone Numbers Actions:

  1. Get Person (Lava Run)
  2. Update Phone (Person Phone Update)

Complete Workflow Actions:

  1. Complete Workflow (Workflow Complete)
Check-in Workflow

I am in the process of rewriting this workflow to take into account on-demand gatherings. I will update this section once that is complete. If you would like the existing workflow find me on Rocket Chat.

Attendance Record Creation

Start Actions:

  1. Complete If No Person Given (Workflow Complete) 
  2. Persist For Record Keeping (Workflow Persist)
  3. Check For Batching (Lava Run)
  4. Set Date (Lava Run)
  5. Wait For Batch Run (Delay)
  6. Family Checkin (For Each)
  7. Get Person Id For From Person (Lava Run)
  8. Person Checkin (For Each)

Create Attendance Record Actions:

  1. Get Person From Id (Lava Run)
  2. Create Group Attendance (Group Member Attendance Add)
  3. Get Attendance Record (Lava Run)
  4. Add Attribute (Entity Attribute Set)