Mattermost’s Approach to Layered Extensibility in Open Source

Slides:



Advertisements
Similar presentations
Other Web Application Development Technologies. PHP.
Advertisements

CTS2 DEVELOPMENT FRAMEWORK CTS2 Overview. Schedule What is it? Why a framework? What does this do for me? Plugins Implementations available now CTS2 Compliance.
Enhancing Spotfire with the Power of R
1Proprietary and Confidential AirVantage API – Getting started David SCIAMMA – June 13th 2014.
Instant Queue IBM Techline Instant Queue Manager Deployed for IBM Techline Richard Brader IBM Techline January 2012.
Web Applications Development Using Coldbox Platform Eddie Johnston.
Browsers and Servers CGI Processing Model ( Common Gateway Interface ) © Norman White, 2013.
Microsoft ASP.NET AJAX - AJAX as it has to be Presented by : Rana Vijayasimha Nalla CSCE Grad Student.
Google App Engine Google APIs OAuth Facebook Graph API
1 Web Developer & Design Foundations with XHTML Chapter 6 Key Concepts.
2012 National BDPA Technology Conference Creating Rich Data Visualizations using the Google API Yolanda M. Davis Senior Software Engineer AdvancED August.
Crystal Hoyer Program Manager IIS Team Preview of features that will be announced at MIX09 Please do not blog, take pictures or video of session.
Overview of Previous Lesson(s) Over View  ASP.NET Pages  Modular in nature and divided into the core sections  Page directives  Code Section  Page.
Microsoft Office Communicator A General Introduction.
London April 2005 London April 2005 Creating Eyeblaster Ads The Rich Media Platform The Rich Media Platform Eyeblaster.
© 2006 IBM Corporation IBM WebSphere Portlet Factory Architecture.
Extending ArcGIS for Server
1 In the good old days... Years ago… the WWW was made up of (mostly) static documents. –Each URL corresponded to a single file stored on some hard disk.
The Switchvox Extend API
Grid Chemistry System Architecture Overview Akylbek Zhumabayev.
1 Geospatial and Business Intelligence Jean-Sébastien Turcotte Executive VP San Francisco - April 2007 Streamlining web mapping applications.
Copyright © 2012 UNICOM Systems, Inc. Confidential Information z/Ware Product Overview illustro Systems International A Division of UNICOM Global.
ICM – API Server & Forms Gary Ratcliffe.
#watitis2015 CHAT-OPS WITH SLACK Kevin Paxman.
TOPIC 7.0 LINUX SERVICES AND CONFIGURATION. ROOT USER Root user is called “super user” because it has power far beyond those of mortal user. As root,
SharePoint 2010 Business Intelligence Module 7: Filter Web Parts.
/16 Final Project Report By Facializer Team Final Project Report Eagle, Leo, Bessie, Five, Evan Dan, Kyle, Ben, Caleb.
THE API AN INTRODUCTION TO THE MINISTRYPLATFORM APPLICATION PROGRAMMING INTERFACE STEPHEN WAREHAM.
ASP.NET Overview Brian Hitney Developer Evangelist Microsoft Corporation
Ur/Web: A Simple Model for Programming the Web
Under the hood of a small laravel app Speaker: George Drakakis Github project:
The Holmes Platform and Applications
Introducing OpenLMIS 13 December 2016.
Business Directory REST API
API (Application Program Interface)
StackStorm: DevOps to ChatOps
5/22/2018 3:04 AM © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN.
Web Development Web Servers.
Node.js Express Web Applications
IMPORTING & EXPORTING DATA
Session ID#: JDE This is a subtitle for the presentation Prepared by:
z/Ware 2.0 Technical Overview
Section 13 - Integrating with Third Party Tools
Open Source distributed document DB for an enterprise
AJAX and REST.
Web Software Model CS 4640 Programming Languages for Web Applications
PHP / MySQL Introduction
Fast Action Links extension A love letter to CiviCRM
intro to notifications in iOS 10
Lecture 1: Multi-tier Architecture Overview
Office 365 Development.
Microsoft Build /2/2019 6:45 PM © 2016 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY,
Testing RESTful Web APIs
Moodle Trigger Plugin Presented by Matt Porritt 1 1
REAL-TIME, INTERACTIVE DOCUMENT AUTOMATION
SharePoint 2019 Overview and Use SPFx Extensions
2/24/2019 6:15 AM © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN.
Eclipse Marketplace Client (MPC) Release and Graduation Review
Unified Real-Time Communications with Pàdé
Building production-ready APIs with ASP.NET Core 2.2
Back end Development CS Programming Languages for Web Applications
World Wide Web Components
ASP.NET MVC Imran Rashid CTO at ManiWeber Technologies.
Slacking for the DBA It’s good to Chat.
Salesforce.com Salesforce.com is the world leader in on-demand customer relationship management (CRM) services Manages sales, marketing, customer service,
Back end Development CS Programming Languages for Web Applications
Web Application Development Using PHP
Concepts in ASP.NET Core App
Embedding Power BI in your application
Presentation transcript:

