【问题标题】:Bot receiving duplicate card click eventsBot接收重复的卡片点击事件
【发布时间】:2019-08-08 22:16:38
【问题描述】:

我正在使用以下库将机器人连接到 Google Pub/Sub 端点,以执行对卡片点击事件的简单回复。

Google.Apis.HangoutsChat.v1 1.34.0.1233

Google.Cloud.PubSub.V1 1.0.0-beta18

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

主题和订阅包含默认设置,遵循指南here

我从谷歌文档中找到了以下关于重试的信息here

同步响应

机器人可以通过返回一个同步响应事件 HTTP 响应中的 JSON 格式的消息负载。截止日期为 同步响应为 30 秒。

来自机器人的同步响应总是发布在线程中 为机器人生成事件。

点击按钮后,我的订阅者收到 3 个重复事件。这些事件具有正确的响应以及所有正确的元数据,但彼此完全相同,包括消息本身的 id。

我认为机器人的响应不一定有很大的延迟(对于此测试,它应该在

我还尝试在响应时设置卡片的线程 ID(通过Thread 属性本身或ThreadKey 属性),但是当我发布消息时,我似乎总是得到一个新的线程 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 条新消息。此外,当指定任意线程键时,该键永远不会在机器人的响应中回显。

【问题讨论】:

    标签: c# hangouts-chat


    【解决方案1】:

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

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

    【讨论】:

    • 我不知道还有什么可以回应的。使用 SubscriberClient.Reply.AckOk 用于让 Pub/Sub 基础架构知道消息已成功使用(只有两个选项 - AckOk 或 NAck)。聊天 API 上没有任何记录表明需要做一些额外的事情。根据文档,developers.google.com/hangouts/chat/images/pubsub-arch.png 表明在确认消息后直接 HTTP 调用环聊聊天 API 就足够了。
    • 聊天的文档和 API 仍然相对较新,因此它们并未涵盖所有基础。尝试设置一种方法,在重复消息(触发机器人的事件)上立即返回它们。您可以通过将 eventTime 与第一条消息的原始时间进行比较来做到这一点,如果它是相同的返回(它是重复的)。如果 Google 多次触发您的机器人,这应该可以工作。
    • 其实我就是这么做的。我说如果响应是 CARD_CLICKED,立即返回。我仍然得到重复。我在谷歌端打开了一个bug,希望有人能看看。
    • 机器人是否注册了多个事件?
    • 问候@BryanCrosby 我有完全相同的问题,你能解决你的问题吗?请注意,这只发生在 CARD_CLICKED 事件中,而不是 MESSAGE 事件中。就个人而言,我在处理事件之前向 Pub/Sub(配置为推送模式)返回了一个空的 HTTP 200 响应,但无论如何我都会收到 3 次请求。
    【解决方案2】:

    这个错误终于被谷歌修复了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-16
      • 2019-02-20
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      相关资源
      最近更新 更多