通过Chrome扩展网关集成LINE。发送/读取消息,管理联系人、群组、个人资料及表情回应。二维码认证……
LINE 客户端 Skill.
功能概述
LINE 客户端 Skill.是一项面向实际任务的技能,主要用于Full LINE 消息客户端通过Chrome扩展网关 JSON.;Repo & Files.;
核心要点
- Repo: /data/workspace/line-client (github.com/2manslkh/line-api).;
- Main 客户端: scrc/chrome clie。
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
使用与执行
使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
LINE 客户端技能
通过 Chrome 扩展网关 JSON API 实现的完整 LINE 消息客户端。
代码仓库与文件
- 仓库:
/data/workspace/line-client(github.com/2manslkh/line-api) - 主客户端:
src/chrome_client.py→LineChromeClient - 二维码登录:
src/auth/qr_login.py→QRLogin - HMAC 签名器:
src/hmac/signer.js(Node.js,自动在端口 18944 启动) - Token 存储:
~/.line-client/tokens.json - 证书缓存:
~/.line-client/sqr_cert - WASM 文件:
lstm.wasm+lstmSandbox.js(必需,位于仓库根目录)
快速开始
import json
from pathlib import Path
from src.chrome_client import LineChromeClient
tokens = json.loads((Path.home() / ".line-client" / "tokens.json").read_text())
client = LineChromeClient(auth_token=tokens["auth_token"])
# 发送消息
client.send_message("U...", "Hello!")
# 获取个人资料
profile = client.get_profile()
Token 有效期约为 7 天。若已过期(APIError(10051)),请重新运行二维码登录流程。
二维码登录(身份验证)
二维码登录需用户交互:在手机上扫描二维码并输入 PIN 码。
from src.hmac import HmacSigner
from src.auth.qr_login import QRLogin
import qrcode
signer = HmacSigner(mode="server")
login = QRLogin(signer)
result = login.run(
on_qr=lambda url: send_qr_image_to_user(qrcode.make(url)),
on_pin=lambda pin: send_pin_to_user_IMMEDIATELY(pin), # 时间敏感!
on_status=lambda msg: print(msg),
)
# result.auth_token, result.mid, result.refresh_token
关键注意: PIN 码必须在约 60 秒内送达用户。请在 on_pin 回调触发的**第一时间**发送 PIN。
二维码登录状态机
createSession→ 获取 session IDcreateQrCode→ 获取回调 URL(需附加?secret={curve25519_pubkey}&e2eeVersion=1)checkQrCodeVerified— 轮询直至完成扫码(使用X-Line-Session-ID,不带origin请求头)verifyCertificate— 即使失败也**必须调用**(强制状态转移!)createPinCode→ 生成 6 位 PIN 码(若第 4 步中证书已验证,则跳过)checkPinCodeVerified— 轮询直至用户输入 PINqrCodeLoginV2→ 返回 JWT token、证书及 refresh token
服务端登录脚本
python scripts/qr_login_server.py /tmp/qr.png
向 stdout 输出 JSON 事件:{"event": "qr", "path": "...", "url": "..."}、{"event": "pin", "pin": "123456"}、{"event": "done", "mid": "U..."}。
全部 API 方法
联系人与好友
| 方法 | 参数 | 说明 |
|---|---|---|
get_profile() |
— | 获取当前用户资料(displayName、mid、statusMessage 等) |
get_contact(mid) |
mid: str | 获取单个联系人的资料 |
get_contacts(mids) |
mids: list[str] | 批量获取多个联系人资料 |
get_all_contact_ids() |
— | 列出所有好友 MID |
find_contact_by_userid(userid) |
userid: str | 按 LINE ID 搜索联系人 |
find_and_add_contact_by_mid(mid) |
mid: str | 通过 MID 添加好友 |
find_contacts_by_phone(phones) |
phones: list[str] | 按手机号搜索联系人 |
add_friend_by_mid(mid) |
mid: str | 添加好友(RelationService) |
get_blocked_contact_ids() |
— | 列出被屏蔽的 MID |
get_blocked_recommendation_ids() |
— | 列出被屏蔽的好友推荐 MID |
block_contact(mid) |
mid: str | 屏蔽某联系人 |
unblock_contact(mid) |
mid: str | 取消屏蔽某联系人 |
block_recommendation(mid) |
mid: str | 屏蔽某条好友推荐 |
update_contact_setting(mid, flag, value) |
mid, flag: int, value: str | 更新联系人设置(例如静音) |
get_favorite_mids() |
— | 列出收藏的联系人 MID |
get_recommendation_ids() |
— | 列出好友推荐列表 |
消息
| 方法 | 参数 | 说明 |
|---|---|---|
send_message(to, text, ...) |
to: str, text: str, reply_to: str(可选) | 发送文本消息。支持通过 reply_to=message_id 进行回复 |
unsend_message(message_id) |
message_id: str | 撤回/删除已发送的消息 |
get_recent_messages(chat_id, count=50) |
chat_id: str | 获取指定聊天中的最新消息 |
get_previous_messages(chat_id, end_seq, count=50) |
chat_id, end_seq: int | 分页获取历史消息(更早的消息) |
get_messages_by_ids(message_ids) |
message_ids: list[str] | 拉取指定 ID 的消息 |
get_message_boxes(count=50) |
— | 获取聊天列表(含每会话最后一条消息,即收件箱视图) |
get_message_boxes_by_ids(chat_ids) |
chat_ids: list[str] | 获取指定聊天(含每会话最后一条消息) |
get_message_read_range(chat_ids) |
chat_ids: list[str] | 获取已读回执信息 |
send_chat_checked(chat_id, last_message_id) |
chat_id, last_message_id: str | 标记消息为已读 |
send_chat_removed(chat_id, last_message_id) |
chat_id, last_message_id: str | 将聊天从收件箱中移除 |
send_postback(to, postback_data) |
to, postback_data: str | 发送 postback(用于 Bot 交互) |
聊天与群组
| 方法 | 参数 | 说明 |
|---|---|---|
get_chats(chat_ids, with_members=True, with_invitees=True) |
chat_ids: list[str] | 获取聊天/群组详情 |
get_all_chat_mids() |
— | 列出所有聊天 MID(含群组与待接受邀请) |
create_chat(name, target_mids) |
name: str, target_mids: list[str] | 创建新群聊 |
accept_chat_invitation(chat_id) |
chat_id: str | 接受群组邀请 |
reject_chat_invitation(chat_id) |
chat_id: str | 拒绝群组邀请 |
invite_into_chat(chat_id, mids) |
chat_id: str, mids: list[str] | 邀请用户加入群组 |
cancel_chat_invitation(chat_id, mids) |
chat_id: str, mids: list[str] | 取消待处理的邀请 |
delete_other_from_chat(chat_id, mids) |
chat_id: str, mids: list[str] | 将成员踢出群组 |
leave_chat(chat_id) |
chat_id: str | 退出群聊 |
update_chat(chat_id, updates) |
chat_id: str, updates: dict | 更新群组名称/设置 |
set_chat_hidden_status(chat_id, hidden) |
chat_id: str, hidden: bool | 归档/取消归档聊天 |
get_rooms(room_ids) |
room_ids: list[str] | 获取旧版 Room 信息 |
invite_into_room(room_id, mids) |
room_id: str, mids: list[str] | 邀请用户加入旧版 Room |
leave_room(room_id) |
room_id: str | 退出旧版 Room |
消息表情反应
| 方法 | 参数 | 说明 |
|---|---|---|
react(message_id, reaction_type) |
message_id: str, type: int | 对消息添加反应。类型值:2=点赞、3=爱心、4=大笑、5=惊讶、6=难过、7=愤怒 |
cancel_reaction(message_id) |
message_id: str | 取消自己的反应 |
个人资料与设置
| 方法 | 参数 | 说明 |
|---|---|---|
update_profile_attributes(attr, value, meta={}) |
attr: int, value: str | 更新个人资料。属性值:2=DISPLAY_NAME、16=STATUS_MESSAGE、4=PICTURE_STATUS |
update_status_message(message) |
message: str | 快捷方式:更新状态消息 |
update_display_name(name) |
name: str | 快捷方式:更新显示名称 |
get_settings() |
— | 获取全部账户设置 |
get_settings_attributes(attr_bitset) |
attr_bitset: int | 获取特定设置项 |
update_settings_attributes(attr_bitset, settings) |
attr_bitset: int, settings: dict | 更新设置项 |
轮询与事件
| 方法 | 参数 | 说明 |
|---|---|---|
get_last_op_revision() |
— | 获取最新操作修订号(operation revision number) |
fetch_ops(count=50) |
— | 拉取待处理的操作(可能触发长轮询) |
poll() |
— | 生成器,实时产出到达的操作 |
on_message(handler) |
handler: Callable(msg, client) | 启动轮询线程,收到新消息时调用 handler。操作类型:26=SEND_MESSAGE、27=RECEIVE_MESSAGE |
stop() |
— | 停止轮询线程 |
其他服务
| 方法 | 参数 | 说明 |
|---|---|---|
get_server_time() |
— | 获取 LINE 服务器时间戳 |
get_configurations() |
— | 获取服务器配置 |
get_rsa_key_info() |
— | 获取用于身份验证的 RSA 密钥 |
issue_channel_token(channel_id) |
channel_id: str | 签发 channel token(用于 LINE Login / LIFF) |
get_buddy_detail(mid) |
mid: str | 获取官方账号信息 |
report_abuse(mid, category=0, reason="") |
mid: str | 举报用户 |
add_friend_by_mid(mid) |
mid: str | 添加好友(RelationService) |
logout() |
— | 登出并使 Token 失效 |
MID 格式
LINE 使用 MID 标识各类实体:
U...或u...→ 用户(toType=0)C...或c...→ 群聊(toType=2)R...或r...→ Room(toType=1)
客户端在发送消息时,会根据 MID 前缀自动推断 toType。
HMAC 签名
所有 API 请求均需携带 X-Hmac 请求头。WASM 签名器会自动完成该过程:
- 使用版本号 “3.7.1” 与 access token,通过专有 KDF(实现在
lstm.wasm中)派生签名密钥 - 对
path + body进行签名 → base64 编码 → 填入X-Hmac头 - 服务端模式:约 13ms/次(运行于端口 18944 的 Node.js HTTP 服务,自动启动)
- 子进程模式:约 2s/次(备用方案)
错误处理
from src.chrome_client import APIError
try:
client.send_message(mid, "test")
except APIError as e:
print(e.code, e.api_message)
# 10051 = 会话过期 / 无效
# 10052 = 后端返回 HTTP 错误
# 10102 = 参数非法
架构
User's Phone (LINE app)
↕ (scan QR / enter PIN)
LINE Servers (line-chrome-gw.line-apps.com)
↕ (JSON REST + X-Hmac signing)
LineChromeClient (this repo)
↕ (WASM HMAC via Node.js signer)
lstm.wasm + lstmSandbox.js
Chrome 网关在内部完成 JSON ↔ Thrift 的双向转换。我们**无需直接处理 Thrift 二进制格式**——所有交互均为结构清晰的 JSON。
热门AI工具
相关专题
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。
0
2026.10.22
本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。
0
2026.10.22
本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。
0
2026.10.22
本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。
0
2026.10.22
PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.5万人学习
共6课时 | 54.7万人学习
