@eryxenx/insta-chat

中文文档
2.2.7发布于 2026/11/08Apache-2.0TypeScriptCommonJS近 30 天下载 2617

非正式的Instagram Chat API for Node.js QQ Build Instagram DM bots 在个人账户上——发送消息,媒体,语音注释,反应,编辑和未发送,收听到的聊天. 运行时没有浏览器

中文使用文档
文档目录19 节
  1. 这是什么?
  2. * 安装
  3. 快速启动
  4. 去拿饼干
  5. ++会议段落(重要)
  6. • API
  7. 登录
  8. 两层
  9. 通讯( FCA 表面)
  10. 通讯( 本地 InstaAPI (中文(简体) )
  11. 媒体
  12. 线索用户( U)
  13. 完整简介 getUserInfoV2 编号 : getUserProfile (中文(简体) )
  14. 监听
  15. 实时 (MQTT)
  16. 实例——一个小的DM机器人
  17. 项目结构
  18. QQ 更改日志
  19. 许可证

@ eryxenx/ insta-chat

用于节点.js的非官方Instagram DM Chat API

发送消息、媒体、语音注释和反应 ^ 编辑、未发送、听 ^ 在个人账户上构建 Instagram bots ^ 运行时零浏览器

npm license node


这是什么?

@eryxenx/insta-chat 是一个独立的Instagram 直接信件 API——美国 (原始内容存档于2017-10-21). Instagram sbling of a FCA package. 它和同一个网点说话 www.instagram.com (中继图QL +) rupload),这样你就可以在 个人账户:

  • ✅ 发送 文本、相片、视频、语音注释
  • ✅ 反应,编辑和撤消信件
  • ✅ 听着 为即将收到的模式草案——实时MQTT推倒或投票——发送到自己的命令
  • ✅ 键入 指标、标记、哑音/哑音、隐藏
  • ✅ 用户 ——由 id/ 用户名查找, 搜索
  • ✅ 运行时纯 HTTP ——没有Puppeteer,没有浏览器,没有本土建筑

- 非正式的。 不隶属于Instagram或Meta. 只用在帐上 自己冒着风险 这个软件包可以自动化一个个人账户,而不是 官方Instagram Business API (英语).


* 安装

npm install @eryxenx/insta-chat

要求数 节点.js 18。 。 。 .


快速启动

const login = require("@eryxenx/insta-chat");

// `cookie` is your browser cookie string (needs at least `sessionid`).
login(cookie, (err, api) => {
  if (err) return console.error("Login error:", err.message);
  console.log("Logged in as", api.username || api.userID);

  // send a DM
  api.sendMessage("Hello from my bot 👋", "340282366841710300949128138275732109616");
});

承诺风格也起作用:

const api = await login(cookie);
await api.sendMessage("hi", threadID);

登录到 https://www.instagram.com (中文(简体) ) 在浏览器中,打开 DevTools = Network = 复制 Cookie 请求头( 它包含 sessionid, (中文(简体) ), ds_user_id, (中文(简体) ), csrftoken, (中文(简体) ), ig_did) (中文(简体) ). 粘贴整个字符串; 只 sessionid 强制的.


++会议段落(重要)

Instagram 的 Web API 拒绝不携带浏览器的请求 第二届会议 段落 (单位:千美元)__dyn, (中文(简体) ), __csr, (中文(简体) ), __hs, (中文(简体) ), __hsi, (中文(简体) ), __s, (中文(简体) ), fb_dtsg, (中文(简体) ), jazoest(中文(简体) ). 是由Instagram自己的JS捆绑制作的,但有会议范围,所以有一个 真正的浏览器页面负载足够了——抓取一次,再使用直到到期.

const { harvestSessionParams, findChromium } = require("@eryxenx/insta-chat");

const params = await harvestSessionParams({ /* cookie jar */ });
// -> { __dyn, __csr, __hs, fb_dtsg, lsd, ... }

harvestSessionParams 驱动系统 Chrome/铬通过 puppeteer-core (可选的依赖性,没有浏览器下载). 将结果传递给 login数字 :

const api = await login(cookie, { sessionParams: params });

