Jaké emaily agent zachytí
| Kategorie | Hledaná slova / fráze | Výsledek |
|---|---|---|
| Faktury CZ | faktura, FA, FA/, FAxxxx, daňový doklad, vyúčtování služeb, faktura přijata |
✓ stáhnout |
| Faktury EN/DE/SK | invoice, rechnung, faktura, billing, bill |
✓ stáhnout |
| Výjimka - zálohy | zálohová faktura, záloha, proforma, advance invoice, anzahlung |
✗ přeskočit |
| Formáty příloh | .pdf, .jpg, .jpeg, .png, .tiff, .tif |
→ uložit |
Nastavení krok za krokem
Vytvořit složku na Google Drive
Přejdi na drive.google.com a vytvoř novou složku - například Faktury. Otevři ji a zkopíruj ID z URL - je to část za posledním lomítkem:
https://drive.google.com/drive/folders/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs
toto je ID složky - zkopíruj ho
Otevřít Apps Script
- Přejdi na script.google.com
- Klikni na Nový projekt
- Přejmenuj projekt na FakturaAgent
- Smaž veškerý výchozí obsah souboru
Code.gs
Vložit kód agenta
Zkopíruj celý kód níže a vlož ho do prázdného souboru Code.gs. Poté uprav řádek s ID složky.
// ============================================= // GMAIL FAKTURA AGENT // Stahuje faktury z Gmailu na Google Drive // Spousti se automaticky kazdou hodinu // ============================================= // NASTAVENI - upravte podle sebe const CONFIG = { // ID vasi slozky na Google Drive (viz Krok 1) driveFolderId: "VLOZIT_ID_SLOZKY_ZDE", // Nazev stitku v Gmailu (vytvori se automaticky) gmailLabel: "Faktura-stazena", // Klicova slova pro zachyceni faktury keywords: [ "faktura", "invoice", "rechnung", "faktura", "daňový doklad", "vyúčtování služeb", "faktura přijata", "billing", "bill" ], // Regex pro FA, FA/, FA12345, FA/2024/001 atd. faPattern: /FA[\/\-]?[\d]{0,10}/i, // Vyjimky - tyto emaily se ✗ přeskočit excludeKeywords: [ "zálohová faktura", "záloha", "proforma", "advance invoice", "anzahlung", "deposit" ], // Povolene pripony souboru allowedExtensions: [".pdf", ".jpg", ".jpeg", ".png", ".tiff", ".tif"] }; function zpracujFaktury() { const label = getOrCreateLabel(CONFIG.gmailLabel); const folder = DriveApp.getFolderById(CONFIG.driveFolderId); const existingFiles = getExistingFileNames(folder); const keywordQuery = CONFIG.keywords .map(k => `"${k}"`).join(" OR "); const query = `has:attachment (${keywordQuery}) -label:${CONFIG.gmailLabel}`; const threads = GmailApp.search(query, 0, 50); let count = 0; for (const thread of threads) { for (const msg of thread.getMessages()) { const combined = `${msg.getSubject()} ${msg.getPlainBody()}`; const low = combined.toLowerCase(); if (CONFIG.excludeKeywords.some(k => low.includes(k))) continue; const ok = CONFIG.keywords.some(k => low.includes(k)) || CONFIG.faPattern.test(combined); if (!ok) continue; for (const att of msg.getAttachments()) { const name = att.getName().toLowerCase(); if (!CONFIG.allowedExtensions.some(e => name.endsWith(e))) continue; const date = Utilities.formatDate(msg.getDate(), "Europe/Prague", "yyyy-MM-dd"); const fileName = `${date}_${att.getName().replace(/[^a-zA-Z0-9.\-_]/g,"_")}`; if (existingFiles.has(fileName)) continue; folder.createFile(att.copyBlob().setName(fileName)); existingFiles.add(fileName); count++; } } thread.addLabel(label); } Logger.log(`Hotovo. Ulozeno souboru: ${count}`); } function getOrCreateLabel(name) { let l = GmailApp.getUserLabelByName(name); if (!l) l = GmailApp.createLabel(name); return l; } function getExistingFileNames(folder) { const s = new Set(); const f = folder.getFiles(); while (f.hasNext()) s.add(f.next().getName()); return s; }
Doplnit ID složky
Na začátku kódu najdi tento řádek a vlož ID své složky z Kroku 1:
driveFolderId: "VLOZIT_ID_SLOZKY_ZDE", // Po změně vypadá takto: driveFolderId: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs",
Otestovat ručně
- Klikni na tlačítko Spustit nahoře v Apps Script
- Při prvním spuštění tě Google požádá o oprávnění - klikni Povolit
- Zkontroluj Protokoly (Zobrazit - Protokoly) - měl by tam být: Hotovo. Ulozeno souboru: X
- Zkontroluj složku na Drive - soubory by měly být tam
Nastavit automatické spouštění každou hodinu
- Klikni vlevo na ikonu hodin Triggery
- Klikni Přidat trigger (vpravo dole)
- Nastav: Funkce - zpracujFaktury, Zdroj - Časový spínač, Interval - Každou hodinu
- Klikni Uložit
Doporučení pro lepší výsledky
Jak funguje rozpoznávání FA formátů
Kód používá regulární výraz který zachytí všechny běžné varianty: FA, FA/, FA2024001, FA/2024/001, FA-001. Funguje v předmětu i v těle zprávy.
Kde najít chyby a logy
Apps Script ukládá záznamy každého spuštění. Najdeš je pod Triggery - Historie spuštění. Pokud agent nic nestáhne nebo spadne, uvidíš tam přesně proč.
Třídit do podsložek (volitelné)
Pokud budete časem chtít faktury třídit podle roku nebo měsíce, jde to přidat na cca 10 řádků kódu. Základ funguje i bez toho.