Mattermost’s Approach to Layered Extensibility in Open Source Corey Hulen / Co-founder and CTO, Mattermost, Inc. Feb 2019

Mattermost as an OS Smart workflows Real Estate AI BI Salesforce Mattermost as a platform from the very beginning Smart workflows Real Estate AI BI Salesforce Finance Healthcare Etc Etc Mattermost Platform

Embedding Applications inside of Mattermost ERP Embedding Applications inside of Mattermost Corporate Directory Analytics Smart workflow Smart workflow Smart workflow Mattermost HR Customer Support Smart workflow Smart workflow Smart workflow Smart workflow Operations Salesforce

Slash Commands and Webhooks Developer Toolkit Mattermost has Layers! Slash Commands and Webhooks REST API/Bots Plugins Open Source Open Data

Mattermost is Open Source Typical open source goodness Fork, change what you want (heck change everything!) Hard, takes a lot of resources People love the idea but in reality very rarely happens 100% of what you see in the UI is accessible from our RESTful JSON web service API

Open Source Example Matterhorn is a terminal client for the Mattermost chat system. https://github.com/matterhorn-chat/matterhorn

Mattermost is Open Data You own 100% of your data Easy extraction and manipulation with SQL Easily chart, report, analyze No proprietary data models; nothing hidden

https://developers.mattermost.com Developer Toolkit Incoming/Outgoing Webhooks Slash Commands Bots REST API Client-side Plugins Server-side Plugins https://developers.mattermost.com

Webhooks Incoming Webhooks Post messages to public, private and direct message channels Simple HTTP POST request to a URL Designed to easily allow you to post messages Slack compatible Outgoing Webhooks Post automated responses to posts made by your users Uses trigger words Simple HTTP POST request to a web service

Webhooks Example

Slash Commands Easy way integrate external applications Similar to outgoing webhooks, but can be used in any channel Simple HTTP POST request to a URL, process response back into channel Both built-in and custom slash commands Slack compatible

Matterbuild example

Bots Official and community-built drivers for our web service API Javascript Golang PHP Python https://api.mattermost.com Golang bot sample code Uses the go driver to interact with the Mattermost server Login to the server, create a channel, modify a user, etc https://github.com/mattermost/mattermost-bot-sample-golang

Sample Bot Example

Hubot Example

Plugins Overview Customize User Interfaces Write a web app plugin to add to the channel header, sidebars, main menu and more. Register your plugin against a post type to render custom posts or wire up a root component to build an entirely new experience. All this is possible without having to fork the source code and rebase on every Mattermost release. Launch Tightly Integrated Services Launch and manage server plugins as services from your Mattermost server over RPC. Handle events via real-time hooks and invoke Mattermost server methods directly using a dedicated plugin API. Extend the Mattermost REST API Extend the Mattermost REST API with custom endpoints for use by web app plugins or third-party services. Custom endpoints have access to all the features of the standard Mattermost REST API, including personal access tokens and OAuth 2.0.

