Introducing Subflows

This week, we updated the flow engine to include subflows. This feature will allow you to start the active contact in a 'child' flow at any step, then return them to the original 'parent' flow once they've completed it. It also removes the need to copy certain elements of one flow and add them to another. For example, you can now reuse a flow dedicated to registering a new contact by calling it from any other flow. Flow redundancy is a thing of the past!

Calling a Subflow

To call a subflow, add a RuleSet to any step in a flow, select 'Run a flow', then choose the flow you'd like the active contact to enter.

Two new conditions are introduced, 'completed' and 'expired', giving you the ability to branch the active contact based on their activity in the child flow. 

New Variables

This update introduces two new variables, '@parent' and '@child', and changes the meaning of '@extra'. Previously, @extra could be used to reference: 
  1. flow fields collected in the previous flow, if a contact is moved from one flow to another via the 'Start another flow' action. 
  2. the contact fields associated with the active contact in the previous flow, if a new contact is started in a flow via the 'Start someone else in a flow' action. 
  3. JSON objects returned by a 'Call Webhook' RuleSet. 

Now, @parent takes the place of @extra for scenarios 1 and 2, while @extra is solely dedicated to JSON objects. To call a flow field from the previous flow, use the format '@parent.{flow_field}'. To call a contact field associated with the active contact in the previous flow, use '@parent.contact.{contact_field}. 

@child can be placed in the parent flow to reference flow fields collected by the child flow up to the point the contact either finished the child flow or expired from it.

Questions? Comments? Let us know; we love hearing from you. 

Follow us on Twitter to interact with a Bot built with TextIt, or create a free account to build your own. Get in touch anytime with any questions, comments, or suggestions.

Creating a Drip Messaging Campaign

Use this guide to create your first campaign. Campaigns allow you to schedule drip-style messages and flows around a date & time field unique to each of your contacts. In this article, we'll show you how to create a campaign that sends a customer satisfaction flow 7 days after the contact's purchase. 

Creating a Campaign

To create our campaign, we'll need:

(1) contact group to which the campaign will send messages. A group can be created via the Contacts page using the 'Create Group' button in the bottom left corner. Alternatively, a group can be created within the 'Add contact to a group' flow action. 

(2) A date & time contact field. A contact field can be created via the Contacts page. Click the 'Manage Fields' button to add the field and set its value type: 

(3) A campaign. Campaigns can be created via the Campaigns page using the 'Create Campaign' button. 

Each campaign operates on a single contact group: 

(4)flow to be sent out over the duration of the campaign. In this case, we'll be sending the 'Sample Flow - Customer Satisfaction' present in all new TextIt accounts. 

(5) A campaign event to send our customer satisfaction flow. An event can be created via the 'Add Event' button present within your campaign. 

