MS Calendar v1
Target release | Q1 2020 |
---|---|
Epic |
|
Document status | DRAFT |
Document owner | @Aaron Rothschild (Deactivated) |
Designer |
|
Tech lead |
|
Technical writers |
|
QA |
|
Objective
Improve the utility of Mattermost in a collaborative environment by letting other MM users know someone is in a meeting or currently unavailable
Demonstrate that Mattermost “works with Microsoft” by embracing Microsoft business users too
Out of Scope
A visual view of a user’s calendar in Mattermost
Connecting with Microsoft On-Prem/Hosted Exchange servers. This project works with MS graph API - which is not supported by MS Exchange. We are designing the code to allow other calendar systems to be added/used in the future. There are some On-prem/Integration gateways that may allow us to connect with MS Exchange servers using a common API in the future.
Allowing a user to manually update their status (Custom Status) within the MM UI.
NOTE: Manual Custom Status is a different “project” handled by the Apps team (ie: “Hey I’m on vacation till Jan 3rd”) tentatively planned for 2H 2020. This MS Calendar integration project will only cover allowing a user’s MM online/offline status to be automatically updated based on their Meetings/OOO.
Opportunities with this Project:
Understand the Microsoft development environment and challenges with On-prem deployment, etc. for future microsoft projects.
Leverage the slash command auto-complete functionality to help users with slash command usage
Explore what needs to be improved in the “Mattermost Status” area….customers often request the ability to set a custom status message. We may need to revisit the code architecture as part of this project. The user status code path is one of the most touched on the platform.
Interested Customers:
CBA, Cooley,Expeditors, Illumina, SecureWorks, Spiria, Tesco, UTC
Primary Use Cases
When someone is OOO, they want to have their status in MM listed as something like “Out of Office” or “In a Meeting” if there is a calendar event/OOO flag on their exchange server account so other team members know of their status and when they can reach out to them again.
Allow users to Accept/Decline meeting invites from within a chat window/Bot Conversation so they don’t need to leave Mattermost for common tasks.
Notify users of their upcoming workday and plan (accept/decline)
Notify user of upcoming appointments so they can remain on time for meetings during the day
Success metrics
Goal | Metric |
---|---|
Demonstrate that Mattermost has over 20 customers using Microsoft with MM | Track over 20+ MS Calendar plugin activations in first 2 months of release |
MS Calendar Adoption rate average >25% of active MM users on a server | Track the number of authenticated users (MS) vs current number of MM users on that server |
Increase usage of slash commands and completion rate | Track how many events are created via slash command |
??? Add. |
|
Assumptions
This integration is designed for companies using Office 365 Calendar. MS Exchange is out of scope.
Assume that there will relatively high adoption of this plugin within an organization because…everybody has calendars. Not everyone uses Jira.
Not all users will be familiar with command line/slash commands for common tasks
Requirements
Requirement | User Story | Importance | Jira Issue | Notes | |
---|---|---|---|---|---|
1 | Update the status of a MM user when they are in a meeting | HIGH |
|
| |
2 | Update the status of a user when they are scheduled to be OOO |
|
|
|
|
3 | Allow a user to create a simple calendar event from MM |
| low |
|
|
4 | Display the user’s “day at a glance” in a bot channel |
|
|
|
|
5 | Allow users to Accept/Decline incoming invitations |
|
|
|
|
6 |
|
|
|
|
|
User interaction and design
Updated design Document located Here
Welcome to CalendarBot
Consideration: When a user first is made aware of the plugin.
How can we help the integration capability “spread” across users within MM so more of them are aware of the benefits and also that it’s available to them to use. They just need to connect their account.
Welcomebot: First bot Conversation that is presented to a user - (perhaps the admin needs to “launch” the welcome message for their users as part of deployment?):
Microsoft Permissions Landing Page
After clicking “click here” they are brought tothe Authentication screen (which we have little control over - provided by MS)
(insert approval screen here)
After initial connection to Calendar:
Location: CalendarBot channel
We need to inform the user what we are going to be doing with their statuses…
Updating the User’s Status
We can let them be notified whenever we change the status, OR just do it!
When we are about to go to modify their status, we can notify them with a message that looks like this:
The options “don’t update status this time” allows the user to remain “available” as a status if they aren’t planning to actually attend the meeting for example.
Dynamic Text: The status text could be “In a Meeting until 10am” which is automatically generated by the end time of their meeting. This would obviously be timezone specific to the user.
Questions:
What are the “rules” for updating a user’s status?
set it back to what it was before? What if they change it while in the meeting?
Meeting conflicts vs OOO status
Once a meeting has ended, it takes you back to original status. Perhaps, check to see if status has changed since the beginning of the meeting before updating the status to ensure it doesn’t overwrite a user’s manually set status.
When a new Invitation arrives - Accept/Decline
When a new invitation comes in, we should show the user how that new invite relates to the rest of their currently scheduled day so they can decide if it makes sense to accept the request. We should provide them the options Yes/No/Maybe, but is there a way we could also let them send a note or a message asking for a slightly different time, etc. ?
Important: Present the user with the calendar events surrounding the new event.
My Daily Calendar View
Similar to how Github bot knows when you start using MM, the Calendarbot should “wake up” and do a check every morning for the user and produce a “daily agenda” for the user. If there are any meetings they haven’t accepted yet, make it easy for them to accept/decline and plan out the rest of their day. A link to their native calendar makes it easy for them to get to extra functionality only available in the MS Calendar (find other people’s times, invite others, etc.).
Questions:
How will we present this in a slack attachment?
Can we use links?
What is the mobile experience for accept/decline?
Can we have a different experience for mobile vs desktop using plugins? @Christopher Speller @Elias Nahum @Jesse Hallam Any thoughts?
Notification of an upcoming meeting
When a calendar meeting is about to happen, notify the user that it is upcoming.
(QUESTION: How can a user set their notification preferences? This could get annoying BUT we have had users request it!)
User Options/Settings
We should present the user with some ways to set their preferences for the behavior of the bot. Currently this may need to be set by a slash command.
Idea:
Display it on a webpage served up by the plugin (ie: the landing page the plugin serves up)
GREAT idea: Consider using the RHS to display settings in the context of the user’s current location in the app
Doesn’t work on mobile, but that may be OK
Creating a new Calendar Event
A user can create a new calendar event witht he following slash command /office cal new
Possible Slash Commands
Authentication - /office connect
/office cal help
/ocal connect
/ocal status (synchronization)
/ocal today
/ocal notifications (may be big project)
Subscriptions: Accept/Decline (options for / command needed?)
UI Considerations:
How do we expose the user’s status in the app better?
Asaad had this idea:
Open Questions
Question | Answer | Date Answered |
---|---|---|
Where will we let the user store their preferences? | Tabs in the UI? Slash command? Modal window? |
|