botframework - MS Teams:我们应该如何判断活动事件是否来自机器人?
问题描述
我们有一个聊天机器人,它似乎正在接收来自另一个机器人的消息。我们想忽略这些消息,因为对它们的响应会导致两个机器人之间的乒乓无限循环。
我们希望依赖此处activity.from.role
记录的内容,但似乎该字段从未设置过。
activity.from.id
看起来像28:app:00000000-dfae-4fe1-a068-80fe8fc61f2b_62b732f7-fc71-40bc-b27d-35efcb000000
,我们认为将帐户识别为机器人的唯一方法是检测:app:
这些 ID 中的 。这是次优的,因为此 ID 格式不是官方 API 的一部分,并且可能随时更改。
也就是说,我们应该如何检测活动事件是否来自机器人?
解决方案
如果您必须处理来自组织外部的潜在机器人,一种简单的方法可能是在Activity
对象中保留由 userId 或 UserName 索引的少数最后文本交换的字典。然后,在您的机器人收到的每个 POST 中,检查收到的文本是否与此词典中的先前消息条目之一完全匹配。如果是这种情况,则将相关的 userId/UserName 标记为机器人角色的候选者,但继续检查进一步的文本交换,以防非机器人用户刚刚打了两次招呼。
如果以下几个进一步的交换不再满足完全匹配要求,请取消将 userId/UserName 标记为潜在机器人。如果将 UserId/UserName 标记为机器人角色的候选者,如果在完整匹配条目之后或在您选择的延迟之后没有更多的交换,则将机器人角色应用于它们。对于后者,在延迟决定之后引发最后一次文本交换可能很有用。
对于 Watson/Eliza 类型的机器人,我建议检查交换的速度,据我所知,没有人每秒可以交换超过 20 条消息。
推荐阅读
- javascript - 如何通过 Javascript 将多个值写入 BLE 特征?
- c - 如何在标准输入和套接字之间使用选择?
- java - 引起:org.postgresql.util.PSQLException:错误:关系“jv_commit”已经存在
- postgresql - 使用 SSH 将 Entity Framework Core 的数据库更新应用到 docker 容器上的 PostgreSQL 服务器
- c# - 防止选项卡标题水平滚动
- xml - Perl 删除节点
- postman - 如何在 Postman 中获取不同时区的当地时间?
- scala - 可能的对象值的详尽匹配
- java - spring-jpa - 使用 ExampleMatcher 为 QueryByExampleExecutor 创建类似于 in 子句的嵌套实体 id 的查询
- mysql - 无法从 hortonworks hadoop 中的 .sql 文件将数据加载到 mysql