Skip to content

go-lark/lark-gin

Repository files navigation

Lark Gin

build codecov

Gin Middlewares for go-lark.

Middlewares

  • LarkChallengeHandler: URL challenge for general events and card callback
  • LarkEventHandler: Incoming events (schema 2.0)
  • LarkCardHandler: Card callback
  • LarkMessageHandler (Legacy): Incoming message event (schema 1.0)

Installation

go get -u github.com/go-lark/lark-gin/v2

Usage

package 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

Card Callback

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 {
    }
})

Token Verification

middleware.WithTokenVerfication("yourVerificationToken")

Encryption

Notice: encryption is not available for card callback, due to restriction from Lark Open Platform.

middleware.WithEncryption("yourEncryptionKey")

URL Binding

Only bind specific URL for events:

middleware.BindURLPrefix("/abc")

Logger

lark-gin implements and uses lark.LogWrapper. You may set your own logger:

middleware.SetLogger(yourOwnLogger)

About

Copyright (c) go-lark Developers, 2018-2025.

About

Gin Middleware for go-lark

Resources

License

Stars

Watchers

Forks

Languages