如何把 Mastra 代理接入 Slack 让其响应频道消息并回写回复
如何把 Mastra 代理接入 Slack 让其响应频道消息并回写回复【免费下载链接】mastraMastra is the modern TypeScript framework for AI-powered applications and agents.项目地址: https://gitcode.com/GitHub_Trending/ma/mastra你的目标是把一个已有的 Mastra 代理接入 Slack有人在频道里 机器人或直接发消息时Mastra 通过正常代理管线处理消息并把回复写回 Slack 的会话频道消息会回复在线程中。整条路径是给代理挂上 Slack 通道适配器 → 在 Slack 侧创建应用并配置 webhook → 本地起开发服务器并用隧道暴露 → 在 Slack 里验证机器人能收发消息。适用前提你已有一个 Mastra 项目推荐框架代码放在src/mastra/下参考 Develop并且能在 Slack 工作区中创建应用。通道Channels功能自mastra/core1.22.0起可用Slack 适配器基于 Chat SDK具体指南见 Slack 通道文档 和 Channels 总览。安装适配器并给代理挂上 Slack 通道在项目里安装 Chat SDK 的 Slack 适配器npm install chat-adapter/slack然后在代理配置中加入createSlackAdapter()。以下示例放在src/mastra/agents/your-agent.ts模型用的是文档中解析后的示例值openai/gpt-5.6-sol可换成你自己的模型import { Agent } from mastra/core/agent import { createSlackAdapter } from chat-adapter/slack export const yourAgent new Agent({ id: your-agent, name: Your Agent, instructions: Help people plan tasks, answer questions, and coordinate work in Slack., model: openai/gpt-5.6-sol, channels: { adapters: { slack: createSlackAdapter(), }, }, })注意id: your-agentSlack webhook 路径会用这个id拼接后面配置 Slack 应用时要保持一致。使用openai/model格式的模型时需要设置对应提供商的环境变量例如 OpenAI 需要OPENAI_API_KEY。通道文档建议在Mastra实例上配置 storage如LibSQLStore让线程订阅、工具审批等通道状态在重启后保留本地验证阶段可先不加上线前建议补上。在 Slack 侧用 manifest 创建应用Slack 应用决定机器人的显示名、能力和接收的事件。最快的方式是在目标工作区用 manifest 直接创建这条路只适用于把代理加进自己的工作区不覆盖给其他工作区安装的 OAuth 流程打开api.slack.com/apps选择Create an app再选From a manifest选择机器人运行的工作区粘贴下面的 manifest 并选择Create。Slack 同时接受 JSON 和 YAML用创建弹窗里对应的标签页格式即可。{ display_information: { name: mastra-agent }, features: { app_home: { home_tab_enabled: false, messages_tab_enabled: true, messages_tab_read_only_enabled: false }, bot_user: { display_name: mastra-agent, always_online: true } }, oauth_config: { scopes: { bot: [ im:write, app_mentions:read, channels:history, channels:read, chat:write, users:read, im:read, im:history ] }, pkce_enabled: false }, settings: { event_subscriptions: { request_url: https://YOUR-PUBLIC-URL/api/agents/YOUR-AGENT-ID/channels/slack/webhook, bot_events: [app_mention, message.channels, message.im] }, interactivity: { is_enabled: true, request_url: https://YOUR-PUBLIC-URL/api/agents/YOUR-AGENT-ID/channels/slack/webhook }, org_deploy_enabled: false, socket_mode_enabled: false, token_rotation_enabled: false, is_mcp_enabled: false } }其中两处占位符YOUR-PUBLIC-URL是你的 Mastra 服务公网地址本地开发时就是隧道地址见下节YOUR-AGENT-ID是上面代码里 Agent 的id例如your-agent。创建应用时如果 Slack 不接受占位符可以先留空或用临时值后面统一回填真实 webhook URL。这份 manifest 各部分的用途display_information.name和bot_user.display_name机器人在 Slack 里的名字改完需要重装应用messages_tab_enabledmessages_tab_read_only_enabled允许从应用Messages标签页给机器人发私信oauth_config.scopes.bot允许机器人在它所在的频道发帖、读历史、读 提及和私信并做用户查询event_subscriptions告诉 Slack 把哪些消息事件发到 webhook这里订阅了app_mention被 、message.channels频道消息、message.im私信interactivity启用交互卡片并把卡片按钮动作发回同一个 webhook。应用创建后打开Install App选择Install to Workspace并批准请求的 scopes。配置 Slack 凭据Slack 会向你的 webhook 发请求Mastra 需要两样东西来完成验签和回写消息。在 Slack 应用设置里复制Basic Information App Credentials Signing SecretOAuth Permissions Bot User OAuth Token写入 Mastra 项目的.envSLACK_SIGNING_SECRETyour-signing-secret SLACK_BOT_TOKENxoxb-your-bot-tokenMastra 会自动读取这两个环境变量验签失败的请求会被适配器直接拒绝401。启动本地服务并用隧道暴露 webhookSlack 无法把事件发到localhost所以本地开发要先把 Mastra 开发服务器暴露出去在项目根目录启动开发服务器npx mastra dev服务默认监听http://localhost:4111src/mastra/下的改动会自动重启服务。另开终端用隧道暴露 4111 端口cloudflared或ngrok均可。这里用 cloudflarednpx cloudflared tunnel --url http://localhost:4111这条命令会在你的机器上启动一个公网隧道进程只要终端不关公网地址就能访问你本地的 4111 端口。把生成的隧道主机名作为YOUR-PUBLIC-URL得到完整 webhook URL例如https://abc123.trycloudflare.com/api/agents/your-agent/channels/slack/webhook路径格式是/api/agents/AGENT_ID/channels/slack/webhook这是 Mastra 为每个适配器自动注册的固定路由不需要你手写服务端代码。隧道地址只用于本地开发部署到正式服务器后要换成生产 URL因为隧道重启后地址会变。在 Slack 应用设置里回填 Request URL回到 Slack 应用设置把两处请求地址都改成上一步的 webhook URLEvent Subscriptions把Request URL替换为完整 webhook URL选择Save ChangesInteractivity Shortcuts把Request URL替换为同一个 webhook URL选择Save Changes如果 Slack 提示需要重装应用打开OAuth Permissions选择Reinstall to Workspace。注意顺序先启动本地服务并拿到隧道地址再保存 Slack 侧的 Request URL否则 Slack 校验 URL 时会连不上。在 Slack 中验证按 Slack 指南 的验证步骤私信验证。直接给 Slack 机器人用户发一条私信。manifest 里包含message.im事件和im:*scopes所以私信必须能走通。机器人应在线程/会话中回复回复内容取决于你给代理配置的模型、指令、记忆和工具文档不保证固定输出。频道验证。先用/invite your-bot-nameyour-bot-name换成你机器人的名字把机器人拉进目标频道然后在频道里 它your-bot-name What can you help me with?代理会回复在该消息的线程里。首次被 时Mastra 默认会从平台拉取该线程最近 10 条消息作为上下文之后订阅该线程并通过 Mastra 记忆保持完整历史不想要这个行为可以设置threadContext: { maxMessages: 0 }只影响非私信线程详见 Channels 总览。webhook 层的判断依据。Slack 期望在 3 秒内收到200确认投递失败或超时会重试最多重试 3 次所以“发出去但没回复”先看服务是否在 3 秒内回了200本地冷启动慢时第一次可能需要等一次重试。确认200之后 Slack 不再重试后续错误由 Mastra 处理默认行为是把 agent 运行失败的错误信息发到线程里。另外注意webhook 的200表示“已收到”不代表“已回答”两者要分开判断。访问控制与上线注意事项适配器本身没有用户白名单应用装好后工作区里任何人都可以通过私信或在它所在的频道 它来调用代理。Slack 用 signing secret 校验每个请求Mastra 对每条有效消息都会运行代理。主要控制手段是频道成员关系——机器人不在的频道收不到事件把机器人移出频道即可切断访问。需要更细粒度控制时每条请求的 request context 都带发送者的 Slack 用户 IDchannelkey 下可取userId等字段可以在 input processor 或工具里按用户 ID 放行/拒绝。共享频道Slack Connect会把外部工作区的人也放进会话等于把代理的工具和数据暴露给对方加机器人进共享频道前先确认工具和数据可以对外。部署到正式环境后把 Slack 应用设置里的两个 Request URL 都更新为生产 webhook URL隧道地址是临时的不能留在生产配置里。如果部署在 Vercel 这类 serverless 平台通道需要waitUntilVercel 从vercel/functions传入AWS Lambda 同理让函数在代理跑完前不被冻结并配置跨实例的共享 pub/sub如RedisStreamsPubSub来协调线程租约Cloudflare Workers 和 Netlify Functions 会自动检测不需要waitUntil。细节见 Channels 总览的 Serverless 一节。平台服务缩到空闲后Slack 的下一次事件会通过 webhook 把服务唤醒空闲后第一条回复会慢一些属于预期行为。完成上面验证私信有回复、频道 后线程内有回复即表示接入成功。要继续扩展可以按需配置 Channels reference 中列出的inlineMedia、threadContext、textFormat等选项或阅读 Channels 总览 了解工具审批卡片和自定义 action 处理。【免费下载链接】mastraMastra is the modern TypeScript framework for AI-powered applications and agents.项目地址: https://gitcode.com/GitHub_Trending/ma/mastra创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Backstage v1.41.0-next.1 预发布版本解读:配置键校验放宽、目录客户端数组过滤与动态插件修复全览

