私信

未读私信数

https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread

请求方式:GET

认证方式:Cookie(SESSDATA)

json回复:

根对象:

字段类型内容备注
codenum返回值0:成功
-6:账号未登录
messagestr错误信息默认为ok
ttlnum1
dataobj信息本体

data 对象:

字段类型内容备注
unfollow_unreadnum未关注用户未读私信数
follow_unreadnum已关注用户未读私信数
gtnum0

示例:

以下信息代表了为未关注用户未读私信数为1条,已关注用户未读私信数为6

curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread' \
-b 'SESSDATA=xxx'
查看响应示例:
{
	"code": 0,
	"msg": "ok",
	"message": "ok",
	"data": {
		"unfollow_unread": 1,
		"follow_unread": 6,
		"_gt_": 0
	}
}

发送私信(web端)

https://api.vc.bilibili.com/web_im/v1/web_im/send_msg

请求方式:POST

认证方式:Cookie(SESSDATA)

正文参数(application/x-www-form-urlencoded):

参数名类型内容必要性备注
msg[sender_uid]num发送者mid必要
msg[receiver_id]num接收者mid必要
msg[receiver_type]num1必要固定为1
msg[msg_type]num消息类型必要1:发送文字
2:发送图片
5:撤回消息
msg[msg_status]num0非必要
msg[dev_id]string372778FD-E359-461D-86A3-EA2BCC6FF52A必要获取方式在下面
msg[timestamp]num时间戳(秒)必要
msg[new_face_version]num表情包版本非必要详见下表
msg[content]发送文字时:str
撤回消息时:num
消息内容必要详见下表
csrfstrCSRF Token(位于cookie)必要

dev_id的获取

以JS为例:

const deviceid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function (name) {
  let randomInt = 16 * Math.random() | 0;
  return ("x" === name ? randomInt : 3 & randomInt | 8).toString(16).toUpperCase()
}));

代码来自 andywang425/BLTHopen in new window

以Java为例

public class Util{
    private String getDevId() {
        char[] b = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        char[] s = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".toCharArray();
        for (int i = 0; i < s.length; i++) {
            if ('-' == s[i] || '4' == s[i]) {
                continue;
            }
            int randomInt = (int) (16 * Math.random());
            if ('x' == s[i]) {
                s[i] = b[randomInt];
            } else {
                s[i] = b[3 & randomInt | 8];
            }
        }
        return new String(s);
    }
}

msg[content]消息内容:

当发送文字时(msg[msg_type]=1):

该参数为json序列字串

根对象:

字段类型内容备注
contentstr私信内容

当发送图片时(msg[msg_type]=2):

该参数为json序列字串

根对象:

字段类型内容备注
urlstr图片url默认为B站相簿图片上传通道
也可用三方图床
widthnum图片的宽单位:像素(非必要)
heightnum图片的高单位:像素(非必要)
typestr图片格式(非必要)
originalnum1作用未知(非必要)
sizenum文件大小单位:千字节(非必要)
向上取整

当撤回消息时(msg[msg_type]=5):

该参数为数值,为目标消息的msg_key

json回复:

根对象:

字段类型内容备注
codenum返回值0:成功
messagestr错误信息默认为ok
ttlnum默认为1
dataobj主体出错时为空

data对象:

字段类型内容备注
msg_keynum消息唯一id
msg_contentstr发送的消息
key_hit_infosobj作用尚不明确

示例:

给目标用户mid=1发一条文字私信:

up主你好,

催更[doge]

curl 'https://api.vc.bilibili.com/web_im/v1/web_im/send_msg' \
--data-urlencode 'msg[sender_uid]=293793435' \
--data-urlencode 'msg[receiver_id]=1' \
--data-urlencode 'msg[receiver_type] =1' \
--data-urlencode 'msg[msg_type]=1' \
--data-urlencode 'msg[dev_id] =372778FD-E359-461D-86A3-EA2BCC6FF52A' \
--data-urlencode 'msg[timestamp] =1626181379' \
--data-urlencode 'msg[content]={"content":"up主你好,\n催更[doge]"}' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
查看响应示例:
{"code":0,
"message":"0",
"ttl":1,
"data":{"msg_key":6984393491767669026,
	"msg_content":"up主你好,\n催更[doge]",
	"key_hit_infos":{}}}

给目标用户mid=1发一条图片私信:

