István Erdő

Erdő István

a Bridge Budapest ösztöndíjasa, Samebug, Budapest, 2017

Automatikus felhasználói levelek a Google Apps Script segítségével (1. rész)

Adatbázis létrehozása és kezelhető formátumúvá konvertálása

Az e-maileket – ha csak párat kell megírni belőlük – kézzel küldjük ki. Marketing- és más célokra (pl. jelszóemlékeztető) viszont érdemesebb e-mailes marketingeszközt igénybe venni. Időnként viszont egyszerre kell nagyon hasonló, mégis személyre szabott e-maileket küldeni, és erre az e-mailes marketingeszköz jelentette automatizmus nem feltétlenül tűnik jó megoldásnak. Az is előfordulhat, hogy az e-mailek rendszeres kézi kiküldése egyszerűen rengeteg időt emésztene fel.

Én is ebben a helyzetben találtam magam: Hetente nagyjából 20 különböző Samebug-felhasználónak írtam manuálisan e-maileket, ami minden héten 2-3 órámba tellett, mert noha minden e-mailben csak egy kis dolgot kellett megváltoztatnom, mégis manuálisan kellett beletekintenem az adatokba, hogy kiderítsem, melyik sablont is fogom használni. Habár csak kevés programozói tapasztalatom volt, elhatároztam, hogy automatizálom ezt a feladatot.

Mire lehet számítani?

Azt a célt tűztem ki magam elé, hogy írok egy kódot, amely behúzza a Google Sheets-ben tárolt kapcsolati adatokat, készít egy piszkozatot a Gmail-ben, kitölti a címzettel, a tárggyal, az üzenetsablonnal, a felhasználó nevével és beilleszt egy egyedi linket. Az emberi elemet viszont valamilyen mértékig meg akartam őrizni: ez lett a küldés előtti ellenőrzés. Ebben a cikkben megmutatom, hogyan hozhatja létre ezt az alkalmazást az is, aki még sohasem programozott.

Ez egy háromrészes sorozat lesz:

  1. Adatbázis létrehozása és kezelhető formátumúvá konvertálása
  2. Az e-mailek létrehozása és személyre szabása
  3. A szkriptek egyesítése és időbélyegző hozzáadása az adatbázishoz

1. megjegyzés A Gmail napi néhányszázban korlátozza a naponta küldhető e-mailek számát, ha tehát ennél több e-mailt szeretnénk kiküldeni, akkor tényleg érdemesebb egy e-mailes marketingeszközt igénybe venni.

2. megjegyzés Minden kis-nagybetű érzékeny, erre ügyelni kell!

3. megjegyzés Minden nyitó zárójelhez kell, hogy tartozzon egy berekesztő tag is, különben hibát jelez majd a rendszer.

4. megjegyzés Behúzásokat használok majd, hogy másoláskor olvashatóbb legyen a kód (vagyis áttekinthető lesz)

A teljes kódot referenciaként felvettem a Github-fiókomba, amely ezen a linken férhető hozzá:

https://github.com/istvanerdo/google-script-autodraft/blob/master/code

Amiket használni fogunk:

  • Gmail: ezzel küldjük majd az e-maileket
  • Google Sheets: ez lesz az adatbázis
  • Valamilyen szövegszerkesztő: ezzel írjuk majd meg a sablont
  • Google Apps Script az alkalmazás megírásához

Az eszközök beállítása

Először is kell egy adatbázis, úgyhogy hozzunk létre egy táblázatot a meghajtón, és töltsük fel a személyre szabott e-mailek megírásához szükséges adatokkal. Nálam ez így néz ki:

Fontos, hogy a fenti adatok csak a szemléltetésre vannak. Egyes cellák üresek vagy NULL-értékűek, mert vagy a felhasználó nem írt semmit abba a mezőbe (vagyis nincsen adat), vagy majd automatikusan kerül kitöltésre később.

User ID: ez a felhasználóazonosító, vagyis a felhasználóhoz rendelt egyedi szám.

Display name: ez a megjelenített név, vagyis a felhasználó által megjeleníteni kívánt név.

Full name: ez a felhasználó teljes neve, amely az én esetemben többnyire üres, mivel a felhasználók nem adják meg a teljes nevüket.

Email address: ez az e-mail cím, amely magától értetődő, noha a felhasználók néha nem adnak meg e-mail címet (később egy X-betű kerül az elküldött oszlopba, ha az e-mail NULL-értékű).

Template: ez a sablon. Az aktivitástól függően minden felhasználóhoz 4 sablont használunk majd. A sablonok az elkötelezettségi szinten alapulnak. A saját esetünkben döntsük el magunk, egyrészt melyik sablont kívánjuk használni az egyes felhasználóknál, másrészt a használni kívánt sablonok számát.

Search: A Samebug-on a felhasználók hibaüzenet-kereséssel igyekeznek megoldást találni programozási hibáikra, én pedig személyre szabott linkkel szeretném őket visszajuttatni a keresésükhöz.

Letter sent: A levél elküldésének napja, vagyis az a nap, amikor az adott felhasználóhoz létrehoztuk az e-mail piszkozatát. Ezt az alkalmazás majd automatikusan kitölti.

Ezután következik a Google Apps Script beállítása (mostantól Gscript-nek hívom majd). Ez egy varázseszköz, ha bővíteni szeretnénk a Google-alkalmazások funkciókészletét, vagy ha kombinálni szeretnénk őket. A legjobb tulajdonsága az, hogy beépített parancsokkal rendelkezik a Google alkalmazások feladatainak végrehajtására. Szerencsére javascript-ben íródott – amely egy programnyelv –, úgyhogy a feladatok sokaságának automatizálásához nem kell mást tenni, mint megnézni a javascript útmutatóit, oktatóanyagjait és dokumentációját.

