Two-way messaging and keywords auto responses

Enable and automate two-way messaging with your customers through SMS and mobile messaging

Two-way messaging lets your customers reply directly to text messages from your campaign. This works well for collecting NPS responses or customer feedback via mobile message.

Paired with keywords auto-responses, customers can unsubscribe, subscribe, or ask for help by replying with words like “STOP”, “JOIN”, or “HELP.” This feature helps US-based businesses comply with TCPA and CTIA requirements for SMS marketing.

Supported channels

How it works

Two-way messaging

When a customer replies to a message sent from your dedicated phone number, the mobile messaging vendor forwards the message to Bloomreach Engagement. If enabled, Bloomreach Engagement processes the incoming message and tracks a campaign event with the status incoming_message to the customer profile.

This allows you to:

  • Report NPS ratings.
  • Trigger automated follow-up scenarios based on replies.

Keyword auto-responses

When a customer replies with a matching keyword, the system immediately sends the corresponding auto-response. The message is sent to any phone number without checking if it belongs to an existing customer profile or if the customer has messaging-related consent.

The auto-response includes:

  • A consent action (revoke consent, grant consent, or no action)
  • A real-time auto-reply message

To send the auto-reply message, Bloomreach Engagement uses:

  • Your default provider for the relevant channel.
  • The recipient field (message.from) from the incoming webhook as the sender.
  • The sender field (message.to) from the incoming webhook as the recipient.

Requirements

Integration requirements

You'll need:

  • Sinch or Infobip integration for relevant channels (SMS, MMS, RCS, WhatsApp).
  • A dedicated phone number (short or long) for receiving customer messages—customers can't reply to alphanumeric senders.

Customer profile requirements

Phone numbers must be stored within the phone customer attribute using the international format (starting with "00" or with "+"). For example, +441234556789 or 0044123456789. If you use a different phone number format (for example, without leading zeros), modify the format using Jinja.

We recommend using the phone number as a soft ID to:

  • Enable new customer subscriptions via text-to-join. This also helps merge profiles later if a customer creates a profile via another channel.
  • Prevent duplicate messages when multiple profiles have the same phone number.

Consent category requirements

You'll need to create consent categories for each channel. Define which categories are used for SMS, MMS, RCS, and WhatsApp (maximum 5 categories).

Long codes (9-11 digits)

If you require customers to reply to your messages (for example, using keywords to opt out), their carrier may charge them for replying, depending on their plan and message type.

Replies to long codes are usually treated like regular SMS messages:

  • Unlimited texting plans: Usually no extra charge.
  • Pay-per-text plans: Charged per message based on carrier’s rates.

Short codes (4-6 digits)

Charges vary by type:

  • Standard rate: Billed like regular SMS; often free with unlimited plans.
  • Premium rate: Often linked to services like voting or donations, and may have extra fees. These fees are usually stated in the message.
  • Free-to-end-user: No charge if you cover the costs.

For exact charges, subscribers should check with their carrier, as policies vary across carriers and regions.

Keyword matching

Keywords match when they:

  • Appear at the start of a message.
  • Form a whole word followed by space or comma.
  • Match regardless of case.
  • Match regardless of accents or whitespace.

Additional rules:

  • Regex keywords are accepted.
  • Maximum 50 distinct keywords per category.
  • For MMS replies, all message parts are checked.

Keyword matching example

Example with opt-out keywords: "stop" (English) , "arret" (French).

Will trigger opt-out:

  • "STOP", "Stop", "stop", " stop", "šťóp", "stopwatches"
  • "Arret", "ARRET", "arret", "arrêt"

Won't trigger opt-out: "Please stop", "Unsubscribe me", "Garret", "barret"

Consent actions and auto replies

The system tracks the consent and campaign events based on the customer profile handling rules.

Revoke consent action (opt-out/unsubscribe)

A revoke consent action tracks 2 types of events to the matching customer profiles. They are processed in near real time (subject to network operators):

Event typeParameterNotes
consentaction=rejectWhen setting up the consent action, you must select consent categories. One consent event for each category will be tracked.
campaignstatus=incoming_messageN/A

When the message is received by Bloomreach Engagement, the phone number is immediately blocklisted. Messages can't be sent to blocklisted numbers unless using General consent or if a consent "accept" event occurs later.

🚧

Important

