本文演示Dify api /Deepseek/接入飞书机器人
准备工作
开通了接收消息权限的飞书机器人,例如我希望用户跟飞书机器人私聊,就需要开通这个权限:读取用户发给机器人的单聊消息
准备好飞书机器人的API key 和Secret
deepseek-v3的api key+secret:这里获取 ,一开始有10元的免费额度,趁能充多充点,经常不让充值。
自己部署一下dify,推荐使用docker-compose方式,这个有很多教程就不赘述了
打开飞书开发者后台
-
创建企业自用应用,本文以创建好的 dify消息测试为例

-
等待企业管理员审核通过后打开应用 添加机器人

-
开通应用权限应用和用户权限都需要开 (方便测试我把消息组全部已开通-可能不需要这么多)
4. 新建版本发布,初次创建版本需要飞书管理员审批,按确认就好

搭建服务端长链接飞书机器人通过长连接获取用户私聊发的消息
我们使用长连接的方式接收用户消息,需要在飞书开发者后台中配置一下应用,见 配置回调订阅方式 代码如下:
package agent_v1
import (
"context"
"encoding/json"
"errors"
"fmt"
lark "github.com/larksuite/oapi-sdk-go/v3"
larkcore "github.com/larksuite/oapi-sdk-go/v3/core"
larkevent "github.com/larksuite/oapi-sdk-go/v3/event"
"github.com/larksuite/oapi-sdk-go/v3/event/dispatcher"
larkim "github.com/larksuite/oapi-sdk-go/v3/service/im/v1"
larkws "github.com/larksuite/oapi-sdk-go/v3/ws"
"log"
"regexp"
"strings"
)
var sent map[string]struct{
} // 这里简单去个重 实际使用要自己再写去重部分
// 飞书消息过来Content字段值是{\"text\":\"早上好~\"}这样的,需要再解析一下
type Text struct {
Text string `json:"text"`
}
// 飞书应用信息
var AppID = ""
var AppSecret = ""
// cleanMessage 去除消息中的特殊字符和前缀
func cleanMessage(message string) string {
// 使用正则表达式匹配 @xxx 格式的内容
re := regexp.MustCompile(`@\S+\s*`)
// 全局替换所有匹配到的 @xxx 格式的内容
cleanedMessage := re.ReplaceAllString(message, "")
return strings.TrimSpace(cleanedMessage)
}
// Callback 处理接收到用户消息的事件
func Callback() {
sent = make(map[string]struct{
})
// 注册事件回调,OnP2MessageReceiveV1 为接收消息 v2.0;OnCustomizedEvent 内的 message 为接收消息 v1.0。NewEventDispatcher()里的两个参数都填空字符串
eventHandler := dispatcher.NewEventDispatcher("", "").
OnP2ChatAccessEventBotP2pChatEnteredV1(func(ctx context.Context, event *larkim.P2ChatAccessEventBotP2pChatEnteredV1) error {
fmt.Printf("[ OnP2ChatAccessEventBotP2pChatEnteredV1 access ], data: %s\n", larkcore.Prettify(event))
return nil
}).
OnP2MessageReceiveV1(func(ctx context.Context, event *larkim.P2MessageReceiveV1) error {
msgId := *event.Event.Message.MessageId
if _, ok := sent[msgId]; ok {
return nil
} else {
sent[msgId] = struct{
}{
}
}
fmt.Printf("接收飞书消息 data: %s\n", larkcore.Prettify(event))
fmt.Println("接收飞书内容", *event.Event.Message.Content) // content中就是用户发过来的消息内容
var text Text
err := json.Unmarshal([]byte(*event.Event.Message.Content), &text)
if err != nil {
return err
}
fmt.Println("飞书内容解析:", text.Text)
// 这里可以把用户输入发给deepseek或者dify并接收其响应,具体实现后面讲
/*resp, e := CallDeepSeekAPI(text.Text)
if e != nil {
return e
}*/
textContent := cleanMessage(text.Text)
if *event.Event.Message.ChatType == "group" && text.Text == textContent {
log.Printf("群里请@对应机器人")
return errors.New("群里请@对应机器人")
}
resp, err :=

5296

被折叠的 条评论
为什么被折叠?



