使用飞书群机器人发送消息

createh55个月前 (12-12)技术教程123

一、简单介绍

飞书群中的自定义机器人是通过webhook的形式发送消息到群聊中,比如我们使用可以发送告警消息,业务通知。

二、操作流程

1、在群聊中使用群机器人

进入群聊,打开会话设置,找到群机器人,并点击添加机器人。选择添加需要的机器人加入群聊。机器人添加到群聊后,群内成员即可在群聊中使用该机器人的功能。

2、在群聊中使用自定义机器人

为了使自定义机器人向群聊中即时推送来自外部系统的消息,你需要以 webhook 的形式向群聊发送消息。进入你的目标群组,打开会话设置,找到群机器人,并点击添加机器人。选择 Custom Bot(自定义机器人)加入群聊。

备注:详细操作步骤可以查看官方文档

三、安全设置

如果未妥善保管webhook地址,可能存在webhook地址泄露后,被恶意开发者调用,发送垃圾信息的风险,我们强烈建议对其进行安全设置。在此我们重点介绍签名校验以及进行编码

官方签名的算法:把 timestamp + "\n" + 密钥 当做签名字符串,使用 HmacSHA256 算法计算签名,再进行 Base64 编码。

签名算法代码示例(Python3)

# Python 3.9
import base64
import hmac
import time
from hashlib import sha256

timestamp = str(round(time.time()))
secret = "你的密钥"

key = f'{timestamp}\n{secret}'
key_enc = key.encode('utf-8')
msg = ""
msg_enc = msg.encode('utf-8')
hmac_code = hmac.new(key_enc, msg_enc, digestmod=sha256).digest()
sign = base64.b64encode(hmac_code).decode('utf-8')
print(timestamp)
print(sign)

签名算法代码示例(Python2)

# Python 2.7
import base64
import hmac
import time
from hashlib import sha256

timestamp = long(round(time.time()))
secret = "你的密钥"

key = '{}\n{}'.format(timestamp, secret)
key_enc = bytes(key).encode('utf-8')
msg = ""
msg_enc = bytes(msg).encode('utf-8')
hmac_code = hmac.new(key_enc, msg_enc, digestmod=sha256).digest()
sign = base64.b64encode(hmac_code).decode('utf-8')
print(timestamp)
print(sign)

签名算法代码示例(Go)

func GenSign(secret string, timestamp int64) (string, error) {
	stringToSign := fmt.Sprintf("%v", timestamp) + "\n" + secret

	var data []byte
	h := hmac.New(sha256.New, []byte(stringToSign))
	_, err := h.Write(data)
	if err != nil {
		return "", err
	}

	signature := base64.StdEncoding.EncodeToString(h.Sum(nil))
	return signature, nil
}

签名算法代码示例(PHP)

function getSign(){
	$timestamp = time();
	$secret = '你的密钥';
	$string = "{$timestamp}\n{$secret}";
	return base64_encode(hash_hmac('sha256',"", $string,true));
}

PHP详细代码可以查看 https://github.com/yuncopy/feishu-robot-msg

相关文章

26.app后端怎么架设推送服务

推送服务已经是app的标配了。架设推送服务,除了可以使用第三方服务商外,也有大量的开源技术可以选择。现在推送主要分两块,android推送和ios推送,在下面分别论述:1.Android推送Andro...