【问题标题】:Telegram api. Get all uploaded photos by media_group_id电报 API。通过 media_group_id 获取所有上传的照片
【发布时间】:2018-10-15 05:50:53
【问题描述】:

我将一些照片作为一组发送给我的电报机器人。我如何才能获得file_id 我所有上传的照片?

我使用 webhook,但响应不包含有关所有照片的任何数据,仅包含有关上次上传照片和 media_group_id 的一些数据。我怎样才能获得我上传的所有file_id的集体照片

回应:

【问题讨论】:

  • 你必须收到几个更新,它们有相同的media_group_id
  • 是的,这是获取一组照片的好方法,但在我的逻辑中,上传最后一张照片后,webhook 必须调用函数向用户发送消息,为此我需要知道最后一张照片的上传时间
  • 有趣的事实 - 响应的“日期”元素在所有 webhook 中都是相同的。我上传了 5 张照片并收到了 5 个具有相同日期元素的回复。这意味着您可以通过 media_group_id 或时间元素检测合影
  • @AlexeyShablowski 你找到解决方案了吗?我有同样的问题,我在发布多张照片消息时只得到最后一张照片。之后,在下一条发布的消息(如果有)中,我会收到来自该媒体组的所有其余消息。完全不一致,因为在发布任何其他随机消息之前我无法获取所有图像。
  • 当使用sendMediaGroup时,它返回Message的数组。

标签: html telegram telegram-bot python-telegram-bot php-telegram-bot


【解决方案1】:

Telegram Bot API 不会向您的网络挂钩提供有关媒体组中每个项目的顺序的任何可靠信息。 https://core.telegram.org/bots/api#message

建议:

  1. 如果机器人在私人聊天中,请将传入的 file_id 保存到他们的 media_group_id 中。每当media_group_id 更改时,您将拥有您需要使用的一切。以其他方式吸引用户,以便您可以快速确定 media_group_id 更改并从该处理中快速响应。

  2. 如果 bot 在群聊中,请将传入的 file_id 保存到用户 idmedia_group_id,并同样监控对 media_group_id 和用户 id 的更改以采取行动。

当一个解决方案开始变得对我来说太复杂时,我更愿意回到我需要的基本原因,也许会发现我不需要做一些 API 负担不起的事情,比如“获取所有上传的照片由media_group_id"。也许我可以在更新流入时单独处理它们。

提示:如果媒体组有caption,并且您只关心组中的第一个媒体项,那么监控传入消息的media_group_idcaption 就足够了。

if(message.caption != null && message.media_group_id != null){ // first item in new group received }

【讨论】:

    【解决方案2】:

    好的,这种方式不简单而且不优雅,但它确实有效。

    1. 我们需要在 webhook 响应中看到 media_group_id 元素 - 这意味着这是一组媒体。
    2. 如果第一点为真 - 将有关此媒体的数据保存在自己的服务器上(数据必须包含 media_group_id

    示例:["media_group_id" => [[关于照片的一些数据]]]

    1. 下一个 webhook 到来时,我们需要查看他的 media_group_id,如果相同 - 好的,将他添加到数组中...

    示例:["media_group_id" => [[关于照片的一些数据],[关于照片的一些数据]]]

    如果不是 - 好的,创建一个新的数组元素:

    示例:["media_group_id" => [[关于照片的一些数据]], "media_group_id2" => [[关于照片的一些数据]]]

    1. 所以我们得到了一个数组,其中包含有关一个(或多个)组的照片的所有数据。

    hmmm...我不喜欢这种方式,但是如何做得更好?

    【讨论】:

    • 如果可能的话,我对更好的方法感兴趣。我想对大量图像(即相册)进行一些处理
    【解决方案3】:

    在 Pyrogram 中,我们可以使用 get_media_group 函数,https://docs.pyrogram.org/api/methods/get_media_group.html#pyrogram.Client.get_media_group。在我看来,它比使用 BOT API 要好得多。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    相关资源
    最近更新 更多