Golang 创建 Slack Bot 发送消息及文件

Published: 2023-01-29

Tags: Golang

本文总阅读量

本篇记录借助 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

参考