快速上手|飞书低代码平台 - 飞书官网
产品功能

快速上手|飞书低代码平台

飞书

2024-12-23

前置准备​
前置学习​
正式开发​
调试​
部署发布​
调用函数​
了解更多​
阅读本文档,你将会了解到:​
  • 创建一个云函数的操作步骤​
  • 调用云函数的方法​
如果不了解「云函数」是什么、能做什么?推荐阅读 《云函数-概述》 ​
本文档不会涉及到复杂的工具或安装需求,但开始前,确保已创建了应用。如果还未创建,建议进入「飞书低代码平台」创建你的第一个应用​
前置准备​
(一)创建云函数​
进入应用开发后台,左侧选中「低代码」菜单,开始创建一个函数。​
点击函数下的「新建」按钮,填写 “名称” “API名称” 字段。这里需要注意的是:​
  • 名称:是单纯方便开发者记忆的名字,支持中英文;​
  • API 名称:云函数唯一标识符,调用需要使用该名称。​
​
250px|700px|reset
​
​
点击「提交」后,我们便创建了第一个 云函数 。效果如下图所示:​
​
250px|700px|reset
​
​
图中列表中字段的说明如下:​
  • 状态: 当前云函数的部署状态,包括:未部署、已部署、已修改。只有当状态为 ”已部署“ 时,该云函数才能在其他地方被调用。”已修改“ 表明当前云函数有内容修改,但未保存发布;​
  • 是否支持Public API 调用: 如果云函数需要对外开放,供第三方系统调用,需要手动在「操作-发布为 Public API 」中将云函数发布成 Public API ;​
  • Public API URL: 当开发者手动发布成 Public API 后,会自动生成供外部系统使用的 Public API 链接,开发者可通过 HTTP 协议方式请求该 URL。​
(二)安装 NPM 包​
在 《云函数-概述》 中,有说明:​
云函数本质上就是一段运行 Node.js 环境的代码,所以大多数 NPM 包都可在云函数中使用。​
第三方 NPM 包,可以在应用开发后台的「低代码」-「依赖」页面中,进行统一管理。如下图所示:​
​
💡
注意:在同一个应用中的所有云函数,是共享同一份依赖列表。​
​
​
250px|700px|reset
​
​
「飞书低代码平台」已预置一些 “系统依赖” 包,包括上图中的:@kldx/core 与 @kunlun-dx/sdk ,提供了应用最基础的对象操作、函数调用、数据库读写等能力。​
开发者无法移除,只能切换版本。但我们可以在「 NPM 依赖」列表中,点击「安装」按钮,添加我们需要使用的第三方代码包:​
​
250px|700px|reset
​
​
在弹窗中,将 NPM 包名称输入、搜索并选择版本,点击「安装」,便可完成第三方 NPM 包的安装。​
在这个示例中,我们需要用到网络请求的能力,所以这里使用第三方的 NPM 包 axios 来帮助我们完成这一工作。​
(三)准备编写代码​
回到「低代码」-「函数」界面,点击「编辑」按钮,进入代码编辑器:​
​
250px|700px|reset
​
​
进入代码编辑器后,即可查看到默认生成的一段代码:​
​
250px|700px|reset
​
​
前置学习​
在正式编写代码前,还需要了解 云函数 的编写规范及其他基础知识。​
(一)函数入口​
所有 云函数 都会有一个固定的函数执行入口,就像 C++ 里面 int main() 函数一样(当然,如果你没接触过C++ 也没关系,你只需要知道,通常意义上来说,main函数是 C++ 程序开始后固定执行的第一个函数),在这里就代表 云函数 要执行的第一函数。​
在 云函数 中,函数的执行入口在代码编辑器页面即可查看到,如下图所示。针对图中的函数,开发者修改该函数内部代码即可。​
​
250px|700px|reset
​
​
(二)云函数内置参数​
云函数 会提供三个固定参数,以及若干上下文对象,供开发者使用。​
如果想了解具体接口请参考: 云函数开发指南​
params ​
  • 来自 云函数 的入口第一个参数。​
  • 主要提供以下能力:​
  • 表示 云函数 的调用入参,是由开发者在调用 云函数 时传入。​
context 对象​
  • 来自 云函数 的入口第二个参数,表示当前应用的上下文。​
  • 主要提供以下能力:​
  • 用于获取上下文信息,如当前租户信息、当前 Workflow 实例信息等​
  • 提供简单易用的数据操作功能​
  • 调用全局函数​
  • 向aPaas 平台进行文件上传与下载​
  • 函数任务创建​
  • 消息中心推送消息能力​
