前言

我相信很多人都看过《三国演义》,里面有很多引人入胜的故事和栩栩如生的人物,对我而言,曹操手下的一员猛将典韦实在让我印象深刻。例如,书中有一段描写典韦的作战经历:

时西面又急,韦进当之,贼弓弩乱发,矢至如雨,韦不视,谓等人曰:“虏来十步,乃白之。”等人曰:“十步矣。”又曰:“五步乃白。”等人惧,疾言“虏至矣”!韦手持十余戟,大呼起,所抵无不应手倒者。布众退。

箭如雨下喊声四起,典韦以寡敌众,“贼至五步乃呼我”,如狼似虎,连吕布都要避其锋芒。我今天在写这篇文章时,又不由得联想起来这个让人血脉喷张的画面。Office 365 Connector正是一个有意思的类似场景,而且它也属于Office 365 开发四场场景之一,如下图所示:

它通常是在Office 365应用程序内部(目前支持Office 365 Group,Yammer和Microsoft Teams)中需要接收外部系统的一些通知消息时,能够以一种灵活的方式来连接起来。所以,它的中文名称就是“连接器”,换言之,当用户关注的某些业务系统(或者任何消息源)有一些新的状态,他可以自动地得到通知。

本文将包括如下的内容

  1. 在Office 365 Group中使用Office 365 Connectors

  2. 在Yammer中使用Office 365 Connectors
  3. 在Microsoft Teams中使用Office 365 Connectors
  4. 自定义Office 365 Connectors

在Office 365 Group中使用Office 365 Connectors

这是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中添加连接器的界面:


图中的“连接线”翻译不准确,应该为“连接器”

下图展示了在OWA中添加连接器的界面:

目前内置提供了超过100个连接器,包括很多企业级应用平台,也包括了很多互联网应用。下面演示一个从Github上面获取通知的连接器配置和使用效果。

点击第一个“添加”按钮,然后在下图中配置你的Github账号(通常会弹出一个登陆框,请你输入用户名和密码)

在这个界面中选择你要关联的代码库(repositories),并且勾选想要用来接收通知的事件,然后点击“保存”即可。

你会在“连接测试组”中收到一个配置成功的邮件:

下面我可以尝试往这个代码库提交一次更新,我们可以很快在连接器测试组中看到一个推送的通知。


在Yammer中使用Office 365 Connectors

Yammer是Office 365中的一个企业级社交网络,你可以根据需要创建各种各样的群组(Yammer Group),讨论不同的话题。在Yammer群组中,你也可以通过在“组操作”中选择“添加或删除应用”这个操作,如下图所示

这里显示的连接器列表其实跟在Outlook里面看到的是一样的

本例演示添加“RSS”这个连接器,例如我关注Office 产品组的更新博客,就可以通过下面的方式订阅他们的RSS feed

点击“保存”后,会在Yammer群组中看到一个通知

在设定的时间,RSS引擎会把博客链接发送到Yammer群组中来


在Microsoft Teams中使用Office 365 Connectors

Microsoft Teams是Office 365 Connectors另外一个使用场景,它的用法略有不同:它是在频道中添加连接器的,一个团队可以有多个频道,一个频道有可以添加多个连接器,这样就带来了更加灵活的可能性。

选择某个团队的某个频道,在它右侧的“...”菜单中选择“连接器”,你可以看到跟之前很类似的一个界面

在本例中,我演示的是如何配置Yammer这个连接器以便在Teams中能收到Yammer讨论组的消息。

和Github类似,添加Yammer这个连接器后,要进行详细的配置,如下图所示

你可以设置要关注的组,事件类型,关注的用户和关键字,以及通知的频率等等,保存后,当Yammer组有状态更新时,在频道里面就可以收到通知:

在这里可以直接点赞,或者回复,不过似乎这些还不能双向地同步到Yammer里面来。

自定义Office 365 Connectors

上面演示了使用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”即可

