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:
- reaguje na nowy e-mail w Shared Mailbox,
- pobiera web link do wiadomości,
- 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
- Trigger: When a new email arrives in a shared mailbox (V2) (Office 365 Outlook)
- Akcja: Get email (V3) – aby uzyskać
webLinkdo wiadomości (wejście: Message Id z triggera) - 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
- Wyślij testowy e-mail na skrzynkę udostępnioną.
- W historii uruchomień sprawdź, czy Get email (V3) zwrócił
webLink. - 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:
email→item()?['emailAddress']?['address']
- From:
- 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
internetMessageIdi 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=falselub 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