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:
- Adatbázis létrehozása és kezelhető formátumúvá konvertálása
- Az e-mailek létrehozása és személyre szabása
- 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.