Viva Engage Policy Acknowledgement Tracker
When a policy or important announcement is posted to a Viva Engage community, the flow tracks who has reacted/acknowledged against the required audience in Dataverse, sends reminders to non-acknowledgers, and reports acknowledgement rate to compliance. Turns an informational post into an auditable acknowledgement workflow.
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 turns a Viva Engage policy/announcement post into an auditable acknowledgement workflow. On a daily schedule it reads the reactions on a specific policy post, compares the reactors against a required audience held in Dataverse, logs each person's acknowledgement status, emails reminders to anyone outstanding, and reports the acknowledgement rate to compliance.
Why it matters: "We posted it" is not proof people read it. Tracking acknowledgement (a reaction on the post) against a defined audience, with automated reminders and a written log, gives compliance an auditable record.
Built as FlowLibs solution FlowLibs - Viva Engage Policy Acknowledgement Tracker. Flow ships Off — going live needs only connection authorization and env var configuration (community id, policy post id). Flow Checker: 0 errors / 0 warnings.
Use Case
HR / compliance posts a policy or important announcement to a Viva Engage community and needs documented acknowledgement from a defined audience. A reaction on the post counts as the acknowledgement signal; the flow chases non-acknowledgers and surfaces the rate.
Flow Architecture
Recurrence
Recurrence (daily 09:00)Viva Engage has no per-post acknowledgement trigger, so the pattern is a scheduled daily poll.
Initialize variables
Initialize Variable (x8)Load all configuration from env vars (community id, scan limit, policy name, policy message id, compliance email, reminder text, audience table, ack-log table).
Load Required Audience
Dataverse ListRecordsRead the people required to acknowledge from the Policy Audience table, filtered to this policy.
Read reactions & split
Viva GetMessagesInGroupV3 + Filter/ComposeRead recent community messages, isolate the policy post by message id, serialize the liked_by names, and split the audience into acknowledged vs non-acknowledged. Compute the acknowledgement rate.
Log + remind + report
Foreach + Dataverse CreateRecord + Outlook SendEmailV2For each non-acknowledger log a No row and email a reminder; for each acknowledger log a Yes row; then email the rate and counts to the compliance mailbox.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_VivaEngageCommunityId | String | REPLACE_WITH_VIVA_COMMUNITY_ID | Numeric Viva Engage community (group) id |
| flowlibs_VivaEngageScanLimit | String | 50 | How many recent messages to scan for the policy post |
| flowlibs_ComplianceEmail | String | compliance@yourcompany.com | Mailbox that receives the acknowledgement-rate report |
| flowlibs_PolicyName | String | Acceptable Use Policy | Display name of the policy being acknowledged |
| flowlibs_PolicyMessageId | String | REPLACE_WITH_POLICY_MESSAGE_ID | Viva Engage message id of the policy post |
| flowlibs_PolicyReminderText | String | (reminder body) | Body text used in the reminder email |
| flowlibs_PolicyAudienceTable | String | flowlibs_policyaudiences | Entity set name of the audience table |
| flowlibs_PolicyAckLogTable | String | flowlibs_policyacks | Entity set name of the ack-log table |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Viva Engage | shared_yammer | GetMessagesInGroupV3 |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords CreateRecord |
| Office 365 Outlook | shared_office365 | SendEmailV2 |
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.
- Point at your post
- Set flowlibs_VivaEngageCommunityId to the community id and flowlibs_PolicyMessageId to the policy post's message id.
- Seed the audience
- Add a row per required person to the Policy Audience table (flowlibs_name must match the person's Viva Engage display name; flowlibs_personemail for reminders; flowlibs_policyname = the policy).
- Formal attestation
- Swap the reaction signal for a Microsoft Forms response or an Approvals step if a click-through attestation is required.
- Deadline / escalation
- Add a manager escalation branch near the policy deadline.
- Name-match precision
- Matching is by display name against the post reactors; for large audiences switch to user-id matching using the liked_by user_id field.
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.01Acknowledger names (serialized)
Everyone who reacted = acknowledged.
EXPR.02Acknowledged?
Is this audience member among the reactors?
EXPR.03Acknowledgement rate (integer %)
Rate of the required audience who acknowledged.
EXPR.04Messages array (Viva V3 output)
Access the Viva V3 messages array.
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.