Gin Middlewares for go-lark.
LarkChallengeHandler: URL challenge for general events and card callbackLarkEventHandler: Incoming events (schema 2.0)LarkCardHandler: Card callback(Legacy): Incoming message event (schema 1.0)LarkMessageHandler
go get -u github.com/go-lark/lark-gin/v2package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/go-lark/lark/v2"
larkgin "github.com/go-lark/lark-gin/v2"
)
func main() {
r := gin.Default()
middleware := larkgin.NewLarkMiddleware()
// lark server challenge
r.Use(middleware.LarkChallengeHandler())
// all supported events
eventGroup := r.Group("/event")
{
eventGroup.Use(middleware.LarkEventHandler())
eventGroup.POST("/", func(c *gin.Context) {
if evt, ok := middleware.GetEvent(e); ok { // => returns `*lark.EventV2`
if evt.Header.EventType == lark.EventTypeMessageReceived {
// message received event
// you may also parse other events
if msg, err := evt.GetMessageReceived(); err == nil {
fmt.Println(msg.Message.Content)
}
}
}
})
}
// card callback only
cardGroup := r.Group("/card")
{
cardGroup.Use(middleware.LarkCardHandler())
cardGroup.POST("/callback", func(c *gin.Context) {
if card, ok := middleware.GetCardCallback(c); ok { // => returns `*lark.EventCardCallback`
}
})
}
r.Run(":8080")
}Example: examples/gin-middleware
We may also setup callback for card actions (e.g. button). The URL challenge part is the same.
We may use LarkCardHandler to handle the actions:
r.Use(middleware.LarkCardHandler())
r.POST("/callback", func(c *gin.Context) {
if card, ok := middleware.GetCardCallback(c); ok {
}
})middleware.WithTokenVerfication("yourVerificationToken")Notice: encryption is not available for card callback, due to restriction from Lark Open Platform.
middleware.WithEncryption("yourEncryptionKey")Only bind specific URL for events:
middleware.BindURLPrefix("/abc")lark-gin implements and uses lark.LogWrapper. You may set your own logger:
middleware.SetLogger(yourOwnLogger)Copyright (c) go-lark Developers, 2018-2025.