Viva Engage Kudos to HR Recognition Log
When a praise/kudos post is made in Viva Engage (using a praise badge or keyword), the flow logs the recognition to a Dataverse table tied to the recipient's profile, increments their recognition count, and surfaces a monthly 'most appreciated' roll-up to leadership. Turns informal praise into trackable recognition data.
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 solution turns informal praise on Viva Engage into governed, reportable recognition data. A 15-minute logger flow reads new posts in a designated praise community, deduplicates them, writes a recognition record to Dataverse, increments a per-recipient running count, and notifies the HR Teams channel. A monthly roll-up flow then publishes a "most appreciated" leaderboard to leadership.
Why it matters: Recognition drives engagement but is invisible to HR when it lives in social posts. Capturing it creates durable data for culture programs, reviews, and leadership visibility.
Build status: Built via the API-first (workflow-table clientdata) path. Both flows ship Off and verify 0 errors / 0 warnings in Flow Checker. Going live requires only authorizing the three connections and setting the environment-variable values.
Use Case
HR wants employee recognition captured and reportable, fed automatically from organic Viva Engage praise — with a per-person tally and a monthly leadership summary, rather than manual tracking.
Flow Architecture
Recurrence (15 min)
RecurrencePoll the praise community on a schedule.
Initialize run variables
Initialize variableMint a guid() correlation ID and load praise community id, optional praise keyword, Teams group and HR channel ids.
Get Praise Posts
Viva Engage GetMessagesInGroupV3Read recent thread-starter posts from the praise community, then filter to non-system posts (optionally by keyword).
For each kudos post
Foreach (concurrency 1)Derive the recipient from the first @mention; dedupe by message id (Dataverse ListRecords); if new, write the recognition row (CreateRecord), increment or create the recipient summary, and notify the HR Teams channel.
Monthly Recognition Roll-Up
Recurrence (monthly) + Dataverse + TeamsA second monthly flow reads the summary table ordered by recognition count (top N) and posts a most-appreciated leaderboard to leadership.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_VivaPraiseCommunityId | String | REPLACE_WITH_VIVA_COMMUNITY_ID | Viva Engage community/group id treated as the praise community (integer id as string). |
| flowlibs_PraiseKeyword | String | — | Optional keyword to narrow which posts count as kudos. Empty = every non-system post in the community. |
| flowlibs_TeamsGroupId | String | <configure> | Teams team (group) id for notifications. |
| flowlibs_HRRecognitionChannelId | String | 19:000…@thread.tacv2 | HR recognition channel id (new-kudos notifications). |
| flowlibs_LeadershipChannelId | String | 19:000…@thread.tacv2 | Leadership channel id (monthly roll-up). |
| flowlibs_TopRecipientCount | String | 10 | Number of top recipients in the leaderboard. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Viva Engage | shared_yammer | GetMessagesInGroupV3 |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords CreateRecord UpdateRecord |
| Microsoft Teams | shared_teams | PostMessageToConversation |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
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.
- Praise detection
- By default every non-system post in flowlibs_VivaPraiseCommunityId counts as a kudos. Set flowlibs_PraiseKeyword (e.g. kudos, shoutout) to only count posts containing that word.
- Recipient extraction
- Compose RecipientName takes the first @mention in the post body. Adjust this expression to match your praise format.
- Polling cadence
- Change Flow 1's Recurrence (default 15 min) to trade latency for API calls.
- Leaderboard size & cadence
- flowlibs_TopRecipientCount controls how many recipients appear; Flow 2's Recurrence controls how often leadership is updated.
- Values tagging / rewards
- Extend the log table with a company value or reward tier column and stamp it on Create Log Record.
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.01Praise filter (Filter array)
Keep non-system posts, optionally narrowed to the praise keyword.
EXPR.02Dedup lookup ($filter)
Avoid double-logging the same post.
EXPR.03Increment count (Update)
Increment the recipient's running tally.
EXPR.04Leaderboard order ($orderby)
Read the top N recipients.
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.