本篇记录借助 go-slack 包创建 Golang Bot,从而通过 Golang 程序发送消息、文件到指定 Slack Channel,本文对设置过程做了记录。
设置 Slack 创建应用
创建用于测试 Slack Workspace
访问 slack 或 Slack App 作则面板,点击创建 Workspace
创建 Slack Appliaction
访问 Slack 网站:https://api.slack.com/apps/new,选择 “From scratch” 方式创建 APP
填写 App 名称,选择 Workspace。
而后选择 Bots 类型的应用。
进入后,再次点击按钮设置作用域和权限。
在 “Scopes” 处点击 “Add an OAuth Scope” 添加权限。
权限添加后,到左侧选项列表选择 “Install App” 添加 App 到 Channel。
选择 Channel 后,点击 “Install” 安装,而后出现 Settings 页面。
复制 “Bot User OAuth Token”,这个后续 Golang 程序中会用到。
接下来在 Channel 邀请 Bot 加入,本例的 Bot 名字是 “Aha”
另外我们需要获取到 Channel ID,点击 Channel,页面最底部的 ID 即 Channel ID,这个在后续 Golang 程序也会用到。
此时,我们拥有两个 Key,一个是 “Bot User OAuth Token”,另一个是 “Channel ID”
使用 Golang 发送消息、文件到 Slack
首先的准备工作,在项目目录创建文件 .env 文件,将 Key 写入。
SLACK_AUTH_TOKEN="your-auth-token"
SLACK_CHANNEL_ID="your-channel-id"
发送消息
package main
import (
"fmt"
"os"
"time"
"github.com/joho/godotenv"
"github.com/slack-go/slack"
)
func main() {
godotenv.Load(".env")
token := os.Getenv("SLACK_AUTH_TOKEN")
channelID := os.Getenv("SLACK_CHANNEL_ID")
client := slack.New(token, slack.OptionDebug(true))
attachment := slack.Attachment{
Pretext: "Super Bot Message",
Text: "some text\nsome text2\n",
Color: "4af030",
Fields: []slack.AttachmentField{
{
Title: "Date",
Value: time.Now().String(),
},
},
}
_, timestamp, err := client.PostMessage(
channelID,
slack.MsgOptionAttachments(attachment),
)
if err != nil {
panic(err)
}
fmt.Printf("Message sent at %s", timestamp)
}
发送文件
代码根目录创建一个文件 test.txt,填写内容 “你好,世界! 👋”
package main
import (
"fmt"
"github.com/joho/godotenv"
"github.com/slack-go/slack"
"os"
)
func main() {
godotenv.Load(".env")
token := os.Getenv("SLACK_AUTH_TOKEN")
channelID := os.Getenv("SLACK_CHANNEL_ID")
client := slack.New(token, slack.OptionDebug(true))
params := slack.FileUploadParameters{
Channels: []string{channelID},
Title: "The Title",
File: "test.txt",
}
file, err := client.UploadFile(params)
if err != nil {
panic(err)
}
fmt.Printf("Message sent title is %s", file.Title)
}
运行如上两段代码,结果如下。
更多示例可以参考 Go Slack 包的 Example:https://github.com/slack-go/slack/tree/master/examples