上篇文章講了teams app的serverless架構,這篇主要講如何真正使用Azure Function來開發一個最最簡單的Teams Outgoing Webhook。
我們先登入azure的portal,創建一個azure function。我這里創建了一個名字叫outgoing-webhook的azure function。完成后如下圖,記住這個azure function的URL,我這里是?https://outgoing-webhook.azurewebsites.net
在左邊菜單里選擇”Functions”,點擊”Add”創建一個新的function
選擇Trigger,我們使用HTTP Trigger
輸入我們function的名字,我這里叫HandleMessage,有一點需要注意,Authorization level需要選擇”Anonymous”,然后點擊Create Function
完成后就可以看到我們有了HandleMessage這個函數。
輸入我們的outgoing webhook代碼。
#r "Newtonsoft.Json"using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;public class Message
{public string Text { get; set; }
}public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{log.LogInformation("C# HTTP trigger function processed a request.");string requestBody = await new StreamReader(req.Body).ReadToEndAsync();var message = JsonConvert.DeserializeObject<Message>(requestBody);return new OkObjectResult(new Message { Text = "Echo: " + message.Text });
}
回到Teams,先選擇需要添加outgoing webhook的一個team,選擇”Manage team”
進入”Apps”頁面,在右下方,點擊 “Create an outgoing webhook”,你有可能看不到這個選項,如果看不到,你需要用管理員賬號按照下面的步驟到office365后臺進行設置
使用你的Office365管理員賬號登入”https://portal.office.com”,點擊”Admin”菜單
在左側找到”Teams”菜單
然后找到 “Teams app”,點擊”Permission policies”,點擊你所在policy組,我這里是默認的”Global (Org-wide default)”
確保Custom apps是Allow all apps
再到Setup policies,確保 “Upload custom apps”是打開的狀態
回到Teams,刷新頁面,或者重新登入,現在你應該可以看到 “Create an outgoing webhook”的連接了,點擊它。
在彈出的頁面里輸入你的webhook名字,和URL。?
我這里使用名字”OutgoingWebhookTest”,URL是https://outgoing-webhook.azurewebsites.net/api/HandleMessage
。這個URL就是我們前面創建的azure function的URL,加上function的名字。
{azure function url}/api/{http-triggered function name}
創建完后進入一個channel,at這個webhook,我這里是 @outgoingWebhookTest
后面跟上你想發給這個webhook的文字。
發送后,等幾秒鐘后,你就可以收到我們function發回來的回復了。
如果你點開Azure Function的log,可以實時的看到我們function被teams調用的記錄
使用Azure Function開發的好處是代碼簡單,不需要ngrok之類的工具,而且當你webhook只是用來自己測試玩玩,基本是免費的,這也是Azure serverless的一大優勢!