logger 对象​
  • 来自 云函数 的入口第三个参数。​
  • 主要提供以下能力:​
  • 日志输出能力,开发者可以通过该接口打印日志。日志可以在调试控制台或者「运行日志」-「函数日志」中查看​
这里需要注意的是,你当然也可以使用 console 接口进行日志的打印,但使用该方法打印的日志不会保存到「运行日志」中。​
kunlun 对象​
  • 表示与应用上下文无关的一些工具类函数。开发者可以直接通过 kunlun.xxx 调用。​
  • 主要提供以下能力:​
  • 提供一些默认的操作符,用于数据查询时使用​
  • 提供单独的redis 和 mongodb 能力,可以进行数据读写。注意通过该能力操作的数据,是单独存储供使用的,与用户在对象模型中创建的数据无关。​
  • 云函数全局变量的访问​
  • 一些工具方法​
至此,已经了解了云函数的基本知识,能够正式开发一个云函数了。​
下面让我们开始开发吧。​
正式开发​
下述示例代码中使用/涉及的:​
「飞书低代码平台」平台 SDK 能力,可参考:云函数开发指南 ​
(一)使用NPM包​
如前所述,我们已经新增了对 axios 包的依赖:​
在本文档“(二)安装 NPM 包”的部分,结尾有说明——“在这个示例中,我们需要用到网络请求的能力,所以这里使用第三方的NPM 包 axios 来帮助我们完成这一工作。”​
但若想正式使用 axios,开发者还需要主动在 云函数 中进行引入。以实现 “发送飞书消息卡片” 为例:​
​
250px|700px|reset
​
​
主要通过两步实现:​
​
250px|700px|reset
​
​
第一步 获取飞书应用鉴权 Token​
​
// 获取飞书应用鉴权 Token​
const tenant_access_token = await getFeishuAuth(); // token 将在发送飞书消息卡片时需要,详见飞书接口文档 ​
​
async function getFeishuAuth() {​
const app_id = 'cli_a03d8xxxxxxx', ​
app_secret = '************************', ​
url = 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/';​
try {​
const response = await axios({​
method: 'post',​
url: url,​
headers: {​
'Content-Type': 'application/json'​
},​
data: {​
"app_id": app_id,​
"app_secret": app_secret​
}​
});​
return response.data.tenant_access_token;​
}​
catch (e) {​
return -1;​
}​
} ​
​
第二步 调用飞书相关接口,实现发送飞书消息卡片 ​
​
// 实现利用飞书接口发送消息(使用时请参考附录完整代码)​
const response = await axios({​
method: 'post',​
url: url,​
headers: {​
'Content-Type': 'application/json; charset=utf-8',​
'Authorization': `Bearer ${tenant_access_token}`​
},​
data: requestBody​
}); ​
​
(二)完成编写​
最终完整的实现代码如下:​
​
// 通过 NPM dependencies 成功安装 NPM 包后此处可引入使用​
const axios = require('axios'); //​
/**​
* @param params 自定义参数​
* @param {Context} context 上下文参数,可通过此参数下钻获取上下文变量信息​
* @param {Logger} logger 日志记录器​
*​
* @return 函数的返回数据​
*​
* 快速入门:https://bytedance.feishu.cn/docs/doccnZQmpWJuQYviJ7mG1zKNI4g​
* Public API 鉴权示例:https://bytedance.feishu.cn/docs/doccn0pztfJ71ndMDnCLVRrpKlb#​
*/​
module.exports = async function (params, context, logger) {​
// 日志功能​
logger.info(`${new Date()} 函数开始执行`);​
// 获取鉴权​
const tenant_access_token = await getFeishuAuth();​
if (tenant_access_token === -1) {​
return { code: -1 };​
}​
// 发送飞书卡片消息​
const url = 'https://open.feishu.cn/open-apis/message/v4/send/';​
const requestBody = {​
"email": params.borrowerEmail,​
"msg_type": "interactive",​
"card": {​
"config": {​
"wide_screen_mode": false​
},​
"elements": [​
{​
"tag": "div",​
"text": {​
"tag": "lark_md",​
"content": "**图书馆提醒你该还书啦!**"​
}​
},​
{​
"tag": "hr"​
},​
{​
"tag": "div",​
"text": {​
"tag": "lark_md",​
"content": `${params.borrowerName}同学,当前你所借阅的图书《${params.bookName}》距离需归还时间还剩 **${params.remainingDays}** 天,记得要按时归还哟 :)`​
}​
}​
]​
}​
};​
const response = await axios({​
method: 'post',​
url: url,​
headers: {​
'Content-Type': 'application/json; charset=utf-8',​
'Authorization': `Bearer ${tenant_access_token}`​
},​
data: requestBody​
});​
console.log('调用发送飞书卡片消息接口的返回', response.data)​
return { code: 0 }​
}​
// 获取飞书应用鉴权 Token​
// 此处需替换为自己的app_id 和 app_secret​
// app_id 和 app_secret 需要前往飞书开放平台(https://open.feishu.cn/app?lang=zh-CN)->开发者后台->企业自建应用 ,进入后查看​
async function getFeishuAuth() {​
const app_id = 'cli_a03d8xxxxxxx', app_secret = '************************', url = 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/';​
try {​
const response = await axios({​
method: 'post',​
url: url,​
headers: {​
'Content-Type': 'application/json'​
},​
data: {​
"app_id": app_id,​
"app_secret": app_secret​
}​
});​
return response.data.tenant_access_token;​
}​
catch (e) {​
return -1;​
}​
} ​
​
调试​
(一)代码调试​
在正式发布代码之前,为了保证代码不会出错,云函数 提供了在线调试能力,包括两种方式:​
  • 查看函数运行日志​
  • 模拟输入参数​
