Skip to content

常见问题

本文档汇集使用服务端 SDK 可能出现的常见问题与解决方案。

API 调试台内获取 tenant_access_token/app_access_token 的示例代码,为什么提示找不到方法?

回答:

服务端 SDK 内已经封装了获取和缓存 tenant_access_token/app_access_token 的逻辑,在构建 API Client 时传入应用的 App ID 和 App Secret 即可,不需要手动获取 Token。

API 调试台内成功调用 API 后,使用示例代码调用失败是什么原因?

回答:

API 调试台中的示例代码是根据调试台内设置的参数自动生成的,如果存在代码问题,请先在调试台内配置好参数再使用代码,同时注意应用的 App ID 和 App Secret 需要手动配置。

应用的 App ID 和 App Secret 需登录开发者后台,在应用详情页的 凭证与基础信息 > 应用凭证 区域获取。

如何查看某个接口在 SDK 是否支持?

回答

你可以直接查询接口文档,例如发送消息,有如下图所示的 尝试一下 按钮表示支持(不支持的 API 没有该按钮)。

点击按钮后可以调试 API、查阅示例代码。

SDK 不支持直接调用的接口、历史版本的接口,如何才能调用?

回答:

不同语言的 SDK 均提供了原生 API 调用方式,使用该方式可以通过传入 API 的 HTTP Method、URL 以及参数来调用。具体操作参见各 SDK 使用指南。

使用下载导出文件接口时,文件名包含特殊字符导致下载报错如何解决?

回答:

系统逻辑存在特殊字符校验,你可以先使用 SDK 提供的原生模式调用 API。

详情参考:

如何配置私有部署的飞书服务器或者代理服务器连接?

回答:

Java 示例代码以及配置说明,参考以下代码注释。

java
import com.lark.oapi.Client;
import com.lark.oapi.core.cache.LocalCache;
import com.lark.oapi.core.enums.BaseUrlEnum;
import com.lark.oapi.core.httpclient.OkHttpTransport;
import com.lark.oapi.core.response.RawResponse;
import com.lark.oapi.core.token.AccessTokenType;
import com.lark.oapi.okhttp.OkHttpClient;    
import java.net.Proxy;
import java.util.concurrent.TimeUnit;
@Test
void init() {
    Proxy proxy = Proxy.NO_PROXY;   // 自定义代理服务器
    Client client = Client.newBuilder("appId", "appSecret")
        .openBaseUrl(BaseUrlEnum.FeiShu)  // 设置域名,默认为飞书,支持重载String,设置私有部署飞书服务器
        .httpTransport(new OkHttpTransport(
            new OkHttpClient().newBuilder()
                .readTimeout(3, TimeUnit.MINUTES)  // 设置超时时间
                .callTimeout(3, TimeUnit.MINUTES)  // 设置超时时间
                .proxy(proxy)   // 设置使用代理服务器访问飞书服务器
                .build()
        ))
        .tokenCache(LocalCache.getInstance())  // 默认实现,本地带时间过期的缓存;可以自己实现ICache的接口,例如Redis缓存等
        .logReqAtDebug(true)  // 在 debug 模式下会打印 http 请求和响应的 headers,body 等信息。 
        .build();
}

调用接口失败,有 code 和 logid 该如何排查?

回答:

  • 方式一:打开飞书开发文档,在搜索栏输入错误码(code)或者日志 ID(logid)查询。

  • 方式二:如果问题始终无法解决,请咨询技术支持

接收事件时为什么重复收到事件体数据?

回答:

开放平台推送事件数据后,你的服务器需要在 3 秒内以 HTTP 200 状态码进行响应,否则开放平台认为本次推送失败,并会重新推送事件数据。详情参见事件推送周期和频次

使用 TenantAccessToken/AppAccessToken 的示例代码获取的 Data 为NULL

回答:

该接口无 data 参数,且无需手动获取 TenantAccessToken,SDK 已做封装,直接调用业务接口即可。

调用接口的时候,出现 unsupported protocol scheme 错误。

回答:

该错误为请求使用了不被支持的协议方案,常见原因是配置 BaseUrl 参数时,未添加https://协议头

dial tcp 23.12.147.37:443: i/o timeout错误

回答:

非字节租户如果出现这个问题,通常是因为公司设有防火墙,需要将 open.feishu.cn 这个域名加白

URL 包含 “?” 或 “#” 后缀时,如何设置重定向 URL?

回答:开发者后台的应用重定向 URL 列表内需要包含完整路径,如果路径后有 ? 或者 # 后缀,可以不包含在重定向 URL 中。 原因说明:在应用的重定向 URL 列表内配置的 URL,?# 后缀不会生效。例如,http://www.example.com/#/index 作为重定向 URL 时,实际生效的 URL 为 http://www.example.com场景示例

  • 调用获取授权登录授权码接口时,redirect_uri 参数设置为 http://www.example.com/#/index,对应在开发者后台的应用重定向 URL 列表中添加 http://www.example.com 即可。
  • 如果是客户端调用 requestAccess 获取临时登录凭证 code,建议在当前页面调用 window.location.href.split('?')[0].split('#')[0] 来获取重定向 URL。

“获取单个审批实例详情”接口在调试台可以正常返回,但是用 SDK 代码出现 approval code not found 错误

回答:

该问题多因用户在海外调试台调试接口导致:海外调试台默认使用域名 open.larksuite.com 发起请求,但 SDK 代码中 BaseUrl 默认配置为 open.feishu.cn,二者域名不匹配引发问题。

切换域名的方式如下:

GO:调用服务端 API构建API Client 模块

Java:调用服务端 API构建API Client 模块

Python:调用服务端 API构建API Client 模块

将调试台的示例代码复制到本地后,发现报错

示例

image.png

可能的原因

  1. SDK 版本较老,无法支持新的接口
  2. 示例代码有误,可以在 SDK 反馈群 @群主 反馈

解决方式

  1. SDK 较老,则升级 SDK 的版本
  2. 示例代码有误,则先采用原生的方式调用,各个语言原生方式调用如下:

内容来源:飞书开放平台 · 自动爬取整理