# 常见问题

本文档汇集使用服务端 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 需要手动配置。

![](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/c0a574f9b0716a7ce5d43d59fa7e5fce_uDkzIXhGeu.png?height=714&lazyload=true&maxWidth=600&width=2220)

应用的 App ID 和 App Secret 需登录[开发者后台](https://open.feishu.cn/app)，在应用详情页的 **凭证与基础信息** > **应用凭证** 区域获取。

![](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/f7f89950be7e57c2760a8b5b1f5e17c9_DhwOeHBWOm.png?height=524&lazyload=true&maxWidth=600&width=3594)

### 如何查看某个接口在 SDK 是否支持？
**回答**：

你可以直接查询接口文档，例如[发送消息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/create)，有如下图所示的 **尝试一下** 按钮表示支持（不支持的 API 没有该按钮）。

![](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/9ffd64fe51a55b1d9ceb390df0691ae3_k9XUhJlkJl.png?height=442&lazyload=true&maxWidth=600&width=1684)

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

![](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/cf3c745625a7aaf3bffa42623c1772b4_eeT2rZdAXU.png?height=844&lazyload=true&maxWidth=600&width=2262)

### SDK 不支持直接调用的接口、历史版本的接口，如何才能调用？
**回答：**

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

- [Java SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/java-sdk-guide/invoke-server-api) 的 **常见问题** 章节。
- [Go SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/golang-sdk-guide/calling-server-side-apis) 的 **常见问题** 章节。
- [Python SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/python--sdk/invoke-server-api) 的 **常见问题** 章节。
- [NodeJS SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/nodejs-sdk/invoke-server-api) 的 **常见问题** 章节。

### 使用下载导出文件接口时，文件名包含特殊字符导致下载报错如何解决？
**回答：**

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

详情参考：

- [Java SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/java-sdk-guide/invoke-server-api) 的 **常见问题** 章节。
- [Go SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/golang-sdk-guide/calling-server-side-apis) 的 **常见问题** 章节。
- [Python SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/python--sdk/invoke-server-api) 的 **常见问题** 章节。
- [NodeJS SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/nodejs-sdk/invoke-server-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 该如何排查？
**回答：**
- 方式一：打开[飞书开发文档](https://open.larkoffice.com/document/home/index)，在搜索栏输入错误码（code）或者日志 ID（logid）查询。

![](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/80297a016098a7029488152db41dfd75_8C4FphsGf6.png?height=1378&lazyload=true&maxWidth=600&width=1658)

- 方式二：如果问题始终无法解决，请咨询[技术支持](https://applink.feishu.cn/TLJpeNdW)。

### 接收事件时为什么重复收到事件体数据？
**回答：**

开放平台推送事件数据后，你的服务器需要在 3 秒内以 HTTP 200 状态码进行响应，否则开放平台认为本次推送失败，并会重新推送事件数据。详情参见[事件推送周期和频次](https://open.feishu.cn/document/ukTMukTMukTM/uUTNz4SN1MjL1UzM#9cd4c9b1)。

### 使用 TenantAccessToken/AppAccessToken 的示例代码获取的 Data 为NULL
**回答：**

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

### 调用接口的时候，出现 unsupported protocol scheme 错误。
**回答：**

![](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/24591cefd48d0d50b4ff32d658ebc2f3_zhFAforxl3.png?height=204&lazyload=true&width=2910)
该错误为**请求使用了不被支持的协议方案**，常见原因是配置 BaseUrl 参数时，**未添加https://协议头**。

### dial tcp [23.12.147.37:443](http://23.12.147.37:443): i/o timeout错误

**回答：**

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

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

**回答：**
[开发者后台](https://open.feishu.cn/app)的应用重定向 URL 列表内需要包含完整路径，如果路径后有 `?` 或者 `#` 后缀，可以不包含在重定向 URL 中。
**原因说明**：在应用的重定向 URL 列表内配置的 URL，`?` 或 `#` 后缀不会生效。例如，`http://www.example.com/#/index` 作为重定向 URL 时，实际生效的 URL 为 `http://www.example.com`。
**场景示例**：
- 调用[获取授权登录授权码](https://open.feishu.cn/document/common-capabilities/sso/api/obtain-oauth-code)接口时，`redirect_uri` 参数设置为 `http://www.example.com/#/index`，对应在开发者后台的应用重定向 URL 列表中添加 `http://www.example.com` 即可。
- 如果是客户端调用 [requestAccess](https://open.feishu.cn/document/uYjL24iN/uUzMuUzMuUzM/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](https://open.larkoffice.com/document/server-side-sdk/golang-sdk-guide/calling-server-side-apis) 的**构建API Client 模块**

Java：[调用服务端 API](https://open.larkoffice.com/document/server-side-sdk/java-sdk-guide/invoke-server-api) 的**构建API Client 模块**

Python：[调用服务端 API](https://open.larkoffice.com/document/server-side-sdk/python--sdk/invoke-server-api) 的**构建API Client 模块**

### 将调试台的示例代码复制到本地后，发现报错
**示例**：

![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/aeb3632fa63bba3d67b1321e2b7472f7_G3awINn3Xm.png?height=704&lazyload=true&width=1280)

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

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

- [Java SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/java-sdk-guide/invoke-server-api) 的 **常见问题** 章节。
- [Go SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/golang-sdk-guide/calling-server-side-apis) 的 **常见问题** 章节。
- [Python SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/python--sdk/invoke-server-api) 的 **常见问题** 章节。
- [NodeJS SDK 指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/nodejs-sdk/invoke-server-api) 的 **常见问题** 章节。