New answers tagged

0

Yes those are the out of the box solutions where you can handle the response via AMPScript. You can also look at the responses using the new data view SMS Message Tracking. It will log the entire message itself if you're just looking for the response and don't wish to code any logic around the response. There is also the SMS Send Log that can be enabled to ...


2

The reason for your timeout error is you are running an expensive query that is timing out after 30 minutes. Salesforce has a useful page on optimisation of query activities. Many of the points I think you'll find useful in tuning the query above, most notably the use of intermediary/staging tables and joining on Primary Key fields. Also consider the need ...


1

You'd need to first GET all your locations from the /push/v1/location REST route. And then, either update your existing message using PUT /push/v1/message/{messageId} and passing in your array of Location IDs returned in your GET to the geofences property of your PUT request or create a new message from scratch using POST /push/v1/message.


0

Typically only event-based data views that accumulate lots of records have this 6 month retention. _Job and _Subscribers for example, retain all data. From my testing the _Journey data view retains all data too, so you would be fine in this scenario.


2

You need to run this in the ENT BU to get records, as it sounds that you might have a subscriber filter configured. When you send an email to a data extension, the contacts will always be added to All Subscribers in ENT BU. These are shared across the enterprise, however you can manage subscribers so they only appear at a specific child business unit level. ...


0

Yes assuming the new version is within the 6 month window.


1

