Skip to main content

机器人消息

现阶段,getUpdates暂时不对公众开放,拿消息需要走websocket,有需求的可以联系官方

机器人收到的每一条消息存放在一个通用的 Update 对象中,你可以使用 getUpdates 方法获取 Update,返回的结果是 JSON 序列化的 Update 对象。

/getUpdate是一个http协议的长轮询调用。在长轮询机制中,web客户端像传统轮询一样从服务器请求消息,然而,如果服务器没有可以立即返回给客户端的消息,则不会立刻返回一个空结果, 而是保持这个请求等待消息,之后将数据作为结果返回给客户端,如果超过一定时间后,依然没有消息可返回给web客户端,则超时返回,返回的消息为空。可以用下图来表示这种机制:

/v2/getUpdates则采用了不是上文所述长轮询的形式调用

Update对象#

机器人收到的消息都是以Update对象表示的。

FieldTypeDescription
update_idInteger唯一id
messageMessageOptional. Message对象
edited_messageMessageOptional. 已经被编辑的Message对象
channel_postMessageOptional. 频道里的Message对象.
edited_channel_postMessageOptional. 频道的Message对象,该Message是被编辑过的
inline_queryInlineQueryOptional. 内联查询
chosen_inline_resultChosenInlineResultOptional. 预留
callback_queryCallbackQueryOptional. CallbackQuery对象
shipping_queryShippingQueryOptional. 预留
pre_checkout_queryPreCheckoutQueryOptional. PreCheckoutQuery对象,
pollPollOptional. bot发放的投票,其它机器人也会收到
poll_answerPollAnswerOptional. 用户投票时选择的答案

getUpdates#

使用这个接口接收服务器里所有的Update,这是一个长轮询的设计方案,返回一组Update对象,默认情况下只能收到公开频道的NewJoin消息和艾特机器人的消息,如果想接收所有类型的消息,必须调用SetBotPrivacyMode接口去打开Privacy模式,此时才能接收所有类型的消息,比如圈子,表态,pin,图片,视频等等消息。

ParameterTypeRequiredDescription
offsetIntegerOptional所有的Update保存在一个队列里,offset表示从队列尾部取多少条目的Update对象,调用后,在该offset之前的Update对象都会被删除掉。该队列的最大长度是10000,超过100000条时,较旧的Update对象会被删除
limitIntegerOptional表示调用getUpdate返回的Update最大条目数,取值范围1~100,默认取值100(当取值0时会设为10)
timeoutIntegerOptional长轮询调用时,等待的时长,以秒为单位,默认是60
ignoreUnsigned Integer 64Optional默认为 0, 用于忽略不想接收的消息类型,详见如下说明
allowed_updatesArray of StringOptional预留,指定接收Update的topic,比如文本消息,圈子消息,user的join和Leave等等

ignore 参数详解#

  • ignore, unsigned int64,

    • 默认为 0
    • 1(0b01) -> 不接收 user offline 消息
    • 2(0b10) -> 不接收 user online 消息
    • 3(0b11) -> 不接收 user offline, user online 消息
    • 其余值 -> 保留
  • 图表表示:

bitdescription
1ignore user offline messages
2ignore user online messages
3 ~ 64reserve

发文件时,bot get_update 的返回类型#

keytypedescription
typestring固定为 "file"
file_namestring文件名
file_urlstring
file_typenumber类型
file_extstring扩展名
file_sizenumber大小
creatednumber创建时间
file_idstringid (可选)
file_hashstringhash (可选)
file_descstring描述 (可选)
clientstring(可选)
{  "ok": true,  "result": [    {      "update_id": 360723665823727000,      "message": {        "message_id": 360723665823727000,        "date": 1651226111000,        "chat": {          "id": 358234219052269000,          "guild_id": 0,          "type": "private",          "username": "1"        },        "from": {          "id": 1,          "is_bot": false,          "first_name": "first_name",          "username": "1",          "gender": 1        },        "reply_to_message": null,        "file": {          "fanbook_file_v1": {            "type": "file",            "file_name": "file.pdf",            "file_url": "https://fanbook-video-test-1251001060.file.myqcloud.com/fanbook/app/files/chatroom/pdf/real-file.pdf",            "file_type": 4,            "file_ext": "pdf",            "file_size": 3145202,            "created": 1651226111263,            "file_id": "1651226111262",            "file_hash": "e1e39df3d6061cb940713451b2f4bd23",            "file_desc": "",            "client": 1          }        }      }    }    ]}

发红包时,bot get_update 的返回类型#

keyvalue
type固定为 "sendRedBag1"
red_pack_type1:群手气,2:群普通,3:私信
red_pack_greetings红包祝福语
money两位小数
num整数
money两位小数
picture红包封面图片的url
{  "ok": true,  "result": [    {      "update_id": 1,      "channel_post": {        "message_id": 1,        "date": 1649952059000,        "chat": {          "id": 1,          "guild_id": 1,          "type": "channel"        },        "from": {          "id": 1,          "is_bot": false,          "first_name": "first_name",          "username": "1",          "gender": 1        },        "reply_to_message": null,        "fanbook_red_envelope_start_sending": {          "type": "sendRedBag1",          "red_pack_type": 1,          "red_pack_greetings": "红包 title",          "money": 1.0,          "num": 2,          "picture": ""        }      }    }  ]}

消息卡片操作(messageCardOperate),bot get_update 的返回类型#

{  "ok": true,  "result": [    {      "update_id": 1,      "channel_post": {        "message_id": 1,        "date": 1649952059000,        "chat": {          "id": 1,          "guild_id": 1,          "type": "channel"        },        "from": {          "id": 1,          "is_bot": false,          "first_name": "first_name",          "username": "1",          "gender": 1        },        "reply_to_message": null,        "interaction_message_card_operation": {          "type": "messageCardOperate",          "action": "del",          "id": "355379868369682432",          "key": "the-key-of-message-card",          "count": 2        }      }    }  ]}

消息卡片(messageCard, interaction_message_card 的字段除了 type, data, 其余均为可选),bot get_update 的返回类型#

{  "ok": true,  "result": [    {      "update_id": 1,      "channel_post": {        "message_id": 1,        "date": 1649952059000,        "chat": {          "id": 1,          "guild_id": 1,          "type": "channel"        },        "from": {          "id": 1,          "is_bot": false,          "first_name": "first_name",          "username": "1",          "gender": 1        },        "reply_to_message": null,        "interaction_message_card": {          "type": "messageCard",          "width": 800,          "height": 600,          "data": "messageCard-data",          "notification": "messageCard-notification",          "edition": "edition"        }      }    }  ]}