快速開始
從公共 npm 安裝 SDK,在專用測試應用中完成“建立使用者 → 查詢使用者 → 傳送訊息”。本流程只需要 Node.js,不依賴原始碼倉庫或 TypeScript 編譯器。
準備應用
- 安裝 Node.js 22.17.0 以上,用
node --version確認版本。 - 在控制台使用註冊時自動建立的
demo應用或建立應用,從概覽的“接入憑證”取得 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.7使用 pnpm 的現有專案也可以執行 pnpm add @deeprespond/im-server-sdk@1.0.7。安裝後檢查版本:
node -p "require('@deeprespond/im-server-sdk/package.json').version"輸出應為 1.0.7。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();回撥金鑰只用於接收端驗籤。三者的用途和排查見憑據與身份。