A campaign event requires a contact field containing a date & time value around which it can be scheduled. 

    Scheduling the Campaign

    Now that we have our contact field created, we need to initiate the campaign. We can accomplish this by starting the contact in a flow containing a purchase confirmation message, an 'Add contact to a group' action that places the contact in the campaign's group, and an 'Update the Contact' action that'll record the time the contact received the message. 

    The 'Update the Contact' action uses the '@date.now' variable to update the 'Registration Date' contact field with the date and time the contact receives the message. 

    Once the contact has been placed in the campaign's group and our event's contact field has been updated, the campaign becomes active. You click each event to view it's upcoming messages:

    What are you building your campaign for? How is it working for you? Let us know; we love hearing from you. 

    Follow us on Twitter to interact with a Bot built with TextIt, or create a free account to build your own. Get in touch anytime with any questions, comments, or suggestions.

    Feature Update: Set your Contacts' Preferred Channels within a Flow

    We're excited to announce the addition of the 'Set Preferred Channel' action, a feature made necessary by our growing list of channel integrations. 

    Default Channel-Matching Behavior

    TextIt previously only matched contacts with channels based on the following criteria:

    If you have multiple channels of the same type connected to your account, the channel that the contact last initiated contact with will be prioritized. Contacts can be locked-in to a relationship with a specific channel (they'll only received messages from this channel) under three conditions:

    1. You have multiple channels of the same type connected to your account.
    2. The contact's address type priority corresponds with the channel type (e.g. phone number) that possess multiple channels (e.g. multiple phone numbers).
    3. The contact initiates contact through an incoming message.
    If the contact has never interacted with a channel linked to your account, TextIt will prioritize the channel whose number has the largest prefix overlap. 

    For example, if your channels are +12505661212 and +2505551212, and you are sending an SMS to or calling +2505661231, TextIt will use the +2505661212 Channel because it overlaps the most.

    In most cases, TextIt is able to discern the carrier associated with a contact's phone number and prioritize channels based on carrier, though this depends on carrier behavior.

    Custom Channel-Matching

    Now, you can create your own channel-matching logic to either assign or switch a contact's preferred channel without waiting for an incoming message. This new action will allow you to do things like: 

    • switching between channels of the same type (e.g. phone numbers). 
    • switching between channels of different types, like phone numbers and Telegram bots. 
    • assigning Android channels based on contact fields, prefix overlap or group membership (to get around throughput restrictions).
    • switching between toll-free and standard virtual numbers. 
    • assigning a number based on a user’s number’s country code, area code, and more. 

    Considerations

    TextIt will match contacts with channels according to the above-mentioned criteria until a contact enters a flow containing a 'Set Preferred Channel' action. The contact will be permanently mapped to the selected channel until (a) they send a message to a different channel or (b) their preferred channel is changed by another 'Set Preferred Channel' action.

    Questions? Comments? Let us know; we love hearing from you. 

    Follow us on Twitter to interact with a chat bot built with TextIt, or create a free account to build your own. You'll be sending messages in minutes! Get in touch anytime with any questions, comments, or suggestions.

    Anonymizing your Contacts' Personally Identifiable Information

    We're fortunate to have a strong base of research-focused customers. While we work closely with each of our customers to update and add features, the academic community has been particularly influential in TextIt's development. In fact, TextIt's campaigns module is a result of our participation in an SMS-based clinic attendance and early infant HIV testing study. Along that vein, we'd like to make you aware of a feature that might benefit research studies and those whose use cases require contact information to be handled sensitively: contact information anonymization

    Anonymization replaces each contact's name with a random code and completely remove their address (their phone number, or an ID associated with their Facebook, Telegram or Twitter accounts):

    Note that 'None' is the default value displayed for empty custom contact fields. 

    When the anonymization feature is enabled, each new contact profile, whether imported into TextIt via a spreadsheet or generated when a new contact interacts with one of your channels, is anonymized. No user will be The contact's UUID, groups, language preference and custom fields will still be accessible. By the same token, exported contact and flow information will also be anonymized. 

    Note that this feature is permanent once an account has been anonymized.

    If this isn't sufficient, we're interested to learn how we might improve this feature to accommodate a broader range of use cases.

    Contact us to enable this feature or share your thoughts. 

    Build and Test Bots for Free with TextIt

    We understand that channel costs can be an obstacle for anyone looking to build and test chatbots and messaging applications with SMS and IVR functionality. That’s why we cover your first 1,000 messages with no financial obligation. Given so many options, you should be able to evaluate your bot at no cost. Whether you’re conducting a pilot or testing your application yourself, you can use this guide to send SMS with any channel for free.

    SMS Channels

    SMS channels deliver messages on behalf of your account. They include aggregators, the TextIt Android application and carriers themselves.

    When using the TextIt app, all you need is an Android phone with our app installed and a SIM card. If you have an unlimited texting plan, testing your bot with our app won't cost you anything extra. To add your phone as a channel, navigate to the channel claim page, select ‘Android Phone’, and follow the steps provided. By contrast, aggregators offer virtual numbers which connect to your app and send messages on its behalf. Twilio has a great trial service, and offers virtual numbers in the following countries:

    • Australia

    • Austria

    • Belgium

    • Brazil

    • Canada

    • Costa Rica

    • Croatia

    • Denmark

    • Estonia

    • Finland

    • France

    • Germany

    • Hong Kong

    • India

    • Indonesia

    • Ireland

    • Israel

    • Italy

    • Lithuania

    • Malaysia

    • Mexico

    • Nexmo

    • Norway

    • Philippines

    • Poland

    • Portugal

    • Russia

    • Singapore

    • Spain

    • Sweden

    • Switzerland

    • United Kingdom

    • United States

    Another option is an international number, which can be used to deliver messages in most countries. You can use this guide to enable international permissions for your Twilio account and try global messaging for free. 

    Getting Started with Twilio 

    1. When you sign up for a your free Twilio Trial, you’ll be asked to verify your personal phone number. This is an important security step that is mandatory to trying Twilio.

    2. Head here to add your first Twilio phone number.

    3. A new Twilio number will be generated with its capabilities (Voice, SMS, or MMS) displayed below it.

    4. If the number doesn’t have the capabilities you are looking for (some numbers do not have all three capabilities), you can click the 'Search for a different number' link to find a number that better suits your needs by the country or capabilities.

    Twilio_Console_-_Phone_Numbers_Getting_Started

    5. Be sure to verify any non-Twilio phone number before sending or receiving any SMS messages to/from it.

    Development Tips

    Use these tips to get the most out of your Twilio trial!

    Phone Numbers

    • Twilio allows one number per trial account. To get a different phone number than the one Twilio assigned you automatically, you need to release the current number you have on the numbers page first.

    • Phone numbers in Beta are made available to trial accounts. Check out this article on international numbers and their capabilities to find out which numbers are currently in Beta.

    • If you upgrade your account, your trial number will be carried over and charged monthly according to current Voice or SMS rates.

    • If your phone number is unused in your trial account for more than 30 days, Twilio will remove it. 

    SMS

    • You will be able to send SMS from your Twilio SMS-enabled number, but not from your verified personal number. This rule will also apply after the trial.

    • Alphanumeric Sender IDs cannot be used with trial accounts.

    • When you send an SMS from your free trial phone number, it will begin with “Sent from a Twilio Trial account”. This message will be removed once your account has been upgraded.

    • You may be eligible to use Global SMS on your trial account. Find out more here.

    Voice

    • Be sure to verify any non-Twilio phone number first by having Twilio place a verification call to it. This is an extra security measure that Twilio removes once you’re calling from an upgraded account.

    • There are a limited number of countries your Twilio account can make calls to. Upgraded accounts have the ability to enable permissions to call almost any country from your Twilio app.

    • Trial Accounts can only use either your account’s Twilio number, or a Verified Caller-ID, as the Caller-ID/From number when making outgoing calls.

    • Calls to and from your free trial phone number will play a short trial message before your TwiML runs.

    • Calls are limited to 10 minutes.

    Social Media

    Social media channels, which include Facebook MessengerTelegram and Twitter, are free!

    Zapier

    You can can use our Zapier app to integrate your bot with other services. Once you've clicked the invite link, you can use a trial Zapier account to setup your integrations. 

    Questions? Comments? Let us know; we love hearing from you. 

    Follow us on Twitter to interact with a chat bot built with TextIt, or create a free account to build your own. You'll be sending messages in minutes! Get in touch anytime with any questions, comments, or suggestions.

    Send SMS Anywhere in the World

    Did you know you can use TextIt to send SMS anywhere in the world? TextIt's channels module allows you to connect virtual numbers and short codes world wide to your account through services like Twilio, Nexmo, Plivo or the carriers themselves. A perfect example is a recent SMS campaign conducted by the United Methodist Church, which used a combination of channels to send over 80,000 text messages to over 3,300 contacts across 12 countries in 4 languages in just 3 weeks.

    Virtual Numbers

    Virtual numbers (VNs) connect to your app to send and receive SMS on its behalf. Aggregators are listed in the channel claim page in your TextIt account, where we make recommendations based on your location:

    In most cases, they can be purchased for $1-2 per month from TwilioNexmo, or Plivo, and connected to your TextIt account in seconds. All you need is an account with an aggregator; connecting your numbers is as simple as providing us your account Token and Secret. After that, your numbers will be displayed for use.

    Local VNs vs International VNs

    VNs can be either local or international, with local being the most common. Local VNs are sourced from a specific country and most performant there, while international numbers are capable of sending messages globally but may be less performant depending on the country you wish to send messages to. 

    Local VNs are currently available in the following countries (and more are being added every month!):

    • Australia
    • Austria
    • Belgium
    • Brazil
    • Canada
    • Costa Rica
    • Croatia
    • Denmark
    • Estonia
    • Finland
    • France
    • Germany
    • Hong Kong
    • India
    • Indonesia
    • Ireland
    • Israel
    • Italy
    • Lithuania
    • Malaysia
    • Mexico
    • Nexmo
    • Norway
    • Philippines
    • Poland
    • Portugal
    • Russia
    • Singapore
    • Spain
    • Sweden
    • Switzerland
    • United Kingdom
    • United States

    If your country isn’t on this list, but you know of a local aggregator that provides VNs and/or short codes, let us know. We’d be happy to add them for you.

    Android Relayer

    If you plan to send 1,000 or less messages per hour, the TextIt Android application is a convenient alternative to VNs and short codes. Simply download the app on your Android phone, connect it to your TextIt account, and start sending. Note that you can add as many relayers to your account as needed. You can learn more about Android relayers here, and use this guide to start sending.

    Short Codes

    Short codes are your best option if you expect to send a high volume of messages and aren’t able to locate a local aggregator in your region. Short codes can be acquired by carriers themselves, and you can use sites like OpenSignal to determine which has the most coverage. Once you’ve acquired your short code, we can connect it for you.

    Social Media

    If SMS isn’t ideal for your use case, you can use TextIt to reach anyone on Facebook Messenger, Telegram and Twitter.

    Considerations

    Note that each account operates within a single time zone, and that accounts with multiple international channels behave the same as others. International channels are first matched with contacts by country, then by number prefix. If sending via Twilio numbers, you can create a messaging service that adds additional logic to channel matching through your Twilio portal.

    Questions? Comments? Let us know; we love hearing from you. 

    Follow us on Twitter to interact with a chat bot built with TextIt, or create a free account to build your own. You'll be sending messages in minutes! Get in touch anytime with any questions, comments, or suggestions.

    Remind your Contacts to Respond to a Flow

    Use this guide to build a system that automatically restarts contacts in a flow–or sends a reminder message to nudge them along–after a given period of inactivity.

    What You’ll Need

    To set this up, you’ll first need to create each of the following:

    • A group in which contacts who enter your flow will be placed, e.g. ‘Medication Reminder Timer’.
    • A campaign that operates on ‘Medication Reminder Timer’.
    • A contact field (e.g. ‘Timer Start’) that’ll store the time the active contact enters your flow, and will be updated each time the contact responds.
    • A flow:

    •  A campaign event that contains either a single reminder message or a flow to start. This guide uses a single message:

    • Set your flow to expire inactive contacts after a reasonable amount of time: 

    Group Actions

    After completing steps 1-4, you'll need to modify the flow to ensure all contacts who enter it are placed in the 'Timer' group and removed once they complete it: 

    Contact Fields

    Next, you'll need to add an Update Contact action that stores the time at which a contact reaches each step:

    Add one to each ActionSet (except the last) to ensure the date and time of each response is recorded: 


    That's all there is to it. Each time a contact reaches a new step, the 15 minute timer will restart. If they don't move to the next step in the next 15 minutes, they'll receive a reminder. This method can be used to start other flows, restart the current flow, and even keep track of the amount of timeouts each contact accrues. 

    Questions? Comments? Let us know; we love hearing from you. 

    Follow us on Twitter to interact with a chat bot built with TextIt, or create a free account to build your own. You'll be sending messages in minutes! Get in touch anytime with any questions, comments, or suggestions.

    Easily Store & Retrieve Data Outside of TextIt w/ Zapier, Google Sheets

    Quickly and easily configure your flows to communicate with a Google Sheets 'database' without writing a single line of code. Google Sheets are handy for storing data outside of TextIt that can then be distributed to any of your contacts. 

    A few weeks ago, we announced a private TextIt Zapier app to gauge interest in a first-class integration. Since then, we’ve found Zapier to be an invaluable tool to users with use cases that require external services, e.g.: 

    • Distributing and verifying coupons and vouchers. 
    • Adding contacts who complete a web form to a flow. 
    • Adding Salesforce contacts to flows. 
    • Use HookPress to trigger flows from actions taken on your Wordpress site.

    The high-level, low-requirement functionality Zapier provides falls in line with the purpose of TextIt: enable anyone, regardless of technical know-how, to build highly performant messaging applications and chatbots.

    A first-class TextIt Zapier app is on its way. In the mean time, you can follow this link while signed-in to your Zapier account to gain unlimited access. Worried about managing the costs of both services? Don’t sweat it. The great thing about private Zapier apps is that you can use them to build multi-step Zaps on a free plan (a restriction if using only global apps).

    This article highlights the integration we’ve observed to be the most useful: TextIt <> Google Sheets. Why Google Sheets? It enables you to create one or more external databases and connect them to TextIt in minutes. First, a primer on data storage within TextIt.  

    Data Storage within TextIt

    There are two ways to store and distribute data via your TextIt account. The first is via flows. Inside a flow, you can use RuleSets to collect data from your contacts which is then stored as a flow field with a corresponding flow variable, initiated by the '@flow.' variable prefix. You can then distribute data via Send Message actions. The second is via Contact Fields, which allow you to store data as attributes on each contact, though no contact can reference another (unless they're started in a flow when another contact reaches a Start Someone Else in a Flow action in a separate flow, in which case they can reference the previous run's fields (using the '@extra.flow.' variable prefix) or the contact (using the '@extra.contact.' variable prefix).  

    Data Storage Outside of TextIt

    While flows are useful for collecting and distributing data stored within your account, they can also be used to communicate with external services, like Zapier, allowing you to automatically store and edit data outside of TextIt so it can be accessed by all of your contacts. Storing data outside of TextIt is useful in a variety of contexts, particularly:

    • Storing, distributing and verifying coupons and vouchers.
    • Storing flow fields outside of TextIt instead of creating new contact fields. 
    • Managing signups for an event, service or job. 

    A. Barr Simpson

    What better way to demonstrate this configuration than an example? A. Barr Simpson, a distributor and manufacturer of fountain soda products, uses TextIt's Zapier app to manage its padlock spreadsheet. A. Barr Simpson delivers certain products with a lockbox. In order for customers to receive the product's code, they must interact A. Barr Simpson's TextIt application. 

    Account Verification

    Customers send the keyword 'code' to interact with the flow that distributes padlock codes: 

    The flow (1) asks for the active contact's account number, (2) uses 'Split by Expression' RuleSets to convert the contact's name, phone number (in E.164 format) and the date and time at which the contact requested the code to flow fields and (3) posts this information to the URL that our 'Webhook Action' trigger provides (click here for a comprehensive guide to our 'Webhook Action' trigger).

    The intended destination for this information is A. Barr Simpson's padlock spreadsheet. Here's a simplified example:

    This spreadsheet will eventually contain the information of the customer who last looked-up the code and the driver who last updated the padlock's code. I entered the account number '1010101', so the row containing this number will be updated. 

    This is where things get tricky. If you intend to lookup a row and update it, you first need to add an 'Update Spreadsheet Row' action to your Zap:


    Once the spreadsheet and worksheet have been chosen, I click the 'Add a Search Step' button. This will add the lookup action that allows Google Sheets to find the row it will eventually update: 


    In the 'Lookup Spreadsheet Row' action, I'll need to add the column you'd like Google Sheets to lookup and the value (provided by the first step in your Zap, the TextIt 'Webhook Action' trigger) I'd like it to match. In this case, I'm looking up the 'Account Number' column in the Google Sheet and matching it with the 'Account Number Rule Value' value ('Account Number' being the name of the flow field created by the RuleSet that collects the contact's account number, and 'Rule Value' being the value that's created after the contact's response passes through its 'has a number' response rule):


    Once this step is completed, I arrive at the 'Update Spreadsheet Row' action I started earlier. You'll notice that the 'Row ID' field now contains 'Use a Custom Value' (the value taken from the TextIt 'Webhook Action' trigger: the contact's account number). I enter the TextIt 'Webhook Action' trigger values I'd like each column to contain, then complete the step:
     

    Zapier will then update the spreadsheet with the sample data I've selected. From here on out, these will be the data updated to my spreadsheet when a contact completes the associated flow. 

    Code Distribution 

    Next, I add a 'Start Contact in Flow' TextIt action to my Zap that starts a flow that distribute's the padlock's code. Here's an example of how that flow might look:

    Notice the '@extra' variables. These will be used to reference values in my spreadsheet. When the contact starts the flow, they'll be replaced with the values I choose. I've also added Send a Message to Someone Else and Send Email actions to notify me when a customer has accessed their padlock code. 

    There are three ways to start a contact in a flow via the TextIt 'Start Contact in Flow' Zapier action:

    • Specifying their group(s)
    • Specifying their UUID(s)
    • Specifying their phone number(s)

    Note: To pass a contact's UUID to Zapier, simply create a 'Split by Expression' RuleSet that converts the variable '@contact.uuid' to a flow field: 

    The contact's phone number will work just fine for this example. Note that the 'Restart Participants' field must always have the value 'Yes'. This ensures contacts who've already completed this flow will be able to enter it again.  

    Finally, I'll add the extra fields that will correspond with the '@extra' variables in my flow: @extra.account, @extra.code, @extra.name and @extra.date:

    Note that field names entered in this step are case-sensitive; always use lowercase letters. 

    That's it! Turn on your Zap, organize it with a folder, and sit back as TextIt and Zapier automate the rest!

    Questions? Comments? Let us know; we love hearing from you. 

    Follow us on Twitter to interact with a chat bot built with TextIt, or create a free account to build your own. You'll be sending messages in minutes! Get in touch anytime with any questions, comments, or suggestions.

    How to Restrict Access to Flows

    TextIt is a visual programming language used to build messaging applications and chat bots. A core concept of this language is the flow: a series of of actions and rules used to build branch logic (also called "conditional branching" or "skip logic"). An application or chat bot may comprise a single flow, or many connected by Start Another Flow or Start Someone Else in a Flow actions. Being that any single account may contain more than one application or bot, we'd like to explain how you can restrict access to each of your flows (and, by extension, your applications or bots). 

    First, it's helpful to understand how the modules that comprise your account interact. Each account contains channels, contacts, flows, campaigns and triggers. In this article, we focus on channels, contacts, flows and triggers. 

    Channels & Contacts

    Your account may contain one or more channels, which are essential for messaging. Each time a new contact sends a message to once of your channels, they're added to the Contacts Tab and assigned to that channel. If you have multiple channels of the same type connected to your account, TextIt will prioritize the channel the contact last messaged. Once a contact is assigned to a channel, they'll only received messages from that channel (until they send a message to a different channel connected to your account). Specifically, the following conditions must be met for a contact to be assigned to a channel:

    1. You have multiple channels of the same type connected to your account.
    2. The contact's address type corresponds with the channel type (e.g. phone number) of one or more of your channels.
    3. The contact messages the channel.

    Note that if you have multiple Twilio numbers connected to your account, you can create a Messaging Service via the Twilio console to add additional logic to modify your channels' message routing behavior. See this guide to learn more. 

    Flows & Triggers

    Flows can be triggered by keywords, dates and times, messages not caught by existing triggers, and more. In this article, we focus on keyword triggers. Keyword triggers are convenient because they enable contacts to initiate flows on their own time. When implemented correctly, they can serve the purpose of assigning a contact to a channel and a flow at the same time. All you need to do is choose the groups you'd like the trigger to apply to: 

    Putting it Together

    Once you've mapped your desired channel relationships, you can restrict access to your flows by assigning groups to your keyword triggers. If a contact doesn't belong to one of the keyword's groups, they won't be able to interact with the flow. 

    Questions? Comments? Let us know; we love hearing from you. 

    Follow us on Twitter to interact with a chat bot built with TextIt, or create a free account to build your own. You'll be sending messages in minutes! Get in touch anytime with any questions, comments, or suggestions.

    TextIt Updates: Week of May 1st

    Each week we highlight new articles and changes to the platform, as well as tips intended to help you get the most out of TextIt:

    Updates

    • Consecutive messages sent to the same contact are now delayed by one second to ensure they're delivered in order. Stack away!
    • Your contacts' profiles now display failedunansweredbusy, and canceled calls.

    Tips

    • Keyword, missed call, and uncaught message triggers give you the option of selecting the group(s) to which they apply. This allows you to limit flow access. 

    • The Message Tab allows you to see which messages are sent by your flows, and which aren't. The 'Inbox' tab displays incoming messages not handled by your flows, while the 'Flows' tab only displays incoming messages handled by your flows.  
    • Those looking to display flow results in real time can do so via a TextIt/Google Sheets Zapier integration. Follow this tutorial to build your own dashboard to display the results. 

    Follow us on Twitter to interact with a chat bot built with TextIt, or create a free account to build your own. You'll be sending messages in minutes! Get in touch anytime with any questions, comments, or suggestions.