使用dotnet template快速開發Microsoft Teams Outgoing Web Hook

在上一篇文章中,我們一步步從無到有在Microsoft Teams中開發了一個簡單的Outgoing Webhook,并和我們本地的Web API應用程序產生交互,總結起來的步驟大概如下:

  • 導航到“團隊” Tab頁, 選中需要建立的Channel, 選中“應用”這個Tab,點擊最下方的“創建傳出webhook”
  • 開發傳出webhook的后端服務
  • 配置ngrok進行請求轉發
  • Team中發送消息,后端程序響應消息

這篇文章我們一起來看看如何使用dotnet的模板來快速開發一個帶安全驗證機制的Outgoing Webhook

1. 運行ngrok,記下轉發的地址

ngrok_requesttracker_console

2. 在teams里新建一個app,這次記下security token

具體的創建步驟見第一篇文章

bottoken

3. 安裝dotnet的模板

因為Teams的模板默認沒有安裝,所以我們需要在dotnet里添加模板

c:\demo> dotnet new -i MicrosoftTeams.Templates

installed-templates

4. 使用模板創建Teams Outgoing Webhook項目

運行以下命令來在當前目錄下創建工程

c:\demo> dotnet new teamswebhook

使用VS code打開這個目錄,找到appsettings.cs文件,修改配置節點TeamsAppSecurityToken, 填入我們創建Webhook時生成的security token

{"Logging": {"LogLevel": {"Default": "Warning"}},"AllowedHosts": "*","TeamsAppSecurityToken": "aDpHmzCh+z9r57niKFCew1AeI6tGjway5TfACZC7L88="
}

5. 運行程序

c:\demo> dotnet run

返回到Teams的對話框中,我們發送一條消息,觀察Teams的消息返回

tryhi

注意到消息正常返回,且提示我們嘗試輸入hero 或者 thumbnail,那我們根據提示,分別發送hero和thumbnail

superhero

superhero

上面的整個過程就是我們基于Microsoft Teams的模板創建的整個可交互的Outgoing Webhook的應用,下面我們來分析下整個的代碼結構:

superhero

首先,看到Services中定義的接口ITeamsAuthProvider.cs

public interface ITeamsAuthProvider
{/// <summary>/// Validates the specified authentication header value./// </summary>/// <param name="request">The HTTP request message.</param>/// <returns>/// Response containing result of validation./// </returns>TeamsAuthResponse Validate(HttpRequest request);
}

其中的Validate方法用于對請求的授權認證,TeamsAuthProvider.cs繼承ITeamsAuthProvider,實現了Validate?的認證授權邏輯。這個驗證用來確保這個請求是從微軟Teams的服務器發過來的,而不是其他惡意的程序發送的請求,從而確保的請求的發起源是受信任的。

接著看下MessagesController中,GetMessage這個Action,首先實現對請求授權的判斷,

var authResult = _teamsAuth.Validate(this.Request);
if (!authResult.AuthSuccessful)
{return new Activity(){Text = "You are not authorized to call into this end point."};
}

重點我們看下下面這段代碼,

Attachment attachment = null;
if (activity.Text.Contains("hero", StringComparison.InvariantCultureIgnoreCase))
{var card = CreateSampleHeroCard();attachment = new Attachment(){ContentType = HeroCard.ContentType,Content = card};
}
else if (activity.Text.Contains("thumbnail", StringComparison.InvariantCultureIgnoreCase))
{var card = CreateSampleThumbnailCard();attachment = new Attachment(){ContentType = ThumbnailCard.ContentType,Content = card};
}

從上面的代碼中看到,我們在Teams中發送hero或者thumbnail時,會看到響應的消息是一個帶有圖片的消息回復,具體的這種圖片消息, 我們可以簡單理解為是一種圖片附件的形式,我們來分析其中hero圖片附件的代碼:

private HeroCard CreateSampleHeroCard()
{return new HeroCard(){Title = "Superhero",Subtitle = "An incredible hero",Text = "Microsoft Teams",Images = new List<CardImage>(){new CardImage(){Url = "https://github.com/tony-xia/microsoft-teams-templates/raw/master/images/cbd_after_sunset.jpg"}},Buttons = new List<CardAction>(){new CardAction(){Type = "openUrl",Title = "Visit",Value = "http://www.microsoft.com"}}};
}

