Berinteraksi secara terprogram dengan Aktivitas Target Adobe berdasarkan pergerakan Merkurius

Dec 02 2022
Saya ingin menawarkan penjualan khusus untuk produk di toko web saya hanya saat Merkurius dalam kemunduran. Ini terjadi hanya beberapa kali dalam setahun selama sekitar satu minggu setiap kali.
Foto oleh NASA di Unsplash

Saya ingin menawarkan penjualan khusus untuk produk di toko web saya hanya saat Merkurius dalam kemunduran. Ini terjadi hanya beberapa kali dalam setahun selama sekitar satu minggu setiap kali. Diketahui menyebabkan pembeli online menjadi sangat rentan terhadap penawaran panas, di antara penyakit berbasis planet lainnya…

Pembeli online membeli sepatu saat Merkurius dalam kemunduran

Karena saya menggunakan Adobe Target untuk menampilkan spanduk penjualan saya, saya hanya perlu melihat melalui teleskop saya setiap malam dan melihat apakah Merkurius dalam kemunduran. Jika ya, saya akan masuk ke Target, membangun konten penjualan saya, dan mengaktifkan Aktivitas. Saya juga perlu mematikan Aktivitas saat Mercury tidak lagi dalam retrograde. Either way, saya pergi keluar setiap malam.

Karena saya bahkan tidak tahu seperti apa Merkurius dan saya juga tidak memiliki teleskop, saya pikir saya harus mengotomatiskan proses ini. Bagaimana cara mengaktifkan Aktivitas saya secara otomatis saat Merkurius dalam retrograde dan menonaktifkannya secara otomatis saat Merkurius tidak lagi dalam retrograde?

Toko web saya yang luar biasa!

Mari kita mulai dengan membuat Aktivitas XT di Target dengan spanduk yang menampilkan beberapa konten menarik:

Spanduk merah yang menarik pasti akan meningkatkan penjualan saya.
Spanduk penjualan aktif, tapi saya tidak tahu status Merkurius!
Ketika orang mengunjungi myawesomewebstore.com selama Merkurius dalam retrograde, mereka akan disajikan dengan spanduk yang luar biasa ini

Karena ini tahun 2022 (alias masa depan) ada API untuk melacak pergerakan Merkurius. Saya dapat mengotomatiskan mengaktifkan dan menonaktifkan aktivitas ini menggunakan API ini:

https://mercuryretrogradeapi.com/

      
                
The future is crazy

Setelah saya memiliki kunci API, saya sekarang dapat berinteraksi dengan Target melalui API-nya. Biasanya, saya akan melakukan ini dengan Python, tetapi Adobe memiliki beberapa pustaka Node JS yang luar biasa yang sayangnya harus Anda gali untuk menemukannya. Serius, lihat-lihat NPM. Inilah yang akan saya gunakan:

  • Pustaka Target AIO Node JS
    berinteraksi dengan aktivitas Target
  • Pustaka Adobe Authentication
    Otentikasi dengan Adobe untuk melakukan panggilan API
  • Axios
    Memanggil Retrograde API
  • dotenv
    membaca file .env dengan variabel lingkungan (kredit API)
  • const auth = require('@adobe/jwt-auth');
    const axios = require('axios');
    const dotenv = require('dotenv');
    const targetSDK = require('@adobe/aio-lib-target');
    
    // get my env variables
    dotenv.config();
    
    // Adobe API Config vars
    const config = {
      clientId: process.env.clientId,
      clientSecret: process.env.clientSecret,
      technicalAccountId: process.env.technicalAccountId,
      orgId: process.env.orgId,
      metaScopes: ['ent_marketing_sdk'],
      privateKey: process.env.privateKey.replace(/\\n/g, '\n'), // make the PK readable as a string
    };
    

// returns boolean
const isRetrograde = async () => {
  const response = await axios.get(`https://mercuryretrogradeapi.com/`);
  return response.data.is_retrograde;
};

async function updateActivity() {
  let activateTest = await isRetrograde();
  let { access_token } = await auth(config);
  const targetClient = await targetSDK.init(process.env.companyID, process.env.clientId, access_token);

  const options = {
    headers: {
      'content-type': 'application/vnd.adobe.target.v1+json',
      Accept: 'application/vnd.adobe.target.v1+json',
    },
  };
  // - approved : corresponds to Live in Target UI.
  // - deactivated : corresponds to Inactive in Target UI.
  // - saved : corresponds to Inactive in Target UI.
  const updateActivityState = await targetClient.setActivityState(123456, activateTest ? 'approved' : 'saved', options);

  //   //get offer by id activity
  const activity = await targetClient.getABActivityById(123456);
  console.log(activity);
  return;
}

// call to change activity state
updateActivity()

const auth = require('@adobe/jwt-auth');
const axios = require('axios');
const dotenv = require('dotenv');
const targetSDK = require('@adobe/aio-lib-target');

// get my env variables
dotenv.config();

// Adobe API Config vars
const config = {
  clientId: process.env.clientId,
  clientSecret: process.env.clientSecret,
  technicalAccountId: process.env.technicalAccountId,
  orgId: process.env.orgId,
  metaScopes: ['ent_marketing_sdk'],
  privateKey: process.env.privateKey.replace(/\\n/g, '\n'), // make the PK readable as a string
};

