Azure functions 如何使用azure Function将通知发送给Bot?
我已经用bot框架的sdkv3c构建了一个bot,我还实现了会话id将存储在azure表中的主动消息以及所有相关信息。当用户发起对话时,机器人将识别用户。我想每天使用时间触发功能向bot服务发送通知。但我无法在azure function app的输出绑定中找到bot框架 如果没有作为输出绑定的bot框架,我怎么做呢 ===========================================代码测试====================================== 我已经测试了代码,它给了我同样的错误,请看一看 =======================================集成======================================= 这是我的积分。如果将Http绑定作为输出删除,错误将保持不变 ==============================================Json文件代码================================ 这是我的函数json文件代码Azure functions 如何使用azure Function将通知发送给Bot?,azure-functions,botframework,Azure Functions,Botframework,我已经用bot框架的sdkv3c构建了一个bot,我还实现了会话id将存储在azure表中的主动消息以及所有相关信息。当用户发起对话时,机器人将识别用户。我想每天使用时间触发功能向bot服务发送通知。但我无法在azure function app的输出绑定中找到bot框架 如果没有作为输出绑定的bot框架,我怎么做呢 ===========================================代码测试====================================== 我已经测
我有这样一个场景:需要一个团队对话机器人在每天特定的时间向群组聊天发送主动消息 我的方法是:在函数中设置一个时间触发器,当它被触发时,我的函数将调用一个自己创建的API,这个API将执行发送主动消息的方法 这是我的函数代码,希望它能帮助您:
#r "Newtonsoft.Json"
using System.Net;
using System.IO;
using System.IO.Compression;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static void Run(TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://xxxxxxxx.azurewebsites.net/api/sendProactiveMesg");
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
}
=============更新===========
根据您的错误消息,您似乎在某些地方错过了配置,但我不知道为什么会发生这种情况。我将分享我在创建时间触发器方面的经验。保存代码后,它将每分钟触发一次。如果这没有帮助,你能描述一下你的配置吗?因为我从来没有在“无值”的时间触发上遇到错误
=====================================更新2=============================
我的代码:
@Aaditya我已经更新了关于您的错误消息的答案,如果这不起作用,我愿意知道更多详细信息。您好,在我看来,您已经实现了向用户发送主动消息,这意味着您的后端程序有一种获取conversationId和其他必要参数的方法,并使用这些参数发送主动消息。所以上面的“API”是指创建一个方法来调用上面的方法,并将此方法公开为API。我将显示我的API作为回答。请稍等。@Aaditya正在尝试。我的解决方案取决于您自己的代码。我的方法“sendtoPersonal”用于发送主动消息。我想通过时间触发器调用这个方法,所以我创建了另一个方法,路径为“api/sendProactiveMesg”,当我访问时,我的机器人会向某人发送一条消息。如果你能用正确的响应在浏览器上触发你的方法,我的意思是代码正常并且发送消息正确,那么就比较上面的截图。我已经发布了我的函数代码、integration和function.json,试图让它们保持不变?还是重启扳机?让我们。
public async Task sendtoPersonal()
{
string teamInternalId = "19:3fxxx7d8c@unq.gbl.spaces";
string serviceUrl = "https://smba.trafficmanager.net/amer/";
string mentionUserPrincipalName = "xxx";
string tenantId = "72fxxxx47";
string botClientID = "e8caxxxx8c";
string botClientSecret = "5zxxxxJA";
AppCredentials.TrustServiceUrl(serviceUrl);
ConnectorClient connectorClient = new ConnectorClient(new Uri(serviceUrl), new MicrosoftAppCredentials(botClientID, botClientSecret), true);
TeamsChannelAccount user2 = (await connectorClient.Conversations.GetConversationMembersAsync(teamInternalId)).Select((ChannelAccount channelAccount) => JObject.FromObject(channelAccount).ToObject<TeamsChannelAccount>()).First((TeamsChannelAccount user) => user.UserPrincipalName == mentionUserPrincipalName);
//Activity personalMessageActivity = MessageFactory.Text("Personal message from the Bot!");
IMessageActivity personalMessageActivity = await showTeamStatus();
ConversationParameters conversationParameters = new ConversationParameters
{
Members = new List<ChannelAccount>
{
user2
},
ChannelData = new TeamsChannelData
{
Tenant = new TenantInfo
{
Id = tenantId
}
}
};
ConversationResourceResponse response = await connectorClient.Conversations.CreateConversationAsync(conversationParameters);
await connectorClient.Conversations.SendToConversationAsync(response.Id, (Activity)personalMessageActivity);
}