基于TFS的Microsoft团队webhook

基于TFS的Microsoft团队webhook,tfs,microsoft-teams,Tfs,Microsoft Teams,我发现了微软的团队,我喜欢它。 我现在正试图触发从TFS到Microsoft团队的pullrequest消息。 我有一个团队组webhook url,可以很好地使用curl。 但是当我用TFS(服务钩子->Web钩子)测试它时,我只会收到错误的请求。 你们有谁知道为什么会这样吗 如果您使用的是VST,您可以直接在Microsoft团队中使用连接器来实现所需功能 从“常规”中打开连接器 添加VisualStudio团队服务 添加相关配置,如吹图片 在相关VSTS项目中创建拉取请求,将在Micro

我发现了微软的团队,我喜欢它。 我现在正试图触发从TFS到Microsoft团队的pullrequest消息。 我有一个团队组webhook url,可以很好地使用curl。 但是当我用TFS(服务钩子->Web钩子)测试它时,我只会收到错误的请求。
你们有谁知道为什么会这样吗

如果您使用的是VST,您可以直接在Microsoft团队中使用连接器来实现所需功能

  • 从“常规”中打开连接器
  • 添加VisualStudio团队服务

  • 添加相关配置,如吹图片

  • 在相关VSTS项目中创建拉取请求,将在Microsoft团队中收到消息

  • 如果您使用的是TFS,则目前没有相关的外接程序。看来你在用

    对于传入的Webhook,它只支持posts卡。有关如何生成该卡的更多详细信息,请参阅此链接:

    但是,对于,发送的JSON表示没有使用“卡片类型”。示例JSON如下所示:


    因此,您将收到一条关于bag request(400)的失败消息。

    也许您现在已经明白了,因为这个问题显然是3年前提出的,但我想发布我的答案,以便将来帮助其他人。 实际上有一种方法可以将TFS与Microsoft团队挂钩耶!! 从TFS转到服务挂钩-->office 365而不是(服务挂钩->Web挂钩),因为“Microsoft团队”是套件365的一部分,非常简单:)


    PS:当然,您需要首先在团队中创建一个频道,然后单击3点-->连接器-->传入Webhook(配置)-->为您的钩子命名-->创建。你完成了;只要复制团队生成的链接,并在需要时在TFS中通过它即可;)

    您有哪个版本的TFS?您使用的是VSTS(TFS在线)还是TFS内部部署?你能看到Web钩子中的“pull request created”吗?我们有自己的内部TFS(版本15.105.25910.0)。我们将TFS(而不是VSTS)与TFS一起使用,我正在拼命寻找一种方法来控制Web钩子的json负载。我知道可以通过编程方式创建服务挂钩,但我找不到控制有效负载格式的方法。我可以看到有一个资源版本的下拉列表,baybe可以扩展吗?@emig我不确定您正在谈论的资源版本的下拉列表到底在哪里,您可以添加一个屏幕截图。你所指的有效载荷是这样的吗?如果是这样的话,那么现在似乎没有办法控制有效负载格式。是的,当我说有效负载时,我指的是http主体(?)/通过webhook发送的json请求。我所指的下拉列表在设置页面下方的新服务挂钩(web挂钩)时可见。无论如何,在测试web钩子时,我可以确信json格式与团队期望的不同。我现在的计划是编写一个超级简单的发布子服务器,它将重写json主体并将消息发送给团队我们拥有tfs 2015版本。我没有看到office 365服务。这在特定的tfs版本上可用吗?@NicolasI我认为这与您使用的Microsoft office套件有关。我的组织正在使用Office 365。并且团队被新添加到365套件中。因此,似乎u正在使用office 2016和团队作为一个单独的应用程序。
    {
        "event.type": "git.push",
        ...
        "messsages": {
            "text": "...",
            "html": "...",
            "markdown": "..."
        },
        "detailedMesssages": {
            "text": "...",
            "html": "...",
            "markdown": "..."
        },
        "resource": {
            "id": "...",
            "url": "https://...",
            "name": "...",
            "field1:": "..."
        }
    }