// returns boolean
const isRetrograde = async () => {
  const response = await axios.get(`https://mercuryretrogradeapi.com/`);
  const { is_retrograde } = response.data;
  return is_retrograde;
};

async function updateActivity() {
  let activateTest = await isRetrograde();
  let { access_token } = await auth(config);
  const targetClient = await targetSDK.init(process.env.companyID, process.env.clientId, access_token);

  const options = {
    headers: {
      'content-type': 'application/vnd.adobe.target.v1+json',
      Accept: 'application/vnd.adobe.target.v1+json',
    },
  };
  // - approved : corresponds to Live in Target UI.
  // - deactivated : corresponds to Inactive in Target UI.
  // - saved : corresponds to Inactive in Target UI.
  const updateActivityState = await targetClient.setActivityState(12345, activateTest ? 'approved' : 'saved', options);

  //   //get offer by id activity
  const activity = await targetClient.getABActivityById(12345);
  console.log(activity);
  return;
}

updateActivity();

Pertama, metode setActivityState di SDK memerlukan beberapa header tipe media khusus yang ditentukan dalam opsi. SDK tidak memiliki ini dibangun ke dalam metode juga tidak menentukan apa pun dalam definisi metode, tetapi diperlukan. Jika Anda mendapatkan error 415 dengan metode apa pun, periksa kembali header dari dokumen ini:https://developers.adobetarget.com/api/

Parameter kedua di setActivityState adalah operator ternary berdasarkan apa yang diberikan Retrograde API. Jika Merkurius dalam kemunduran ( benar dari API) aktivitas akan ditetapkan untuk disetujui. Jika retrograde salah, aktivitas akan dinonaktifkan. Status ini agak kabur, dan tidak mencerminkan terminologi di UI Target yang agak mengganggu. Definisi dalam komentar diambil langsung dari dokumen. Saya tidak yakin apa sebenarnya perbedaan antara disimpan dan dinonaktifkan . Bagaimanapun, Anda mengerti maksudnya. Mari kita ke bagian yang menyenangkan…

Ada beberapa opsi di sini untuk mengotomatiskan ini. Anda dapat menggunakan AWS Lambda, tetapi kemudian Anda harus mempelajari tentang penerapan proyek node di lambda dan cara menjadwalkan tugas cron melalui AWS Event Bridge. Tugas-tugas ini sebenarnya lebih rumit daripada kedengarannya jika Anda belum pernah melakukannya sebelumnya. Daripada memberi Amazon lebih banyak uang. Sebagai gantinya, saya akan Akamai sejumlah uang dan menggunakan mesin virtual Linode. Kemudian saya dapat menggunakannya untuk menjalankan banyak pekerjaan cron yang berbeda. Jika Anda belum pernah menggunakan Linode sebelumnya, lihat saluran Youtube mereka. Saya dapat memutar mesin virtual baru yang dimuat sebelumnya dengan NodeJS atau memutar yang kosong dan menginstal Node secara manual. Saya akan memilih yang pertama.

Setelah membuat mesin virtual saya dan memverifikasi bahwa saya dapat terhubung melalui SSH , saya mentransfer file mercury.js dan file package.json saya melalui SCP . Mengenai variabel lingkungan, saya juga dapat mentransfer .env saya , atau mengaturnya langsung di mesin virtual. Pilihanmu. Setelah file ditransfer, saya dapat menavigasi ke direktori mereka dan menjalankan npm i untuk menginstal semua paket yang saya perlukan. Saya juga akan menjalankan mercury.js beberapa kali untuk memastikan semuanya berfungsi:

# transfer files via scp from source machine to VM
# scp <source> <username@destination>
scp mercury.js [email protected]:/home/mercury/mercury.js

# scp other files...

#SSH into my virtual machine. (Not the real IP address :) )
ssh [email protected]

# move to mercury directory and install node libraries
cd mercury && npm i

# run the file to make sure it works!
node mercury.js

Pada akhirnya, file crontab saya akan memiliki ini di bagian bawah:

# etc
# etc
# m h dom mon dow
0 8 * * * cd /somepath/mercury && node mercury.js

Catatan singkat bahwa UI target tidak selalu segera diperbarui untuk mencerminkan perubahan API, tetapi Anda dapat memverifikasi bahwa aktivitas tersebut diaktifkan melalui bagian Changelog. Perubahan UI akan muncul setelah beberapa menit.

Sekarang contoh ini sepele , beberapa bahkan mungkin menyebutnya bodoh ( beraninya kamu! ), Tapi set upnya nyata. Bagaimana jika Anda menjalankan semua jenis aktivitas Target khusus tanggal? Black Friday, Cyber ​​Monday, Super Bowl, President's Day, Flag Day, ulang tahun John, dan seterusnya. Saya dapat memiliki semua jenis Aktivitas Target yang secara terprogram dihidupkan dan dimatikan berdasarkan tanggal. Dengan beberapa penyiapan awal, saya dapat merencanakan spanduk penjualan sepanjang tahun dalam beberapa jam!