Encja email w języku polskim (Dialogflow)

Dialogflow CX

Ostatnio napotkałem w Dialogflow pewien problem. Otóż chciałem wyciągnąć z wiadomości użytkownika emaila, którego zawarł w treści wiadomości i … nie mogłem tego łatwo zrobić.

Co mam dokładnie na myśli?

Dialogflow pozwala na ekstrakcję parametrów z wypowiedzi dzięki parametrom i encjom. Jedna z istniejących encji systemowych to @sys.email, która pozwala oznaczyć parametr jako email, dzięki czemu agent wie, że pod tym parametrem powinien się mieścić tekst, który jest e-mailem.

Niestety ta encja nie istnieje, jeśli język agenta ustawimy na język polski, a jeśli chcemy wyłuskać z rozmowy email’a pojawia się dość spory problem.

Pomyślałem, że mogę sobie z tym poradzić tworząc własną encję, która będzie zachowywała się jak @sys.email. Można to zrobić ustawiając encję jako Regexp. Dokumentację o tego rodzaju encji znajdziecie TUTAJ.

Taka encja pozwala jako wartość zdefiniować wyrażenie regularne, które wskaże na encję tylko wtedy gdy zostanie spełnione. Takie wyrażenie regularne, które dopasowuje email łatwo znaleźć w internecie lub napisać samemu, dlatego zabrałem się szybko do pracy.

Wszedłem w zakładkę Entities i kliknąłem Create entity. Po zaznaczeniu Regexp entity dodałem do wartości encji wyrażenie regularne:

([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z]{2,5})

, które powinno wskazywać na emaila.

Encja email w języku polskim

Po zapisaniu pozostało tylko przetestować encję. Mój testowy intent wygląda tak:

Encja email w języku polskim

Czyli przypisałem do testowych e-maili, moją nowostworzoną encję email.

Testując ten intent w symulatorze, mogę sprawdzić, że mail podany w wiadomości faktycznie jest zapisywany jako parametr:

Encja email w języku polskim
Test

Jeśli nie chcecie manualnie definiować tej encji, wrzuciłem na swoje repozytorium plik json, dzięki któremu można zaimportować encję do swojego agenta.

Znajdziecie ją TUTAJ.