@chnak/weixin-bot
v1.2.1
Published
WeChat iLink Bot SDK for Node.js
Readme
@chnak/weixin-bot
Zero-dependency Node.js SDK for the WeChat iLink Bot API.
Install
npm install @chnak/weixin-botQuick start
const { WeixinBot } = require('@chnak/weixin-bot')
const bot = new WeixinBot()
await bot.login()
bot.onMessage(async (msg) => {
console.log(`[${msg.timestamp.toLocaleTimeString()}] ${msg.userId}: ${msg.text}`)
await bot.reply(msg, `你说了: ${msg.text}`)
})
await bot.run()API reference
new WeixinBot(options?)
Creates a bot client.
baseUrl?: stringOverride the iLink API base URL.tokenPath?: stringOverride the credential file path. Default:~/.weixin-bot/credentials.jsononError?: (error: unknown) => voidReceive polling or handler errors.
await bot.login(options?)
Starts QR login if needed, stores credentials locally, and returns the active session.
force?: booleanIgnore cached credentials and require a fresh QR login.
bot.onMessage(handler)
Registers an async or sync message handler. Each inbound user message is converted into:
interface IncomingMessage {
userId: string
text: string
type: 'text' | 'image' | 'voice' | 'file' | 'video'
raw: WeixinMessage
_contextToken: string
timestamp: Date
}await bot.reply(msg, text)
Replies to an inbound message using that message's context_token.
await bot.sendTyping(userId)
Shows "对方正在输入中..." (typing indicator) in the WeChat chat. Automatically fetches the required typing_ticket via getconfig. Only works after the SDK has seen at least one inbound message from that user.
await bot.stopTyping(userId)
Cancels the typing indicator.
await bot.send(userId, text)
Sends a proactive text message using the latest cached context_token for that user. This only works after the SDK has seen at least one inbound message from that user.
await bot.run()
Starts the long-poll loop, dispatches incoming messages to registered handlers, reconnects on transient failures, and triggers re-login if the session expires.
bot.stop()
Stops the long-poll loop gracefully.
How it works
login()fetches a QR login URL, waits for WeChat confirmation, and saves the returned bot token.run()performs long polling againstgetupdates.- Each inbound message is normalized into
IncomingMessageand sent to your callbacks. reply()andsend()reuse the internally managedcontext_tokenrequired by the protocol.
Protocol
See ../PROTOCOL.md for the wire protocol reference used by this SDK.
License
MIT
