Analiza treści EMAIL przychodzących (rachunki itp.)

Podpinam się bo potrzebuję pomocy w podobnej kwestii.
Mam zainstalowanego nodka node-red-node-email. I działa fajnie. Jednak mam problem z wyszukaniem w wiadomości danego ciągu. Chcę docelowo mieć zrobioną automatyzacje że jeśli wyszuka dany ciąg w mailu to ma zrobić to lub tamto np. pobranie maila z rachunkiem i wyszukanie kwoty do zapłaty biorąc pod uwagę oczywiście że tylko kwota ulega zmianie.Inne maile o innym ciągu ma ignorować. Myślę że da się to jakoś ugryźć jednak jestem w pisaniu funkcji zielony jak trawa. Jeśli byłby możliwy przykład to bardzo bym prosił ponieważ męcze się z tym od dawna.

. Myśle że @Marcin_Domański możesz mi w tym pomóc :slight_smile:

Edit. Doszłem do tego jak przesiać dane wiadomości jednak jak teraz zrobić to tak aby wyszukany ciąg cyfr przez regex (w nodzie switch (\d\d\d) )był wartością payload bez reszty wiadomosci ?

Ok. Jestem… To co pokazałeś mi na zdjęciach nie wiele mi daje by móc Ci pomóc.
Jeżeli chodzi o funkcje (są pisane w Java Script), która wyszukała by Ci dany tekst to źródłem do poszukiwań niech będzie analiza Stringu - tu jest opis: String.prototype.substring() - JavaScript | MDN
Jeśli chcesz żebym Ci pomógł napisać funkcje potrzebuje przykładowy string który otrzymujesz i zaznaczony fragment, który poszukujesz w tekście. oraz nazwę zmiennej pod która ją podstawiasz w ścieżce. Najszybciej by bylo jak być podesłał wyeksportowany swój Flow.

1 polubienie

Generalnie chciałbym aby to było w miarę uniwersalne. To znaczy chciałbym używać to w różnych wielu przypadkach do powiadomień. Wiem że w funkcjach jesteś obryty ale niewiem czy to sprawdzi się w wielu innych przypadkach.Wiem już jak znależć dany ciąg i teraz baardzo by mi zależało żeby ten ciąg był np czytany w powiadomieniu. Powiedzmy że szukam danego tekstu lub ciągu cyfr i tylko o to mi chodzi aby ten ciąg przechodził dalej. Na przykład jak wyżej znajduję ciąg cyfr 512 i tylko chcę aby to było jako payload do dalszego obrabiania np w powiadomieniu. Czyli jakby sczytywać payload z maila i dalej przekształcać go w nowy msg. i nie bardzo wiem jakiego noda użyć lub funkcji.Za podanym mailem mam zwykły switch do czego mi wystarczy aby wyszukać coś co potrzebuję ale niewiem jak uczynic to payloadem :stuck_out_tongue:
Bez tytułu

@Rafał_Kasperski Próbuje odtworzyć sytuacje u Ciebie by przeanalizować co masz zwracane i co ma wyjść, ale mimo aktualizacji do najnowszej wersji nod-red’a i aktualizacji palety node-red-node-email to nie mam tego nodu w palecie, który jest na twoim zdjęciu.
image

Co do analizy tekstu to nie znam użytej metody przez ciebie.
Ale jeżeli w funkcji wpiszesz:

msg.payload=msg.miejsce.w.ktorym.jest.wynik.ktory.ma.byc.jako.payload;
return msg

to na wyjściu z funkcji msg.payload bedzie równy tej zmiennej (wynikowi) - zastąpi wszystko to co do tej pory było w payload

Ja mam tylko takie nody:
image

1 polubienie

Masz go przecież tyle tylko że w ustawieniach nodka email zmieniasz z automat na triggered ,wtedy Ci się wejście na wywołanie otwiera. Tylko zwróć uwagę że pobranie z gmaila jak będziesz próbował to musisz w ustawieniach konta google ustawić hasło aplikacji i wtedy to hasło od googla wbijasz w noda email, inaczej się nie połączysz zwykłym hasłem do konta.Google Cię nie przepusci a nod będzie wywalał błąd połączenia.No właśnie tylko co wskazać gdzie ten wynik jest jeśli to wyszukuje z payload i ten wynik jest ale gdzie ? Jeśli chodzi o analize masz na foto jak wyżej ,tylko regex i wpis (\d\d\d) w nodzie switch - ma szukać tylko 3 cyfr. Ten nod email zwraca zawartosc wiadomości jako payload a temat jako topic jak na foto na początku.
222

Hmm… używam dedykowanego konta dla HA w googlach, ale tego rozwiązania nie znam :slight_smile: Ja po prostu wymuszam na tym koncie pozwolenie na korzystanie z mniej zaufanych aplikacji i wtedy można użyć danych do logowania na koncie.

No cóż podałeś fajny pomysł na “automatyzacja” rachunków, mam wpisane na listę “do zrobienia” jak coś wymyśle to się tu podzielę na forum. Ale już z wstępnych założeń wiem, że uniwersalizmu tu nie będzie. Każda z firm ma swój szablon i potrzeba będzie go przeanalizować by otrzymać zakładany efekt.

1 polubienie

No tak , ale generalnie chodzi tylko o to aby wyświetlić to co regex znalazło i podanie np. w powiadomieniu tego wyniku :stuck_out_tongue:

pokaż co zwraca twój switch.
Jak ja wstawlem w takiej formie jak pokazany przez Ciebie to mi zwrócił wszystko jak wygenerował email

No dokładnie zwraca wszystko a ja chciałbym tylko mieć to co on wyszukał czyli w tym wypadku 3-cyfrową liczbe. Chodzi mi tylko o to co wyszukał poprzez regex.

Ok, czyli wracamy do punktu wyjścia, czyli nie filtruje Ci tekstu :slight_smile: dlatego byłem zaskoczony że chcesz wysłać na powiadomienie, to co zwraca switch :slight_smile: - bo on zwraca wszystko, a nie samą kwotę.

dla mnie to ślepa uliczka, lub wstępny filtr dla oddzielenia maili z rachunkami od pozostałych, ale jak zauważyłeś działa tylko w konkretnym jednym przypadku.

No filtruje bo jak w mailu dam np. dwucyfrową liczbe to nie przejdzie dalej. Teraz chce mieć tylko te 3 cyfry jakie są i nie mam pojecia jak to uzyskac. Być może źle to tłumaczę ale jaki zamysł to chyba już wiesz :stuck_out_tongue:

Udało się generalnie. Wyszukuje w mailu (w przykladzie użyty injeck)3 cyfr po sobie występujących i podstawia jako payload dzięki nodkowi funkcji. Oczywiście dzięki wyrażeniom regularnym można bardziej wykwintnie przeszukać tekst. :stuck_out_tongue:

[{"id":"bd9fb5a154758154","type":"debug","z":"1b3774e6.eb666b","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":430,"y":2760,"wires":[]},{"id":"f038d0ab2122a8fa","type":"function","z":"1b3774e6.eb666b","name":"","func":"var regExp = /(\\d\\d\\d)/;\nvar results = regExp.exec(msg.payload);\nmsg.payload = results[1];\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":2760,"wires":[["bd9fb5a154758154"]]},{"id":"8c73dac7f5702cb0","type":"inject","z":"1b3774e6.eb666b","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"rachunek za prąd w tym miesiącu wyniósł 551 zł","payloadType":"str","x":170,"y":2760,"wires":[["f038d0ab2122a8fa"]]}]
1 polubienie