上篇文章講了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的一大優勢!