imessage-kit

GitHub
1.2k 116 简单 2 次阅读 昨天MIT图像Agent开发框架
AI 解读 由 AI 自动生成,仅供参考

imessage-kit 是一款专为 macOS 打造的开源 iMessage SDK,旨在让开发者能够以编程方式读取、发送及自动化管理 iMessage 对话。过去,在 Mac 上实现消息自动化往往涉及复杂的脚本编写或底层数据库操作,而 imessage-kit 通过提供简洁优雅的 API 解决了这一痛点,大幅降低了构建 AI 智能体或聊天应用的门槛。

imessage-kit 主要面向 TypeScript 开发者、AI 研究人员以及自动化爱好者。imessage-kit 的技术亮点十分突出:不仅支持类型安全,在使用 Bun 运行时还能实现零依赖安装。此外,imessage-kit 还具备实时监听消息、自动回复、批量发送、插件扩展以及定时提醒等丰富功能。需要注意的是,为了读取聊天记录和执行自动化任务,macOS 系统需授予其完全磁盘访问权限。如果你希望在 Mac 生态中快速集成强大的消息处理能力,imessage-kit 是一个非常值得尝试的选择。

使用场景

某电商运营团队希望构建一个自动化系统,在订单发货后即时通过 iMessage 通知客户,并能自动处理客户的确认回复与售后咨询。

没有 imessage-kit 时

  • 客服人员需手动登录手机或 Mac 客户端,逐条复制订单信息发送,耗时且极易出现错发漏发。
  • 无法实时监控客户回复,导致大量“收到货了吗”等咨询被淹没在聊天记录中,响应滞后。
  • 若要编写脚本控制,需深入理解 AppleScript 底层逻辑,配置环境复杂且依赖库经常冲突。
  • 缺乏统一接口管理发送状态,难以追踪哪些消息已成功送达、已读或发送失败。

使用 imessage-kit 后

  • 利用批量发送功能,系统可一次性调用 API 向数百个客户推送包含物流单号的图文消息,效率提升百倍。
  • 通过实时监听机制自动捕获新消息,直接触发预设的自动回复逻辑,无需人工介入即可闭环处理。
  • 类型安全的 TypeScript 接口简化了开发,轻松查询历史对话并同步至内部 CRM 系统,数据更规范。
  • 零依赖架构降低了部署难度,配合内置的错误处理插件确保消息发送失败时能自动重试,稳定性更强。

imessage-kit 将原本依赖人工值守的沟通工作转变为稳定可靠的代码驱动自动化流程。

运行环境要求

操作系统
  • macOS
GPU

未说明

内存

未说明

依赖
notes仅支持 macOS 操作系统(iMessage 为苹果专有协议);首次运行需在系统隐私设置中授予 IDE 或终端‘完全磁盘访问权限’;依赖 Node.js 或 Bun 作为运行时环境;项目基于 TypeScript 开发。
python未说明
better-sqlite3
TypeScript
Node.js
Bun
imessage-kit hero image

快速开始

Banner

@photon-ai/imessage-kit

一个适用于 macOS 的、类型安全且优雅的 iMessage SDK(软件开发工具包),支持跨运行时环境

npm version TypeScript License Discord

一个功能齐全的 iMessage SDK,用于在 macOS 上读取发送自动化 iMessage 对话。非常适合构建 AI 智能体、自动化工具以及以聊天为首要的应用程序。

[!NOTE] ✨ 正在寻找高级功能,如线程回复、tapback(点赞反馈)、消息编辑、撤回、实时输入指示器?请查看 Advanced iMessage Kit 并联系 daniel@photon.codes


功能