Menjünk a script.google.com oldalra, és nyissuk meg a Gscript-et

Ha először nyitjuk meg az oldalt, akkor megjelennek a bemutatkozó információk. A kezdéshez kattintsunk a „Start Scripting” (Szkriptírás kezdése) lehetőségre. Ekkor ennek kell látszódnia:

Piszkozat e-mail létrehozása

Ezután megtanuljuk az általános piszkozat létrehozását. A Gscript-nek nagyon egyszerű kódja van a piszkozatok létrehozására:

createDraft(recipient, subject, body)

A zárójelek közötti szavakat argumentumoknak nevezzük. Nekünk kell minden egyes argumentumot a saját „szöveggel” vagy változóval (változó elem) kicserélnünk. A kód futtatásakor a Gscript eljut a createDraft-hoz, és mindent betesz a megfelelő helyre (az 1. szót a címzett sorába, a 2. szót a tárgysorba és a 3. szót az e-mail szövegébe).

A működés megtekintéséhez egyszerűen csak írjuk be a következő sort a { } zárójelek közé:

GmailApp.createDraft(„[email protected]”, „Hello draft”, „I’ve created a draft”)

Az argumentumokat idézőjelek közé kell írni, mivel szöveget írtunk. Idézőjelek nélkül a program változónak tekinti őket, és hibaüzenetet küld, hiszen nem hoztunk létre ilyen változókat. A GmailApp a sor elején arra utasítja a Gscript-et, hogy keresse meg a függvényt a GmailApp-ban.

Mentsük el a munkát, nevezzük el és futtassuk le a kódot.

Az alkalmazásnak engedélyre van szüksége a futtatáshoz, úgyhogy kattintsunk a „Review Permissions” (Engedélyek megtekintése) lehetőségre, válasszuk ki azt a fiókot, amelyhez használni szeretnénk az appot, kattintsunk az „Advanced” (Részletek) lehetőségre a bal alsó sarokban, majd a „Go to Draft (unsafe)” (Menj a Drafthoz (nem biztonságos)” lehetőségre. (A Draft az általam a munkának adott név).

Végük kattintsunk az „Allow” (Engedélyez) lehetőségre és ellenőrizzük a piszkozat e-maileket. Az alkalmazás piszkozatot írt:

Az adatok konvertálása CSV-be

A következő lépésben a táblázat adatait kezelhetőbb formátumúvá kell konvertálnunk: ez a CSV. A CSV a „Comma Separated Values” angol elnevezés rövidítése, magyarul „vesszővel elválasztott értékek”-et jelent, vagyis egy olyan szövegfájlt, amelyben az egyes értékeket vessző választja el egymástól, és minden adatsor új sorba kerül. Hozzunk létre új szkriptfájlt és a kezdéshez töröljük a tartalmát.

A program a kód megértése nélkül is működik. Magam is a Michael DeRazon által írt kódot másoltam le, és csupán apróbb módosításokat hajtottam végre rajta. Ha érdekel, mit is csinálnak az egyes részek, olvasd el Michaelnek a //-jel után álló megjegyzéseit. Fogjuk, és másoljuk át a következő kódot:

function saveAsCSV() {

  var ss = SpreadsheetApp.openById(„xxxxxxxxxx„);

  var sheets = ss.getSheets();

  var sheet = sheets[0];

  // append „.csv” extension to the sheet name

  fileName = sheet.getName() + „.csv”;

  // convert all available sheet data to csv format

  var csvFile = convertRangeToCsvFile_(fileName, sheet);

  // create a file in the Docs List with the given name and the csv data

  DriveApp.createFile(fileName, csvFile);

}

function convertRangeToCsvFile_(csvFileName, sheet) {

  // get available data range in the spreadsheet

  var activeRange = sheet.getDataRange();

  var data = activeRange.getValues();

  var csvFile = undefined;

  // loop through the data in the range and build a string with the csv data

  if (data.length > 1) {

    var csv = „”;

    for (var row = 0; row < data.length; row++) {

      for (var col = 0; col < data[row].length; col++) {

        if (data[row][col].toString().indexOf(„,”) != -1) {

          data[row][col] = „\”” + data[row][col] + „\””;

        }

      }

      // join each row’s columns

      // add a carriage return to end of each row, except for the last one

      if (row < data.length-1) {

        csv += data[row].join(„,”) + „\r\n”;

      }

      else {

        csv += data[row];

      }

    }

    csvFile = csv;

  }

  return csvFile;

}

Győződjünk meg róla, hogy kicseréltük a „xxxxxxxxxx” karaktersort a saját táblázatunk azonosítójával. Ehhez nyissuk meg a táblázatot és másoljuk át a következő linken hozzáférhető 44 karakter hosszú kódot:

Mentsünk és futtassuk a kódot!

Ha most megnyitjuk a meghajtón létrehozott mappát, láthatjuk, hogy az alkalmazás létrehozott egy új CSV-fájlt.

Következtetés és a következő lépés

Ebben a részben létrehoztuk az adatbázisunkat és láttuk, hogyan működik a createDraft függvény és hogyan konvertálta adatainkat CSV-fájllá. A <a href=”Link to Part 2”>2. részben</a> továbbmegyünk, és a sorozat lefontosabb részeként minden felhasználóra létrehozunk egy személyre szabott piszkozatüzenetet.