服务是指第三方应用服务,通常以HTTP Server为主。目前LigaAI主要支持的服务类型有:LigaAI服务、企业微信、钉钉、飞书。
在使用场景上,企业微信、钉钉、飞书主要为IM机器人消息通知,LigaAI服务则适用于用户的个性化定制开发。
事件是指由系统自身或者用户操作触发而产生的事件信息。事件将包括相关的业务数据以及事件的基础信息。目前LigaAI支持事件有:
不同的事件类型,其事件的数据内容是有差别的,具体数据结构内容参考:事件类型对应的数据模块
Webhook支持用户使用模板自定义发送内容,主要支持Markdown文本、自定义JSON两种方式,支持通过自定义变量的方式读取事件消息的内容来填充模板。
通过JsonPath的语法来访问事件的数据,并在此基础上支持了模板函数,具体使用如下:
${issue.startDate}
${issue.startDate|date:yyyy-MM-dd HH:mm}
1、日期格式化函数
函数名:date
参数:时间格式化字符串,参考(org.apache.commons.lang3.time.DateFormatUtils)
示例:${startDate|date:yyyy-MM-dd HH:mm}
(默认时区为系统设置-时间设置-组织时区中设定的组织统一时区)
## ${event.type.action.name}${event.type.subject.name}
${issue.type.name} | ${issue.summary}
${field.issue.status.name}:${issue.status.name}
${field.issue.assignee.name}:${issue.assignee.name}
${field.issue.priority.name}:${issue.priority.name}
${field.issue.dueDate}:${issue.dueDate|date:yyyy-MM-dd HH:mm}
${field.issue.description}:${issue.description}
操作人:${trigger.user.name}
[查看详情](${issue.url|blank})
{
"工作流状态": ${issue.status.name},
"工作优先级": ${issue.priority.name},
"工作截止时间": ${issue.dueDate},
"工作描述": ${issue.description}
}
{
"工作流状态": "未开始",
"工作优先级": "中等",
"工作截止时间": 1676628000000,
"工作描述":
"目前LigaAI主要支持的服务类型有:LigaAI服务、企业微信、钉钉、飞书。"
}
2、属性为空或者不存在时清理
函数字符:blank
参数:无
说明:当事件的数据对象不包含变量属性或者该变量属性的值为null时,会自动删除该属性所在的一行。
示例:${issue.url|blank}
## ${event.type.action.name}${event.type.subject.name}
${issue.type.name} | ${issue.summary}
${field.issue.status.name}:${issue.status.name}
${field.issue.assignee.name}:${issue.assignee.name}
${field.issue.priority.name}:${issue.priority.name}
${field.issue.dueDate}:${issue.dueDate|date:yyyy-MM-dd HH:mm}
${field.issue.description}:${issue.description}
操作人:${trigger.user.name}
[查看详情](${issue.url|blank})
飞书markdown自定义模板
企微&钉钉类似,区别在于各家IM平台对于Markdown语法的支持
LigaAI系统配置截图:
自定义模板内容:
${event.type.subject.name}${issue.type.name}
${issue.summary}
状态:${issue.status.name}
执行人:${issue.assignee.name}
优先级:${issue.priority.name}
${field.issue.estimatePoint.value}:${issue.estimatePoint.value}
${field.issue.createBy.name}:${issue.createBy.name}
截止时间:${issue.dueDate|date:yyyy-MM-dd HH:mm:ss}
描述:${issue.description}
操作人:${trigger.user.name}
[查看详情](${issue.url|blank})
飞书客户端接收效果:
LigaAI自定义JSON模板:
目前系统暂未开放LigaAI格式的自定义模板配置选项。所有消息将按以下模板发送:
{
"type": ${event.type.id},
"date": ${trigger.date},
"tenant": ${tenant},
"trigger": ${trigger},
"data": {
"issue": ${issue},
"comment": ${comment},
"attachment": ${attachment},
"subtask": ${subtask},
"relationIssue":${relationIssue}
}
}
请求数据示例如下:
{
"date": 1676627206432,
"data": {
"issue": {
"summary": "Webhook自定义LigaAI服务消息",
"dueDate": 1676628000000,
"description": "目前LigaAI主要支持的服务类型有:LigaAI服务、企业微信、钉钉、飞书。",
"project": {
"name": "示例项目",
"description": "点击查看示例项目,体验 LigaAI 的亮点功能",
"id": 900
},
"updateTime": 1676627206432,
"priority": {
"optionKey": "Medium",
"name": "中等",
"id": 1200
},
"type": {
"code": "story",
"name": "故事",
"id": 1100
},
"url": "https://ligai.cn/app/work",
"number": 8,
"createBy": {
"phone": "12345678901",
"name": "张三",
"id": 101,
"email": "zhangsan@zhikan.net.cn"
},
"follows": [
{
"id": 101,
"name": "张三",
"phone": "13812345678",
"email": "zhangsan@zhikan.net.cn"
},
{ "id": 102,
"name": "李四",
"phone": "13812345679",
"email": "lisi@zhikan.net.cn"
}
],
"estimatePoint": {
"autoCalculateFlag": 0,
"value": 8
},
"createTime": 1676627206432,
"updateBy": {
"phone": "12345678901",
"name": "张三",
"id": 101,
"email": "zhangsan@zhikan.net.cn"
},
"id": 100,
"startDate": 1676595600000,
"status": {
"code": "story-todo",
"name": "未开始",
"id": 4,
"category": {
"name": "Todo",
"id": 4
}
}
}
},
"trigger": {
"date": 1676627206432,
"user": {
"phone": "12345678901",
"name": "张三",
"id": 101,
"email": "zhangsan@zhikan.net.cn"
}
},
"type": "Issue.Create",
"tenant": {
"id": 1
}
}
请求头 | 描述 | |
---|---|---|
X-Liga-Event | 事件标识。格式为“对象.动作” | - |
对象 | 描述 | |
Issue | 工作 | |
Comment | 评论 | |
Attachment | 附件 | |
Subtask | 子任务 | |
RelationIssue | 关联关系 | |
LIA | 智能助理 | |
Webhook | Webhook | |
动作 | 描述 | |
Create | 创建 | |
Update | 更新 | |
Delete | 删除 | |
Action | 操作。一般与对象LIA一起使用,表示智能助理操作。 | |
Test | 测试。一般与对象Webhook一起使用,表示Webhook的测试操作。 | |
X-Liga-WebHook-ID | 配置的Webhook唯一编号 | - |
X-Liga-Type | 发送格式 | - |
格式 | 描述 | |
Liga | LigaAI服务 | |
DingTalk | 钉钉 | |
WechatWork | 企业微信 | |
Lark | 飞书 | |
X-Liga-Ts | 发送的时间戳(秒) | - |
X-Liga-ID | 发送唯一编号,用于标识具体某一次请求 | - |
X-Liga-Retry-Num | 重试编号。首次请求时,值为0,随后每请求一次,值加1 | - |
X-Liga-Token | Webhook配置的Token | - |
X-Liga-Sign | 数据签名字符串(暂未支持) | - |
application/json; charset=utf-8
,默认数据格式示例:{
"date": 1675329348640,
"data": {
"issue": {
"owner": {
"name": "张三",
"id": 101,
"email": "zhangsan@zhikan.net.cn"
},
"summary": "Webhook自定义LigaAI服务消息",
"dueDate": 1675332000000,
"sprint": {
"name": "【示例】迭代的名称",
"id": 1400
},
"description": "目前LigaAI主要支持的服务类型有:LigaAI服务、企业微信、钉钉、飞书。",
"project": {
"name": "示例项目",
"description": "点击查看示例项目,体验 LigaAI 的亮点功能",
"id": 900
},
"updateTime": 1675329348640,
"priority": {
"optionKey": "Highest",
"name": "最高",
"id": 1200
},
"type": {
"code": "story",
"name": "故事",
"id": 1100
},
"url": "https://ligai.cn/app/work",
"number": 21,
"createBy": {
"name": "张三",
"id": 101,
"email": "zhangsan@zhikan.net.cn"
},
"estimatePoint": {
"autoCalculateFlag": 0,
"value": 13
},
"createTime": 1675325728466,
"updateBy": {
"name": "张三",
"id": 101,
"email": "zhangsan@zhikan.net.cn"
},
"assignee": {
"name": "张三",
"id": 101,
"email": "zhangsan@zhikan.net.cn"
},
"follows": [{
"id": 101,
"name": "张三",
"phone": "13812345678",
"email": "zhangsan@zhikan.net.cn"
},
{
"id": 102,
"name": "李四",
"phone": "13812345679",
"email": "lisi@zhikan.net.cn"
}
],
"id": 100,
"startDate": 1675213200000,
"status": {
"code": "scrum-development",
"name": "开发",
"id": 4,
"category": {
"name": "In Progress",
"id": 3
}
}
}
},
"customFields": [
{
"customFieldName": "缺陷原因",
"fieldCode": "customfield_50776203",
"fieldValue": [
{
"name": "代码错误",
"value": 50776207
}
]
}
],
"relationIssue": {
"destineIssues": [
{
"destinationProjectId": 225724408,
"destinationIssueId": 276042168,
"relationshipType": "CAUSES"
}
],
"fromIssue": {
"actionType": "delete",
"fromIssueId": 276135673
}
},
"trigger": {
"date": 1675329348640,
"user": {
"name": "张三",
"id": 101,
"email": "zhangsan@zhikan.net.cn"
}
},
"type": "Issue.Update",
"tenant": {
"id": 1
}
}
应用收到HTTP POST请求后,需要在3秒内以HTTP 200状态码以及如下JSON响应体响应该请求。否则认为本次推送失败,在WebHooks-对应Webhook的发送记录中,该请求将按失败请求记录。
{
"errcode": 0
}
连接超时3秒,请求超时3秒,共6秒。