SlackProvider
SlackProvider 是將 Agent 連接至 Slack 的受管理方式。在 Mastra.channels 上註冊後,它會透過 Manifest API 佈建 Slack 應用程式、運行 OAuth 安裝流程、輪替設定 token,並將 Slack 事件路由至你的 Agent。如果你希望由 Mastra 負責建立及安裝應用程式,請使用此方式。如要採用較底層的方式,自行建立 Slack 應用程式並設定 scope 及 webhook,請改為在 Agent 的 channels.adapters 上使用 createSlackAdapter。
使用範例使用範例 的直接連結
在 Mastra 建構函數上註冊 Provider。Refresh token 只可使用一次,並會在啟動時輪替。產生的 access token 會持久儲存至 Mastra.storage。
import { Mastra } from '@mastra/core/mastra'
import { SlackProvider } from '@mastra/slack'
export const mastra = new Mastra({
storage,
channels: {
slack: new SlackProvider({
refreshToken: process.env.SLACK_APP_CONFIG_REFRESH_TOKEN,
baseUrl: process.env.MASTRA_BASE_URL,
}),
},
})
如果建構時未能取得憑證(例如透過編輯器 UI 輸入或從 vault 載入),可在不提供憑證的情況下建立 Provider,並於稍後呼叫 configure():
const slack = new SlackProvider()
await slack.configure({
refreshToken: process.env.SLACK_APP_CONFIG_REFRESH_TOKEN,
})
建構函數參數建構函數參數 的直接連結
SlackProviderConfig 結合了 Slack 專用欄位、Slack adapter 覆寫選項(toolDisplay、streaming、typingStatus),以及轉交給每個已連接 Agent 的精選 ChannelConfig 選項子集(例如 handlers、inlineMedia 及 state)。所有欄位均為選填。
refreshToken?:
configure() 提供。如省略,Provider 會以未設定狀態啟動,直至呼叫 configure() 或從儲存空間載入 token 前都無法建立應用程式。請在 api.slack.com/apps 的「Your App Configuration Tokens」下產生此 token。token?:
refreshToken 輪替至新的 token。baseUrl?:
connect() 建立應用程式時必須提供。亦可透過 setBaseUrl() 設定,或從 Mastra 伺服器設定中自動偵測。本機開發時,請使用 cloudflared 等隧道。encryptionKey?:
MASTRA_ENCRYPTION_KEY 環境變數設定。如省略,機密資料會以純文字儲存(不建議在生產環境使用)。storage?:
ChannelsStorage。如果沒有可用的持久儲存空間,便會拋出錯誤。redirectPath?:
onInstall?:
streaming?:
{ updateIntervalMs } 可自訂發佈及編輯的間隔,傳入 false 則會緩衝文字直至步驟完成。停用串流後,toolDisplay 只可使用靜態模式。textFormat?:
'markdown'(預設值)會以 markdown 發佈回覆,讓 Slack 原生呈現粗體文字、連結及表格。'plain' 會發佈純文字,適用於已提示輸出 Slack mrkdwn 的 Agent。此選項適用於緩衝回覆(streaming: false)及串流後備方案;原生串流一律使用 markdown。toolDisplay?:
'cards'、'text'、'timeline'、'grouped'、'hidden' 或函數。'hidden' 會完全隱藏 Tool 呼叫及結果。'timeline' 及 'grouped' 需要串流。使用 streaming: false 時只可使用靜態模式,而預設值為 'cards'。typingStatus?:
false 可停用,亦可傳入函數,為每個串流區塊傳回自訂狀態文字(傳回 undefined 則會使用該區塊的預設值)。waitUntil?:
ExecutionContext 的無伺服器運行環境(Vercel、AWS Lambda)中必須提供。否則,調用會在 200 確認回應後凍結,並在運行途中終止。請從平台 SDK(例如 @vercel/functions)傳入未包裝的 waitUntil(promise)。Cloudflare Workers 及 Netlify 使用者通常不需要此選項。resolveWaitUntil?:
waitUntil,而 core 的預設行為未涵蓋該情況時,從請求的 Hono Context 解析 waitUntil。解析次序:waitUntil → resolveWaitUntil → core 預設值。handlers?:
onDirectMessage、onMention)。此設定會轉交給透過此 Provider 連接之每個 Agent 的 AgentChannels。inlineMedia?:
inlineLinks?:
threadContext?:
tools?:
AgentChannels.getTools() 公開 channel Tool(add_reaction、remove_reaction)。這些 Tool 絕不會自動加入 Agent;如要使用,請透過 tools: { ...channels.getTools() } 明確傳入。state?:
MastraStateAdapter,讓訂閱在重新啟動後仍然保留。chatOptions?:
logger?:
SlackAdapter 的 logger。預設使用 adapter 的 ConsoleLogger。方法方法 的直接連結
Agent 連接Agent 連接 的直接連結
connect(agentId, options?)connectagentid-options 的直接連結
透過 Manifest API 為 Agent 建立新的 Slack 應用程式,並傳回包含授權 URL 的 OAuth 結果,以便將使用者重新導向該 URL。必須設定 baseUrl。如果 Agent 已有待處理的安裝項目,則會傳回其現有授權 URL,而不會建立重複的應用程式。
const result = await slack.connect('support-agent', {
name: 'Support Bot',
})
// Redirect the user to result.authorizationUrl to install the app
傳回:Promise<ChannelConnectResult>
interface ChannelConnectResult {
type: 'oauth'
installationId: string
authorizationUrl: string
}
SlackConnectOptions 可序列化,並可為已儲存的 Agent 保存:
name?:
description?:
iconUrl?:
manifest?:
redirectUrl?:
redirectPath 或 /。disconnect(agentId)disconnectagentid 的直接連結
刪除 Agent 的 Slack 應用程式,並從儲存空間移除安裝項目,以中斷 Agent 與 Slack 的連接。
await slack.disconnect('support-agent')
傳回:Promise<void>
getInstallation(agentId)getinstallationagentid 的直接連結
傳回 Agent 的 Slack 安裝項目;如不存在,則傳回 null。
const installation = await slack.getInstallation('support-agent')
傳回:Promise<SlackInstallation | null>
listInstallations()listinstallations 的直接連結
列出所有 Slack 安裝項目(只包含公開資料),包括有效及待處理的項目。
const installations = await slack.listInstallations()
傳回:Promise<ChannelInstallationInfo[]>
設定設定 的直接連結
configure(credentials)configurecredentials 的直接連結
在運行期間提供或清除 Slack App Configuration 憑證。當建構時無法取得憑證,便可使用此方法。傳入 null 可清除憑證並刪除已儲存的 token。
// Provide credentials (persists to storage immediately)
await slack.configure({ refreshToken: 'xoxe-1-...' })
// Clear credentials and stored tokens
await slack.configure(null)
傳回:Promise<void>
setBaseUrl(baseUrl)setbaseurlbaseurl 的直接連結
設定用於 webhook 及 OAuth callback 的公開基礎 URL。當建構時仍未知道 URL,且無法從伺服器設定中自動偵測時,可使用此方法。
slack.setBaseUrl('https://abc123.trycloudflare.com')
initialize()initialize 的直接連結
為儲存空間中的每個有效安裝項目重新建立 SlackAdapter,並將 AgentChannels 注入對應的 Agent,讓它在啟動時接收 Slack 事件。此方法不會自動佈建新的應用程式;請使用 connect() 建立。Mastra 會自動呼叫此方法,因此你很少需要直接呼叫。
await slack.initialize()
傳回:Promise<void>
預設 manifest預設 manifest 的直接連結
當 connect() 建立 Slack 應用程式時,所產生的 manifest 會要求一組預設 bot scope 及事件訂閱。你可透過 connect() 的 manifest 選項覆寫這些設定。
| 預設 bot scope | 預設 bot 事件 |
|---|---|
chat:write | app_mention |
chat:write.public | message.channels |
im:write | message.groups |
channels:history | message.im |
channels:read | message.mpim |
groups:history | |
groups:read | |
im:history | |
im:read | |
mpim:history | |
mpim:read | |
app_mentions:read | |
users:read | |
reactions:write | |
files:read | |
assistant:write |
存取 Provider存取 Provider 的直接連結
透過具類型的 channels getter 存取已註冊的 Provider,並以註冊時所用的 id 作為鍵:
const result = await mastra.channels.slack.connect('support-agent')
如果只有在運行期間才知道鍵,可改為以字串 id 查找,並傳入具體類型:
const slack = mastra.getChannelProvider<SlackProvider>('slack')
const result = await slack.connect('support-agent')
儲存空間要求儲存空間要求 的直接連結
SlackProvider 要求 Mastra 提供持久儲存空間,以加密及持久儲存安裝項目和輪替中的設定 token。如果沒有可用的持久儲存空間,亦未傳入自訂 storage,建構函數便會拋出錯誤。
相關內容相關內容 的直接連結
- ChannelProvider:
SlackProvider所實作的介面 - Channels:概念、平台設定及
createSlackAdapter方式 - Channels 參考:
Agent建構函數的channels設定