1

我正在使用以下库将机器人连接到 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 条新消息。此外,当指定任意线程键时,该键永远不会在机器人的响应中回显。

4

2 回答 2

0

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

于 2019-08-08T14:16:38.857 回答
0

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

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

于 2018-07-18T19:33:28.273 回答