curl 'https://api.vc.bilibili.com/web_im/v1/web_im/send_msg' \
--data-urlencode 'msg[sender_uid]=293793435' \
--data-urlencode 'msg[receiver_id]=1' \
--data-urlencode 'msg[receiver_type] =1' \
--data-urlencode 'msg[msg_type]=2' \
--data-urlencode 'msg[content]={"url":https://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg}' \
--data-urlencode 'csrf_token=xxx' \
-b 'SESSDATA=xxx'
查看响应示例:
{
    "code":0,
    "msg":"ok",
    "message":"ok",
    "data":{
        "msg_key":6852570013146024354,
        "_gt_":0
    }
}

私信消息记录

https://api.vc.bilibili.com/svr_sync/v1/svr_sync/fetch_session_msgs

请求方式:GET

此接口有设计缺陷,能够获取已经撤回,无法显示(如 发送私信 中msg[msg_type]:3)的消息

认证方式:Cookie(SESSDATA)

url参数:

参数名类型内容必要性备注
sender_device_idnum发送者设备可选1
talker_idnum聊天对象的UID必要--------------
session_typenum聊天对象的类型必要1为用户,2为粉丝团
sizenum列出消息条数可选默认是20,最大为200
buildnum未知可选默认是0
mobi_appstr设备可选web
begin_seqnonum开始的序列号可选默认0为全部
end_seqnonum结束的序列号可选默认0为全部

json回复:

根对象:

字段类型内容备注
codenum返回值0:成功
-400:请求错误
msgstr错误信息默认为0
messagestr错误信息默认为0
ttlnum1
dataarray数据列表

data数组:

类型内容备注
messagesarray聊天记录列表
has_morenum0
min_seqnonum所有消息最小的序列号(最早)
max_seqnonum所有消息最大的序列号(最晚)
e_infosarray聊天表情列表

messages数组:

类型内容备注
sender_uidnum发送者uid注意名称是sender_uid
receiver_typenum与session_type对应1为用户,2为粉丝团
receiver_idnum接收者uid注意名称是receiver_id
msg_typenum消息类型1:文字消息
2:图片消息
5:撤回的消息
12、13:通知
contentstr消息内容此处存在设计缺陷
msg_seqnonum消息序列号,保证按照时间顺序从小到大
timestampnum消息发送时间戳
at_uidsarray未知
msg_keynum未知
msg_statusnum消息状态0
notify_codestr未知
new_face_versionnum表情包版本0或者没有是旧版,此时b站会自动转换成新版表情包,例如[doge] -> [tv_doge];1是新版

e_infos数组:

类型内容备注
textstr表情名称
uristr表情链接
sizenum表情尺寸1

示例:

获取与目标用户mid=123私信记录:

curl 'https://api.vc.bilibili.com/svr_sync/v1/svr_sync/fetch_session_msgs?sender_device_id=1&talker_id=123&session_type=1&size=20&build=0&mobi_app=web' \
-b 'SESSDATA=xxx'
查看响应示例:
{
    "code": 0,
    "msg": "0",
    "message": "0",
    "ttl": 1,
    "data": {
        "messages": [
            {
                "sender_uid": 2239814,
                "receiver_type": 1,
                "receiver_id": 123,
                "msg_type": 1,
                "content": "{\"content\":\"[口罩]\"}",
                "msg_seqno": 309675413389322,
                "timestamp": 1654154093,
                "at_uids": [
                    0
                ],
                "msg_key": 7104537732714964358,
                "msg_status": 0,
                "notify_code": "",
                "new_face_version": 1
            },
            {
                "sender_uid": 2239814,
                "receiver_type": 1,
                "receiver_id": 123,
                "msg_type": 5,
                "content": "{\"content\":\"1\"}",
                "msg_seqno": 308302399586307,
                "timestamp": 1654072255,
                "at_uids": [
                    0
                ],
                "msg_key": 7104186240789226795,
                "msg_status": 0,
                "notify_code": ""
            },
        ],
        "has_more": 0,
        "min_seqno": 308188515844097,
        "max_seqno": 309675413389322,
        "e_infos": [
            {
                "text": "[口罩]",
                "url": "http://i0.hdslb.com/bfs/emote/3ad2f66b151496d2a5fb0a8ea75f32265d778dd3.png",
                "size": 1
            }
        ]
    }
}