注意:「开始调试」功能操作的是用户真实的数据,请在开发环境下进行。​
点击右下角的「开始调试」,进行第一次代码调试:​
​
250px|700px|reset
​
​
等待几秒钟,即可在页面下方的日志「运行结果」处,查看此次函数的运行情况:​
​
250px|700px|reset
​
​
在本次示例中,通过「执行结果」,可以发现:调用发送飞书卡片消息接口返回报错:​
{ code: 10003, msg: 'chat_id or open_id or user_id require' }​
这表明:没有传入接收方的身份 id。​
查询代码发现:这里会直接取参数中的 borrowerEmail 字段,作为接收方的身份标识。​
​
250px|700px|reset
​
​
但显然这里没有值,该如何解决?​
这就涉及到调试的第二个能力——参数模拟。​
(二)参数模拟​
如上示例,我们需要知道不同参数情况下,函数的执行过程。​
云函数 提供的参数模拟能力,允许开发者模拟 云函数 被调用时传入的参数,通过使用模拟参数对 云函数 进行调试。​
开发者可以在右侧的调试参数中,编写自己的模拟参数,如下图所示:​
​
250px|700px|reset
​
​
在这里,模拟编写了缺少的borrowerEmail borrowerName remainingDays 字段。编写完成后,再一次进行调试。​
调试成功,将会在飞书中收到 云函数 发出的一条飞书消息。如下图所示:​
​
250px|700px|reset
​
​
至此,已经完成了第一个 云函数 的开发。​
下一步,我们将函数正式发布。​
部署发布​
点击「保存并部署」完成函数的上线流程:​
​
250px|700px|reset
​
​
等待几秒后,当函数完成上线,会自动跳转到函数列表页面:​
​
250px|700px|reset
​
​
如果状态变成 “已部署” ,说明第一个函数已经完成了开发。​
还差最后一步,去相应页面里面调用一下这个函数吧。​
调用函数​
以某页面的按钮调用函数为例。​
在右侧配置面板的「事件」-「点击时」,选择 “执行自定义JS 代码” :​
​
250px|700px|reset
​
​
在这里,我们对刚才编写的 云函数 进行调用。​
这部分能力如有问题,可以查看 《自定义事件开发指南》​
这里传入我们在创建云函数时,绑定的 API 名称 和想要传入的 参数 :​
​
250px|700px|reset
​
​
点击「完成」保存自定义JS代码,然后预览页面,点击按钮:​
​
250px|700px|reset
​
​
回到「飞书」即可查看到消息卡片:​
​
250px|700px|reset
​
​
至此,一个 云函数 的开发使用步骤全部结束。​
了解更多​
如何在「流程管理函数节点」「自定义组件」以及「其他云函数」中调用云函数?推荐阅读 《云函数开发指南》《云函数案例合集》​
预约飞书企业效能顾问 深度诊断企业痛点,定制专属 AI 办公方案

先进团队,先用飞书

欢迎联系我们,飞书效能顾问将为您提供全力支持
分享先进工作方式
输送行业最佳实践
全面协助组织提效
标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题

字节跳动旗下 AI 工作平台

联系我们立即试用