The system unsubscribes up to 10 customer profiles with the matching phone customer attribute. If there are more than 10 profiles, sending messages is still blocked, but consent events won't be tracked to those additional profiles.

Grant consent action (opt-in/subscribe)

A grant consent action tracks 2 types of events to the customer profile, which will be processed near real time (subject to network operators):

Event typeParameterNotes
consentaction=acceptWhen setting up the consent action, you must select consent categories. One consent event for each category will be tracked.
campaignstatus=incoming_messageN/A

If no existing customer profile with a matching phone number exists (such as in the text-to-join use case), the ID selected under Map new subscribers ID is used to create a new profile.

  • Phone numbers are saved in international format with leading zeros.
  • If not configured, only existing profiles will be subscribed. A grant consent message from an unknown phone number will be discarded, no profile will be created, and no events will be tracked.

No action

A no consent action tracks only one type of event to the customer profile, which will be processed near real time (subject to network operators):

Event typeParameter
campaignstatus=incoming_message

Consent events

For consent events generated by keywords for grant and revoke consent action, the system tries to find all matching customer profiles (up to 10 customer profiles). The system conducts periodic checks every few minutes to look up the customer profiles matching the phone number based on the phone number attribute.

  • Existing customers found
    • The system will track consent to max 10 customer profiles with the matching phone customer attribute.
    • Note: For the Revoke consent action, if there are more than 10 profiles with matching phone numbers, sending messages will still be blocked using the blocklist. However, no consent event will be tracked to those profiles.
  • New customer
    • If no existing customer profiles matching the phone customer attribute were found, the revoke consent events are discarded. A new customer profile is created for the grant consent action.
    • The configured Map new subscribers ID is used to create the customer profile. Phone numbers in the international format with leading zeros, for example, 0044123456789, will be used as the value for the selected ID. Consent events are tracked to the new profile.

If the incoming message is from a phone number linked to an existing profile that has previously received at least one mobile messaging campaign from the respective channel, then consent events to this profile are tracked in real time.

Customer profile handling

Campaign events for incoming messages and auto-replies are tracked to one customer profile, either in real-time or through periodic processing.

Real-time processing

Real-time processing happens when:

  • The incoming message comes from a phone number linked to an existing profile.
  • The profile has previously received at least one mobile messaging campaign.
  • The internal customer ID is included in the callback data.

Each outbound message sent from the Engagement platform contains callback data, which includes unique customer and campaign identifiers. This data is returned by the SMS vendor (such as Sinch or Infobip) as part of the inbound message. Using this data, Bloomreach Engagement can track events specific to the customer in near real-time, subject to the conditions set by network operators.

Periodic processing

Each outbound message sent from Engagement usually contains callback data (unique customer and campaign identifiers). The messaging vendor (Sinch/Infobip) returns this data as part of the inbound message. Based on this data, we are able to track events to the specific customer in near real time (subject to network operators).

If there's no prior communication or callback data is missing, the system checks every few minutes to find matching customer profiles and selects one based on:

  • Latest mobile messaging recipient: The system first attempts to link the inbound message to the customer who most recently received a mobile messaging campaign.
  • Newest customer: If the latest recipient criterion doesn't apply, the system associates the message with the profile created most recently.
  • Creating anonymous profiles: If no matching profiles are found, events are usually discarded except for grant consent actions. In those cases:
    • A new profile is created using the configured Map new subscribers ID.
    • The profile gets an inbound identifier (for example: inbound-abcdefgh-1234-5678-9101-abc123def456) in the soft ID cookie. If the cookie isn't accessible, an alternative soft ID is employed.
    • The phone number is stored in the customer's phone attribute value.

When a phone attribute is updated in any profile, the system checks for anonymous profiles with the same number and merges them.

Multiple profiles with the same phone number

If multiple profiles share a phone number and a customer replies with "STOP":

  • All profiles (up to 10) get consent rejection tracked.
  • Only one profile gets the incoming message event tracked based on the customer profile handling rules.

This prevents duplicate tracking while ensuring all profiles are unsubscribed.

How to set up two-way messaging and keyword auto-responses

Configuration

  1. Contact your CSM to enable the "Two-Way Messaging" account module.

  2. Go to Project Settings > Channels > SMS / MMS / RCS (or Project Settings > Channels > Mobile messaging for WhatsApp).

  3. Set Sinch or Infobip as your default provider for the relevant channels.

  4. Under Two-Way mobile messaging, enable Track incoming messages.

  5. Configure your Keyword auto-responses with keywords, consent actions, and auto-replies. When setting up your keywords, follow keyword matching rules.

