我相信不少人都看過《三國演義》,裏面有不少引人入勝的故事和栩栩如生的人物,對我而言,曹操手下的一員猛將典韋實在讓我印象深入。例如,書中有一段描寫典韋的做戰經歷:html
時西面又急,韋進當之,賊弓弩亂髮,矢至如雨,韋不視,謂等人曰:「虜來十步,乃白之。」等人曰:「十步矣。」又曰:「五步乃白。」等人懼,疾言「虜至矣」!韋手持十餘戟,大呼起,所抵無不該手倒者。布衆退。git
箭如雨下喊聲四起,典韋以寡敵衆,「賊至五步乃呼我」,如狼似虎,連呂布都要避其鋒芒。我今天在寫這篇文章時,又不禁得聯想起來這個讓人血脈噴張的畫面。Office 365 Connector正是一個有意思的相似場景,並且它也屬於Office 365 開發四場場景之一,以下圖所示:github
它一般是在Office 365應用程序內部(目前支持Office 365 Group,Yammer和Microsoft Teams)中須要接收外部系統的一些通知消息時,可以以一種靈活的方式來鏈接起來。因此,它的中文名稱就是「鏈接器」,換言之,當用戶關注的某些業務系統(或者任何消息源)有一些新的狀態,他能夠自動地獲得通知。web
本文將包括以下的內容小程序
這是Office 365 Connectors最先的使用場景,用戶能夠本身在Outlook客戶端,或者OWA中進行配置,而且經過郵件的方式獲得通知。瀏覽器
關於Office 365 Group的詳細信息,請參考 https://support.office.com/zh-cn/article/%E4%BA%86%E8%A7%A3%E6%9C%89%E5%85%B3-office-365-%E7%BB%84-b565caa1-5c40-40ef-9915-60fdb2d97fa2?ui=zh-CN&rs=zh-CN&ad=CN網絡
下圖展現了在Outlook中添加鏈接器的界面:app
圖中的「鏈接線」翻譯不許確,應該爲「鏈接器」curl
下圖展現了在OWA中添加鏈接器的界面:async
目前內置提供了超過100個鏈接器,包括不少企業級應用平臺,也包括了不少互聯網應用。下面演示一個從Github上面獲取通知的鏈接器配置和使用效果。
點擊第一個「添加」按鈕,而後在下圖中配置你的Github帳號(一般會彈出一個登錄框,請你輸入用戶名和密碼)
在這個界面中選擇你要關聯的代碼庫(repositories),而且勾選想要用來接收通知的事件,而後點擊「保存」便可。
你會在「鏈接測試組」中收到一個配置成功的郵件:
下面我能夠嘗試往這個代碼庫提交一次更新,咱們能夠很快在鏈接器測試組中看到一個推送的通知。
Yammer是Office 365中的一個企業級社交網絡,你能夠根據須要建立各類各樣的羣組(Yammer Group),討論不一樣的話題。在Yammer羣組中,你也能夠經過在「組操做」中選擇「添加或刪除應用」這個操做,以下圖所示
這裏顯示的鏈接器列表其實跟在Outlook裏面看到的是同樣的
本例演示添加「RSS」這個鏈接器,例如我關注Office 產品組的更新博客,就能夠經過下面的方式訂閱他們的RSS feed
點擊「保存」後,會在Yammer羣組中看到一個通知
在設定的時間,RSS引擎會把博客連接發送到Yammer羣組中來
Microsoft Teams是Office 365 Connectors另一個使用場景,它的用法略有不一樣:它是在頻道中添加鏈接器的,一個團隊能夠有多個頻道,一個頻道有能夠添加多個鏈接器,這樣就帶來了更加靈活的可能性。
選擇某個團隊的某個頻道,在它右側的「...」菜單中選擇「鏈接器」,你能夠看到跟以前很相似的一個界面
在本例中,我演示的是如何配置Yammer這個鏈接器以便在Teams中能收到Yammer討論組的消息。
和Github相似,添加Yammer這個鏈接器後,要進行詳細的配置,以下圖所示
你能夠設置要關注的組,事件類型,關注的用戶和關鍵字,以及通知的頻率等等,保存後,當Yammer組有狀態更新時,在頻道里面就能夠收到通知:
在這裏能夠直接點贊,或者回復,不過彷佛這些還不能雙向地同步到Yammer裏面來。
上面演示了使用Office 365 Connectors的場景(Outlook,Yammer,Microsoft Teams),咱們都是使用目前內置的Connectors,那麼若是咱們本身有一個應用系統,也想經過這種方式進行鏈接(在必要的時候推送消息和更新動態),應該怎麼來作呢?這方面,目前Office 365平臺提供了三種機制。
首先,對於一些簡單的場景,你能夠直接使用「Incoming Webhook」這個內置的鏈接器來定義,以下圖所示
一般你只須要提供一個名稱便可完成鏈接器的定義
點擊「建立」,會產生一個Url,這就是能夠用來推送消息的地址了
那麼,如何使用這個自定義的鏈接器呢?很簡單,咱們只要在應用程序內部,經過Post的方法,給這個地址發送消息便可。一般的代碼以下:
using System; using System.Net.Http; namespace connectorconsole { class Program { static void Main(string[] args) { var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post,"https://outlook.office.com/webhook/f2bde2a5-8459-4acd-b92c-c55947422146@72f988bf-86f1-41af-91ab-2d7cd011db47/IncomingWebhook/9bc2989885fe475fa3d5578796f7dd05/f3b94dd3-20cc-49a3-98ce-b1287658e8cf"); request.Content = new StringContent("{\"text\":\"經過程序推送的消息\"}"); client.SendAsync(request); Console.Read(); } } }
運行這個小程序,就能夠在目標應用中收到一個通知的消息,以下圖所示
若是隻是做爲測試,你甚至都無需寫代碼,而是使用一些工具來發起請求,例如Fiddler,Postman,curl等,這裏就不演示了。
以上這種場景特別適合於簡單的環境,並不適合於大規模分發使用,由於這個地址是要用戶來生成的,而後再告訴開發人員,並且這個地址每次生成都是不同的。若是想要更好地解決這個問題,例如你能夠作一個本身的鏈接器,讓儘量多的用戶去使用它,那麼是時候考慮真正地自定義一個鏈接器。
你須要使用Office 365帳號登陸 https://outlook.office.com/connectors/publish 來建立一個自定義的鏈接器,以下圖所示
這個頁面中的關鍵信息是Redirect Urls這個地址,而後你能夠看到目前它僅支持Outlook和Microsoft Teams,暫時不支持Yammer。
點擊「保存」後,接下來就能夠進行測試了。值得說明的是,你須要準備一個用來響應用戶請求的網站,例如本例我會用本地運行的一個站點作演示(http://localhost:5000)
我用了dotnet core建立了一個最簡單的網站,用來響應用戶的關聯請求,而且將用戶相關信息打印出來(真實場景下會將這些信息保存起來,用來推送消息)
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using System.Text; using System.Net.Http; namespace connectorhost { public class Startup { // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Run(async (context) => { //打印出來用戶關聯信息 var sb = new StringBuilder(); foreach (var item in context.Request.Query) { sb.AppendLine($"{item.Key}={item.Value}"); } await context.Response.WriteAsync(sb.ToString()); //推送一個歡迎消息 var url = context.Request.Query["webhook_url"]; var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post,url); request.Content = new StringContent("{\"text\":\"歡迎關聯個人鏈接器,你將會收到不少消息推送\"}"); await client.SendAsync(request); }); } } }
爲了讓用戶能夠關聯咱們開發的自定義鏈接器,你能夠在註冊鏈接器的頁面上,點擊"Copy code",以下圖所示
而後將複製獲得的代碼,保存爲一個html文件,在瀏覽器中打開它的效果以下
你能夠將這段代碼嵌入到任意網站中去
用戶點擊頁面上這個「Connect to Office 365」的按鈕後,會被要求登陸Office 365,而後能夠選擇Outlook中的收件箱或者組來進行關聯
點擊「Allow」後,Office 365後臺作好必要的處理後,頁面會被重定向到註冊時提供的Redirect Urls(我演示的例子是 http://localhost:5000)
與此同時,在對應的組中,也當即收到了一個歡迎消息
這樣就完成了一個開發人員自定義鏈接器,用戶自行關聯鏈接器的流程。鏈接器的宿主應用程序,能夠把用戶的信息保存起來,而後再在必要的時候給用戶推送消息。
最後,若是你但願將你的自定義鏈接器發佈給全世界全部的Office 365用戶去使用,則須要發佈到微軟的Office 365 Connectors商店中去,你能夠在註冊頁面中點擊「Publish to store」按鈕
你按照須要填寫信息,而後「submit」便可