c# - Bot接收重复的卡片点击事件
问题描述
我正在使用以下库将机器人连接到 Google Pub/Sub 端点,以执行对卡片点击事件的简单回复。
Google.Apis.HangoutsChat.v1 1.34.0.1233
Google.Cloud.PubSub.V1 1.0.0-beta18
当我构建我的卡片时,UI 中的一切看起来都很正常,包括应该引发事件的按钮。
主题和订阅包含默认设置,遵循此处的指南
我从谷歌文档中找到了以下关于重试的信息here
同步响应
机器人可以通过在 HTTP 响应中返回 JSON 格式的消息负载来同步响应事件。同步响应的最后期限是 30 秒。
来自机器人的同步响应始终发布在为机器人生成事件的线程中。
单击按钮后,我的订阅者收到3 个重复事件。这些事件对所有正确的元数据都有正确的响应,但彼此完全相同,包括消息本身的 id。
我觉得机器人的响应不一定有很大的延迟(对于这个测试,它应该在 <1 秒内发生),所以我不确定为什么这些消息会被重复。
我还尝试在响应时(通过Thread
属性本身或ThreadKey
属性)设置卡的线程 ID,但是当我发布消息时,我似乎总是得到一个新的线程 ID。
var cardMessage = MessageSender.Spaces.Messages.Create(new Message()
{
Space = new Space()
{
Name = inReplyToThisMessage.Space.Name
},
Thread = new Thread()
{
Name = inReplyToThisMessage.Thread.Name
},
Cards = new List<Card>()
{
card
},
}, inReplyToThisMessage.Space.Name);
var sendCardResult = await cardMessage.ExecuteAsync().ConfigureAwait(false);
//Thread id of sendCardResult does not match inReplyToThisMessage.Thread.Name no matter what
有趣的是,尝试创建一条新消息以响应点击事件会导致机器人显示“无法连接到机器人。稍后再试”,但会显示 3 条新消息。此外,当指定任意线程键时,该键永远不会在机器人的响应中回显。
解决方案
谷歌终于修复了这个错误。
推荐阅读
- google-apps-script - 如何通过 AppsScript 在 Google Sheet 中返回函数
- reactjs - 带有过滤器的数字输入反应
- android - 我的 Unity 登录可以连接到与我的 Android Studio 登录相同的数据库吗?
- android - 通过 USB 部署 Xamarin Forms 应用程序引发异常
- android - 图库选择器在 Android 10 上返回带有文件方案的 Uri,如何读取它?
- postman - 邮递员:如何多次重新运行邮递员请求的子集
- maven-3 - Jacoco index HTML 不显示所有模块
- c# - 为相同类型序列化不同的小数点分隔符
- c# - 在c#中如何计算单个字符串中的数字
- c# - 使用 C# 在 CosmosDB 中查询 SQL API