可以比較清楚的看到,一些標題Title和顯示問題Text, 其中Image作為顯示圖片URL, 這里的Buttons是這一種行為,當我們點擊時,跳轉到對應設置的網站,點擊可以看到跳轉到微軟的官網。

可以看到使用dotnet template來創建outgooing webhook項目方便快速,而且使用了card,使得返回的消息格式非常豐富。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278117.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[Swift]LeetCode1013. 將數組分成和相等的三個部分 | Partition Array Into Three Parts With Equal Sum...

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★?微信公眾號&#xff1a;山青詠芝&#xff08;shanqingyongzhi&#xff09;?博客園地址&#xff1a;山青詠芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;?GitHub地址&a…

京津冀產業協同升級 智慧城市等高端產業需求遇熱

云計算、智慧交通、城市環保科技等高端智慧城市產業項目正成為京津冀產業協同的新關注點。 21日&#xff0c;在由北京市經信委、天津市工信委、河北省工信廳聯合組織的京津冀產業協同發展招商推介專項行動上&#xff0c;超過200家與會企業共完成產業對接項目額達311.7億元。與以…

Microsoft Teams:刪除成員賬戶其歷史聊天會發生什么?

介紹&#xff1a; 此博客文章的目的是演示從Office 365刪除用戶的賬號后&#xff0c;此用戶在Microsoft Teams群聊和私聊中的歷史聊天記錄會發生什么改變。 以下是Microsoft Teams聊天對話&#xff0c;其中Adele和其他團隊成員正在參與對話&#xff1a; 此外, Adele和Mega還在…

PostgreSQL Huge Page 使用建議 - 大內存主機、實例注意

標簽 PostgreSQL , Linux , huge page , shared buffer , page table , 虛擬地址 , 物理地址 , 內存地址轉換表 背景 當內存很大時&#xff0c;除了刷臟頁的調度可能需要優化&#xff0c;還有一方面是虛擬內存與物理內存映射表相關的部分需要優化。 1 臟頁調度優化 1、主要包括…

Microsoft Teams:團隊Owner離開公司后,我們該怎么做?

您是否曾在這么一個團隊里&#xff0c;該團隊唯一有Owner權限的人離開了公司&#xff1f;不幸的是,如果這個人不再在公司里&#xff0c;您可能覺得沒有辦法讓其他團隊成員再成為team的owner。我有一個簡單易用的解決方案&#xff0c;但您需要成為Office 365租戶的Admin或聯系你…

python網絡編程-socket編程

一、服務端和客戶端 BS架構 &#xff08;騰訊通軟件&#xff1a;serverclient&#xff09; CS架構 &#xff08;web網站&#xff09; C/S架構與socket的關系&#xff1a; 我們學習socket就是為了完成C/S架構的開發 二、OSI七層模型 互聯網協議按照功能不同分為osi七層或tcp/ip五…

使用PowerShell配置Microsoft Teams

作為 IT 專業人員, 我一直在尋找自動化任務的方法, 并使日常操作簡單。當使用Microsoft Teams時, 是否能夠在團隊中自動創建團隊&#xff0c;渠道和設置對于Microsoft Teams組建的成功與否至關重要。PowerShell對Microsoft Teams的支持使您可以做到這一點&#xff0c;它為我提供…

常見Kotlin高頻問題解惑

在筆者的Kotlin交流群里&#xff0c;不少同學反復遇到了一些相似的問題。這些問題大都比較基礎&#xff0c;但又容易產生誤解。因此&#xff0c;我決定寫一篇文章&#xff0c;整理群里同學遇到的一些問題 變量和常量的使用 在Kotlin語言中&#xff0c;我們使用var聲明變量&…

關于神經網絡訓練的一些建議筆記

關于網絡訓練時的參考建議&#xff1a; 1.train loss不斷下降&#xff0c;test loss不斷下降&#xff0c;網絡正在學習 2.train loss不斷下降&#xff0c;test loss趨于不變&#xff0c;網絡過擬合&#xff0c;需要增大數據&#xff1b;減小網絡規模dropout&#xff1b;權重衰減…

Microsoft Teams的保留策略

