Skip to main content

Send transactional SMS from MobileConnect in Salesforce Marketing Cloud

The ability to send transactional SMS to customers is an indispensable feature, especially for companies selling to individuals. In this short article, I will describe how I have addressed this use case.


Long story short, there is no such thing as Transactional SMS sends in Marketing Cloud. This functionality is only available when sending emails leveraging Send Classifications in Email Studio.

In fact, not checking the “Honor source and publication list level opt outs” checkbox will ignore the contact’s status on AllSubscribers, opening the doors for your transactional emails.

I had to figure out a way to do the same within MobileConnect. After digging in the documentation, I did not find a “standard” way to achieve this. I had to look elsewhere. I was happy to find out that I can use keywords. However, it did not last very long before I learned that there are many limitations.

I created two keywords, WithConsent & NoConsent to separate transactional and promotional SMS sends. I’ve also created two queries:

Query 1

Populate contacts that have a valid MobileNumber.

Query 2

Populate contacts that gave their consent to receive SMS messages and have a valid MobileNumber.

Every contact that have a valid MobileNumber will be uploaded to AllContacts through ContactBuilder and associated to NoConsent keyword. Moreover, contacts who gave their consent and have a valid MobileNumber will be uploaded to AllContacts and associated to WithConsent keyword. In addition, since Journey Builder gives the possibility to send SMS to contacts that are subscribed to at least one keyword, it was perfect for transactional sends.

The problem was with the promotional sends. The second option (cf image below) allows you to associate your SMS activity to a keyword and subscribe the contact to this keyword if he is not. At least, this is the description given in the UI by SFMC. But after conducting several tests, I found out that this is not the real behavior.

SMS delivery options in Journey Builder

There is actually two use cases when choosing the second option (Subscribe all contacts to a Keyword):

Use case 1

If the contact has been attached to this keyword in AllContacts, then Journey Builder will respect the consent. The contact will only receive the SMS if he has opted in. In case he is Opted out from this keyword, he will not receive the SMS and will not be re-opted in.

Use case 2

If the contact has not been attached to this keyword on AllContacts, he will receive the SMS and will be Opted-in to the keyword.

The problem with the Use case #1 is, there is no way of unsubscribing contacts from a keyword in bulk. In other words, unless we do it manually on every contact on Contact Builder > AllContacts > YourContact > Membership, I could not unsubscribe contacts from WithConsent keyword.

Note 1

There is no such thing as Unsubscribe a contact from a keyword in Marketing Cloud, except in Australia.

Note 2

When a contact sends STOP to the short code, he will be unsubscribed at the account level, will be marked as Inactive, and hence will no longer receive any SMS messages.

The problem with Use case #2 lies in the fact that I’ve uploaded and attached all contacts to NoConsent keyword, and if by any chance I forget to check the consent of the audience before injecting it into Journey Builder, and chosed the second option, contacts who are basically opted out will receive the SMS and will be attached to the WithConsent keyword.

Finally, I’ve decided to keep one keyword: NoConsent. Every contact with a valid MobileNumber will be uploaded to AllContacts and attached to this keyword. The consent logic is implemented when populating the audience and contacts that are not opted in are excluded.

What would you have done in this case? I would love to read from you..