电报机器人如何获取上传文件的file_id?

时间:2016-05-12 14:10:42

标签: node.js telegram telegram-bot

在电报API文档中,我看到:"您可以将 file_id 作为字符串传递给重新发送已经在Telegram服务器上的照片"但我可以'找到获取上传文件的file_id的方法。我怎么能得到它?

6 个答案:

答案 0 :(得分:3)

它取决于你的content_types,例如:

视频:

message.video.file_id

音频:

message.audio.file_id

照片:

message.photo[2].file_id

有关详情,请参阅this链接。

答案 1 :(得分:2)

根据您选择发送文件的方法(文件类型),在将文件发送到Telegram后,将返回响应。例如,如果使用sendAudio方法将MP3文件发送到Telegram,则Telegram会返回包含文件ID的Audio对象。 资料来源:https://core.telegram.org/bots/api#audio

答案 2 :(得分:1)

假设您收到Message数组为PhotoSize

file_id

https://core.telegram.org/bots/api#photosize

如您所见,有一个sendPhoto,您可以使用它通过Update发送照片。

如果我们假设Message是一个对象,其中包含一个Chat对象,该对象又提供一个id对象,其中包含PhotoSize个聊天对象最初的消息来自于$update->message->photo的数组(请原谅我在这里使用PHP,但那是我的主要语言......)

file_id是您访问阵列的方法。 使用某种For循环来迭代项目,或者如果数组不大于1,则只访问第一项。

之后,您可以使用结果提取string并通过sendPhoto的{​​{1}}参数和聊天ID将其作为photo发送通过chat_id参数。

我希望这有帮助!

P.S。 Here是我当前API实现的图表,我希望它能为您带来一些清晰度!

答案 3 :(得分:1)

这是我发现的最简单的方法。

将文件上传到任何聊天室,并将消息转发到@RawDataBot。它将返回如下内容:

<?php
    $values = array(1, 2, 3, 4, 5);
    $weights = array(5, 5, 5, 70, 15);

    $res = weighted_random($values, $weights);
    echo $res; die;

    function weighted_random($values, $weights){ 
        $count = count($values); 
        $i = 0; 
        $n = 0; 
        if (array_sum($weights) <= 0 ) { return $values[$i] . ' - ' . $weights[$i]; }
        $num = mt_rand(1, array_sum($weights)); 
        while($i < $count){
            $n += $weights[$i]; 
            if($n >= $num){
                break; 
            }
            $i++; 
        } 
        return "Number: " . $num . " Value: " . $values[$i] . ' Weight: ' . $weights[$i]; 
    }

?>

您需要的是{ "update_id": 754677603, "message": { "message_id": 403656, "from": { "id": xxx, "is_bot": false, "first_name": "xxx", "username": "xxx", "language_code": "en" }, "chat": { "id": xxx, "first_name": "xxx", "username": "xxx", "type": "private" }, "date": 1589342513, "forward_from": { "id": xxx, "is_bot": false, "first_name": "xxx", "username": "xxx", "language_code": "en" }, "forward_date": 1589342184, "document": { "file_name": "filename.pdf", "mime_type": "application/pdf", "file_id": "This_Is_The_Thing_You_Need", "file_unique_id": "notthis", "file_size": 123605 } } } 下的字符串。复制完该代码后,您只需执行以下代码即可发送消息。

file_id

答案 4 :(得分:0)

除了上述答案外,您还可以记录来自https://api.telegram.org/bot'.BOT_TOKEN.'/getUpdates上的bot的更新,或引发应用程序中的更新。在那里,您会发现一个Json属性,如下所示:

{
    "update_id" = 1111111,
    "message" =
        {
            "message_id" = 1111111,
            "from" =
                {
                    "id" = 111111,
                    ...
                }
            "chat" =
                {
                "id" = 111111,
                ...
                }
            "date" = 111111,
            "photo" = 
                {
                    {
                        "file_id" = HERE IS YOU FILE ID 1,
                        "file_size" => XXXX,
                        "width" => XX,
                        "height" => XX,
                    }
                }
        }
}

答案 5 :(得分:0)

如果您使用PHP:

您可以将这行写成完整尺寸:

def retrieve_and_log(data, context): ...

此行为拇指:

$file_id = $updates['message']['photo'][1]['file_id'];