We've used a 3rd party for text message announcements for a while now. We've found that people respond well to texting a keyword to a short code during our services.

Earlier this year, we found simpletexting. They offer unlimited keywords for as low as $25 per month. For stage announcements and announcement screens, we try to use a keyword and a short code for the action. For example: "text rock to 94090 to sign up"

The only downside was, we didn't have a way to know who texted without doing 2 things.

  1. Logging into our simpletexting account to see the numbers that texted in.
  2. Looking up those numbers in Rock and doing something with them.

Well, their API resolved that for us.

If you have them activate an API you can configure a Webhook to forward your SMS messages to.

Each new message that is delivered will be forward to a URL you choose with ?subject=&from=2175551234&to=94090&text=rock added to the URL.

With that you can create a workflow to process these responses into something in Rock.

Disclosure: We did use the Blue Box Workflow Stimpack to accomplish creating groups dynamically in Rock.

Here's the workflow I used on the page.

from    FT: Phone Number
text     FT: Text
to    FT: Text
Person    FT:Person
Group    FT:Group
WaitCounter    FT:Integer
Alert    FT: Integer


  1. Start
    1. Persist (Workflow Persist)
      Filter: to = 94090
      I usually don't set my WFs to auto persist, just in case they get lots of clicks
    2. Process (Activate Activity)
      Filter: text is not blank
      Activates PROCESS activity
  2. Process
    1. Set Person (Attribute Set Value)
      Attribute: Person
      Lava:{% phonenumber where:'Number == {{Workflow | Attribute:'from'}}' Limit:'1' %} {% for item in phonenumberItems %} {{item.Person.PrimaryAlias.Guid}} {% endfor %} {% endphonenumber %}
    2. Set Group (Attribute Set Value)
      Attribute: Group
      Lava:{% assign textMessage = {{Workflow | Attribute:'text'}} %} {% group where:'Name == "{{textMessage}}" && GroupTypeId==42' securityenabled:'false' %} {% for item in groupItems %} {% assign groupId = {{item.Guid}} %} {% endfor %} {% endgroup %} {{groupId}}
      NOTE: Securityenabled:'false' is why you need v10 or higher. Without this, it will create a new group every time it gets a text because it can't lookup the existing groups.
    3. Notify Of New Group (Email Send)
      Filter: Group is blank
      I have the system send me an email for any time that a new group is created.

      Creating a new text Group for keyword: {{Workflow | Attribute:'text'}}

      View the group here.

      Sender: {{Workflow | Attribute:'Person'}}

      NOTE: I have all these as a specific group type under a specific branch. My view the group here links to that branch expanded in group viewer.
    4. Create Group (Set Entity Properties)
      Filter: Group is blank
      Entity Type: Group
      Key:GroupTypeId Value:(the group type I use for my text response groups)
      Key:ParentGroupId Value:(the parent group Id I use for my text response groups)
      Key:Name Value:{{Workflow | Attribute:'text' }}
      NOTE: This is the Stimpack!
    5. Add to Group (Group Member Add From Attribute)
    6. Filter: Person Is Not Blank
      NOTE: hopefully you don't have to ask which attributes to select, they're your only options. Wait if person not in Rock (Activate Activity)
      Filter: Person Is Blank
      Activates WAIT activity
  3. Wait
    1. Set Alert on new or 7 day increments (Attribute Set Value)
      Filter: WaitCounter Greater than 0
      Attribute: Alert
      Lava: {% assign MyCounter = {{Workflow | Attribute:'WaitCounter' %} {{ MyCounter | Modulo:7 }}
    2. Notify (Email Send)
      Filter: Alert = 0

      {{Workflow | Attribute:'from' }} texted {{Workflow | Attribute:'text'}} on {{Workflow.CreatedDateTime}}.

      This name was unmatched, we'll keep trying.

      To delete this request, visit: URL

      NOTE: Sends me an alert on the first try and every 7 days thereafter
    3. Increment Counter (Attribute Set Value)
      Attribute: WaitCounter
      Lava: {{Workflow | Attribute:'WaitCounter' | Plus:1}}
    4. Wait (Delay)
      Minutes to delay: 1440
    5. Reprocess (Activate Activity)
      Reactivates PROCESS activity.

And there you have it, just place that workflow on a page of your choosing and enter the URL into the API settings on simpletexting. It will dynamically create new groups as you get texts. Each time it creates a new group,it will notify a person of you choosing. If it can't find a person, it will wait until the next day to try again. If it can't find a person after 7 days, it will email you to let you know.