Customize User Interfaces (Client Side) registerRootComponent(component) registerPopoverUserAttributesComponent(component) registerPopoverUserActionsComponent(component) registerLeftSidebarHeaderComponent(component) registerBottomTeamSidebarComponent(component) registerPostMessageAttachmentComponent(component) registerChannelHeaderButtonAction(icon, action, dropdownText, tooltipText) registerPostTypeComponent(type, component) registerMainMenuAction(text, action, mobileIcon) registerPostDropdownMenuAction(text, action, filter) registerPostDropdownMenuComponent(component) registerFileUploadMethod(icon, action, text) registerFilesWillUploadHook(hook) unregisterComponent(componentId) registerReducer(reducer) registerWebSocketEventHandler(event, handler) unregisterWebSocketEventHandler(event) registerReconnectHandler(handler) unregisterReconnectHandler() registerMessageWillFormatHook(hook)

Channel Header Button Example Add a button to the channel header If there is more than one button, a dropdown menu is created Great for things like video conferencing integration Our built-in Zoom integration is actually a plugin

Zoom Integration adding a Header Button

Override Post Rendering Register a component to render a custom body for posts Great for rich integrations with custom applications More than simple text or a screenshot The Zoom plugin uses this to render a custom post

Zoom Integration custom rendering

Render Component on the Team Sidebar Register a component fixed to the bottom of the team sidebar Used in our Github plugin

Github Integration

Rewrite the Message Client Side Register a hook that will be called before a message is formatted into Markdown Used in the Walltime plugin

Walltime Plugin

Tightly Integrated Services (Server Side) OnActivate() error Implemented() ([]string, error) OnDeactivate() error OnConfigurationChange() error ServeHTTP(c *plugin.Context, w http.ResponseWriter, r *http.Request) ExecuteCommand(c *plugin.Context, args *model.CommandArgs) (*model.CommandResponse, *model.AppError) UserHasBeenCreated(c *plugin.Context, user *model.User) UserWillLogIn(c *plugin.Context, user *model.User) string UserHasLoggedIn(c *plugin.Context, user *model.User) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) MessageWillBeUpdated(c *plugin.Context, newPost, oldPost *model.Post) (*model.Post, string) MessageHasBeenPosted(c *plugin.Context, post *model.Post) MessageHasBeenUpdated(c *plugin.Context, newPost, oldPost *model.Post) ChannelHasBeenCreated(c *plugin.Context, channel *model.Channel) UserHasJoinedChannel(c *plugin.Context, channelMember *model.ChannelMember, actor *model.User) UserHasLeftChannel(c *plugin.Context, channelMember *model.ChannelMember, actor *model.User) UserHasJoinedTeam(c *plugin.Context, teamMember *model.TeamMember, actor *model.User) UserHasLeftTeam(c *plugin.Context, teamMember *model.TeamMember, actor *model.User) FileWillBeUploaded(c *plugin.Context, info *model.FileInfo, file io.Reader, output io.Writer) (*model.FileInfo, string)

Rewrite the Message Server Side Lots of opportunities to hook the message Before it enters into the database You can reject messages You can also send back ephemeral messages After it enters into the database

Autolink Plugin

Implement a http.Handler on the Server ServeHTTP allows the plugin to implement the http.Handler interface. Requests destined for the /plugins/{id} path will be routed to the plugin.

WelcomeBot Handling Custom Actions

Thank you

https://mattermost.com/careers Mattermost is hiring! https://mattermost.com/careers

Mattermost Mentor Program Shepherding Helping someone get involved in the Mattermost community Need help submitting your first pull request? Want some general advice? Two 1-1 sessions with a core contributor Mentorship Focused on bringing more people into the Mattermost community Application process 3 month program Minimum commitments must be met Paired with a core contributor for the entire time Weekly 1-1 sessions with a core contributor Interested? Talk with me afterwards!

Questions?

How to reach me? Mattermost: @corey on https://community.mattermost.com Twitter: @corey_hulen Email: corey@hulen.com