Backstage v1.41.0-next.1 预发布版本解读:配置键校验放宽、目录客户端数组过滤与动态插件修复全览

Backstage v1.41.0-next.1 预发布版本解读:配置键校验放宽、目录客户端数组过滤与动态插件修复全览 【免费下载链接】backstage Backstage is an open framework for building developer portals 项目地址: https://gitcode.com/GitHub_Trending/ba/backstage …

2026/9/13 21:39:14 阅读更多 →
FunASR 生态页证据刷新实战:测试先行(RED/GREEN)、双语内容更新与快照清单同步发布

FunASR 生态页证据刷新实战:测试先行(RED/GREEN)、双语内容更新与快照清单同步发布

FunASR 生态页证据刷新实战:测试先行(RED/GREEN)、双语内容更新与快照清单同步发布 【免费下载链接】FunASR Open-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipel…

2026/9/13 21:38:14 阅读更多 →
python 编码中为什么要写类型注解?

python 编码中为什么要写类型注解?

1、背景我们先谈谈为什么在编码过程中强烈推荐使用类型注解 ?这对于刚开始学习的人来讲是特别容易上手的, 其间的道理在于把计算机底层原理全方位地进行封装, 以及动态语言所具备的特性促成使用时特别舒适。然而这种所谓的“舒适”得有相应代价, 我们或许听说过一句…

