You are currently viewing Sử dụng AMPscript trong MC Script Activity

Sử dụng AMPscript trong MC Script Activity

Script Activity trong Marketing Cloud ấy hả? Nghe oai vậy thôi chứ cũng khó ở ra phết.

Bạn tưởng có thể thỏa sức viết code làm đủ trò? Ừ thì được đấy… miễn là bạn “nói” bằng ngôn ngữ SSJS. Còn AMPscript à? Xin lỗi, ở đây không tiếp.

Vấn đề là nhiều function ngon ăn của AMPscript như EncryptSymmetric , DecryptSymmetric, CreateSalesforceObject, …. thứ mà ai làm Marketing Cloud cũng mê thì SSJS lại… không có. Đúng kiểu đi chợ mà không có ví.

Nhưng đừng vội bỏ cuộc. Gâu Đần có một mẹo nhỏ này để bạn vẫn có thể lén mượn tạm sức mạnh của AMPscript ngay trong Script Activity. Đây không phải tính năng chính thức mà là một cách hack, nhưng đủ để giải quyết khối việc đau đầu.

Cách làm ra sao? Đọc tiếp là biết liền.

AMPscript limitation in Script Activity

Nói cho rõ thì AMPscript và SSJS có thể kết hợp dùng chung với nhau được, bằng cách set và get variable value. Bạn có thể đọc bài trước này của Gâu Đần: Set và Get từ AMPscript sang SSJS và ngược lại

Nhưng khi dùng với Script Activity trong Automation Studio, thì sẽ báo lỗi đoạn code sử dụng AMPscript

Cách duy nhất để dùng AMPscript trong Script Activity là convert hoàn toàn phần code đó sang SSJS. Tuy nhiên một số function rất khó để convert, hoặc vốn nó đã là một built-in function out of the box rồi nên reinvent the wheel khá là ngu ngốc và tốn nhiều công sức.

TreatAsContent function – The Savior

Cách hack mà Gâu Đần muốn nhắc đến đây là dùng TreatAsContent function để bắt SSJS coi một đoạn AMPscript string như một loại content, từ đó tạo môi trường để khởi chạy đoạn code

Syntax:

<script runat="server">
     var content = Platform.Function.TreatAsContent("stringContent");
</script>

Let’s make some code

Cụ thể cần phải làm sao thì chúng ta hãy cùng theo dõi ví dụ sau đây.

Use Case

Tôi muốn dùng AMPscript DecryptSymmetric function trong Script Activity, để có thể decrypt client ID và client Secret, từ đó dùng những value được giải mã để call API.

Bạn có thể đọc thêm bài NÀY để hiểu làm sao để mã hóa và giải mã trong Marketing Cloud.

Idea

Viết một SSJS function, trong đó có chứa AMPscript string rồi dùng TreatAsContent function để chạy đoạn AMPscript này.

Chẳng hạn để decrypt trong AMPscript ta có code block sau:

%%[
    set @pwd = 'pwd external key'

    set @salt = 'salt external key'

    set @iv = 'IV external key'

    set @encyptedClientId = '/lOpOxSD/fFhAFAEyS7pt9OKOC9JU+MOKJbZ6VXs5lM=' /* gaudan client Id */
    set @encyptedClientSecret = 'iSBrMlw5fMBqh59qKPXKD6UB3orkhI5LdAYYZ0TEot8=' /* gaudan client Secret */

    set @clearClientId = DecryptSymmetric(@encyptedClientId, 'AES', @pwd, @null, @salt, @null, @iv, @null)

    set @clearClientSecret = DecryptSymmetric(@encyptedClientSecret, 'AES', @pwd, @null, @salt, @null, @iv, @null)
]%%
Clear Client Id: %%=v(@clearClientId)=%%<br>
Clear Client Secret: %%=v(@clearClientSecret)=%%<br>

Output:

Clear Client Id: gaudan client ID
Clear Client Secret: gaudan client Secret

Để convert một AMPscript function sang SSJS ta sẽ dùng template sau:

<script runat="server">
Platform.Load("Core", "1.1");

function YourFunction(parameter){
    var AMPscriptContent = "\%\%["
        AMPscriptContent+= "Convert your AMPscript block to String here";
        AMPscriptContent+= "]\%\%";

    var executeAMPscriptBlock = Platform.Function.TreatAsContent(AMPscriptContent);
    
}
</script>

Coding

<script runat="server">
Platform.Load("Core", "1.1");

// Encrypted credentials
var encyptedClientId = '/lOpOxSD/fFhAFAEyS7pt9OKOC9JU+MOKJbZ6VXs5lM=';
var encyptedClientSecret = 'iSBrMlw5fMBqh59qKPXKD6UB3orkhI5LdAYYZ0TEot8=' ;


var clearClientId = DecryptSymmetric(encyptedClientId);
Write('Clear Client Id: ' + clearClientId + '<br>');
var clearClientSecret = DecryptSymmetric(encyptedClientSecret);
Write('Clear Client Secret: ' + clearClientSecret + '<br>');

/* Do something next when you have decrypted Client Id and  Client Secret */


function DecryptSymmetric(data){

    var AMPscriptContent = "\%\%["
        AMPscriptContent+= "set @pwd = 'pwd external key' ";
        AMPscriptContent+= "set @salt = 'salt external key' ";
        AMPscriptContent+= "set @iv = 'IV external key' ";
        AMPscriptContent+= "set @clearData  = DecryptSymmetric('" + data + "', 'AES', @pwd, @null, @salt, @null, @iv, @null) ";
        AMPscriptContent+= "Output(Concat(@clearData))";
        AMPscriptContent+= "]\%\%";

    //Write(Stringify(AMPscriptContent) + "<br>");
    var clearData = Platform.Function.TreatAsContent(AMPscriptContent);
    return clearData;
}

</script>

Output:

Clear Client Id: gaudan client ID
Clear Client Secret: gaudan client Secret

Conclusion

Vậy là hết bí. Dù Script Activity chỉ chơi với SSJS, bạn vẫn có thể lén nhét chút AMPscript vào và tận dụng những function mà SSJS còn thiếu.

Không phải giải pháp chính thống, nhưng trong một thế giới mà “cứ chạy được cái đã”, thì đây đúng là cú lách thông minh đáng bỏ túi.

Còn nếu sau khi thử xong bạn thấy mình như một hacker nửa mùa thì… chúc mừng, bạn đang dùng Marketing Cloud đúng cách rồi đấy.