1. Overview
Schedule Message lets people in your organization send Microsoft Teams messages at a chosen time, including recurring messages such as daily standups, weekly check-ins, and reminders. It also provides private personal reminders and an optional private Outlook morning digest.
The app is published by Kaizynn, a Microsoft verified publisher (Global Partner ID 7100840). The consent screen your users see displays the Microsoft verified publisher badge.
Schedule Message does not use generative AI and does not generate content. Date, time, and recurrence parsing is deterministic logic built into the product. No message content is sent to any AI or language model service.
Privacy model in shared conversations
In a team channel, shared channel, or group chat, the scheduling form and its confirmation are visible only to the person scheduling. Only the final scheduled message is posted publicly. Personal reminders, schedule management, and Outlook digests are available only in the private 1:1 app.
2. Permissions requested
Schedule Message requests no device permissions (camera, microphone, location) and no resource-specific consent (RSC) permissions. It cannot read the contents of your channels or chats.
Delegated permissions (consented by the user)
These act only on behalf of the signed-in user and never exceed what that user can already do themselves. They are requested only when a user chooses to connect Microsoft — the core scheduling feature works without them.
| Permission | What it is used for |
|---|---|
User.Read | Reads the signed-in user's basic profile to link their Microsoft identity to their Schedule Message account. |
Calendars.Read | Reads the user's own Outlook calendar to build their private morning digest. Requested only when the user sets up a digest. |
ChatMessage.Send | Sends a scheduled message to a chat under the user's own name when they choose the "send as me" option. |
ChannelMessage.Send | Sends a scheduled message to a channel under the user's own name when they choose the "send as me" option. |
Team.ReadBasic.All | Lists the teams the user belongs to, so they can pick a destination in the scheduling form. |
Channel.ReadBasic.All | Lists the channels in a team the user belongs to, so they can pick a destination in the scheduling form. |
Application permissions (require admin consent)
These two roles let Schedule Message install itself into a team that a user has selected, so the bot can deliver messages there. Both are scoped to this application only.
| Permission | What it is used for |
|---|---|
AppCatalog.Read.All | Resolves the Schedule Message entry in your tenant app catalog so the app can locate its own installation record. |
TeamsAppInstallation.ReadWriteSelfForTeam.All | Installs Schedule Message into a team the user has selected, so scheduled messages can be delivered by the bot. The permission is scoped to this app only — it cannot read, install, or modify any other app. |
Why the "self" scope matters: TeamsAppInstallation.ReadWriteSelfForTeam.All grants the ability to manage only this app's own installation. It does not permit reading, installing, removing, or modifying any other Teams app in your tenant.
3. Admin consent — and what happens without it
Granting admin consent to the two application permissions is optional. Schedule Message is designed to degrade gracefully rather than break.
| Capability | Without admin consent | With admin consent |
|---|---|---|
| Scheduling in the current channel or chat | Works | Works |
| Personal reminders and Outlook digest | Works (user consent only) | Works |
| Sending to another team or channel as yourself | Works (user consent only) | Works |
| Bot-authored delivery to a team the app is not yet installed in | Requires a user to add the app to that team manually | The app adds itself automatically |
To grant consent, open Teams admin center → Teams apps → Manage apps → Schedule Message → Permissions and review the requested permissions. You can also grant consent from the Microsoft Entra admin center under Enterprise applications.
4. Data handling
What we store
| Message content | The text the user scheduled. |
| Destination | Tenant ID, team ID, channel ID or chat ID, and the regional Bot Connector service URL used to deliver the message. |
| Schedule metadata | Send time, timezone, recurrence pattern, sender choice, delivery count, and status. |
| User identity | Teams user ID, display name, email address, and email domain. |
| Authorization tokens | Encrypted Microsoft OAuth tokens, only if the user chooses to connect Microsoft. Removable at any time with the Disconnect Microsoft action. |
| Product telemetry | Command usage, card impressions, and delivery outcomes, used to operate and improve the service. |
What we do not store
- The contents of your channels, chats, or any message the user did not explicitly schedule.
- Files, attachments, or meeting recordings.
- Outlook calendar events. Events are read at digest send time and are not retained afterwards.
- Any data used to train an AI or machine learning model.
Retention
- One-time schedules: message content is deleted after the message is delivered.
- Recurring schedules: message content is retained for as long as the schedule is active, because it must be sent again on each occurrence. It is deleted when the user cancels or deletes the schedule.
- Authorization tokens: deleted immediately when the user uses Disconnect Microsoft, or when the app is uninstalled.
- Server logs: automatically deleted after 90 days.
Full details, including sub-processors and data subject rights, are in the Privacy Policy. To request deletion of all data for a user or for your entire tenant, email [email protected].
5. Architecture and data flow
Schedule Message is a stateless web service. It has no persistent connection into your tenant and cannot poll or read your data. All inbound traffic originates from Microsoft.
- A user runs a command or opens the scheduling form in Teams. Microsoft's Bot Framework sends an authenticated request to our service endpoint.
- We validate the Microsoft-signed token on every request, then render the scheduling form.
- On submit, the schedule is written to our database and a delivery job is queued for the exact send time in the user's timezone.
- At send time the job fires and the message is delivered — either by the Schedule Message bot through the regional Microsoft Bot Connector, or as the user through Microsoft Graph if they chose "send as me" and authorized it.
- Recurring schedules queue the next occurrence; one-time schedules are completed and their content removed.
Hosting: Google Cloud Platform, us-central1 (Iowa, USA), on Cloud Run with Firestore for storage and Cloud Tasks for scheduling. Secrets are held in Google Secret Manager and exposed only to the runtime.
6. Security
- Encryption in transit: TLS 1.2+ on all connections.
- Encryption at rest: AES-256 on all stored data.
- Request authentication:every inbound request from Teams is verified against Microsoft's signing keys. Unauthenticated requests are rejected.
- Least privilege: the bot identity and the Microsoft Graph identity are deliberately separate registrations, so bot transport cannot use Graph authorization and vice versa.
- Publisher verification: complete. The consent screen displays the Microsoft verified publisher badge for Kaizynn.
- No sub-processing of message content beyond the hosting infrastructure listed above.
7. Governance controls available to you
Schedule Message is subject to all standard Microsoft Teams app governance. You retain full control:
- App permission policies — allow Schedule Message for everyone, for a specific group, or for named users only.
- App setup policies — pin the app to the app bar, control its position, or pre-install it for a group of users.
- Block or allow — block the app tenant-wide at any time. Blocking stops all new scheduling immediately.
- App requests — if you block the app, users who try to add it generate an approval request you can review in the Teams admin center.
- Consent revocation — revoke admin consent at any time in the Microsoft Entra admin center without uninstalling the app. Only automatic team installation stops working.
App customization: Schedule Message does not currently enable admin app customization, so its name, icon, and description cannot be re-branded within your tenant.
Default block: Schedule Message is not blocked by default and requires no purchase or configuration before your users can start using it. A free tier is available; paid plans are optional.
8. Rollout checklist
- Review the permissions in section 2 and this page's data handling section against your security requirements.
- Allow Schedule Message in Teams admin center → Teams apps → Manage apps.
- Decide whether to grant admin consent for the two application permissions. This is optional — see section 3.
- Create an app permission policy scoped to your pilot group, and an app setup policy that pins the app for them.
- Run a pilot with a small group. Ask them to schedule one recurring message — a standup reminder is the most common first use.
- Review adoption in Teams admin center → Analytics & reports → Usage reports → Apps usage, then widen the permission policy.
9. Troubleshooting
A user selected a team as a destination and got an installation error.
Bot-authored delivery to a team requires either admin consent for the two application permissions, or the app to already be installed in that team. Ask the user to add Schedule Message to the team manually, or grant admin consent. The user can also choose to send as themselves instead, which does not require the app to be installed.
A user sees “no valid license for the tenant exists”.
This indicates a stale Microsoft licensing cache in the tenant rather than a problem with the app. Confirm the user has a Microsoft 365 Business Basic license or higher with Teams enabled. If the license is present and the error persists, toggling the user's Teams service plan off and on refreshes the assignment.
Scheduled messages are not arriving.
Confirm the app has not been blocked in the Teams admin center, and that the user has not cancelled the schedule. Users can check their own schedules with the list command in the personal app. If the schedule shows as active and the message did not arrive, contact us with the user's email and the send time.
Messages arrive at the wrong time.
Each schedule stores its own timezone, detected from the user's Teams client at the time of scheduling and overridable in the form. Ask the user to open the schedule and confirm the timezone shown.
A user wants to revoke our access to their Microsoft account.
The Disconnect Microsoft action in the personal app immediately deletes their stored authorization tokens. Uninstalling the app has the same effect.
10. Supported languages
The Microsoft Teams interface for Schedule Message is currently available in English (en-US)only. Scheduling and delivery work correctly regardless of the user's Teams display language, and message content can be written in any language.
11. Support
No account or sign-in is required to reach us. Administrators and end users can contact us directly:
- Email: [email protected]
- Support page: kaizynn.com/schedule-message#support
- Setup guide: kaizynn.com/schedule-message#how-it-works
- FAQ: kaizynn.com/schedule-message#faq
For security reviews, questionnaires, or a tenant-wide data deletion request, email us and we will respond within two business days.