功能 方法 示例
发送消息 sdk.send() 01-send-text.ts
发送图片 sdk.send() 02-send-image.ts
发送文件 sdk.sendFile() 03-send-file.ts
发送给群组 sdk.send() 04-send-group.ts
查询消息 sdk.getMessages() 05-query-messages.ts
列出聊天 sdk.listChats() 06-list-chats.ts
实时监听 sdk.startWatching() 07-watch-messages.ts
自动回复 sdk.message() 08-auto-reply.ts
批量发送 sdk.sendBatch() 09-batch-send.ts
获取已发送消息 sdk.send() 10-get-sent-message.ts
插件系统 sdk.use() 11-plugin.ts
错误处理 SendError 12-error-handling.ts
监听自己的消息 sdk.startWatching() 13-watch-own-messages.ts
定时消息 MessageScheduler 14-scheduled-messages.ts
智能提醒 Reminders 15-smart-reminders.ts

快速开始

安装

# For Bun (zero dependencies)
bun add @photon-ai/imessage-kit

# For Node.js (requires better-sqlite3)
npm install @photon-ai/imessage-kit better-sqlite3

基本用法

import { IMessageSDK } from '@photon-ai/imessage-kit'

const sdk = new IMessageSDK()

// Send a message
await sdk.send('+1234567890', 'Hello from iMessage Kit!')

// Clean up
await sdk.close()

配置

interface IMessageConfig {
    debug?: boolean              // Enable debug logging
    maxConcurrent?: number       // Max concurrent sends (default: 5)
    scriptTimeout?: number       // AppleScript timeout in ms
    databasePath?: string        // Custom database path
    plugins?: Plugin[]           // Plugins
    watcher?: {
        pollInterval?: number    // Polling interval (default: 2000)
        unreadOnly?: boolean     // Only watch unread (default: false)
        excludeOwnMessages?: boolean  // Exclude own messages (default: true)
    }
    webhook?: {
        url: string
        headers?: Record<string, string>
    }
}

授予权限

IMessageKit 需要完全磁盘访问权限才能读取您的聊天记录并执行自动化任务。

  1. 打开 系统设置 → 隐私与安全性 → 完全磁盘访问
  2. 点击 "+" 并添加您的 IDE 或终端(例如 Cursor, VS Code, Terminal, Warp)

消息

示例:01-send-text.ts | 02-send-image.ts | 03-send-file.ts | 05-query-messages.ts

发送消息

// Send text
await sdk.send('+1234567890', 'Hello World!')

// Send to email
await sdk.send('user@example.com', 'Hello!')

发送图片

// Send local images
await sdk.send('+1234567890', { 
    images: ['image1.jpg', 'image2.png'] 
})

// Send network images (auto-download)
await sdk.send('+1234567890', { 
    images: ['https://example.com/image.jpg'] 
})

// Text with images
await sdk.send('+1234567890', { 
    text: 'Check this out!',
    images: ['photo.jpg']
})

发送文件

// Send files (PDF, CSV, VCF, etc.)
await sdk.send('+1234567890', { 
    files: ['document.pdf', 'data.csv', 'contact.vcf'] 
})

// Convenience methods
await sdk.sendFile('+1234567890', '/path/to/document.pdf')
await sdk.sendFiles('+1234567890', ['file1.pdf', 'file2.csv'], 'Multiple files')

查询消息

// Get messages with filters
const result = await sdk.getMessages({
    sender: '+1234567890',
    unreadOnly: true,
    limit: 20,
    since: new Date('2025-01-01'),
    search: 'meeting'
})

// Get unread messages grouped by sender
const unread = await sdk.getUnreadMessages()
console.log(`${unread.total} unread from ${unread.senderCount} senders`)

聊天

示例:04-send-group.ts | 06-list-chats.ts

列出聊天

// Get all chats
const all = await sdk.listChats()

// Filter chats
const groups = await sdk.listChats({
    type: 'group',
    hasUnread: true,
    sortBy: 'recent',
    search: 'Project',
    limit: 20
})

// Each chat includes
for (const chat of groups) {
    console.log({
        chatId: chat.chatId,
        name: chat.displayName,
        isGroup: chat.isGroup,
        unread: chat.unreadCount
    })
}

发送给群组

// Get group chatId from listChats()
const groups = await sdk.listChats({ type: 'group' })
const chatId = groups[0].chatId  // e.g., 'chat45e2b868...'