如果你跳过这个,包裹仍然试图 拖住最小的标志 (单位:千美元)fb_dtsg, (中文(简体) ), lsd)来自Instagram主页自动. 当抛出 暂停使用 api.refreshSession()。 。 。 .


• API

登录

打电话说明
login(cookie, [options], [cb])返回/削减准备就绪 InstaClient (FCA表面).
login(cookie, { native: true })返回赤线 InstaAPI 换句话说.
createClient(cookie, [options])别名 login。 。 。 .

options数字 : { native, sessionParams, sessionParamsFile, deviceFile, pollInterval, minPollIntervalMs, realtime }。 。 。 .

来做 listen() 而非民调, 选择实时 MQTT :

const api = await login(cookie, { realtime: { enabled: true } });

realtime 实值 { enabled, fallback, host, keepAliveMs }与 fallback !== false (默认)一个不会连接到收件箱的经纪人会降解为收件箱的传票人,所以 机器人还是会出事的. keepAliveMs 是 PINGREQ 间隔; 必须在下方 cONNECT 保持活性(60 s)并默认为 25 s. 见 监听。 。 。 .

两层

层这是什么如何获得它
InstaClientFCA / 山羊瓶- Pro 外形地表 (sendMessage, (中文(简体) ), setMessageReaction, (中文(简体) ), getThreadInfo, (...) (中文(简体) )login(...)
InstaAPI原生 Instagram 客户端 (sendReaction, (中文(简体) ), sendPhotoBuffer, (中文(简体) ), getInbox, (...) (中文(简体) )login(..., { native: true }) 或者说 client.api

FCA 法则 : src/api/<group>/<method>.js; 添加一个 方法是添加一个文件. createFcaClient(client) 给定命名空格视图 (单位:千美元)messages.send(), (中文(简体) ), threads.getInfo()(三); new InstaContext(client, threadID) 束缚一线. EventNormalizer 将原始收件箱事件映射到 FCA 事件形状.

通讯( FCA 表面)

方法说明
sendMessage(form, threadID, [cb], [replyToMessage])发送文本/后附;通过传递目标消息id来引用-重写.
editMessage(text, messageID)编辑发出的消息( 15分钟之内) .
unsendMessage(messageID)解开一通消息.
setMessageReaction(emoji, messageID, [cb], [threadID])对消息的反应.
sendTypingIndicator(threadID)打字指标.
getThreadInfo 编号 : getThreadList 编号 : getThreadHistory线条读取.
getUserInfo 编号 : getUID用户查询.
getUserInfoV2(idOrIds)完整配置(所有细节),用于一个代号或一系列代号.
getUserProfile(idOrHandle)完整的合并配置对象 .
getProfilePictureV2(idOrHandle, opts)任意大小的配置图片(平方 + HD).
getProfileBio(idOrHandle) 编号 : getUserID(idOrHandle) 编号 : getUserFriendship(id)Bio, id, 友谊状态.
getSelfInfo()登录账户的自身简介.
getAppState 编号 : getCookies饼干罐.

通讯( 本地 InstaAPI(中文(简体) )

方法说明
sendMessage(text, threadID, replyToItemId?)发送文本 DM( 可选引用- reply) .
replyToMessage(threadID, text, replyToItemId?)发送答复(引用目标项目).
sendLink(threadID, link, text)发送可选文本的链接 .
sendReaction(threadID, itemID, emoji)对消息的反应.
removeReaction(threadID, itemID)删除反应.
unsendMessage(threadID, itemID)解开一通消息.
editMessage(threadID, itemID, text)编辑发出的消息( 15分钟之内) .
startTyping(threadID) 编号 : stopTyping(threadID)打字指标.

媒体

方法说明
sendPhoto(threadID, filePath, [opts])照片来自磁盘.
sendPhotoBuffer(threadID, buffer, [opts])照片来自一辆缓冲车.
sendPhotoFromUrl(threadID, url, [opts])照片来自URL.
sendVideo 编号 : sendVideoBuffer 编号 : sendVideoFromUrl视频变体.
sendVoice 编号 : sendVoiceBuffer 编号 : sendVoiceFromUrl语音注释变种.

opts数字 : { filename, text }。 。 。 .

线索用户( U)

方法说明
getThreadInfo(threadID)线索元数据.
getThreadHistory(threadID, limit)近期消息.
markThreadSeen(threadID, itemID)标为已读.
muteThread 编号 : unmuteThread 编号 : hideThread线条州.
getUserInfo(userID) 编号 : getUserInfoByUsername(username)用户查询.
searchUsers(query, limit)搜索用户.
getUserProfile(idOrUsername, [opts])完整剖面图从每个来源合并(见下文).
getProfilePicture(idOrUsername, [opts])最佳图片 URL; opts.size 通过CDN调整大小.

完整简介getUserInfoV2 编号 : getUserProfile(中文(简体) )

五一号 getUserInfo 返回一个小的 fca 形状子集。 V2 返回 每个细节a 网络会话可以读取,这是 登录安全: profile 查看通过 a 解析器,该解析器会尝试多个源,而永远不会转速限制(429)或a 登录重定向( 302) 到一个死片段错误 - 用于登录的错误 当命令查看一个侧写时 就会自动退出.

来源,按顺序合并(一个来源不能提供的领域) null:

  1. 收件箱/线索记录 - 客户端已经在管理部见过的用户 视图。 自由,不需要任何请求,也是唯一仍然回答一次的源 配置 REST 路径 429. getInbox() 自动填充.
  2. web_profile_info 资源 - 警棍计数(随行/随行/媒体), 传记,核实/私人/商业旗帜,外部url,类.
  3. 配置图QL (单位:千美元)PolarisProfilePageContentQuery- 最丰富的有效载荷,当 Instagram回应.
  4. 账户自己的页面 - 母壳Instagram服务器嵌入 登录账户的完整配置, 所以自我总是解决.
const info = await api.getUserInfoV2("32715034217");
// info["32715034217"] => { id, username, name, biography, followerCount,
//   followingCount, mediaCount, isVerified, isPrivate, isBusinessAccount,
//   externalUrl, category, profilePicUrl, profilePicUrlHd, fbid, ... }

const profile = await api.getUserProfile("@someuser");   // the raw merged object
const pic     = await api.getProfilePictureV2("someuser", { size: 640 });
// pic => { url, hd, thumb, sizes: { "150": ..., "320": ..., "640": ..., "1080": ... } }

监听

const stop = api.listen((err, event) => {
  if (err) return console.error(err.message);
  console.log(event.senderID, "->", event.body);
  // event = { type, threadID, senderID, messageID, body, attachments, timestamp }
});

// later
stop();

listen 通过时使用实时 MQTT 流 { realtime: { enabled: true } } 改为 login ——Instagram将每个新的管理部推倒 经纪人,所以答复 接近即时。 没有它, listen 民意调查 (默认每15s, 覆盖到 options.pollInterval) (中文(简体) ). 不管怎样,回电 和事件形状完全相同,失败的实时连接返回到 投票,除非你设定 realtime: { enabled: true, fallback: false }。 。 。 .

实时 (MQTT)

Instagram 的实时经纪人 (edge-mqtt.facebook.com)是一个 MQTToT 连接 由同一人认证 sessionid 饼干——没有应用登录. listen() 开车 当实时启用时; 您也可以直接使用:

const api = await login(cookie, { native: true });

api.realtimeOn("message", (e) => console.log(e.message));
api.realtimeOn("typing", (e) => console.log(e.threadID, "is typing"));
api.realtimeOn("seen", (e) => console.log(e.threadID, "read"));
api.realtimeOn("presence", (e) => console.log(e.value));

await api.realtimeConnect();
await api.realtimeSubscribe();   // reads seq_id/snapshot_at_ms from the inbox query
// ...later
api.realtimeDisconnect();

realtimeConnect() 仅在客户端连接时重新使用; 丢弃后 盖个新的,所以 将您的处理器附加到它返回的客户端 财务报告和审定财务报表 当它与你最后一次看到的不同时, 重新加入:

let client = await api.realtimeConnect();
if (client !== previous) {
  client.on("direct", onRealtimeDirect);
  client.on("disconnected", () => reconnectLater());
  previous = client;
}

RealtimeClient (原始客户端)和 RealtimeListener (听 () 包装) 也输出给想要自己驱动套接字的呼叫者.


实例——一个小的DM机器人

const login = require("@eryxenx/insta-chat");

(async () => {
  const api = await login(process.env.IG_COOKIE);

  api.listen(async (err, event) => {
    if (err || !event || !event.body) return;
    if (event.body === "/ping") await api.sendMessage("pong 🏓", event.threadID);
    await api.sendReaction(event.threadID, event.messageID, "✅");
  });
})();

项目结构

路径说明
index.js入境点;出口 login +帮助者.
index.d.tsTypeScript定义.
module/login.js经典 login(credentials, [options], [callback])。 。 。 .
src/api.jsInstaAPI 表面布线每个本土方法组.
src/api/FCA方法,每个文件一个: messaging/, (中文(简体) ), threads/, (中文(简体) ), users/, (中文(简体) ), action/, (中文(简体) ), realtime/。 。 。 .
src/app/InstaClient.jsFCA形客户端.
src/app/InstaContext.js每端浏览一个客户端.
src/app/createFcaClient.js命名间距视图( N)messages.*, (中文(简体) ), threads.*) (中文(简体) ).
src/app/loadApiMethods.js随附 src/api/*/*.js 在客户端.
src/events/normalizeEvent.js原始收件箱事件 FCA事件.
src/utils/messageStyle.js*bold* 编号 : _italic_ ^ Unicode. (中文(简体) ).
src/http.jsHTTP 客户端:网络头,会话参数,GraphQL, rupload.
src/constants.js终点+中继 doc_id 页:1.
src/cookies.jsCookie 解析/ 正常化 .
src/session.js浏览器会话- param 收割( R)puppeteer-core) (中文(简体) ).
src/deviceIdentity.js沉闷的设备身份.
src/methods/原生 : message, (中文(简体) ), media, (中文(简体) ), reactions, (中文(简体) ), thread, (中文(简体) ), user, (中文(简体) ), inbox, (中文(简体) ), typing。 。 。 .
src/realtime/mqttot.js无依赖的 MQTToT 编码器(Thrift Contract + MQTT 包 + TLS transport).
src/realtime/client.js实时MQTT客户端:连接,发送,直接事件.
src/realtime/bridge.js信件同步补丁 → 原始收件箱事件 .
src/realtime/listener.js电线实时输入 listen() 与粉丝倒回.

见 DOCS. md (英语) 用于完整的协议注释(GraphQL doc ids,发送 /) 上传/反应流).


QQ 更改日志

见 变动情况。 。 。 .

许可证

阿帕奇 - 2.0 EryXenX (英语)

所需资信: 您可以使用和修改此库,但您必须保留原始版权标题、 NOTICE 文档和作者的信用(EryXenX),并明确说明您的更改。 取消或更换信贷违反许可证.

版本与发布记录

@eryxenx/insta-chat 共发布 38 个版本,首次发布于 2026/10/08;过去 12 个月发布了 38 个版本。

版本发布日期距今
2.2.7latest2026/11/085 天前
2.2.62026/11/085 天前
2.2.52026/11/085 天前
2.2.42026/11/086 天前
2.2.32026/11/076 天前
2.2.22026/11/076 天前

其他发布通道:probe → 2.0.1。

关于 @eryxenx/insta-chat 的常见问题

@eryxenx/insta-chat 是什么?

非正式的Instagram Chat API for Node.js QQ Build Instagram DM bots 在个人账户上——发送消息,媒体,语音注释,反应,编辑和未发送,收听到的聊天. 运行时没有浏览器

如何安装 @eryxenx/insta-chat?

在项目目录运行 npm install @eryxenx/insta-chat,或使用 pnpm add / yarn add / bun add。

@eryxenx/insta-chat 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@eryxenx/insta-chat 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@eryxenx/insta-chat 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@eryxenx/insta-chat 可以商用吗?

@eryxenx/insta-chat 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@eryxenx/insta-chat 的下载量有多少?

根据 npm 官方下载统计,@eryxenx/insta-chat 在 2026/10/14 – 2026/11/12 这 30 天内被下载 2,617 次,日均约 87 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@eryxenx/insta-chat 还在维护吗?

最新版本 2.2.7 发布于 2026/11/08(5 天前);至今共发布 38 个版本,其中过去 12 个月发布了 38 个;首次发布于 2026/10/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。