Microsoft Outlook Event API Slack Bot
The repository includes a Python-based Slack Bot for MS Outlook events.
Functionality
The application allows accessing shared calendars of a user and reading the corresponding weekly events via Microsoft API calls. In the next step, it is possible to send this event in the form of a Slack message to a connected Slack channel.
Installation
pip install outlook-event-slack-bot
Example of use
import argparse
from outlook_event_slack_notification_bot.model import SlackAPI, OutlookCalendarApi
from outlook_event_slack_notification_bot.slack import Slack
from outlook_event_slack_notification_bot.outlook_calendar import OutlookCalendar
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Script to extract a user's Outlook calendar events and "
"forward them to a Slack channel.")
parser.add_argument("-wh", "--webhook", type=str, required=True, help="Get the Slack webhook")
parser.add_argument("-t", "--tenant", type=str, required=True, help="Get the Microsoft tenant")
parser.add_argument("-ci", "--client-id", type=str, required=True, help="Get the Microsoft OAuth Client ID")
parser.add_argument("-cs", "--client-secret", type=str, required=True, help="Get the Microsoft OAuth Client secret")
parser.add_argument("-scu", "--shared_calendar_user", type=str, required=True,
help="Get the Outlook shared calendar user")
parser.add_argument("-scn", "--shared_calendar_name", type=str, required=True,
help="Get the Outlook shared calendar name")
parser.add_argument("-cn", "--custom_notification", type=str, required=True,
help="Should be custom notifications send to the corresponding users, "
"defined Outlook calendar event body?")
args = parser.parse_args()
outlook_calendar_api: OutlookCalendarApi = OutlookCalendarApi(
tenant=args.tenant, client_id=args.client_id, client_secret=args.client_secret
)
outlook_calendar: OutlookCalendar = OutlookCalendar(outlook_calendar_api)
events: list = outlook_calendar.get_events(
args.shared_calendar_name, args.shared_calendar_user
)
events_cw: list = outlook_calendar.get_weekly_events(events)
Slack(SlackAPI(args.webhook), args.custom_notification).send_slack_message(events_cw)
Optimization potential:
- Add Integration tests
Contribution
If you would like to contribute something, have an improvement request, or want to make a change inside the code, please open a pull request.
Support
If you need support, or you encounter a bug, please don't hesitate to open an issue.
Donations
If you want to support my work, I ask you to take an unusual action inside the open source community. Donate the money to a non-profit organization like Doctors Without Borders or the Children's Cancer Aid. I will continue to build tools because I like them, and I am passionate about developing and sharing applications.
License
This product is available under the Apache 2.0 license.