快速开始
从公共 npm 安装 SDK,在专用测试应用中完成“创建用户 → 查询用户 → 发送消息”。本流程只需要 Node.js,不依赖源码仓库或 TypeScript 编译器。
准备应用
- 安装 Node.js 22.17.0 以上,用
node --version确认版本。 - 在控制台创建应用,并从服务端凭据取得 Client ID 和 Client Secret。
- 准备服务端 API 接入地址和 AppKey。AppKey 中
#前是组织名,后是应用名。
此示例会创建两个测试用户并发送一条文本消息。请使用专用测试应用;脚本输出用户名,便于运行后在控制台清理。
安装
mkdir im-node-quickstart
cd im-node-quickstart
npm init -y
npm install @deeprespond/im-server-sdk@1.0.0使用 pnpm 的现有项目也可以执行 pnpm add @deeprespond/im-server-sdk@1.0.0。安装后检查版本:
node -p "require('@deeprespond/im-server-sdk/package.json').version"输出应为 1.0.0。npm 包页面与版本说明列出分发和验证范围。
配置环境变量
在工程根目录创建 .env,用同一测试应用的信息替换以下占位值:
IM_BASE_URL=https://im.example.com
IM_ORG_NAME=your_org
IM_APP_NAME=your_app
IM_CLIENT_ID=replace_with_client_id
IM_CLIENT_SECRET=replace_with_client_secretIM_BASE_URL 为部署方提供的 API 根地址,不追加 /openapi/v1 或组织、应用路径;SDK 自动拼接这些路径。占位域名不能直接调用。Client ID/Secret 是服务端凭据,App ID 和回调签名密钥不能替代它们。
将 .env 加入项目 .gitignore。生产环境由部署平台注入相同变量,不将凭据放进网页或 App。
编写 main.mjs
以下代码完整保存为 main.mjs。.mjs 使用 ES 模块,支持顶层 await,无需修改 package.json 的 type。
import { randomUUID } from 'node:crypto';
import { DRClient, isDRError } from '@deeprespond/im-server-sdk';
function required(name) {
const value = process.env[name]?.trim();
if (!value) throw new Error(`缺少环境变量 ${name}`);
return value;
}
const im = new DRClient({
baseUrl: required('IM_BASE_URL'),
orgName: required('IM_ORG_NAME'),
appName: required('IM_APP_NAME'),
clientId: required('IM_CLIENT_ID'),
clientSecret: required('IM_CLIENT_SECRET'),
});
const suffix = randomUUID().replaceAll('-', '').slice(0, 12);
const alice = `sdk_alice_${suffix}`;
const bob = `sdk_bob_${suffix}`;
console.log('本次测试用户:', alice, bob);
try {
await im.users.create(alice, { nickname: 'Node 示例 Alice' });
await im.users.create(bob, { nickname: 'Node 示例 Bob' });
const user = await im.users.get(alice);
console.log('查询成功:', user.username);
const sent = await im.messages.send({
from: alice,
to_user: bob,
client_msg_id: `quickstart_${suffix}`,
type: 'text',
body: { text: '你好,这是一条来自 Node.js 服务端 SDK 的消息。' },
});
console.log('发送接口返回:', sent.message_id);
} catch (error) {
if (isDRError(error)) {
console.error({
code: error.code,
reason: error.reason,
op: error.op,
requestId: error.requestId,
});
} else {
console.error(error instanceof Error ? error.message : '执行失败');
}
process.exitCode = 1;
} finally {
await im.close();
}运行与确认
在包含 .env 和 main.mjs 的目录执行,Windows 的 PowerShell 也使用同一条命令:
node --env-file=.env main.mjs成功时输出两个测试用户名、查询结果和 message_id。这表示创建、查询和发送接口调用成功;收件用户在线接收、离线同步和送达回执需要客户端 SDK 登录后进一步确认。
每次运行生成新的测试用户名。中途失败时已成功创建的用户不会自动删除,可根据开头输出的用户名核对和清理。再次尝试同一业务消息时应复用原 client_msg_id,见重试与幂等。
接入自己的业务
长期运行的后端在模块中创建并复用 DRClient,在进程停止时统一关闭。业务用户登录成功后,由受保护的后端接口签发 IM 登录凭证:
// im 为服务启动时创建的客户端;username 来自已经认证的业务用户。
const result = await im.users.issueLoginTicket(username, { auto_create: true });
// 仅将 result.ticket 返回给该用户,再交给客户端 SDK 登录。App Token 由 SDK 内部管理;用户登录凭证来自 issueLoginTicket();回调密钥只用于接收端验签。三者的用途和排查见凭据与身份。
