作者:徐成奕_98743 | 来源:互联网 | 2023-09-13 18:25
之前我有一篇文章讲了如何在azurefunction上开发最简单的outgoingwebhook,收到一些反馈,建议我介绍一下如果在azurefunction上开发teamsbot
之前我有一篇文章讲了如何在azure function上开发最简单的outgoing webhook,收到一些反馈,建议我介绍一下如果在azure function上开发teams bot,那这篇文章就来讲一下如何用function来快速开发bot。
我们先创建一个azure function资源,然后创建一个由http触发的Function。具体步骤和上次outgoing webhook的步骤类似,我就不再重复。
![BotFunction](https://img.php1.cn/3cd4a/1eebe/cd5/1113165c4904ecc5.webp)
为了调试方便,我这里允许匿名访问这个function。
![BotFunction](https://img.php1.cn/3cd4a/1eebe/cd5/7d7ef3f69d479716.webp)
创建完function后,我们就可以输入下面的代码:
#r "Newtonsoft.Json"
using System;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Microsoft.Bot.Connector;
using Microsoft.Bot.Connector.Authentication;
using Microsoft.Bot.Schema;
public static async Task Run(HttpRequest req, ILogger log)
{
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
log.LogInformation(requestBody);
var activity = JsonConvert.DeserializeObject(requestBody);
var reply = activity.CreateReply("Echo: " + activity.Text);
log.LogInformation(JsonConvert.SerializeObject(reply));
MicrosoftAppCredentials.TrustServiceUrl(activity.ServiceUrl, DateTime.UtcNow.AddDays(7));
var botId = "2a820a1c-1111-2222-3333-e8864ad6ff54"; // your bot id
var botPassword = Environment.GetEnvironmentVariable("BotPassword"); // your bot password
var cOnnector= new ConnectorClient(new Uri(activity.ServiceUrl), botId, botPassword);
connector.Conversations.SendToConversationAsync(reply);
return new OkResult();
}
上面的代码先从http请求的request body里反序列化出 Activity
对象。
var activity = JsonConvert.DeserializeObject(requestBody);
然后从这个activity对象,创建出回复的消息。
var reply = activity.CreateReply("Echo: " + activity.Text);
接着,创建 connector
对象,然后用这个对象来发送回复的消息:
var cOnnector= new ConnectorClient(new Uri(activity.ServiceUrl), botId, botPassword);
connector.Conversations.SendToConversationAsync(reply);
在发送回复消息之前,我们需要trust teams的serive url。
MicrosoftAppCredentials.TrustServiceUrl(activity.ServiceUrl, DateTime.UtcNow.AddDays(7));
当我们保存上面的代码的时候,azure function 就会自动进行编译,但是编译失败,原因是 Microsoft.Bot.*
命名空间找不到,因为我们还没有引用对应的库。我们进入 App Service Editor (目前还是preview版本),在我们的function的目录下创建一个 function.proj
文件。
![BotFunction](https://img.php1.cn/3cd4a/1eebe/cd5/dc7ef30f57b727c7.jpeg)
![BotFunction](https://img.php1.cn/3cd4a/1e618/bdf/129913486c37ddf6.jpeg)
function.proj
文件内容如下:
netstandard2.0
回到function后,重新执行,就可以成功编译执行了。
完成了function后,我们就可以和普通的bot一样的在teams里创建一个bot app,然后填入azure function的url,就可以测试我们的bot了。 :D