机器人收到重复的卡点击事件

时间:2018-07-11 01:00:37

标签: c# hangouts-chat

我正在使用以下库将漫游器连接到Google Pub / Sub端点,以对卡点击事件进行简单回复。

Google.Apis.HangoutsChat.v1 1.34.0.1233

Google.Cloud.PubSub.V1 1.0.0-beta18

构造卡片时,UI中的一切看起来都很正常,包括应该引发事件的按钮。

遵循指南here

,主题和预订包含默认设置。

我从Google文档中找到了有关重试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

有趣的是,尝试创建新消息以响应click事件会导致漫游器显示“无法连接到漫游器。请稍后重试”,但显示3条新消息。另外,在指定任意线程密钥时,该密钥永远不会在机器人的响应中回显。

2 个答案:

答案 0 :(得分:0)

确保正确返回主 event 方法。看起来正在发生的事情是您正在异步聊天,但随后聊天正在从实际事件方法本身中寻找响应。 Google传统上会在放弃前尝试 3 次(即使不需要30秒)

如果您在发出api请求后确实确实正确返回了事件调用,则您的代码中有某些内容导致Google Bot认为它没有得到响应,因此它尝试了三遍。由于问题可能是多方面的,因此我需要查看您如何接受和返回点击响应。

答案 1 :(得分:0)

此错误最终已由Google修复。