MsGraphCheckUnprocessedMailsCron - Kontrola nezpracovaných mailů

Cron MsGraphCheckUnprocessedMailsCron je hlídací (kontrolní) úloha, která hlídá, jestli se e-maily zpracované přes integraci Microsoft Graph opravdu proměnily v případy v TAS. Když najde e-mail, ke kterému žádný případ nevznikl, upozorní na to určené administrátory e-mailem. Slouží tedy jako pojistka proti tichým výpadkům zpracování pošty.

Tento cron sám o sobě žádné e-maily nezakládá jako případy — to dělá jiná úloha (MsGraphCreateProcessesFromMailCron). Zde jde pouze o kontrolu, že vše, co se má zpracovat, se opravdu zpracovalo.

K čemu to slouží (v kostce)

Zpracování příchozí pošty v TAS funguje zjednodušeně takto:

  1. Do sledované schránky přijde e-mail.
  2. TAS ho podle nastavení zpracuje a založí z něj případ.
  3. Zpracovaný e-mail se přesune do složky „out" (odbavené).

Cron MsGraphCheckUnprocessedMailsCron se pak dívá do složky „out" a ověřuje, že ke každému e-mailu v ní existuje odpovídající případ. Pokud e-mail ve složce leží, ale případ k němu neexistuje, znamená to problém (chyba zpracování, špatné nastavení mapování apod.) — a cron pošle report.

Jak cron pracuje

  1. Načte konfiguraci z tabulky cronů v databázi.
  2. Připojí se k schránce přes Microsoft Graph a stáhne e-maily ze složky „out" za zadané období.
  3. Vytáhne z e-mailů hodnoty podle nastaveného mapování (odesílatel, předmět, tělo…).
  4. Porovná tyto hodnoty proti proměnným existujících případů dané šablony.
  5. Najde nespárované e-maily — tedy ty, ke kterým žádný případ neexistuje.
  6. Pošle HTML report na zadané adresy, pokud nějaké nespárované e-maily našel.
  7. Zaloguje průběh do aplikačních logů.

Vlastnost

Hodnota

Plánování

Každou hodinu (00 00 */1 * * *)

Timeout

600 sekund (10 minut) na jeden běh

Zpracování

Každá schránka zvlášť — chyba jedné neblokuje ostatní

Výchozí stav

Neaktivní — je nutné ho ručně zapnout v administraci

Konfigurace

Konfigurace se ukládá jako JSON do parametrů cronu v administraci. V poli items může být více schránek — každá se zpracovává nezávisle.

Ukázka reálné konfigurace (citlivé údaje jsou zkrácené):

{
"items": [
{
"numberOfDays": "10",
"reportAddresses": [
"frantisek.brych@neit.group"
],
"auth": {
"emailAddress": "vytezovana_adresa@teamassistant.app",
"tenantId": "103bsdf-a80a-...",
"clientId": "sdfsdsdfds-140249...",
"clientSecret": "Msdfsdfsdfsdf-...",
"type": "secret"
},
"folders": {
"out": {
"id": "AAMkAD...AAA="
}
},
"process": {
"user_id": "1",
"tproc_id": "1786",
"header_id": "2043"
},
"mapping": {
"_mail": {
"value": "mail",
"isConstant": true
},
"mailBody": "body.content",
"mailSubject": {
"value": "subject",
"option": "optional"
}
}
}
]
}

clientSecret je heslo aplikace — nikdy ho nesdílej, neposílej v e-mailu ani nedávej do verzovacího systému. Do reportů a při hlášení chyb ho vždy začerni.

Parametry jedné schránky

Parametr

Povinný

Popis

numberOfDays

Ano

Kolik dní zpět se kontrolují e-maily i případy. Např. "10" = posledních 10 dní.

reportAddresses

Ano

Seznam e-mailových adres, kam se posílá report o nespárovaných e-mailech. Musí být alespoň jedna. Při více adresách je první v poli „To", ostatní jako skrytá kopie.

auth.emailAddress

Ano

E-mailová adresa sledované schránky v Microsoft 365 (tzv. vytěžovaná adresa).

auth.tenantId

Ano

ID tenanta v Azure AD (Microsoft Entra). Najdeš v Azure Portal → Microsoft Entra ID → Properties.

auth.clientId

Ano

Application (client) ID registrované aplikace v Azure Portal.

auth.clientSecret

Ano (u type: "secret")

Hodnota klientského tajemství (secret) z registrace aplikace. Citlivý údaj.

auth.type

Ano

Způsob přihlášení. Pro automatický běh cronu použij "secret" (přihlášení aplikací přes secret). Hodnota "dedicated" je pro interaktivní přihlášení přes prohlížeč a pro cron se nehodí.

folders.out.id

Ano

ID složky „out" v Microsoft Graph, kam se přesouvají zpracované e-maily. Právě tuto složku cron kontroluje.

process.user_id

Ano

ID uživatele TAS, pod kterým se případy zakládají.