2026/9/13 21:38:14 阅读更多 →

最新新闻

大数据生命周期监控系统架构与实践

大数据生命周期监控系统架构与实践

1. 大数据生命周期监控系统的核心价值在数据爆炸式增长的时代,企业每天产生的数据量呈指数级上升。根据IDC的预测,到2025年全球数据总量将达到175ZB。面对如此庞大的数据规模,传统的数据管理方式已经无法满足需求。我曾经参与过一个金融企业的…

2026/9/15 0:59:45 阅读更多 →
SPARK-SQL窗口函数PARTITION BY详解与应用

SPARK-SQL窗口函数PARTITION BY详解与应用

1. SPARK-SQL窗口函数基础回顾窗口函数是SQL中用于对数据集进行复杂分析计算的强大工具,它能够在保留原始数据行的同时,对特定分组内的数据进行聚合、排序和偏移量计算。在SPARK-SQL中,窗口函数的实现遵循标准SQL语法,但针对大数据…

2026/9/15 0:59:45 阅读更多 →
老年人心理健康关注要点 中国心理学会心理咨询师水平评价-心理咨询培训机构

老年人心理健康关注要点 中国心理学会心理咨询师水平评价-心理咨询培训机构

在当今社会,心理健康问题越来越受到人们的关注和重视。随着生活节奏的加快、社会竞争的加剧,以及人们精神需求的不断提升,心理咨询行业迎来了前所未有的发展机遇。老年人心理健康关注要点成为众多有志于从事心理咨询行业人士关心的核心议题。…