Microsoft Teams保留策略現在可在Office 365安全性和合規性中心里進行配置 今天&#xff0c;我們很自豪地宣布&#xff0c;我們正在開始推出針對Microsoft Teams的保留策略。 推出預計將在未來幾周內完成。 通過此次發布&#xff0c;Teams管理員可以使用Office 365安全性和合規…

八年溯源,如何巧搭區塊鏈

虎嗅注&#xff1a;區塊鏈正在逐步商業化&#xff0c;但最大的挑戰是共識。 為什么這樣說&#xff1f;因為商品的溯源防偽業務在過去正是因為缺乏信任感而沒有得到普及&#xff0c;這是每個溯源從業者最大的感受。 在虎嗅虎跑團每兩周一次線上分享會上&#xff0c;溯源鏈創始人…

數字簽名過程及數字證書

數字簽名是什么&#xff1f; 作者&#xff1a;David Youd 翻譯&#xff1a;阮一峰 原文網址&#xff1a;http://www.youdzone.com/signature.html 1.鮑勃有兩把鑰匙&#xff0c;一把是公鑰&#xff0c;另一把是私鑰。 2.Bob把公鑰送給他的朋友們-Pat、Doug、Susan-- 每人一把…

Teams與OneDrive for Business和SharePoint的關系

作為一個相對看重個人信息安全與隱私的人&#xff0c;個人附件等資料在Microsoft Teams中的存儲方式、文件訪問權限、可見范圍問題引起了我的好奇。 眾所周知&#xff0c;Teams包含3大主要的模塊&#xff1a;單人聊天、團隊、會議。那下面讓我們一起來看一下&#xff0c;對這三…

hadoop學習筆記(二):centos7三節點安裝hadoop2.7.0

環境win7vamvare10centos7 一、新建三臺centos7 64位的虛擬機 master 192.168.137.100 root/123456 node1 192.168.137.101 root/123456 node2 192.168.137.102 root/123456 二、關閉三臺虛擬機的防火墻&#xff0c;在每臺虛擬機里面執行&#xff1a; systemctl sto…

index.html 的默認301或者302跳轉

index.html 的默認301或者302跳轉 <!DOCTYPE html> <html> <head> <title>Google</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> <script>window.locat…

在Microsoft Teams中的Visio協作

所有Team站點都帶有專用文件庫&#xff0c;用于存儲所有工作組的內容。 您現在可以從桌面或云存儲站點將Visio文件上載到此庫&#xff0c;例如&#xff0c;您所在Team的資產都集中在一個位置&#xff0c;供具有權限的任何人進行訪問。與其他存儲文件一樣&#xff0c;您可以直接…

用區塊鏈打擊假新聞 這可能是最2017年的一件事

據外媒報道&#xff0c;非營利性基金會PUBLIQ公布了一個基于區塊鏈打造的平臺。這是一個用于創建和分享原創新聞和媒體內容的平臺&#xff0c;它將在近期推出。據了解&#xff0c;PUBLIQ創建這一平臺則是希望能借用類似于比特幣一樣的系統來打擊假新聞。 通過創建一個受信任的經…

oo面向對象第一單元總結

oo第一次作業主要考察了多項式的求導&#xff0c;從簡單的冪函數求導到三角函數求導再到嵌套函數的求導&#xff0c;難度循序漸進&#xff0c;對我們對于面向對象的理解的要求也在一次一次提升。一行行代碼打下來&#xff0c;一夜夜熬過去&#xff0c;我也來到了這個短暫的停靠…

Microsoft Teams免費版本初體驗

Microsoft Teams推出有一段時間了&#xff0c;如果想要體驗Teams&#xff0c;必須需要有Office365的訂閱。最近微軟為了進一步推廣Teams&#xff0c;突然宣布Teams免費了。使用過Teams的讀者知道Teams是基于Office365賬號和組的&#xff0c;那它免費后&#xff0c;不使用Office…

JS:封裝函數判斷數據類型

思路 1 ).根據 typeof() 的返回值將數據分為2種情況 a.返回值為 string number boolean undefined function (直接返回 typeof() 的返回值) b.返回值為object 2 ).再將 typeof() 返回值為 object 的數據分為2種情況 a.null (直接返回自身) b.包裝類 對象 數組 (再進行細分) var…