// Send to group
await sdk.send(chatId, 'Hello group!')
await sdk.send(chatId, {
    text: 'Check these files',
    files: ['report.pdf']
})

实时事件

示例:07-watch-messages.ts | 08-auto-reply.ts | 13-watch-own-messages.ts

实时监听

await sdk.startWatching({
    // All messages
    onMessage: (msg) => {
        console.log(`New: ${msg.text}`)
    },
    
    // DMs only
    onDirectMessage: (msg) => {
        console.log(`DM from ${msg.sender}`)
    },
    
    // Groups only
    onGroupMessage: (msg) => {
        console.log(`Group: ${msg.chatId}`)
    },
    
    onError: (error) => {
        console.error(error)
    }
})

// Stop watching
sdk.stopWatching()

自动回复

await sdk.startWatching({
    onDirectMessage: async (msg) => {
        await sdk.message(msg)
            .ifFromOthers()
            .matchText(/hello/i)
            .replyText('Hi there!')
            .execute()
    }
})

消息链式 API

await sdk.message(msg)
    .ifUnread()
    .ifNotReaction()   // Skip tapback reactions
    .ifGroupChat()
    .when(m => m.sender.startsWith('+1'))
    .matchText(/photo/i)
    .replyImage(['photo.jpg'])
    .execute()

附件

示例:02-send-image.ts | 03-send-file.ts

附件辅助函数

import {
    attachmentExists,
    downloadAttachment,
    getAttachmentSize,
    isImageAttachment,
    isVideoAttachment,
    isAudioAttachment
} from '@photon-ai/imessage-kit'

const msg = await sdk.getMessages({ hasAttachments: true, limit: 1 })
const attachment = msg.messages[0].attachments[0]

if (await attachmentExists(attachment)) {
    const size = await getAttachmentSize(attachment)
    
    if (isImageAttachment(attachment)) {
        await downloadAttachment(attachment, '/path/to/save.jpg')
    }
}

支持的文件类型

  • 文档:PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, TXT, RTF
  • 图片:JPG, PNG, GIF, HEIC, WEBP, AVIF
  • 联系人卡片:VCF (vCard)
  • 数据文件:CSV, JSON, XML
  • 压缩包:ZIP, RAR, 7Z
  • 媒体:MP4, MOV, MP3, M4A

定时发送

示例:14-scheduled-messages.ts | 15-smart-reminders.ts

定时消息

import { IMessageSDK, MessageScheduler } from '@photon-ai/imessage-kit'

const sdk = new IMessageSDK()
const scheduler = new MessageScheduler(sdk, { debug: true }, {
    onSent: (msg, result) => console.log(`✅ Sent: ${msg.id}`),
    onError: (msg, error) => console.error(`❌ Failed: ${error.message}`),
    onComplete: (msg) => console.log(`🏁 Completed: ${msg.id}`)
})

// One-time message
const id = scheduler.schedule({
    to: '+1234567890',
    content: 'Reminder!',
    sendAt: new Date(Date.now() + 5 * 60 * 1000)  // 5 minutes
})

// Recurring daily
scheduler.scheduleRecurring({
    to: '+1234567890',
    content: 'Good morning! ☀️',
    startAt: new Date('2025-01-01T08:00:00'),
    interval: 'daily',  // 'hourly' | 'daily' | 'weekly' | 'monthly' | number
    endAt: new Date('2025-12-31')
})

// Manage
scheduler.reschedule(id, newDate)
scheduler.cancel(id)
scheduler.getPending()

// Persistence
const data = scheduler.export()
scheduler.import(data)

// Cleanup
scheduler.destroy()

智能提醒

一个支持自然语言的人类友好定时调度封装:

import { IMessageSDK, Reminders } from '@photon-ai/imessage-kit'

const sdk = new IMessageSDK()
const reminders = new Reminders(sdk)

// Relative time
reminders.in('5 minutes', '+1234567890', 'Take a break!')
reminders.in('2 hours', '+1234567890', 'Call the client')
reminders.in('1 day', '+1234567890', 'Follow up')

