Viva Engage New Community Member Onboarding
When someone joins a Viva Engage community, the flow welcomes them, DMs a starter pack (pinned resources, norms, who to follow) in Teams, adds them to the community roster in Dataverse, and notifies the community manager. Helps new members get value from the community quickly.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
This flow onboards new Viva Engage community members. On a schedule it detects newly joined members, posts a public welcome in the Viva community, sends a starter pack (pinned resources, norms, who to follow) to the community Teams channel, records each member in a Dataverse roster table, and notifies the community manager in Teams.
Why it matters: New members often lurk and disengage. A warm, resource-rich welcome helps them get value and participate faster.
Build status: Built and verified (Flow Checker 0 errors / 0 warnings). Ships Off (demo). Going live requires only connection authorization and environment-variable configuration.
Design note — membership polling: The Viva Engage connector (shared_yammer) has no join trigger and no membership-read operation. A Viva Engage community is backed by a Microsoft 365 group, so the flow polls membership with the Microsoft Entra ID connector's GetGroupMembers operation against the community's AAD group, and diffs the result against the Dataverse roster to find new members. Two identifiers are used: flowlibs_CommunityAadGroupId (the AAD object id, for GetGroupMembers) and flowlibs_VivaCommunityGroupId (the Yammer numeric group id, for the Viva welcome post).
Use Case
A community manager wants every new joiner welcomed and oriented automatically, with a durable roster record and a manager FYI — no manual watching of the member list.
Flow Architecture
Recurrence
Schedule (Hour/1)Poll community membership hourly.
Initialize run variables
Initialize variableMint a guid() correlation id plus community name, starter pack URL, Teams group/starter/manager channel ids, and roster table from env vars.
Get Community Members
Entra ID GetGroupMembersRead the current M365 group members backing the Viva community.
Apply to each member
Foreach (concurrency 1)Look up the member in the Dataverse roster (dedup); for new members post a public welcome to the community (Viva PostMessage), post a starter pack to the community Teams channel, add the member to the roster (CreateRecord), and notify the community manager in the manager channel.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_CommunityAadGroupId | String | <configure> | AAD object id of the community's M365 group (Entra ID GetGroupMembers) |
| flowlibs_VivaCommunityGroupId | String | <configure> | Yammer numeric group id for the Viva welcome post |
| flowlibs_StarterPackUrl | String | <configure> | Starter pack URL (resources, norms, who to follow) |
| flowlibs_TeamsGroupId | String | <configure> | Teams team (group) id hosting the channels |
| flowlibs_TeamsChannelId | String | <configure> | Teams channel id for the starter-pack welcome |
| flowlibs_ManagerChannelId | String | <configure> | Teams channel id for the manager FYI |
| flowlibs_RosterTable | String | flowlibs_communityrosters | Roster entity set name (used by List Records) |
| flowlibs_CommunityName | String | your-org Community | Community display name for messages |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Microsoft Entra ID | shared_azuread | GetGroupMembers |
| Viva Engage | shared_yammer | PostMessage |
| Microsoft Teams | shared_teams | PostMessageToConversation |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords CreateRecord |
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Buddy match
- Pair each new member with a community buddy (add a lookup into a buddy roster + an @mention in the welcome post).
- First-post prompt
- Add a follow-up Viva post inviting the member to introduce themselves.
- Re-engage
- Add a scheduled child flow that follows up if a member is inactive after two weeks (track flowlibs_joinedon).
- Manager via email
- Swap Notify_Community_Manager for an Outlook SendEmailV2 if the manager prefers email.
- Filter member types
- Add a Filter array on @odata.type to onboard only real users (skip nested groups / service principals).
- Cadence
- Change the Recurrence frequency/interval to poll more or less often.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01New-member test
True when no roster row exists for the member.
EXPR.02Email fallback
Resolve a usable email for the member.
EXPR.03Viva group (int)
Viva PostMessage requires an integer group id.
EXPR.04Correlation id
Stamped on every roster row + notification.
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.