惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
人人都是产品经理
人人都是产品经理
月光博客
月光博客
V
V2EX
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
V
Visual Studio Blog
宝玉的分享
宝玉的分享
雷峰网
雷峰网
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - Franky
博客园 - 聂微东
博客园 - 司徒正美
博客园 - 【当耐特】
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
go-weixin-ilink:用 Go 给微信 iLink 机器人写业务,就像写 ...
yhtbiy · 2026-03-30 · via V2EX

🤖 go-weixin-ilink:用 Go 给微信 iLink 机器人写业务,就像写 HTTP 路由一样简单

开源地址: https://github.com/dobest1024/go-weixin-ilink


背景

微信 iLink 开放了机器人接入能力,但官方只有 TypeScript SDK ,没有 Go 版本。

如果你的后端是 Go ,想接入 iLink 机器人,就需要自己摸索协议——AES 加解密、长轮询、context_token 管理、CDN 媒体上传……踩坑成本不低。

于是我写了这个 SDK ,把协议细节全部封装掉,对外只暴露一套简单的 Handler API 。


最快上手:30 行跑起来一个 Echo Bot

bot := ilink.NewBot(
    ilink.WithTokenFile(".bot-token.json"),
    ilink.WithSyncBufFile(".bot-syncbuf"), // 重启不重放历史消息
)

bot.OnText(func(ctx *ilink.Context) {
    ctx.ReplyText("收到:" + ctx.Text())
})

bot.Login(context.Background(), ilink.TerminalQR) // 终端打印二维码,扫一下
bot.Run(context.Background())

扫码后 token 自动写文件,下次重启不需要再扫。


消息路由——告别 if/else 大山

参考 gin 的设计,用声明式路由分发消息:

bot.OnTextPrefix("/help", showHelp)         // 前缀匹配
bot.OnTextContains("关键词", handleKeyword) // 包含匹配
bot.OnTextMatch(`^\d{6}$`, handleCode)      // 正则匹配
bot.OnImage(handleImage)
bot.OnVoice(handleVoice)
bot.OnFile(handleFile)
bot.OnPrivateText(handlePrivate)            // 仅私聊文本
bot.OnGroupText(handleGroup)               // 仅群内文本

中间件——洋葱模型,和 gin 一样用

// 日志
bot.Use(func(ctx *ilink.Context) {
    log.Printf("from=%s text=%q", ctx.UserID(), ctx.Text())
    ctx.Next()
})

// 限流:每人每 3 秒 1 条
bot.Use(rateLimiter(3 * time.Second))

// 白名单
bot.Use(func(ctx *ilink.Context) {
    if !whitelist[ctx.UserID()] {
        ctx.ReplyText("无权限")
        ctx.Abort()
        return
    }
    ctx.Next()
})

引用消息支持

用户长按消息引用后发送,可以直接读取被引用的内容:

bot.OnText(func(ctx *ilink.Context) {
    if ctx.HasQuote() {
        ctx.ReplyText("你引用了:" + ctx.QuotedText())
        return
    }
    ctx.ReplyText(ctx.Text())
})

媒体收发:图片、语音、文件、视频

下载和发送各一行,加解密全在 SDK 内部:

bot.OnImage(func(ctx *ilink.Context) {
    data, _ := ctx.DownloadImage(ctx.Message.GetImageItem())
    result, _ := ctx.Upload(data, "image")
    ctx.ReplyItems([]ilink.MessageItem{ilink.BuildImageItem(result)})
})

打字状态

接 AI 接口时,让用户看到"对方正在输入"的体验:

bot.OnText(func(ctx *ilink.Context) {
    ctx.Typing()
    defer ctx.StopTyping()
    ctx.ReplyText(callAI(ctx.Text()))
})

typing_ticket 按用户自动缓存 24 小时,无需手动管理。


生产可用的细节

  • 断点续传get_updates_buf 游标持久化到磁盘,重启后从上次位置继续,不丢消息、不重放
  • Session 自愈:检测到 -14 session 过期,自动暂停 1 小时后重试,无需人工干预
  • Panic 隔离:单条消息 panic 不会让整个轮询崩掉
  • 优雅关闭:监听 context 取消,等待 in-flight handler 跑完
  • 零依赖:只有标准库,go get 即用

存储可替换

内置文件实现,生产环境可以换成 Redis 或数据库:

bot := ilink.NewBot(
    ilink.WithTokenStore(myRedisTokenStore),
    ilink.WithContextTokenStore(myDBCtxStore),
    ilink.WithSyncBufStore(myRedisSyncBuf),
)

安装

go get github.com/dobest1024/go-weixin-ilink

需要 Go 1.21+,零外部依赖。


适合谁用

  • 想快速给微信 iLink 机器人写业务逻辑、不想踩协议坑的 Go 开发者
  • 需要接入 AI 模型( Claude 、OpenAI 等)作为微信机器人后端的场景
  • 企业内部工具、自动化助手、客服机器人等

GitHub: https://github.com/dobest1024/go-weixin-ilink 欢迎 star 、issue 和 PR 。