// Specific time
reminders.at('5pm', '+1234567890', 'End of day review')
reminders.at('tomorrow 9am', '+1234567890', 'Morning standup')
reminders.at('friday 2pm', '+1234567890', 'Weekly sync')

// Exact date
reminders.exact(new Date('2025-12-25T10:00:00'), '+1234567890', 'Merry Christmas!')

// Manage
reminders.list()    // List pending
reminders.count()   // Count pending
reminders.cancel(id)
reminders.destroy()

支持的格式:

  • 时长:"5 minutes", "2 hours", "1 day", "30 seconds", "1 week"
  • 时间:"5pm", "5:30pm", "17:30"
  • 日期 + 时间:"tomorrow 9am", "friday 2pm"

插件系统

示例:11-plugin.ts

import { loggerPlugin } from '@photon-ai/imessage-kit'

// Built-in logger
sdk.use(loggerPlugin({
    level: 'info',
    colored: true
}))

// Custom plugin
sdk.use({
    name: 'my-plugin',
    onInit: async () => console.log('Initialized'),
    onBeforeSend: async (to, content) => {
        console.log('Sending to:', to)
        return { to, content }
    },
    onAfterSend: async (result) => {
        console.log('Sent:', result)
    },
    onDestroy: async () => console.log('Destroyed')
})

错误处理

示例:12-error-handling.ts

import { SendError, DatabaseError, PlatformError } from '@photon-ai/imessage-kit'

try {
    await sdk.send('+1234567890', 'Hello')
} catch (error) {
    if (error instanceof SendError) {
        console.error('Send failed:', error.message)
    } else if (error instanceof DatabaseError) {
        console.error('Database error:', error.message)
    } else if (error instanceof PlatformError) {
        console.error('Platform error:', error.message)
    }
}

示例

使用 Bun 运行任意示例:

bun run examples/<filename>.ts

入门

消息操作

聊天与群组

实时与自动化

定时任务

高级功能


API 参考

核心方法

方法 描述
getMessages(filter?) 使用过滤器查询消息
getUnreadMessages() 按发送者分组获取未读消息
listChats(options?) 列出聊天(支持过滤/排序)
send(to, content) 发送文本、图片及/或文件
sendFile(to, path, text?) 发送单个文件
sendFiles(to, paths, text?) 发送多个文件
sendBatch(messages) 并发发送多条消息
message(msg) 创建消息处理链
startWatching(events?) 开始监控新消息
stopWatching() 停止监控
use(plugin) 注册插件
close() 关闭 SDK(软件开发工具包)并释放资源

类型

interface Message {
    id: string
    guid: string
    text: string | null
    sender: string
    senderName: string | null
    chatId: string
    isGroupChat: boolean
    isFromMe: boolean
    isRead: boolean
    service: 'iMessage' | 'SMS' | 'RCS'
    attachments: Attachment[]
    date: Date
    // Reaction fields
    isReaction: boolean
    reactionType: 'love' | 'like' | 'dislike' | 'laugh' | 'emphasize' | 'question' | null
    isReactionRemoval: boolean
    associatedMessageGuid: string | null
}

interface SendResult {
    sentAt: Date
    message?: Message  // Available if watcher is running
}

要求

  • 操作系统:仅限 macOS
  • 运行环境:Node.js >= 18.0.0 或 Bun >= 1.0.0
  • 权限:完全磁盘访问权限

大语言模型 (LLMs)

下载 llms.txt 以获取语言模型上下文:

Context7 MCP

Context7 MCP 添加到您的集成开发环境 (IDE),然后使用:

use context7: photon-hq/imessage-kit

许可证

MIT License


注意:本 SDK(软件开发工具包)仅供教育和开发用途。请始终尊重用户隐私并遵守 Apple 的服务条款。

版本历史

v2.1.22026/01/22
v2.1.12026/01/13
v2.1.02025/12/18
v2.0.22025/12/15
v2.0.12025/11/28
v2.0.02025/11/11
v1.1.32025/11/05
v1.1.22025/11/03
v1.1.02025/10/30
1.0.72025/10/28
v1.0.52025/10/25

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架