Powiadomienia o nowych mailach ze skrzynki udostępnionej na czat Teams – krok po kroku (Power Automate)

Chcesz, żeby każda nowa wiadomość w skrzynce udostępnionej od razu pingowała zespół na czacie Microsoft Teams? Poniżej gotowy scenariusz do skopiowania — z nazwami akcji, tokenami Dynamic content, warunkami filtrującymi i dodatkami (link „Otwórz w Outlook Web”, priorytety, duże załączniki).


Co zbudujemy

Przepływ chmurowy (Cloud flow), który:

  1. reaguje na nowy e-mail w Shared Mailbox,
  2. pobiera web link do wiadomości,
  3. wysyła na czat Teams wiadomość „WorkFlow” z polami: Od → Do → Temat → Podgląd → Link.

Wymagania

  • Licencje: Microsoft 365 (z Power Automate w planie M365) + dostęp do Teams; bez licencji premium.
  • Uprawnienia: konto uruchamiające flow ma Full Access do skrzynki udostępnionej oraz dostęp do czatu/zespołu, gdzie postujemy.
  • Konektory: Office 365 Outlook, Microsoft Teams.

Architektura przepływu

  1. Trigger: When a new email arrives in a shared mailbox (V2) (Office 365 Outlook)
  2. Akcja: Get email (V3) – aby uzyskać webLink do wiadomości (wejście: Message Id z triggera)
  3. Akcja: Send a message in a chat or channel (Microsoft Teams) – publikacja na czacie 1:1, grupowym albo w kanale

Konfiguracja – instrukcja

1) Trigger: „Gdy nadejdzie nowy e-mail w skrzynce udostępnionej (V2)”

  • Shared mailbox address: [email protected]
  • (Opcjonalnie) Folder: Inbox (domyślne) lub inny
  • (Opcjonalnie) Only with Attachments / Include Attachments — według potrzeb
  • (Opcjonalnie) Importance: Any / High

Trigger conditions (filtrowanie na wejściu – zalecane):
Ustaw w Settings triggera, aby nie odpalać przepływu dla mało istotnych maili, np. tylko „PILNE” lub z ważnością High:

@or(
  equals(triggerOutputs()?['body/importance'], 'High'),
  contains(triggerOutputs()?['body/subject'], 'PILNE')
)

Dzięki temu oszczędzasz limity i utrzymujesz porządek w logach.

2) „Get email (V3)”

  • Message Id: @{triggerBody()?['id']}
    Ta akcja zwróci m.in. webLink – bezpośredni link „Otwórz w Outlook w przeglądarce”.

3) „Send a message in a chat or channel” (Teams)

  • Post as: Flow bot (zalecane)
  • Post in: Chat with user(s) (lub Channel → wybierz zespół/kanal)
  • Recipients / Channel: wybierz adresatów lub kanał
  • Message (pole tekstowe) – wstaw poniższy szablon:
**Nowa wiadomość w skrzynce:** Shared Mailbox – @{triggerOutputs()?['body/recipientEmailAddress']}
• **Od:** @{triggerOutputs()?['body/from/emailAddress/name']} <@{triggerOutputs()?['body/from/emailAddress/address']}>
• **Do:** @{join(triggerOutputs()?['body/toRecipients'], ', ')}
• **Temat:** @{triggerBody()?['subject']}
• **Podgląd:** @{triggerBody()?['bodyPreview']}

[Otwórz w Outlook Web](@{outputs('Get_email_(V3)')?['body/webLink']})

Uwaga dot. To: – pole toRecipients bywa tablicą obiektów. join() działa, jeśli konektor zwraca go jako tablicę stringów. Jeśli to obiekty, użyj „Select” → „Join” (patrz „Zaawansowane warianty” poniżej).


Gotowe! Test i publikacja

  1. Wyślij testowy e-mail na skrzynkę udostępnioną.
  2. W historii uruchomień sprawdź, czy Get email (V3) zwrócił webLink.
  3. Zobacz, czy czat/kanal w Teams dostał komunikat.

