Recipe - Integrated Short Codes for $25/mo
Skill level: Intermediate
Organization: West Side Christian Church
Requires Rock: 1.10.0
{# strip images & classes from the HTML but otherwise leave structure #}
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.
- Logging into our simpletexting account to see the numbers that texted in.
- 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.
Attributes:
from FT: Phone Number
text FT: Text
to FT: Text
Person FT:Person
Group FT:Group
WaitCounter FT:Integer
Alert FT: Integer
ACTIVITIES
- Start
Actions:
- Persist (Workflow Persist)
Filter: to = 94090
I usually don't set my WFs to auto persist, just in case they get lots of clicks
- Process (Activate Activity)
Filter: text is not blank
Activates PROCESS activity
- Process
Actions:
- 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 %}
- 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.
- 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.
- Create Group (Set Entity Properties)
Filter: Group is blank
Entity Type: Group
Properties
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!
- Add to Group (Group Member Add From Attribute)
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
Wait
Actions:
- 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 }}
- 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
- Increment Counter (Attribute Set Value)
Attribute: WaitCounter
Lava: {{Workflow | Attribute:'WaitCounter' | Plus:1}}
- Wait (Delay)
Minutes to delay: 1440
- 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.
Screenshots
- /GetImage.ashx?guid=103a9358-f245-495b-ae81-9c5d8b8199c5