接入指南
服务台 token
请求中代入服务台token,表示拥有和服务台负责人相同的权限(查看修改服务台实体)。
使用方法,设置在请求Header中:
- Header Key: X-Lark-Helpdesk-Authorization
- Header Value: base64(helpdesk_id:helpdesk_token), 通过base64加密将helpdesk_id和helpdesk_token用':'连接而成的字符串。
Golang Exapmle:
go
package main
import (
b64 "encoding/base64"
"fmt"
)
func main() {
helpdeskAuthInfo := "12345:ht-sometoken"
helpdeskAuthToken := b64.StdEncoding.EncodeToString([]byte(helpdeskAuthInfo))
fmt.Println(helpdeskAuthToken)
}请负责人妥善保管服务台 id 和 token 不要泄露,有风险时及时重置。
获取方式 : 服务台管理后台 设置中心 > API 凭证
重置token : 重置 token 会生成新的 token,旧的 token 自动失效

限流策略
默认使用开放平台默认限流,单个API如有不同,会在对应API文档中说明。
如何使用服务台API
1、申请企业服务台 API 授权
若应用尚未申请服务台API权限,需在开发者后台增加权限申请并提交审核。企业自建应用需要企业管理员在管理后台审核通过;暂不支持应用商店应用。
2、API鉴权
服务台API作为开放平台对外能力一部分,会检查tenant_access_token/user_access_token得到对应信息。 同时使用服务台token鉴权,方便服务台负责人管理,控制应用对单个服务台资源的访问,修改权限。
3、调用服务台API
调用相关服务台API 对服务台资源创建,修改,删除,获取。 请参考具体的API文档
代码示例
以查询工单详情为例,仅供参考。 下面分别给出Python与Golang的实现
1、Python示例
javascript
import requests
import time
def get(url: str, **kwargs):
r = requests.get(
url,
cookies=kwargs.get("cookies", {}),
params=kwargs.get("params", {}),
headers=dict(kwargs.get("headers", {}), **{"Connection": "close"}),
json=kwargs.get("json", {}),
)
return r
def post(url: str, **kwargs):
r = requests.post(
url,
cookies=kwargs.get("cookies", {}),
params=kwargs.get("params", {}),
headers=dict(kwargs.get("headers", {}), **{"Connection": "close"}),
json=kwargs.get("json", {}),
)
return r
def get_tenant_header():
url = "https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal/"
# 开放平台机器人应用凭证,用于开通访问服务台权限
body = {
"app_id": "应用ID",
"app_secret": "应用密钥"
}
# 把 服务台ID:服务台Token 转换为base64,填写到 X-Lark-Helpdesk-Authorization,用于指定访问哪个服务台
# 在线base64编码 https://base64.us https://tool.oschina.net/encrypt?type=3
return {
"Authorization": "Bearer %s"
% post(url, json=body).json()["tenant_access_token"],
"X-Lark-Helpdesk-Authorization": "Njk4OTgwNTM1ODU1ODQ3ODM1NTpodC1lYjk1Y2ZlYi03ZGM1LTY1ZGUtMTUzOS1iMzZmOTk3MmM3ZjA=",
}
tenant_header = get_tenant_header()
def get_ticket(id):
url = "https://open.feishu.cn/open-apis/helpdesk/v1/tickets/%s" % id
res = get(url, headers=tenant_header)
try:
info = res.json()["data"]["ticket"]
return info
except:
print(id, res)
return get_ticket(id)
info = get_ticket("工单ID")
print(info)2、Golang示例
javascript
import (
"bytes"
b64 "encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"testing"
)
//开放平台机器人应用凭证,用于开通访问服务台权限
var appInfo = `
{
"app_id":"应用ID",
"app_secret":"应用密钥"
}
`
func httpRequest(req *http.Request) []byte {
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
return body
}
func postJson(url string, myjson string) []byte {
req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(myjson)))
if err != nil {
panic(err)
}
return httpRequest(req)
}
type tokenInfo struct {
App_access_token string `json:"app_access_token"`
Tenant_access_token string `json:"tenant_access_token"`
}
//获取开放平台tenant token
func getTenantToken() string {
url := "https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal/"
body := postJson(url, appInfo)
tokenInfo := tokenInfo{}
json.Unmarshal(body, &tokenInfo)
fmt.Println(tokenInfo)
return tokenInfo.Tenant_access_token
}
func TestOpenApi(t *testing.T) {
//服务台id跟token,用于指定访问哪个服务台
helpdeskAuthInfo := "服务台ID:服务台Token"
//服务台token base64编码
helpdeskAuthToken := b64.StdEncoding.EncodeToString([]byte(helpdeskAuthInfo))
url := "https://open.feishu.cn/open-apis/helpdesk/v1/tickets/工单ID"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("X-Lark-Helpdesk-Authorization", helpdeskAuthToken)
tenantToken := getTenantToken()
//open api的token,请去开放平台申请好访问服务台资源权限
req.Header.Set("Authorization", "Bearer "+tenantToken)
body := httpRequest(req)
fmt.Println(string(body))
}