# @eryxenx/insta-chat 中文文档

规范地址：https://npmcn.com/package/%40eryxenx/insta-chat/

版本：2\.2\.7
npm 元数据更新时间：2026-11-08T06:29:04.125Z
中文译文更新时间：2026-11-14T01:17:10.705Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40eryxenx/insta-chat
原文对照：https://npmcn.com/package/%40eryxenx/insta-chat/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：356 kB，70 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=18
- 运行依赖：3 个
- 首次发布：2026-10-08T08:03:41.713Z
- 最新版本发布：2026-11-08T06:29:03.959Z
- 近 30 天下载量：2617（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：38（近 12 个月 38 个）

## 中文简介

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

## 安装

```sh
npm install @eryxenx/insta-chat
```

也可以使用：`pnpm add @eryxenx/insta-chat`、`yarn add @eryxenx/insta-chat`、`bun add @eryxenx/insta-chat`

## README

# @ eryxenx/ insta-chat

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

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

[![npm](https://img.shields.io/npm/v/@eryxenx/insta-chat?color=blue)](https://www.npmjs.com/package/@eryxenx/insta-chat) [![license](https://img.shields.io/badge/license-Apache--2.0-blue)](https://npmcn.com/package/%40eryxenx/insta-chat/LICENSE) [![node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org/)

* * *

## 这是什么?

`@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 (英语).

* * *

## \* 安装

```bash
npm install @eryxenx/insta-chat
```

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

* * *

## 快速启动

```javascript
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");
});
```

承诺风格也起作用:

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

### 去拿饼干

登录到 [https://www.instagram.com (中文(简体) )](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捆绑制作的,但有会议范围,所以有一个 真正的浏览器页面负载足够了——抓取一次,再使用直到到期.

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

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

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

```javascript
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 :

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

`realtime` 实值 `{ enabled, fallback, host, keepAliveMs }`与 `fallback !== false` (默认)一个不会连接到收件箱的经纪人会降解为收件箱的传票人,所以 机器人还是会出事的. `keepAliveMs` 是 PINGREQ 间隔; 必须在下方 cONNECT 保持活性(60 s)并默认为 25 s. 见 [监听](https://npmcn.com/package/%40eryxenx/insta-chat/#readme-listening)。 。 。 .

### 两层

| 层 | 这是什么 | 如何获得它 |
| --- | --- | --- |
| `InstaClient` | FCA / 山羊瓶- 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服务器嵌入 登录账户的完整配置, 所以自我总是解决.

```javascript
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": ... } }
```

### 监听

```javascript
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()` 开车 当实时启用时; 您也可以直接使用:

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

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

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

* * *

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

```javascript
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.ts` | TypeScript定义. |
| `module/login.js` | 经典 `login(credentials, [options], [callback])`。 。 。 . |
| `src/api.js` | `InstaAPI` 表面布线每个本土方法组. |
| `src/api/` | FCA方法,每个文件一个: `messaging/`, (中文(简体) ), `threads/`, (中文(简体) ), `users/`, (中文(简体) ), `action/`, (中文(简体) ), `realtime/`。 。 。 . |
| `src/app/InstaClient.js` | FCA形客户端. |
| `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.js` | HTTP 客户端:网络头,会话参数,GraphQL, rupload. |
| `src/constants.js` | 终点+中继 `doc_id` 页:1. |
| `src/cookies.js` | Cookie 解析/ 正常化 . |
| `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 (英语)](https://npmcn.com/package/%40eryxenx/insta-chat/DOCS.md) 用于完整的协议注释(GraphQL doc ids,发送 /) 上传/反应流).

* * *

## QQ 更改日志

见 [变动情况](https://npmcn.com/package/%40eryxenx/insta-chat/CHANGELOG.md)。 。 。 .

## 许可证

[阿帕奇 - 2.0](https://npmcn.com/package/%40eryxenx/insta-chat/LICENSE) EryXenX (英语)

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

## 常见问题

### @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 和提交记录判断。

