Tired of having to manually update your Microsoft 365 calendars across multiple accounts? Look no further than Sync Mate M365!
With Sync Mate M365, you can say goodbye to missed appointments and scheduling conflicts. The app creates a dummy event in each of your calendars whenever a new event is added, updated, or removed in any account. This ensures that all of your calendars are always up to date, no matter which device or account you're using.
Working Demo - Please visit.
How it works
Manage Accounts
- App Uses Graph API Change Notifications API.
- Once you login or add new account,App creates a subscription with notification url to our webhook.
- App is using Delegated permission to get all the calendar events and to Create an event.
- App creates mapping between all of your accounts and their respective subscription IDs, which is linked to a unique identifier that is stored during your initial login.
- Azure App Registration with mutli tenant configuration
- Delegated Graph Permissions Calender.Read, Calender.ReadWrite
- App does not store any of calendar data in database.
- Below is list of information stored in to our database(Cloud Mongo DB).
- Subscription id for each account
- User Principal name (generally email)
- User Id (Azure AD Unique Identifier)
- Tenant Id
- Refresh Token
- Meeting Id
- A Scheduler job utility to refresh the subscription because as per the design change notfication webhook lifecycle is 3 days.
- ASP.NET Core MVC Web Application
- API to connect Graph from backend
- Scheduler Job Utility to update subscriptions
- Full Calendar Library for Calendar View
-
Clone the repository
-
Create Azure AD App Registration and provided required permission as Calender.Read, Calender.ReadWrite plus basic open id permissions
-
Replace the values in appsettings.json in both Scheduler and Main Solution
-
Create the free mongo db client account https://www.mongodb.com/cloud/atlas/register and create database and collection
"DatabaseName": "SyncEvent",
"UserInfoCollectionName": "UserInfo",
"UserMappingCollectionName": "UserMapping",
"MeetingMappingCollectionName": "MeetingMapping"
-
Run the project
Feel free to reach out to us if any help required in setting up the project.