
var client = lark.NewClient("appID", "appSecret", // 默认配置为自建应用
// lark.WithMarketplaceApp(), // 可设置为商店应用
lark.WithLogLevel(larkcore.LogLevelDebug),
lark.WithReqTimeout(3*time.Second),
lark.WithEnableTokenCache(true),
lark.WithHelpdeskCredential("id", "token"),
lark.WithHttpClient(http.DefaultClient))| 配置选项 | 配置方式 | 是否必填 | 描述 |
|---|---|---|---|
| app_id 和 app_secret | lark.NewClient("appID", "appSecret") | 是 | 应用凭证 App ID 和 App Secret。可在开发者后台 > 应用详情页 > 凭证与基础信息 > 应用凭证 区域获取。![]() |
| AppType | lark.WithMarketplaceApp() | 否 | 设置 App 类型为商店应用。如果你是 ISV 开发者,则必须设置该选项。关于商店应用的开发指南,可参见 ISV(商店应用)开发指南。 |
| LogLevel | lark.WithLogLevel(logLevel larkcore.LogLevel) | 否 | 设置 API Client 的日志输出级别,枚举值如下:LogLevelDebugLogLevelInfo(默认值)LogLevelWarnLogLevelError |
| Logger | lark.WithLogger(logger larkcore.Logger) | 否 | 设置API Client 的日志器,默认日志输出到标准输出。你可通过实现下面的 Logger 接口,来设置自定义的日志器。type Logger interface { Debug(context.Context, ...interface{}) Info(context.Context, ...interface{}) Warn(context.Context, ...interface{}) Error(context.Context, ...interface{})} |
| LogReqAtDebug | lark.WithLogReqAtDebug(printReqRespLog bool) | 否 | 设置是否开启 HTTP 请求参数和响应参数的日志打印开关。开启后,在 debug 模式下会打印 HTTP 请求和响应的 headers、body 等信息。提示:在排查问题时开启该选项,有利于问题的排查。 |
| BaseUrl | lark.WithOpenBaseUrl(baseUrl string) | 否 | 设置飞书域名,默认为飞书域名 FeishuBaseUrl。可用域名如下:// 飞书域名var FeishuBaseUrl = "https://open.feishu.cn"// Lark域名var LarkBaseUrl = "https://open.larksuite.com" |
| TokenCache | lark.WithTokenCache(cache larkcore.Cache) | 否 | 设置 Token 缓存器,用于缓存 Token 和 appTIcket,默认实现为内存。如果你需要定制 Token 缓存器,则需实现如下 Cache 接口。type Cache interface { Set(ctx context.Context, key string, value string, expireTime time.Duration) error Get(ctx context.Context, key string) (string, error)}注意:对于商店应用的 ISV 开发者而言,如果需要 SDK 来缓存 appTicket,则需要实现该接口,以提供分布式缓存。 |
| EnableTokenCache | lark.WithEnableTokenCache(enableTokenCache bool) | 否 | 设置是否开启 TenantAccessToken (应用访问凭证)的自动获取与缓存。默认开启,如需关闭可设置为 false。 |
| HelpDeskId、HelpDeskToken | lark.WithHelpdeskCredential(helpdeskID, helpdeskToken string) | 否 | 服务台的 ID 和 token。仅在调用服务台业务的 API 时需要配置。可在服务台管理后台设置中心 > API 凭证 处获取,详情参见 服务台接入指南。注意:服务台的 ID、Token 只有服务台创建者可以查看到。![]() |
| ReqTimeout | lark.WithReqTimeout(time time.Duration) | 否 | 设置 SDK 内置的 Http Client 的请求超时时间。默认为 0 表示永不超时。 |
| HttpClient | lark.WithHttpClient(httpClient larkcore.HttpClient) | 否 | 设置 Http Client,用于替换 SDK 提供的默认实现。你可通过实现下面的 HttpClient 接口来设置自定义的 HttpClient。type HttpClient interface { Do(*http.Request) (*http.Response, error)} |
var client = lark.NewClient("appID", "appSecret") // 默认配置为自建应用lark.WithMarketplaceApp 方法指定 AppType 为商店应用。了解更多可参考 ISV(商店应用)开发指南。var client = lark.NewClient("appID", "appSecret",lark.WithMarketplaceApp()) // 设置为商店应用
https://open.feishu.cn/open-apis/docx/v1/documents,其中 docx 为业务域,v1 为版本,documents 为资源,相应的创建方法为 client.Docx.V1.Document.Create()。
package main
import ( // 导入接口所属的业务资源包
"context"
"fmt"
"github.com/larksuite/oapi-sdk-go/v3"
"github.com/larksuite/oapi-sdk-go/v3/core"
"github.com/larksuite/oapi-sdk-go/v3/service/docx/v1"
)
func main() {
// 创建 API Client。你需在此传入你的应用的实际 App ID 和 App Secret
client := lark.NewClient("appID", "appSecret")
// 发起创建文档的请求
resp, err := client.Docx.Document.Create(context.Background(), larkdocx.NewCreateDocumentReqBuilder().
Body(larkdocx.NewCreateDocumentReqBodyBuilder().
FolderToken(""). // 文件夹 token,传空表示在根目录创建文档
Title("title"). // 文档标题
Build()).
Build())
//处理错误
if err != nil {
// 处理 err
return
}
// 服务端错误处理
if !resp.Success() {
fmt.Println(resp.Code, resp.Msg, resp.LogId())
return
}
// 业务数据处理
fmt.Println(larkcore.Prettify(resp.Data))
}| 配置选项 | 配置方式 | 描述 |
|---|---|---|
Header | larkcore.WithHeaders(header http.Header) | 设置自定义请求头。在发起请求时,这些请求头会被透传到飞书开放平台服务端。 |
UserAccessToken | larkcore.WithUserAccessToken(userAccessToken string) | 设置用户 token,当你需要以用户身份发起 API 调用时,需要设置该选项的值。 |
TenantAccessToken | larkcore.WithTenantAccessToken(tenantAccessToken string) | 设置企业或组织 token,当你自己维护企业或组织 token 时(即创建 client 时 EnableTokenCache 设置为 false),需通过该选项传递企业或组织 token。 |
TenantKey | larkcore.WithTenantKey(tenantKey string) | 设置企业或组织 key,当你开发商店应用时,必须设置该选项。 |
RequestId | larkcore.WithRequestId(requestId string) | 设置请求 ID,作为请求的唯一标识。该 ID 会被透传到飞书开放平台服务端。 |
NeedHelpDeskAuth | larkcore.WithNeedHelpDeskAuth() | 设置添加服务台 helpdesk 的认证 header。 |
import (
"context"
"fmt"
"net/http"
"github.com/larksuite/oapi-sdk-go/v3"
"github.com/larksuite/oapi-sdk-go/v3/core"
"github.com/larksuite/oapi-sdk-go/v3/service/docx/v1"
)
func main() {
// 创建 API Client。你需在此传入你的应用的实际 App ID 和 App Secret
client := lark.NewClient("appID", "appSecret")
// 设置自定义请求头
header := make(http.Header)
header.Add("k1", "v1")
header.Add("k2", "v2")
// 发起请求
resp, err := client.Docx.Document.Create(context.Background(), larkdocx.NewCreateDocumentReqBuilder().
Body(larkdocx.NewCreateDocumentReqBodyBuilder().
FolderToken("token").
Title("title").
Build(),
).
Build(),
larkcore.WithHeaders(header), // 设置自定义 headers
)
//处理错误
if err != nil {
// 处理 err
return
}
// 服务端错误处理
if !resp.Success() {
fmt.Println(resp.Code, resp.Msg, resp.LogId())
return
}
// 业务数据处理
fmt.Println(larkcore.Prettify(resp.Data))
}{
Document: {
DocumentId: "IPI4dqnbfoPxL3xhAEhcjXabcef",
RevisionId: 1,
Title: "title"
}
}import (
"context"
"fmt"
"github.com/larksuite/oapi-sdk-go/v3"
"github.com/larksuite/oapi-sdk-go/v3/core"
"net/http"
"os"
)
func main() {
// 创建 API Client。你需在此传入你的应用的实际 App ID 和 App Secret
var appID, appSecret = os.Getenv("APP_ID"), os.Getenv("APP_SECRET")
var cli = lark.NewClient(appID, appSecret)
// 发起 API 请求
resp, err := cli.Do(context.Background(),
&larkcore.ApiReq{
HttpMethod: http.MethodGet,
ApiPath: "https://open.feishu.cn/open-apis/contact/v3/users/:user_id",
Body: nil,
QueryParams: larkcore.QueryParams{"user_id_type": []string{"open_id"}},
PathParams: larkcore.PathParams{"user_id": "ou_c245b0a7dff2725cfa2fb104f8b48b9d"},
SupportedAccessTokenTypes: []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser},
},
)
// 错误处理
if err != nil {
fmt.Println(err)
return
}
// 获取请求 ID
fmt.Println(resp.LogId())
// 处理请求结果
fmt.Println(resp.StatusCode) // http status code
fmt.Println(resp.Header) // http header
fmt.Println(string(resp.RawBody)) // http body,二进制数据
}