🚧

Important

We recommend using Consents, not Legitimate interest, as the consent category for SMS campaigns. When legitimate interest is used, phone number blocking also works for newly created customers.

Test out the keyword auto-responses

To test your setup:

  1. Send a keyword (like "STOP") to your dedicated sender number.
  2. You should get the auto-reply right away and see the events.
  3. Check Data & Assets > Customers to verify the consent event (action = reject) and campaign event (status = incoming_message).

Event tracking

Incoming message tracking

Incoming messages will be tracked as a campaign event or custom event configured in mapping.

Event propertyValueDescription
statusincoming_message/
action_typesms, mms, rcs, whatsappChannel used: SMS, MMS, RCS, WhatsApp
timestampmessage.received_at or postback.timestampWhen the system received the message.
messagemessage.body or postback.contentThe text of the received message.
For MMS: The received message is constructed from the MMS message parts received. The media will be attached as a URL.
sendermessage.fromThe sender's (customer's) phone number from which the message originates.
recipientmessage.toYour dedicated sender phone number (SMS/MMS) or callback ID (RCS/WhatsApp).
subjectpostback.message-subjectReceived message subject.

For more technical information on inbound messages, read the Sinch SMS or Infobip SMS documentation.

Consent tracking

The consent event is tracked to all customers with a phone number matching the sender's number.

Event propertyValueDescription
timestampmessage.received_at or postback.timestampThe time at which the operator received the SMS/MMS.
imported_timestampThe time of consent is tracked.
actionaccept, reject/
sourcesms_reply, mms_reply, rcs_reply, whatsapp_replyIndicates through which channel the consent was provided.
categoryconsent categoryThe consent category is specified in the SMS opt-out configuration.
identificationphone number: 00421905123456The sender's (customer's) phone number from which the message originates.
identification_typephone/
messagemessageFor example: "stop". The text of the received message that triggered the unsubscription.

Auto-reply message tracking

An auto-reply action tracks a campaign event or a custom event configured in mapping.

Event propertyValueDescription
statusenqueued, enqueue_failed/
action_typesms, mms, rcs, whatsappIndicates the channel used.
campaign_nameAuto-reply keywordsStatic system-generated value.
action_nameOpt-out keywordsName of the keyword response configuration.
sendermessage.to field from incoming messageSender's (customer's) phone number from which the message originates
recipientmessage.from field from incoming messageDedicated sender phone number requires setup on the service provider side (Sinch/Infobip).
sent_timestamptimestampTimestamp of when the message was sent.
messageYou have unsubscribed from SMS…Text of the auto-reply message.
number_of_message_partsnumberNumber of message parts sent. One message part is 160 characters.

Blocklisted phone numbers

There is a delay between blocklisting a phone number and the related consent events being tracked to the corresponding customer profile. If a campaign runs during this small time window and attempts to send a message to the blocklisted phone number, a status property with value enqueue_failed is tracked.

Limitations

  • You must have a dedicated phone number (short or long number) for incoming messages. Customers can't reply to alphanumeric senders (for example: Kiwi.com ).
  • Customer phone attributes must use the international format (starting with "00" or "+").
  • Consents are tracked to a maximum of 10 matched profiles.
  • Blocklisting by revoking consent overrides all consent categories. SMS can be sent only under general consent.
  • Phone numbers remain on the blocklist indefinitely, preventing message sending for all profiles that didn't receive the consent reject event (if there were more than 10 profiles), including profiles created in the future.
  • Incoming messages are handled based on the customer profile handling rules.
  • Revoke content and Grant consent actions apply to the consent categories selected in the auto-response settings, not the consent category that was used to send the campaign (SMS or Mobile messaging action node in scenarios).
  • SMS and mobile messages to blocklisted numbers can only be sent under general consent
  • Keywords revoke and grant consent categories selected in the auto-response project settings, not the consent category that was used to send the SMS campaign (SMS action node in scenarios).
  • If SMS campaign events are disabled, incoming messages aren't tracked.

Keyword limits

  • Maximum 20 distinct keyword auto-response configurations.
  • Maximum 100 distinct keywords per configuration (each up to 20 characters).
  • Maximum 5 consent categories can be selected.
  • Maximum 10 customers are unsubscribed per phone number.