Naprawa parsera emaili i deduplikacja zleceń
Filip Borkowski, Backend/Frontend/Fullstack Engineer
Problem: emaile nie generowały zleceń
Panel Zlecenia Email odbierał emaile od kontrahentów (DP World, UTB Rutkowski), ale w panelu Zlecenia nie pojawiały się żadne zlecenia. Diagnoza wykazała trzy przyczyny:
- Parser regex wyciągał śmieci z disclaimerów emailowych — np.
cargo: "is free from viruses or any other defects..."zamiast prawdziwych danych - Dane zleceniowe znajdowały się w temacie emaila (np.
"Walbrzych / 04.03 / 9316696 zlecenie na 45ft"), a parser szukał ich tylko w treści - Webhook wymagał pól
fromlubto(trasa) — bez nich zlecenie nie powstawało
Rozwiązanie
Nowy parser emaili
Przepisaliśmy parser z trzema kluczowymi ulepszeniami:
- Czyszczenie treści — usuwanie disclaimerów DP World, stopek prawnych, podpisów, cytowanych wiadomości i tracking URL-i. Typowy email z 1219 znaków zostaje zredukowany do 284 znaków czystej treści.
- Parsowanie tematu — obsługa formatów DP World:
"Miasto / data / BookingNumber opis"oraz"Transport Order Report for Job XXXXXXXX". Temat emaila okazał się najważniejszym źródłem danych. - Ulepszona detekcja śmieci — odrzucanie wartości zawierających słowa kluczowe z disclaimerów, URL-e i adresy email.
Deduplikacja wątków
Emaile w tym samym wątku (np. 4 odpowiedzi o Job 12590040) teraz generują jedno zlecenie zamiast czterech duplikatów.
Funkcja extractOrderKey() wyciąga unikalny klucz z tematu — np. JOB-12590040 lub BK-9316696 — i sprawdza czy zlecenie z tym kluczem już istnieje.
Wyniki
| Metryka | Przed | Po |
|---|---|---|
| Emaile sparsowane | 38 (ze śmieciami) | 109 |
| Zlecenia utworzone | 0 | 63 (unikalne) |
| Duplikaty | — | 0 |
System teraz automatycznie tworzy zlecenia z każdego nowego emaila i łączy odpowiedzi z istniejącymi zleceniami.