602 lines
34 KiB
Python
602 lines
34 KiB
Python
# -*- coding: utf-8 -*-
|
||
# python let's go
|
||
# 编辑人:kris思成
|
||
|
||
# coding=utf-8
|
||
import time
|
||
import uuid
|
||
import json
|
||
|
||
|
||
# 发送文本消息
|
||
def send_message(pigeon_sign: str, token: str, receiver_id: str, shop_id: str, talk_id: int, session_did: str, p_id: int, user_code: str, text: str):
|
||
"""
|
||
构造发送消息消息体
|
||
:param pigeon_sign: 接口返回
|
||
:param token: 接口返回
|
||
:param receiver_id: wss消息返回 对方用户id
|
||
:param shop_id: cookie自带
|
||
:param talk_id: wss消息返回 激活窗口id
|
||
:param session_did: cookie自带
|
||
:param p_id: wss消息返回
|
||
:param user_code: 用户token
|
||
:param text: 文本内容
|
||
:return:
|
||
"""
|
||
value = {
|
||
'1': 11778,
|
||
'2': int(time.time() * 1000),
|
||
'3': 10001,
|
||
'4': 1,
|
||
'5': [
|
||
{'1': b'pigeon_source', '2': b'web'},
|
||
{'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'pigeon_sign', '2': pigeon_sign.encode()},
|
||
],
|
||
'7': {'14': 98},
|
||
'8': {
|
||
'1': 100,
|
||
'2': 11778,
|
||
'3': b'1.0.4-beta.2',
|
||
'4': token.encode(),
|
||
'5': 3,
|
||
'6': 3,
|
||
'7': b'2d97ea6:feat/add_init_callback',
|
||
'8': {
|
||
'100': {
|
||
'1': f"{receiver_id}:{shop_id}::2:1:pigeon".encode(),
|
||
'2': 11,
|
||
'3': p_id,
|
||
'4': text.encode(),
|
||
'5': [
|
||
{'1': b'type', '2': b'text'},
|
||
{'1': b'shop_id', '2': shop_id.encode()},
|
||
{'1': b'sender_role', '2': b'2'},
|
||
{'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'src', '2': b'pc'},
|
||
{'1': b'srcType', '2': b'1'},
|
||
{'1': b'source', '2': b'pc-web'},
|
||
{'1': b'receiver_id', '2': str(receiver_id).encode()},
|
||
{'1': b'hierarchical_dimension', '2': b'{"dynamic_dimension":"4541_1131_9042_6599_9420_6832_4050_3823_3994_8564_1528_0388_8667_2179_7948_1870_1949_0989_8012_6240_7898_7548_8852_6245_9393_3650_8570_4026_4034_4057_6537_8632_2068_8958_0363_2387_9033_3425_2238_0982_1935_8188_3817_8557_7931_3278_4065_1893_6049_6961_3814_4883_4401_6637_7282_3652_9354_0437_4769_4815_9572_7230_5054_3951_4852_2188_3505_6813_2570_5394_0729","goofy_id":"1.0.1.1508","desk_version":"0.0.0","open_stores":"0","memL":"","cpuL":"","session_throughput":0,"message_throughput_send":0,"message_throughput_revice":0}'},
|
||
{'1': b'p:check_Send', '2': str(uuid.uuid4()).encode()},
|
||
{'1': b'track_info','2': json.dumps({"send_time": int(time.time() * 1000), "_send_delta": "77","_send_delta_2": "216"}).encode()},
|
||
{'1': b'user_agent', '2': b'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'sender_id', '2': b''},
|
||
{'1': b'biz_ext', '2': b'{}'},
|
||
{'1': b'p:from_source', '2': b'web'},
|
||
{'1': b's:mentioned_users', '2': b''},
|
||
{'1': b's:client_message_id', '2': str(uuid.uuid4()).encode()}
|
||
],
|
||
'6': 1000,
|
||
'7': user_code.encode(),
|
||
'8': str(uuid.uuid4()).encode(),
|
||
'14': talk_id # 激活聊天窗口id
|
||
}
|
||
},
|
||
'9': session_did.encode(),
|
||
'11': b'web',
|
||
'15': [
|
||
{'1': b'pigeon_source', '2': b'web'},
|
||
{'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'pigeon_sign', '2': pigeon_sign.encode()}, # 🔥 修复:使用动态参数,不是硬编码
|
||
{'1': b'session_aid', '2': b'1383'},
|
||
{'1': b'session_did', '2': session_did.encode()},
|
||
{'1': b'app_name', '2': b'im'},
|
||
{'1': b'priority_region', '2': b'cn'},
|
||
{'1': b'user_agent','2': b'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'cookie_enabled', '2': b'true'},
|
||
{'1': b'browser_language', '2': b'zh-CN'},
|
||
{'1': b'browser_platform', '2': b'Win32'},
|
||
{'1': b'browser_name', '2': b'Mozilla'},
|
||
{'1': b'browser_version', '2': b'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'browser_online', '2': b'true'},
|
||
{'1': b'screen_width', '2': b'1707'},
|
||
{'1': b'screen_height', '2': b'1067'},
|
||
{'1': b'referer', '2': b''},
|
||
{'1': b'timezone_name', '2': b'Asia/Shanghai'}
|
||
],
|
||
'18': 2}
|
||
}
|
||
message_type = {
|
||
"1": {
|
||
"type": "int",
|
||
"name": ""
|
||
},
|
||
"2": {
|
||
"type": "int",
|
||
"name": ""
|
||
},
|
||
"3": {
|
||
"type": "int",
|
||
"name": ""
|
||
},
|
||
"4": {
|
||
"type": "int",
|
||
"name": ""
|
||
},
|
||
"5": {
|
||
"type": "message",
|
||
"message_typedef": {
|
||
"1": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"2": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
}
|
||
},
|
||
"name": ""
|
||
},
|
||
"7": {
|
||
"type": "message",
|
||
"message_typedef": {
|
||
"14": {
|
||
"type": "int",
|
||
"name": ""
|
||
}
|
||
},
|
||
"name": ""
|
||
},
|
||
"8": {
|
||
"type": "message",
|
||
"message_typedef": {
|
||
"1": {
|
||
"type": "int",
|
||
"name": ""
|
||
},
|
||
"2": {
|
||
"type": "int",
|
||
"name": ""
|
||
},
|
||
"3": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"4": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"5": {
|
||
"type": "int",
|
||
"name": ""
|
||
},
|
||
"6": {
|
||
"type": "int",
|
||
"name": ""
|
||
},
|
||
"7": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"8": {
|
||
"type": "message",
|
||
"message_typedef": {
|
||
"100": {
|
||
"type": "message",
|
||
"message_typedef": {
|
||
"1": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"2": {
|
||
"type": "int",
|
||
"name": ""
|
||
},
|
||
"3": {
|
||
"type": "int",
|
||
"name": ""
|
||
},
|
||
"4": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"5": {
|
||
"type": "message",
|
||
"message_typedef": {
|
||
"1": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"2": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
}
|
||
},
|
||
"name": ""
|
||
},
|
||
"6": {
|
||
"type": "int",
|
||
"name": ""
|
||
},
|
||
"7": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"8": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"14": {
|
||
"type": "int",
|
||
"name": ""
|
||
}
|
||
},
|
||
"name": ""
|
||
}
|
||
},
|
||
"name": ""
|
||
},
|
||
"9": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"11": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"15": {
|
||
"type": "message",
|
||
"message_typedef": {
|
||
"1": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
},
|
||
"2": {
|
||
"type": "bytes",
|
||
"name": ""
|
||
}
|
||
},
|
||
"name": ""
|
||
},
|
||
"18": {
|
||
"type": "int",
|
||
"name": ""
|
||
}
|
||
},
|
||
"name": ""
|
||
}
|
||
}
|
||
return value, message_type
|
||
|
||
|
||
# 获取token
|
||
def get_user_code(pigeon_sign: str, token: str, receiver_id: str, shop_id: str, session_did: str, p_id: int):
|
||
value = {'1': 10109, '2': int(time.time() * 1000), '3': 10001, '4': 1,
|
||
'5': [{'1': b'pigeon_source', '2': b'web'}, {'1': b'PIGEON_BIZ_TYPE', '2': b'2'}, {'1': b'pigeon_sign',
|
||
'2': pigeon_sign.encode()}],
|
||
'7': {'14': 98}, '8': {'1': 610, '2': 10109, '3': b'1.0.4-beta.2',
|
||
'4': token.encode(), '5': 3, '6': 3,
|
||
'7': b'2d97ea6:feat/add_init_callback', '8': {
|
||
'610': {'1': {'1': f"{receiver_id}:{shop_id}::2:1:pigeon".encode(), '2': p_id, '3': 10}}},
|
||
'9': session_did.encode(), '11': b'web',
|
||
'15': [{'1': b'pigeon_source', '2': b'web'}, {'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'pigeon_sign',
|
||
'2': pigeon_sign.encode()},
|
||
{'1': b'session_aid', '2': b'1383'},
|
||
{'1': b'session_did', '2': session_did.encode()},
|
||
{'1': b'app_name', '2': b'im'}, {'1': b'priority_region', '2': b'cn'},
|
||
{'1': b'user_agent',
|
||
'2': b'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'cookie_enabled', '2': b'true'},
|
||
{'1': b'browser_language', '2': b'zh-CN'},
|
||
{'1': b'browser_platform', '2': b'Win32'},
|
||
{'1': b'browser_name', '2': b'Mozilla'}, {'1': b'browser_version',
|
||
'2': b'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'browser_online', '2': b'true'}, {'1': b'screen_width', '2': b'1707'},
|
||
{'1': b'screen_height', '2': b'1067'}, {'1': b'referer', '2': b''},
|
||
{'1': b'timezone_name', '2': b'Asia/Shanghai'}], '18': 2}}
|
||
message_type = {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''},
|
||
'3': {'type': 'int', 'name': ''}, '4': {'type': 'int', 'name': ''}, '5': {'type': 'message',
|
||
'message_typedef': {
|
||
'1': {'type': 'bytes',
|
||
'name': ''},
|
||
'2': {'type': 'bytes',
|
||
'name': ''}},
|
||
'name': ''},
|
||
'7': {'type': 'message', 'message_typedef': {'14': {'type': 'int', 'name': ''}}, 'name': ''},
|
||
'8': {'type': 'message',
|
||
'message_typedef': {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''},
|
||
'3': {'type': 'bytes', 'name': ''}, '4': {'type': 'bytes', 'name': ''},
|
||
'5': {'type': 'int', 'name': ''}, '6': {'type': 'int', 'name': ''},
|
||
'7': {'type': 'bytes', 'name': ''}, '8': {'type': 'message',
|
||
'message_typedef': {
|
||
'610': {'type': 'message',
|
||
'message_typedef': {
|
||
'1': {
|
||
'type': 'message',
|
||
'message_typedef': {
|
||
'1': {
|
||
'type': 'bytes',
|
||
'name': ''},
|
||
'2': {
|
||
'type': 'int',
|
||
'name': ''},
|
||
'3': {
|
||
'type': 'int',
|
||
'name': ''}},
|
||
'name': ''}},
|
||
'name': ''}},
|
||
'name': ''},
|
||
'9': {'type': 'bytes', 'name': ''}, '11': {'type': 'bytes', 'name': ''},
|
||
'15': {'type': 'message',
|
||
'message_typedef': {'1': {'type': 'bytes', 'name': ''},
|
||
'2': {'type': 'bytes', 'name': ''}},
|
||
'name': ''}, '18': {'type': 'int', 'name': ''}}, 'name': ''}}
|
||
return value, message_type
|
||
|
||
|
||
# 心跳包
|
||
def heartbeat_message(pigeon_sign: str, token: str, session_did: str):
|
||
value = {
|
||
'1': 11028,
|
||
'2': int(time.time() * 1000),
|
||
'3': 10001,
|
||
'4': 1,
|
||
'5': [
|
||
{'1': b'pigeon_source', '2': b'web'},
|
||
{'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'pigeon_sign','2': pigeon_sign.encode()}
|
||
],
|
||
'7': {'14': 98},
|
||
'8': {
|
||
'1': 200,
|
||
'2': 11028,
|
||
'3': b'1.0.4-beta.2',
|
||
'4': token.encode(),
|
||
'5': 3,
|
||
'6': 3,
|
||
'7': b'2d97ea6:feat/add_init_callback',
|
||
'8': {'200': {'1': int(time.time() * 1000), '2': 50}},
|
||
'9': session_did.encode(),
|
||
'11': b'web',
|
||
'15': [
|
||
{'1': b'pigeon_source', '2': b'web'},
|
||
{'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'pigeon_sign', '2': pigeon_sign.encode()},
|
||
{'1': b'session_aid', '2': b'1383'},
|
||
{'1': b'session_did', '2': session_did.encode()},
|
||
{'1': b'app_name', '2': b'im'},
|
||
{'1': b'priority_region', '2': b'cn'},
|
||
{'1': b'user_agent', '2': b'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'cookie_enabled', '2': b'true'},
|
||
{'1': b'browser_language', '2': b'zh-CN'},
|
||
{'1': b'browser_platform', '2': b'Win32'}, {'1': b'browser_name', '2': b'Mozilla'},
|
||
{'1': b'browser_version', '2': b'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'browser_online', '2': b'true'}, {'1': b'screen_width', '2': b'1707'},
|
||
{'1': b'screen_height', '2': b'1067'}, {'1': b'referer', '2': b''},
|
||
{'1': b'timezone_name', '2': b'Asia/Shanghai'}
|
||
],
|
||
'18': 2
|
||
}
|
||
}
|
||
message_type = {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''}, '3': {'type': 'int', 'name': ''}, '4': {'type': 'int', 'name': ''}, '5': {'type': 'message', 'message_typedef': {'1': {'type': 'bytes', 'name': ''}, '2': {'type': 'bytes', 'name': ''}}, 'name': ''}, '7': {'type': 'message', 'message_typedef': {'14': {'type': 'int', 'name': ''}}, 'name': ''}, '8': {'type': 'message', 'message_typedef': {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''}, '3': {'type': 'bytes', 'name': ''}, '4': {'type': 'bytes', 'name': ''}, '5': {'type': 'int', 'name': ''}, '6': {'type': 'int', 'name': ''}, '7': {'type': 'bytes', 'name': ''}, '8': {'type': 'message', 'message_typedef': {'200': {'type': 'message', 'message_typedef': {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''}}, 'name': ''}}, 'name': ''}, '9': {'type': 'bytes', 'name': ''}, '11': {'type': 'bytes', 'name': ''}, '15': {'type': 'message', 'message_typedef': {'1': {'type': 'bytes', 'name': ''}, '2': {'type': 'bytes', 'name': ''}}, 'name': ''}, '18': {'type': 'int', 'name': ''}}, 'name': ''}}
|
||
return value, message_type
|
||
|
||
|
||
# 🔥 新增:发送图片消息
|
||
def send_img(pigeon_sign: str, token: str, receiver_id: str, shop_id: str, talk_id: int, session_did: str, p_id: int, user_code: str, img: str, image_width: str = "2000", image_height: str = "1125", image_format: str = "png", image_size: str = "3157512"):
|
||
"""
|
||
构造发送图片消息体
|
||
:param image_width: 图片宽度
|
||
:param image_size: 图片大小
|
||
:param image_height: 图片高度
|
||
:param image_format: 图片格式
|
||
:param pigeon_sign: 接口返回
|
||
:param token: 接口返回
|
||
:param receiver_id: wss消息返回 对方用户id
|
||
:param shop_id: cookie自带
|
||
:param talk_id: wss消息返回 激活窗口id
|
||
:param session_did: cookie自带
|
||
:param p_id: wss消息返回
|
||
:param user_code: 用户token
|
||
:param img: 图片URI或URL
|
||
:return: (value, message_type)
|
||
"""
|
||
value = {
|
||
'1': 11778,
|
||
'2': int(time.time() * 1000),
|
||
'3': 10001,
|
||
'4': 1,
|
||
'5': [
|
||
{'1': b'pigeon_source', '2': b'web'},
|
||
{'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'pigeon_sign', '2': pigeon_sign.encode()},
|
||
],
|
||
'7': {'14': 98},
|
||
'8': {
|
||
'1': 100,
|
||
'2': 11778,
|
||
'3': b'1.0.4-beta.2',
|
||
'4': token.encode(),
|
||
'5': 3,
|
||
'6': 3,
|
||
'7': b'2d97ea6:feat/add_init_callback',
|
||
'8': {
|
||
'100': {
|
||
'1': f"{receiver_id}:{shop_id}::2:1:pigeon".encode(),
|
||
'2': 11,
|
||
'3': p_id,
|
||
'4': "[图片]".encode(),
|
||
'5': [
|
||
{'1': b'type', '2': b'file_image'},
|
||
{'1': b'shop_id', '2': shop_id.encode()},
|
||
{'1': b'sender_role', '2': b'2'},
|
||
{'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'src', '2': b'pc'},
|
||
{'1': b'srcType', '2': b'1'},
|
||
{'1': b'source', '2': b'pc-web'},
|
||
{'1': b'receiver_id', '2': str(receiver_id).encode()},
|
||
{'1': b'hierarchical_dimension', '2': b'{"dynamic_dimension":"4541_1131_9042_6599_9420_6832_4050_3823_3994_8564_1528_0388_8667_2179_7948_1870_1949_0989_8012_6240_7898_7548_8852_6245_9393_3650_8570_4026_4034_4057_6537_8632_2068_8958_0363_2387_9033_3425_2238_0982_1935_8188_3817_8557_7931_3278_4065_1893_6049_6961_3814_4883_4401_6637_7282_3652_9354_0437_4769_4815_9572_7230_5054_3951_4852_2188_3505_6813_2570_5394_0729","goofy_id":"1.0.1.1508","desk_version":"0.0.0","open_stores":"0","memL":"","cpuL":"","session_throughput":0,"message_throughput_send":0,"message_throughput_revice":0}'},
|
||
{'1': b'tag_valid', '2': b'1'},
|
||
{'1': b'imageUrl', '2': img.encode()},
|
||
{'1': b'imageWidth', '2': image_width.encode()},
|
||
{'1': b'imageHeight', '2': image_height.encode()},
|
||
{'1': b'imageFormat', '2': image_format.encode()},
|
||
{'1': b'imageSize', '2': image_size.encode()},
|
||
{'1': b'uuid', '2': str(uuid.uuid4()).encode()},
|
||
{'1': b'track_info','2': json.dumps({"send_time": int(time.time() * 1000), "_send_delta": "77","_send_delta_2": "216"}).encode()},
|
||
{'1': b'user_agent', '2': b'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'sender_id', '2': b''},
|
||
{'1': b'biz_ext', '2': b'{}'},
|
||
{'1': b'p:from_source', '2': b'web'},
|
||
{'1': b's:mentioned_users', '2': b''},
|
||
{'1': b's:client_message_id', '2': str(uuid.uuid4()).encode()}
|
||
],
|
||
'6': 1000,
|
||
'7': user_code.encode(),
|
||
'8': str(uuid.uuid4()).encode(),
|
||
'14': talk_id
|
||
}
|
||
},
|
||
'9': session_did.encode(),
|
||
'11': b'web',
|
||
'15': [
|
||
{'1': b'pigeon_source', '2': b'web'},
|
||
{'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'pigeon_sign', '2': b'MIG6BAz2BNUON43WdlOBuGYEgZcsIho9ZjVP4yyExLShzXgAZtsvUMj2e3jZWeMZv+6+TNVQQMq3xSLrqiwcs2cCaOVBDuS6zGsWm5gBlGtlvOOLM5td2/9OS8P37t1sdkjN4BSH2mB7FlGItioZIsTh1sodn6pYCGj+45mtId3Itenufgai3Mnkpt573uoWJmagF8J3jVPHMFtdwd25Qf5vsWC2kB30glpQBBCbk2VO2ubMqctqQSzhI6uD'},
|
||
{'1': b'session_aid', '2': b'1383'},
|
||
{'1': b'session_did', '2': session_did.encode()},
|
||
{'1': b'app_name', '2': b'im'},
|
||
{'1': b'priority_region', '2': b'cn'},
|
||
{'1': b'user_agent','2': b'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'cookie_enabled', '2': b'true'},
|
||
{'1': b'browser_language', '2': b'zh-CN'},
|
||
{'1': b'browser_platform', '2': b'Win32'},
|
||
{'1': b'browser_name', '2': b'Mozilla'},
|
||
{'1': b'browser_version', '2': b'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'browser_online', '2': b'true'},
|
||
{'1': b'screen_width', '2': b'1707'},
|
||
{'1': b'screen_height', '2': b'1067'},
|
||
{'1': b'referer', '2': b''},
|
||
{'1': b'timezone_name', '2': b'Asia/Shanghai'}
|
||
],
|
||
'18': 2
|
||
}
|
||
}
|
||
message_type = {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''}, '3': {'type': 'int', 'name': ''}, '4': {'type': 'int', 'name': ''}, '5': {'type': 'message', 'message_typedef': {'1': {'type': 'bytes', 'name': ''}, '2': {'type': 'bytes', 'name': ''}}, 'name': ''}, '7': {'type': 'message', 'message_typedef': {'14': {'type': 'int', 'name': ''}}, 'name': ''}, '8': {'type': 'message', 'message_typedef': {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''}, '3': {'type': 'bytes', 'name': ''}, '4': {'type': 'bytes', 'name': ''}, '5': {'type': 'int', 'name': ''}, '6': {'type': 'int', 'name': ''}, '7': {'type': 'bytes', 'name': ''}, '8': {'type': 'message', 'message_typedef': {'100': {'type': 'message', 'message_typedef': {'1': {'type': 'bytes', 'name': ''}, '2': {'type': 'int', 'name': ''}, '3': {'type': 'int', 'name': ''}, '4': {'type': 'bytes', 'name': ''}, '5': {'type': 'message', 'message_typedef': {'1': {'type': 'bytes', 'name': ''}, '2': {'type': 'bytes', 'name': ''}}, 'name': ''}, '6': {'type': 'int', 'name': ''}, '7': {'type': 'bytes', 'name': ''}, '8': {'type': 'bytes', 'name': ''}, '14': {'type': 'int', 'name': ''}}, 'name': ''}}, 'name': ''}, '9': {'type': 'bytes', 'name': ''}, '11': {'type': 'bytes', 'name': ''}, '15': {'type': 'message', 'message_typedef': {'1': {'type': 'bytes', 'name': ''}, '2': {'type': 'bytes', 'name': ''}}, 'name': ''}, '18': {'type': 'int', 'name': ''}}, 'name': ''}}
|
||
return value, message_type
|
||
|
||
|
||
# 🔥 新增:发送视频消息
|
||
def send_video(pigeon_sign: str, token: str, receiver_id: str, shop_id: str, talk_id: int, session_did: str, p_id: int, user_code: str, vid: str, cover_url: str, height: str, width: str, duration: str):
|
||
"""
|
||
构造发送视频消息体
|
||
:param duration: 视频时长
|
||
:param width: 视频宽度
|
||
:param height: 视频高度
|
||
:param cover_url: 封面URL
|
||
:param pigeon_sign: 接口返回
|
||
:param token: 接口返回
|
||
:param receiver_id: wss消息返回 对方用户id
|
||
:param shop_id: cookie自带
|
||
:param talk_id: wss消息返回 激活窗口id
|
||
:param session_did: cookie自带
|
||
:param p_id: wss消息返回
|
||
:param user_code: 用户token
|
||
:param vid: 视频id
|
||
:return: (value, message_type)
|
||
"""
|
||
# 🔥 修复:确保数值类型正确(height/width为int,duration为float)
|
||
try:
|
||
height_int = int(height) if isinstance(height, str) else height
|
||
width_int = int(width) if isinstance(width, str) else width
|
||
duration_float = float(duration) if isinstance(duration, str) else duration
|
||
except (ValueError, TypeError):
|
||
# 如果转换失败,使用默认值
|
||
height_int = 1080
|
||
width_int = 1920
|
||
duration_float = 0.0
|
||
|
||
msg_render_model = json.dumps({
|
||
"msg_render_type": "video",
|
||
"render_body": {
|
||
"vid": vid,
|
||
"coverURL": cover_url,
|
||
"height": height_int,
|
||
"width": width_int,
|
||
"duration": duration_float
|
||
}
|
||
}).encode()
|
||
|
||
value = {
|
||
'1': 10015,
|
||
'2': int(time.time() * 1000),
|
||
'3': 10001,
|
||
'4': 1,
|
||
'5': [
|
||
{'1': b'pigeon_source', '2': b'web'},
|
||
{'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'pigeon_sign', '2': pigeon_sign.encode()},
|
||
],
|
||
'7': {'14': 98},
|
||
'8': {
|
||
'1': 100,
|
||
'2': 10015,
|
||
'3': b'1.0.4-beta.2',
|
||
'4': token.encode(),
|
||
'5': 3,
|
||
'6': 3,
|
||
'7': b'2d97ea6:feat/add_init_callback',
|
||
'8': {
|
||
'100': {
|
||
'1': f"{receiver_id}:{shop_id}::2:1:pigeon".encode(),
|
||
'2': 11,
|
||
'3': p_id,
|
||
'4': "[视频]".encode(),
|
||
'5': [
|
||
{'1': b'type', '2': b'video'},
|
||
{'1': b'shop_id', '2': shop_id.encode()},
|
||
{'1': b'sender_role', '2': b'2'},
|
||
{'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'src', '2': b'pc'},
|
||
{'1': b'srcType', '2': b'1'},
|
||
{'1': b'source', '2': b'pc-web'},
|
||
{'1': b'receiver_id', '2': str(receiver_id).encode()},
|
||
{'1': b'hierarchical_dimension', '2': b'{"dynamic_dimension":"4541_1131_9042_6599_9420_6832_4050_3823_3994_8564_1528_0388_8667_2179_7948_1870_1949_0989_8012_6240_7898_7548_8852_6245_9393_3650_8570_4026_4034_4057_6537_8632_2068_8958_0363_2387_9033_3425_2238_0982_1935_8188_3817_8557_7931_3278_4065_1893_6049_6961_3814_4883_4401_6637_7282_3652_9354_0437_4769_4815_9572_7230_5054_3951_4852_2188_3505_6813_2570_5394_0729","goofy_id":"1.0.1.1508","desk_version":"0.0.0","open_stores":"0","memL":"","cpuL":"","session_throughput":0,"message_throughput_send":0,"message_throughput_revice":0}'},
|
||
{'1': b'msg_render_model', '2': msg_render_model},
|
||
{'1': b'uuid', '2': str(uuid.uuid4()).encode()},
|
||
{'1': b'start_scene', '2': b'1'},
|
||
{'1': b'track_info','2': json.dumps({"send_time": int(time.time() * 1000), "_send_delta": "77","_send_delta_2": "216"}).encode()},
|
||
{'1': b'user_agent', '2': b'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'sender_id', '2': b''},
|
||
{'1': b'biz_ext', '2': b'{}'},
|
||
{'1': b'p:from_source', '2': b'web'},
|
||
{'1': b's:mentioned_users', '2': b''},
|
||
{'1': b's:client_message_id', '2': str(uuid.uuid4()).encode()}
|
||
],
|
||
'6': 1000,
|
||
'7': user_code.encode(),
|
||
'8': str(uuid.uuid4()).encode(),
|
||
'14': talk_id
|
||
}
|
||
},
|
||
'9': session_did.encode(),
|
||
'11': b'web',
|
||
'15': [
|
||
{'1': b'pigeon_source', '2': b'web'},
|
||
{'1': b'PIGEON_BIZ_TYPE', '2': b'2'},
|
||
{'1': b'pigeon_sign', '2': b'MIG6BAz2BNUON43WdlOBuGYEgZcsIho9ZjVP4yyExLShzXgAZtsvUMj2e3jZWeMZv+6+TNVQQMq3xSLrqiwcs2cCaOVBDuS6zGsWm5gBlGtlvOOLM5td2/9OS8P37t1sdkjN4BSH2mB7FlGItioZIsTh1sodn6pYCGj+45mtId3Itenufgai3Mnkpt573uoWJmagF8J3jVPHMFtdwd25Qf5vsWC2kB30glpQBBCbk2VO2ubMqctqQSzhI6uD'},
|
||
{'1': b'session_aid', '2': b'1383'},
|
||
{'1': b'session_did', '2': session_did.encode()},
|
||
{'1': b'app_name', '2': b'im'},
|
||
{'1': b'priority_region', '2': b'cn'},
|
||
{'1': b'user_agent','2': b'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'cookie_enabled', '2': b'true'},
|
||
{'1': b'browser_language', '2': b'zh-CN'},
|
||
{'1': b'browser_platform', '2': b'Win32'},
|
||
{'1': b'browser_name', '2': b'Mozilla'},
|
||
{'1': b'browser_version', '2': b'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'},
|
||
{'1': b'browser_online', '2': b'true'},
|
||
{'1': b'screen_width', '2': b'1707'},
|
||
{'1': b'screen_height', '2': b'1067'},
|
||
{'1': b'referer', '2': b''},
|
||
{'1': b'timezone_name', '2': b'Asia/Shanghai'}
|
||
],
|
||
'18': 2
|
||
}
|
||
}
|
||
message_type = {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''}, '3': {'type': 'int', 'name': ''}, '4': {'type': 'int', 'name': ''}, '5': {'type': 'message', 'message_typedef': {'1': {'type': 'bytes', 'name': ''}, '2': {'type': 'bytes', 'name': ''}}, 'name': ''}, '7': {'type': 'message', 'message_typedef': {'14': {'type': 'int', 'name': ''}}, 'name': ''}, '8': {'type': 'message', 'message_typedef': {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''}, '3': {'type': 'bytes', 'name': ''}, '4': {'type': 'bytes', 'name': ''}, '5': {'type': 'int', 'name': ''}, '6': {'type': 'int', 'name': ''}, '7': {'type': 'bytes', 'name': ''}, '8': {'type': 'message', 'message_typedef': {'100': {'type': 'message', 'message_typedef': {'1': {'type': 'bytes', 'name': ''}, '2': {'type': 'int', 'name': ''}, '3': {'type': 'int', 'name': ''}, '4': {'type': 'bytes', 'name': ''}, '5': {'type': 'message', 'message_typedef': {'1': {'type': 'bytes', 'name': ''}, '2': {'type': 'bytes', 'name': ''}}, 'name': ''}, '6': {'type': 'int', 'name': ''}, '7': {'type': 'bytes', 'name': ''}, '8': {'type': 'bytes', 'name': ''}, '14': {'type': 'int', 'name': ''}}, 'name': ''}}, 'name': ''}, '9': {'type': 'bytes', 'name': ''}, '11': {'type': 'bytes', 'name': ''}, '15': {'type': 'message', 'message_typedef': {'1': {'type': 'bytes', 'name': ''}, '2': {'type': 'bytes', 'name': ''}}, 'name': ''}, '18': {'type': 'int', 'name': ''}}, 'name': ''}}
|
||
return value, message_type
|
||
|