Personalizacja i dobre praktyki

A) Formatowanie wiadomości

Teams akceptuje Markdown (pogrubienia, linki, listy). Trzymaj treść krótko, dodaj tylko najważniejsze pola.

B) Warunki biznesowe

  • Filtr domeny nadawcy: w treści warunku użyj contains(triggerOutputs()?['body/from/emailAddress/address'], '@klient.pl')
  • Załączniki: dodaj ścieżkę „Jeśli hasAttachments = true → …” i np. dołącz link do pliku po zapisie w SharePoint.

C) Nazewnictwo i środowiska

  • Nazwij przepływ np. MAIL2TEAMS - SharedMailbox - Notifications.
  • Przechowuj w Solution (ALM), użyj konta serwisowego (Service Account) do konektorów.

Zaawansowane warianty

1) Ładniejszy layout z Adaptive Card

Zamiast zwykłej wiadomości użyj akcji „Post adaptive card and wait for a response” i wklej JSON karty (np. z Adaptive Cards Designer). Pola dynamiczne wstawiasz tak samo. Dodaj przyciski „Przypisz”, „Oznacz jako obsłużone”.

2) „Do:” jako czytelna lista adresów

Jeśli toRecipients przychodzi jako tablica obiektów, dodaj akcje:

  • Select:
    • From: @{triggerOutputs()?['body/toRecipients']}
    • Map: emailitem()?['emailAddress']?['address']
  • Join:
    • From: wynik Select
    • Separator: ,
  • W wiadomości użyj: @{outputs('Join')}

3) Ominięcie duplikatów / floodu

  • Użyj Trigger conditions (jak wyżej).
  • Do wersjonowania użyj internetMessageId i zapisuj przetworzone ID w SharePoint/Dataverse, zanim wyślesz komunikat.

4) Różne kanały wg reguł

Dodaj Switch po subject/from i kieruj notyfikację do różnych kanałów (np. #sprzedaż, #serwis).


Rozwiązywanie problemów

  • Brak wiadomości w Teams: sprawdź historię uruchomień oraz czy konto połączenia ma Full Access do skrzynki i dostęp do odbiorców w Teams.
  • Brak linku „Otwórz w Outlook Web”: upewnij się, że dodałeś Get email (V3) i w treści używasz body/webLink.
  • Błędy uprawnień: w Outlook connector użyj konta serwisowego z nadanym Full Access do Shared Mailbox (Exchange Admin Center).
  • Ograniczenia rozmiaru: wiadomości >35 MB z dużymi załącznikami mogą nie przechodzić — rozważ warunki hasAttachments=false lub upload załączników do SharePoint i link w karcie.

Szybki „copypaste” – minimalny szablon wiadomości (Teams)

**Nowy e-mail – @{triggerOutputs()?['body/recipientEmailAddress']}**
Od: @{triggerOutputs()?['body/from/emailAddress/name']} <@{triggerOutputs()?['body/from/emailAddress/address']}>
Do: @{join(triggerOutputs()?['body/toRecipients'], ', ')}
Temat: @{triggerBody()?['subject']}
Podgląd: @{triggerBody()?['bodyPreview']}

[Otwórz w OWA](@{outputs('Get_email_(V3)')?['body/webLink']})

Podsumowanie

W kilka minut możesz zautomatyzować przepływ informacji: nowy mail → natychmiastowa, czytelna notyfikacja w Teams z klikanym linkiem do podglądu. Zacznij od prostego wariantu, a potem dodawaj warunki, Adaptive Card i routing do kanałów — dokładnie tak, jak opisałem powyżej. Jeśli chcesz, mogę przygotować gotowy export rozwiązania (Flow) do importu w Twoim środowisku.

Autor: Błażej Jadach

Dodaj komentarz