You can also use a SSJS script activity to do this. Retrieve the rows you need (up to 2500, beyond that you need WSProxy): var birthdayDE = DataExtension.Init("birthdayDE"); var filter = {Property:"Age",SimpleOperator:"greaterThan",Value:20}; var data = birthdayDE.Rows.Retrieve(filter); Add the rows to your new DE: var arrContacts = [ {Email:"jdoe@...


0

You will want to use the personalization strings below: Analytics The areas to enter these strings in the application are only available if you have web analytics functionality enabled in your account. To enable web analytics, contact your representative. %%AdditionalInfo_%% - You can enter this string value in the Send Wizard as part of a ...


2

Not being an SQL guru, I can't tell you whether this is the most efficient way of fetching and counting all the unique domains, but it at least does the job: SELECT RIGHT(Email, LEN(Email) - CHARINDEX('@', email)) as emaildomain , COUNT(Email) as EmailCount FROM [Your data extension] WHERE LEN(Email) > 0 GROUP BY RIGHT(Email, LEN(Email) - CHARINDEX('@'...


4

You can't remove specific records from a data extension using a Query Activity. Query Activities can only Overwrite, Update or Append records, not remove them. So, you'll need to take a different approach. If you want to avoid SQL, create two filtered data extensions - one with a filter selecting only records where the email address field ends with your ...


0

@Adam Spriggs is correct per this documentation: https://help.salesforce.com/articleView?id=mc_rn_march_2020_ceb_email_form_block.htm&type=5 Note too that this doesn't appear in cloud pages, rather, it's a content builder block inside of Email Studio. If your enterprise account has multiple business units, check for the functionality in your parent BU - ...


0

Regarding changing the "Sender ID" in MobileConnect: If you're referring to masking your short/long code, there is no way to mask the number legally, as it's been authorized by the carriers and aggregator to send messages exactly as it appears. That said, you can use Ampscript in your message to dynamically change the message content or any variable in it. ...


8

Just try it and take some of these: Documentation AMPscript Developer Guide (official documentation) The AMPscript Guide by Eliot Harper and Adam Spriggs Salesforce Stackexchange, AMPscript tag ​ Websites Gregory Gifford Mark Cassady Zuzanna Jarczyńska HowToSFMC Adam Spriggs Ivan Razine Jackson Chen ​ Twitter Corinna Cohen Chester Bullock Guilda ...


2

I'd recommend using AttributeValue around your personalization string: ROWCOUNT(LOOKUPROWS('DENAME', 'Id', AttributeValue("Opportunity:Id"))) > 0


0

You cannot mix data extension types, the exclusion data extension would also have to be a SFDE. I don't currently have access to reports in my instance but in the past I think you might have been able to use a SF Report as your exclusion with a SFDE.


1

Without some additional logging steps in your journey, the best you can do is use the Journey data views to determine who's been sent an email from your journey and then select those that aren't in that result. select sub.SubscriberKey , sub.Emailaddress from ent._Subscribers sub where not exists ( select j.JourneyName , j.VersionNumber ...


1

Glad to hear you're implementing InApp Messages! A) This is expected, at least partially. There is a silent push delivered to the device which will tell the SDK there is new content to fetch. This data is also fetched when your application is foregrounded. In the case where your device has not fetched the data before a foreground event, the data will be ...


1

You could use Big Query's REST API for this. The following endpoint can be used to stream data into a table: POST /bigquery/v2/projects/{projectId}/datasets/{datasetId}/tables/{tableId}/insertAll Here's the link to the documentation with more options: https://cloud.google.com/bigquery/docs/reference/rest


0

You can use inline AMPscript in that text input for the image url. Assuming the value you want populated exists in a field on your sendable data extension, the AMPscript below should work. google.com?utm_source=%%=URLEncode(attributeValue('yourDEField'))=%% Just be aware that URLEncode won't prevent PII from showing in your final URL. Also, since we're ...


0

There is no out of the box way to achieve this. De-duplication is only available for user-initiated sends because it's like a "batch" send making the logic behind easy to apply a de-duplication. Journeys are more a one-to-one sends, that's why this functionality is not available. Also, I've checked with our Salesforce Account Manager and it seems that this ...


2

You might try using cast on each element and then on the result. I ran into an issue like this when calculating open rates. This method worked in my situation. select [group] , Sales_pp = cast(cast(Net_sales as decimal(18,2)) / cast(Customers as bigint) as decimal(18,2)) , Orders_pp = cast(cast(Orders as decimal(18,2)) / cast(Customers as bigint) as ...


3

As stated in the docs for RedirectTo(): Only use this function in HTML emails within the href attribute of an (The mistake with the < instead of > is actual a direct quote from the docs) Or from AMPscript Guide: This function is required when using the <a> HTML hyperlink tag in emails when the hypertext reference (href) attribute is ...


0

Configure and use an additional AJAX call post-validation and before submission. The AJAX call sends the form fields values to an AMPSCRIPT page that only creates Lead in Salesforce, returning the ID (later passed and stored via the Smartcapture form as well). Not a very straightforward solution, but felt appropriate to be able to use Smart Capture forms, ...


0

You only need to create one definition per message template. Each send would then use that definition. So you're not creating a new definition for every single contact. I believe the example for transactional SMS is using a payload for the generic SMS triggered send as the parameter isn't listed in the documentation. It shouldn't be required for ...


0

You can put the two together you in an if statement. I assume you have some logic that needs to be true and provided that is not true then the RaiseError is what you'd need to run after. You can setup the if statement like below: set @var1 set @var2 set @var3 set @colvar1 = attributeValue("column_name1") set @colvar2 = attributeValue("column_name2") if @...


1

Yes. Salesforce themselves (a detail which might really help making a case at a customer) have put out the following: https://help.salesforce.com/articleView?id=cross_cloud_marketing_commerce_kit_engagement_models.htm&type=5 Which officially deals with retail, but tackles the general problem of leads vs. contacts and Marketing Cloud quite well. This ...


0

Yes. You can use the SDK's set attribute to set an attribute in MobilePush Demographics. And you can monitor that attribute in a Journey. Net-net-net, this should be possible.


0

Looks like something is missing from the code. on the right side of the AND there should be a condition of some kind. Currently, there isn't. Right now I would say that this snippet is invalid. Best regards.


1

Yes, it's valid -- and easy to test. I suppose you could use something like this to temporarily disable a conditional. %%[ if 1==1 and false then output(concat("<br>true")) else output(concat("<br>false")) endif ]%% Output false What you can't do (and what I think @Jackson correctly implied) is combine left operands in a conditional.


1

As @Johannes suggested, linkname is substituted at the same time the AMPscript is evaluated. I'd recommend utilizing AttributeValue, which will return an empty string if there the substitution string that doesn't exist. %%=iif(IndexOf(AttributeValue("linkName"),"http") > 0 OR empty(AttributeValue("linkName")), "unknownlink", AttributeValue("linkName"))=%...


1

No that is not accurate. It needs to be written like: %%[ IF @TableName == "Cornelius" AND @TableName == "FALSE" THEN SET @data = "12345" ENDIF ]%%


1

I believe it is because of the isUnique conditioal inside your click dataview part. Only the first click per job is unique all others are not. If you remove that part it should work as expected.


0

Check the send report for each of those emails on the two separate paths. I have found that the numbers shown in the Journey Builder UI is not always accurate. You can also update the contact record with to a field with something “Path 1” and “Path 2” and export that DE to check the numbers. Also check that those email records are subscribed and have the ...


0

Short Answer: Yes this is possible...but you probably shouldn't do it that way. Long Answer: I would highly recommend not going this way. Having the entire email passed inside of an API call is a lot of information that needs to be sent, received and processed for each email. With any decent type of volume/frequency, you are looking at potential for your ...


0

I would recommend utilizing WSProxy instead. It is likely to be faster and you can do bulk 'deletes' in a single call, instead of requiring multiple calls. In my example, I am assuming RemovalDE is a DE you created that contains all the email addresses you need removed from Preference_Management. <script runat="server"> Platform.Load("core","1"); var ...


0

I have some additional findings to this. If you have two keywords, lets say KEY1 and KEY2. A Contact is opted out of KEY1 but not from KEY2. If you send an SMS to KEY1 in this case, it will still go through. Given this, I have a hard time seeing what multiple keywords actually would be useful for. Contacts keywords Subscribe to keyword Send out goes ...


0

UPDATE: For those having the same need, here's how I got multiple records to be deleted via SSJS. Since there were 152 records, I had to prepare & format the data offline (in Excel) for proper insertion into the SSJS code in Automation Studio. Of course, if anyone has more elegant code to achieve this, please comment on this topic. SSJS: <script ...


1

A) You dont have the permissions for it B) Your Organization has only one Business Unit C) Maybe your Edition does not include it D) Salesforce has missconfigured your business unit, ask support they might reconfigure and make the service available


