c# - 不使用 Web API 的主动通知
问题描述
我在 GitHub 上查看 Proactive Notification 示例,发现使用了一个 api 控制器来发送通知。
我不喜欢它的是它打开了一个我不需要的浏览器选项卡/窗口。
我也不需要调用任何 api,我更愿意调用一个方法来实现同样的事情。所以我从示例中构建了一个类似的控制器,但不是一个 api 控制器:
public class NotifyController
{
private readonly IBotFrameworkHttpAdapter _adapter;
private readonly string _appId;
private readonly ConcurrentDictionary<string, ConversationReference> _conversationReferences;
private readonly GretaDBContext DBContext;
public NotifyController(IBotFrameworkHttpAdapter adapter, ConcurrentDictionary<string,ConversationReference> references,
GretaDBContext dbContext, IConfiguration configuration)
{
_adapter = adapter;
_conversationReferences = references;
DBContext = dbContext;
_appId = configuration["MicrosoftAppId"];
if (string.IsNullOrEmpty(_appId))
{
_appId = Guid.NewGuid().ToString(); //if no AppId, use a random Guid
}
}
public async Task NotifyValidation(int id)
{
foreach(var conversationReference in _conversationReferences.Values)
{
//METHOD LOGIC FOR SENDING PROACTIVE NOTIFICATION
}
}
}
我的意图是将其注入到我的对话框中并调用其中一个公共函数,以通知一些用户他们的个人资料已经过验证。
我有几个问题:
像示例那样使用api并避免以某种方式打开浏览器会更好吗?还是将此控制器注入对话框也是一个好的解决方案?
如果答案是注入非 api 控制器,我是否将其声明为作用域、单例或瞬态服务?
解决方案
肯定有另一种方法可以做到这一点 - 您可以在单独的应用程序中创建一个 ConversationContext,例如,基于某种消息队列,并在该应用程序内发送主动消息。例如,我有一个 Azure 函数,它可以按照特定的时间表向特定用户发送主动消息。为此,您确实需要某些信息,特别是对话 id、serviceurl 等,您需要事先获取和存储这些信息。有多种方法可以获取此信息,但最简单的方法是您的机器人与相关用户之间存在对话。
我很乐意提供更多帮助,但请在此处阅读我关于此主题的其他答案,因为它可能是您需要的:以编程方式向 Microsoft Teams 中的机器人发送消息
推荐阅读
- javascript - JS 甘特图未从数据库加载
- python - 如何将 Excel 数据从特定单元格传输到 powerpoint 幻灯片中的占位符?
- node.js - 复合模式同时任务
- sql - Query on how to replace numerical data from a string/column
- javascript - 由于缺少 .map 文件而收到警告
- javascript - 在地图函数中调用更新状态函数
- python - 将时间戳列表字符串转换为熊猫中的时间戳列表
- delphi - 在 Delphi 中实现跨平台的毫秒数
- microcontroller - 将 LCD Nokia 3310/5110 与微控制器 PIC16F877A 连接
- javascript - 使选取框文本在 HTML 中连续出现问题