• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Go开发接口调用飞书api实现发送群消息

武飞扬头像
何yanzu
帮助1

之前项目都是使用qq来发送告警消息, 最近发现qq消息老是会漏发,

于是现在打算将告警替换成飞书群机器人来处理

一、前置准备

在开始实现接口调用之前,需要在 PC 端通过浏览器打开飞书开放平台 https://open.feishu.cn/ 中的「开发文档」页面,然后选择「API 文档」,并登陆开发者账号。接下来,我们需要创建自己的「应用」,并开启消息群发功能:

  1. 创建应用

进入开放平台首页,点击「进入控制台」,在「应用列表」中点击「创建应用」:

在创建新应用的过程中,需要输入应用的名称和描述,并选择该应用可以使用的范围。为了完成此次开发,我们需要选择「应用市场」和「通讯录」权限:

应用创建完成后,在开放平台「我的应用」列表中选择该应用,进入应用详情页。为了能够结束群发消息功能,需要在「添加权限」下添加「发送自定义机器人消息」:

  1. 开启消息群发功能

在「我的应用」列表中点击应用名称进入详情页,选择「应用设置」,勾选「消息」里的三个选项:

现在我们已经完成了应用的创建和消息群发功能的开启,接下来是 Go 代码的编写。

二、使用 go-curl 调用接口

在使用 Go 调用接口之前,需要在电脑(或服务器)上已经安装好了 Go 环境,并且安装 go-curl 包,用于 HTTP 请求处理:

package main

import (
    "fmt"
    "github.com/astaxie/beego/httplib"
)

type GroupMessage struct {
    MsgType string `json:"msg_type"`
    Content struct {
        Text string `json:"text"`
    } `json:"content"`
}

func main() {
    opt := httplib.Options{}
    opt.URL = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx"
    opt.Method = "POST"
    opt.Header = make(map[string]string)
    opt.Header["Content-Type"] = "application/json"

    msg := GroupMessage{
        MsgType: "text",
        Content: struct{ Text string }{Text: "hello, world"},
    }

    opt.JSONBody(msg)

    ret := GroupMessage{}

    if r, err := opt.DoRequest(); err != nil {
        fmt.Printf("Error: %s
", err.Error())
    } else {
        fmt.Println("response: ", r)
    }
}

代码解析: 首先定义了 GroupMessage 结构体作为请求的消息体。

然后使用 beego/httplib 包创建了发送请求的实例,填写了请求的 URL、请求方式、Http 请求头以及请求的消息体。

在发送消息前,把消息体设置为刚刚定义的 msg 变量。

进行 HTTP 请求的时候,使用 DoRequest() 方法发起实际的网络请求,并将返回的消息进行解析,存到结构体 ret 中。其中需要注意到的是,在实际生产中 URL 中的 xxxx 将会被替换成机器人的唯一标识符。

三、接口调用可能会遇到的问题

  1. URL 不正确:在开发过程中,URL不正确是一个常见的问题。这通常是由于复制粘贴时将地址复制成了另一个地址造成的。因此,需要对 URL 进行仔细的验证。
  2. 证书验证不通过:在发送 HTTPS 请求时,需要验证证书的有效性。如果我们使用了 self-signed 证书或无法验证的证书,就会遇到证书验证失败的问题。为了避免这种麻烦,可以在创建发送请求实例的时候通过 httplib.Setting(....) 方法关闭 SSL 验证:
import "github.com/astaxie/beego/httplib"
    opt := httplib.Options{}
    opt.Settings(httplib.BeegoUtilSetting{
        InsecureSkipVerify: true,
    })

这种方法的缺点是降低了安全性,因此只在开发时测试时使用。

  1. 编码问题:在调用接口时,json 编码是必须的,但是其中包含中文时需要特别小心,中文会造成编码问题,必须进行特殊的处理。解决方法是对内容进行处理后再发送:
msg := GroupMessage{
        MsgType: "text",
        Content: struct{ Text string }{Text: url.QueryEscape("你好,世界")},
    }

    opt.JSONBody(msg)

在构造发送请求时,我们使用了 url.QueryEscape() 对内容进行编码处理。

四、总结

在本文中,我们简要介绍了使用 Go 调用飞书 API 发送群消息的过程,并演示了开发过程中可能会遇到的问题。虽然从零开始写代码会比较困难,但飞书 API 文档非常完整,所以可以从中了解到许多有用的技巧和知识点。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhjcage
系列文章
更多 icon
同类精品
更多 icon
继续加载