1

As to best practices, etc. I cannot say this is the BEST option to take, but you should be able to update via the Rows.Update SSJS as long as you have an identifier. For example, if you have a date that is attached to each of the Subscriber keys, you can use the following SSJS to update: var dE = DataExtension.Init("my_DE"); var update = dE.Rows.Update({"...


1

Do you mean the same Shord/Long code? The answer is YES, it can be done using one Short/Long code only.. Use a short code to send and receive SMS messages within the United States; use a short or long code in other countries. Reference: Keywords and Codes


0

I would suggest to add a timestamp field so you have some sort of control over which record you pick per person (say, the most recent). Then you can work with SQL to achieve a deduplication using ROW_NUMBER to assign a rownumber, and partition by / order by to get the desired record. Here is an example with "get the newest order", which similar to your ...


1

You can load it async by doing the following: Add 'async' to the collect.js library: <script type="text/javascript" async src="http://MID.collect.igodigital.com/collect.js"></script> Then add this line in the tag: var _etmc = [];


0

has_firstname would be a personalization string, which means it directly references either an attribute from the All Subscribers list or from the Data Extension being used to send the email. In order to check if the Firstname field was empty or not you would need to write some form of AMPScript to check this first and assign it to a variable. Or there are ...


3

The '%%text%%' is actually for 'Personalization Strings' and not any functions or calls. That is not to say that your request is not possible, but it will require AMPscript in order to accomplish. Basically you will want to utilize the ContentBlockByName, ContentBlockByID or ContentBlockByKey functions to call your block. To note as well, if you want to ...


3

You reference external Content Blocks using the ContentBlockByKey, ContentBlockByName and ContentBlockByID functions. For example: My name is Mike and what I say is %%=ContentBlockByName("My Contents\has_firstname")=%%, thank you for listening Also, following the #NoNakedPersonalizationStrings principle, your content block should reference first_name ...


6

I would look into using Query Studio which is much more user-friendly and better for trial and error development work. Query Studio. It will help you as you learn and get up to speed. I'd also really recommend reviewing the query/SQL documentation that SFMC has provided because it will help understand the limitations of SQL in SFMC vs the outside world. ...


2

First, the best practice is to never use a data extension for multiple journeys. It can be done, but really can cause headaches later because of dependencies. Here's my recommendation: Create a new entry data extension just for the anniversary journey and key it however you feel is necessary. Create an automation with a query that copies over data from the ...


0

AMPScript as a whole will of course be evaluated before page load. You can keep individual AMPScript parts from executing using if / else. The messageContext personalization string (https://help.salesforce.com/articleView?id=mc_es_available_personalization_strings.htm&type=5) helps to identify where the AMPscript resides. So you could write AMPScript ...


2

Yes, there is nothing wrong with firing the script asynchronously. I would actually see this as an advantage. Usually I intentionally introduce a 3-5 second delay, from the page has loaded, and until the script fires. This is to avoid storing "false" page views, as only after being on a page for a few seconds, one can assume that content indeed has been ...


1

As you're finding, DE Manager simply add/updates records in your Data Extension. It does nothing to with List Subscriptions. You have a few options. Here's a non-exhaustive list: Change to using WebCollect, rather than using DEManager. The two interfaces are very similar. Web Collect adds/updates records in Lists, rather than Data Extensions. Including the "...


Top 50 recent answers are included