Office 365 Connectors 的使用与自定义开发的更多相关文章

  1. Office 365也是.NET Core应用开发新战场

    最近有幸阅读了陈希章花了一年时间为国内开发者贡献的<Office 365 开发入门指南>. 虽然早期接触过SharePoint的开发,2007年之后就再也没有接触SharePoint的开发 ...

  2. Office 365 – SharePoint 2013 Online 之WebPart开发、部署教程

    1.打开Visual Studio,新建一个项目,选择SharePoint空项目,如下图: 2.选择调试站点和沙盒解决方案,如下图: 3.在项目中,添加一个WebPart,如下图: 4.添加完毕的项目 ...

  3. Office 365开发概述及生态环境介绍(二)

    本文于2017年3月19日首发于LinkedIn,原文链接在这里 在上一篇 文章,我给大家回顾了Office发展过来的一些主要的版本(XP,2003,2007,2013等),以及在Office客户端中 ...

  4. Office 365 开发概览系列文章和教程

    Office 365 开发概览系列文章和教程 原文于2017年2月26日首发于LinkedIn,请参考链接 引子 之前我在Office 365技术社群(O萌)中跟大家提到,3月初适逢Visual St ...

  5. Office 365 机器人(Bot)开发入门指南 (新篇)

    最近在整理书稿时,发现我在2017年7月份写的这篇 Office 365 机器人(Bot)开发入门 的内容,因为相关平台的升级,已经完全不能体现当前的开发过程,所以我再专门写一篇新的开发入门指南给有兴 ...

  6. Office 365开发概述及生态环境介绍(一)

    原文于2017年3月13日首发于LinkedIn,请参考这个链接 离上一篇文章,很快又过去了两星期的时间.今天抓紧晚上的时间,开始了Office 365开发系列文章的第一篇,我会帮助大家回顾一下过去O ...

  7. Python在Office 365 开发中的应用

    我在昨天发布的文章 -- 简明 Python 教程:人生苦短,快用Python -- 中提到了Python已经在Office 365开发中全面受支持,有不同朋友留言或私信说想了解更加详细的说明,所以特 ...

  8. [ Office 365 开发系列 ] 身份认证

    前言 本文完全原创,转载请说明出处,希望对大家有用. 通常我们在开发一个应用时,需要考虑用户身份认证及授权,Office 365使用AAD(Azure Active Directory)作为其认证机构 ...

  9. Office 365 - SharePoint 2013 Online 之应用程序开发

    1.给站点添加完Napa后,在网站内容里点击Napa,如下图: 2.创建一个新的app,如下图: 3.可以在Napa里添加新的项目,如下图: 4.添加新的文件,可以添加web页面.样式表.脚本,如下图 ...

随机推荐

  1. JavaScript 中的对象深度复制(Object Deep Clone)

    JavaScript中并没有直接提供对象复制(Object Clone)的方法. JavaScript中的赋值,其实并不是复制对象,而是类似`c/c++`中的引用(或指针),因此下面的代码中改变对象b ...

  2. [HEOI2016]求和 sum

    [HEOI2016]求和 sum 标签: NTT cdq分治 多项式求逆 第二类斯特林数 Description 求\[\sum_{i=0}^n\sum_{j=0}^i S(i,j)×2^j×(j!) ...

  3. sass 变量

    1.使用变量 $符号标识变量 变量名中  中划线和下划线互通(不包括sass中纯 css 部分) 变量值 css 属性标准值 包括以空格 和 逗号 , 分开的多个属性值 变量可以定义在规则块之外

  4. MySQL数据库基础(三)(操作数据表中的记录)

    1.插入记录INSERT 命令:,expr:表达式 注意:如果给主键(自动编号的字段)赋值的话,可以赋值'NULL'或'DEFAULT',主键的值仍会遵守默认的规则:如果省略列名的话,所有的字段必须一 ...

  5. Tomcat8.5.24日志自动清理(maxDays)功能探究

    前言 测试人员反馈tomcat目录下的日志占用空间很大,需要自动清理.接到这个反馈时,想象着应该是一个很简单的功能,tomcat应该已经实现了日志的自动清理功能.于是乎,我先到网上查询了如何自动清除t ...

  6. spring 组件@Scope(request,session)示例

    上回说到, spring组件的注解Scope大约有singleton.prototype.request.session.global session 这么几种常用的场景.这里需要特别说明一下,根据源 ...

  7. 报错信息 The jsp:param action must not be used outside the jsp:include, jsp:forward, or jsp:params elements 的原因及解决办法

    如果你的代码是这样的话就会报错 <jsp:forward page="02.jsp"></jsp:forward> <jsp:param value= ...

  8. Gitlab_服务器安装配置

    1:开放防火墙端口 1.  sudo yum install curl openssh-server openssh-clients postfix cronie -y  sudo service p ...

  9. HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二

    思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...

  10. scrapy 中日志的使用

    我在后台调试 在后台调试scrapy spider的时候,总是觉得后台命令窗口 打印的东西太多了不便于观察日志,因此需要一个日志文件记录信息,这样以后会 方便查找问题. 分两种方法吧. 1.简单粗暴. ...