2026/9/15 0:59:45 阅读更多 →
AI出海合规实战:GDPR与知识产权的技术落地指南

AI出海合规实战:GDPR与知识产权的技术落地指南

1. 真实罚款现场:不是“被罚了”,而是“怎么被罚的”2023年6月,一家总部位于深圳的AI视觉分析公司收到欧盟数据保护机构(DPA)的正式通知——因在德国某零售客户部署的人脸情绪识别系统中,未向终端消费者提供…

2026/9/15 0:59:45 阅读更多 →
心理咨询师如何建立信任关系 中国心理学会心理咨询师水平评价-心理咨询培训机构

心理咨询师如何建立信任关系 中国心理学会心理咨询师水平评价-心理咨询培训机构

在当今社会,心理健康问题越来越受到人们的关注和重视。随着生活节奏的加快、社会竞争的加剧,以及人们精神需求的不断提升,心理咨询行业迎来了前所未有的发展机遇。心理咨询师如何建立信任关系成为众多有志于从事心理咨询行业人士关心的核心议…

2026/9/15 0:59:45 阅读更多 →
MATLAB多微网双层优化模型代码详解:从KKT转化到调度复现

MATLAB多微网双层优化模型代码详解:从KKT转化到调度复现

这个MATLAB多微网双层优化模型的代码包,我反复跑过好几遍。今天不打算绕圈子,直接对着代码一层一层说清楚它到底在做什么、为什么这么做、怎么改能复现你们自己的场景。如果你刚拿到一份这样的代码,打开main.m发现里面全是矩阵、循环和求解器…

2026/9/15 0:58:44 阅读更多 →

日新闻

Java高级技术:从语言特性到性能优化全解析

Java高级技术:从语言特性到性能优化全解析

1. Java高级技术概述Java作为一门成熟的编程语言,经过二十多年的发展已经形成了完整的生态系统。在企业级应用开发、大数据处理、移动开发等领域,Java都占据着重要地位。掌握Java高级技术不仅意味着能够编写更高效的代码,更代表着开发者能够解…

2026/9/15 0:00:23 阅读更多 →
C#与Halcon结合的工业视觉处理实战指南

C#与Halcon结合的工业视觉处理实战指南

1. 项目概述:C#与Halcon强强联合的视觉处理利器这个基于C#和Halcon的视觉处理Demo项目,是我在工业质检领域摸爬滚打多年后提炼出的实战精华。它完美融合了C#的界面开发优势与Halcon强大的图像处理能力,就像给视觉工程师配上了一把瑞士军刀。项…

2026/9/15 0:00:23 阅读更多 →
32路工业串口服务器的硬核选型指南:确定性、鲁棒性与协议下沉

32路工业串口服务器的硬核选型指南:确定性、鲁棒性与协议下沉

1. 为什么“32路复合型”不是营销话术,而是工业现场真实痛点的硬解你有没有遇到过这样的场景:在某大型能源站的PLC机柜里,十几台不同年代、不同品牌的温控仪、电表、气体分析仪、阀门控制器,全靠RS-485总线挂在一根线上&#xff0…

2026/9/15 0:00:23 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/14 5:45:49 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/14 0:52:26 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/14 0:06:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/14 17:35:10 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/14 16:59:29 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/14 5:45:14 阅读更多 →