process.tproc_id

Ano

ID šablony procesu. Cron páruje e-maily proti případům založeným z této šablony.

process.header_id

Ano

ID hlavičky (skupiny) procesu — dále zpřesňuje, které případy se do porovnání zahrnou.

mapping

Ano

Určuje, které hodnoty z e-mailu se vytáhnou a proti kterým proměnným případu se porovnávají. Viz níže.

Číselné hodnoty (numberOfDays, tproc_id, header_id, user_id) lze v konfiguraci zapsat i jako text v uvozovkách (např. "10", "1786") — jak je vidět v ukázce z testu. TAS si je přečte správně.

Mapování polí e-mailu

V objektu mapping se říká: „vezmi tuto hodnotu z e-mailu a porovnej ji proti proměnné případu se stejným názvem". Klíč vlevo je název proměnné případu, hodnota vpravo určuje, odkud z e-mailu se údaj bere.

Jednoduché mapování — název proměnné → pole e-mailu:

"mailBody": "body.content"

Do proměnné mailBody se vezme obsah těla e-mailu.

Rozšířené mapování — s doplňkovými volbami:

"mailSubject": {
"value": "subject",
"option": "optional"
}

Do proměnné mailSubject se vezme předmět e-mailu, přičemž option: "optional" znamená, že pole je nepovinné (může chybět).

Konstanta — pevná hodnota pro každý e-mail:

"_mail": {
"value": "mail",
"isConstant": true
}

Při isConstant: true se do proměnné _mail nevkládá hodnota z e-mailu, ale pevný řetězec "mail". Slouží k odlišení nebo označení záznamů.

Nejčastější pole e-mailu k mapování:

  • from — adresa odesílatele,
  • subject — předmět,
  • body.content — text těla,
  • toRecipients / ccRecipients — příjemci / kopie.

Předpoklady na straně Azure

Cron čte poštu přes Microsoft Graph API. Než ho zapneš, musí být připravené:

  1. Registrace aplikace v Azure Portal — vytvořená App Registration s oprávněním Mail.Read (případně Mail.ReadWrite), typ Application, nikoli Delegated.
  2. Klientský secret — vygenerovaný, pokud používáš type: "secret". Poznamenej si Application ID a Tenant ID.
  3. Přístup ke schránce — servisní aplikace musí mít oprávnění ke sledované schránce (typicky přes Exchange Admin Center).
  4. Síť — server TAS musí mít odchozí HTTPS přístup na https://graph.microsoft.com (TCP 443).

Klientské secrety v Azure mají omezenou platnost (obvykle 1–2 roky). Po vypršení cron přestane fungovat s chybou přihlášení — je potřeba vygenerovat nový secret a aktualizovat konfiguraci.

Zapnutí a monitoring

Cron je po nasazení neaktivní. Zapíná se v administraci: Administrace → Crony, vyber „Check unprocessed MS Graph mails" a aktivuj ho.

Ve stejné obrazovce sleduješ:

  • Stav — Aktivní / Neaktivní,
  • Poslední běh — čas posledního spuštění,
  • Další běh — plánovaný čas,
  • Poslední chyba — „Y" značí chybu v posledním běhu, „N" úspěch.

Průběh se také zapisuje do aplikačních logů. Ukázky:

Úspěšný běh (nic k řešení)
INFO: No unprocessed MS Graph mails found
mailCount: 125
processCount: 125
Nalezené nespárované e-maily (odešle se report)
WARNING: Found 3 unprocessed MS Graph mails
failedMails: [
{ subject: "Objednávka #12345" },
{ subject: "Faktura-2024-06" }
]

Řešení nejčastějších problémů

Příznak

Pravděpodobná příčina a řešení

„No report addresses defined…"

Pole reportAddresses je prázdné. Doplň alespoň jednu adresu a ulož.

Chyba přihlášení / „Unknown credentials type"

Špatná hodnota auth.type. Musí být přesně "secret" nebo "dedicated". Pro cron použij "secret" s platným clientSecret.

Report hlásí všechny e-maily jako nezpracované

Nejčastěji špatné mapping (hodnoty z e-mailu neodpovídají proměnným případu) nebo špatné tproc_id / header_id. Ověř názvy polí a ID šablony.

„Folder Not Found" / neplatné folders.out.id

ID složky je špatné nebo složka byla smazána. Správné ID zjistíš přes Microsoft Graph Explorer: GET /users/{schránka}/mailFolders.

Timeout (běh delší než 10 minut)

Schránka má příliš mnoho e-mailů nebo je pomalá síť. Sniž numberOfDays, případně rozděl schránky do samostatných konfigurací.

Cron neběží / chybí záznamy v logu

Cron je nejspíš neaktivní. Zkontroluj stav v administraci a ověř síťový přístup na graph.microsoft.com.

Frantisek Brych Updated by Frantisek Brych

CleanupCron

Crons

Contact

Team assistant (opens in a new tab)

Powered by HelpDocs (opens in a new tab)