{
"schemaVersion": 1,
"id": "sample-wecom-contacts-fields-log",
"name": "企业微信 · 读取联系人 ID 和名称",
"description": "先在插件中心连接已登录的企业微信,再手动运行。遍历本机已加载的联系人缓存,在 body 子图使用两个“读取对象字段”节点分别读取 id 和 displayName;字段值经“转换为文本”输出,可连接其他节点。日志消息全部由数据连线提供,固定消息参数为空,不需要表达式,也不修改原始联系人。每位联系人只输出 ID 和名称两条日志;结果完整保留原始联系人。completeRoster=false,不保证完整通讯录;不发送消息。",
"enabled": false,
"priority": 0,
"kind": "Graph",
"graph": {
"nodes": [
{
"id": "array-start",
"capabilityId": "core.start",
"name": "开始",
"x": 160,
"y": 180,
"parameters": {}
},
{
"id": "contacts-query",
"capabilityId": "xfe.wecom.contacts",
"name": "读取本机缓存联系人",
"x": 620,
"y": 180,
"parameters": {
"query": ""
}
},
{
"id": "array-foreach",
"capabilityId": "core.foreach",
"name": "逐个遍历联系人",
"x": 1080,
"y": 180,
"parameters": {},
"children": {
"body": {
"nodes": [
{
"id": "item-start",
"capabilityId": "core.start",
"name": "本轮开始",
"x": 160,
"y": 180,
"parameters": {}
},
{
"id": "item-current",
"capabilityId": "core.foreach.current",
"name": "当前联系人",
"x": 620,
"y": 180,
"parameters": {}
},
{
"id": "contact-id",
"capabilityId": "core.object.get",
"name": "读取联系人 ID",
"x": 1080,
"y": 180,
"parameters": {
"path": "id"
}
},
{
"id": "id-text",
"capabilityId": "core.convert.string",
"name": "ID 转为文本",
"x": 1540,
"y": 180,
"parameters": {}
},
{
"id": "log-id",
"capabilityId": "core.log",
"name": "输出联系人 ID",
"x": 2000,
"y": 180,
"parameters": {}
},
{
"id": "contact-name",
"capabilityId": "core.object.get",
"name": "读取联系人名称",
"x": 1080,
"y": 700,
"parameters": {
"path": "displayName"
}
},
{
"id": "name-text",
"capabilityId": "core.convert.string",
"name": "名称转为文本",
"x": 1540,
"y": 700,
"parameters": {}
},
{
"id": "log-name",
"capabilityId": "core.log",
"name": "输出联系人名称",
"x": 2000,
"y": 700,
"parameters": {}
},
{
"id": "item-end",
"capabilityId": "core.end",
"name": "返回原始联系人",
"x": 2460,
"y": 700,
"parameters": {}
}
],
"edges": [
{
"id": "item-execute-0",
"fromNode": "item-start",
"fromPort": "next",
"toNode": "item-current",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-1",
"fromNode": "item-current",
"fromPort": "next",
"toNode": "contact-id",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-2",
"fromNode": "contact-id",
"fromPort": "next",
"toNode": "id-text",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-3",
"fromNode": "id-text",
"fromPort": "next",
"toNode": "log-id",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-4",
"fromNode": "log-id",
"fromPort": "next",
"toNode": "contact-name",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-5",
"fromNode": "contact-name",
"fromPort": "next",
"toNode": "name-text",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-6",
"fromNode": "name-text",
"fromPort": "next",
"toNode": "log-name",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-7",
"fromNode": "log-name",
"fromPort": "next",
"toNode": "item-end",
"toPort": "in",
"kind": "Execution"
},
{
"id": "current-id",
"fromNode": "item-current",
"fromPort": "item",
"toNode": "contact-id",
"toPort": "value",
"kind": "Data"
},
{
"id": "id-convert",
"fromNode": "contact-id",
"fromPort": "value",
"toNode": "id-text",
"toPort": "value",
"kind": "Data"
},
{
"id": "id-message",
"fromNode": "id-text",
"fromPort": "value",
"toNode": "log-id",
"toPort": "message",
"kind": "Data"
},
{
"id": "current-name",
"fromNode": "item-current",
"fromPort": "item",
"toNode": "contact-name",
"toPort": "value",
"kind": "Data"
},
{
"id": "name-convert",
"fromNode": "contact-name",
"fromPort": "value",
"toNode": "name-text",
"toPort": "value",
"kind": "Data"
},
{
"id": "name-message",
"fromNode": "name-text",
"fromPort": "value",
"toNode": "log-name",
"toPort": "message",
"kind": "Data"
},
{
"id": "item-return",
"fromNode": "item-current",
"fromPort": "item",
"toNode": "item-end",
"toPort": "result",
"kind": "Data"
}
]
}
}
},
{
"id": "array-end",
"capabilityId": "core.end",
"name": "返回全部迭代结果",
"x": 1540,
"y": 180,
"parameters": {}
}
],
"edges": [
{
"id": "array-execute-foreach",
"fromNode": "array-start",
"fromPort": "next",
"toNode": "contacts-query",
"toPort": "in",
"kind": "Execution"
},
{
"id": "array-execute-end",
"fromNode": "array-foreach",
"fromPort": "next",
"toNode": "array-end",
"toPort": "in",
"kind": "Execution"
},
{
"id": "array-collect-results",
"fromNode": "array-foreach",
"fromPort": "results",
"toNode": "array-end",
"toPort": "result",
"kind": "Data"
},
{
"id": "query-then-foreach",
"fromNode": "contacts-query",
"fromPort": "next",
"toNode": "array-foreach",
"toPort": "in",
"kind": "Execution"
},
{
"id": "query-contacts-array",
"fromNode": "contacts-query",
"fromPort": "contacts",
"toNode": "array-foreach",
"toPort": "items",
"kind": "Data"
},
{
"id": "query-complete-roster",
"fromNode": "contacts-query",
"fromPort": "completeRoster",
"toNode": "array-end",
"toPort": "completeRoster",
"kind": "Data"
}
]
},
"code": "",
"inputs": [],
"outputs": [
{
"name": "result",
"label": "全部迭代结果",
"type": "Array",
"description": "每轮 body 子图的输出对象,按输入数组顺序排列。"
},
{
"name": "completeRoster",
"label": "是否完整通讯录",
"type": "Boolean",
"description": "当前原生接口只提供已加载的缓存联系人,此值为 false。"
}
],
"inputDefaults": {},
"variables": {},
"pluginVersions": {
"xfe.wecom": "3.0.0"
},
"triggers": [],
"modifiedAt": "2026-10-13T00:00:00+08:00"
}
{
"schemaVersion": 1,
"id": "sample-wecom-contacts-fields-log",
"name": "企业微信 · 读取联系人 ID 和名称",
"description": "先在插件中心连接已登录的企业微信,再手动运行。遍历本机已加载的联系人缓存,在 body 子图使用两个“读取对象字段”节点分别读取 id 和 displayName;字段值经“转换为文本”输出,可连接其他节点。日志消息全部由数据连线提供,固定消息参数为空,不需要表达式,也不修改原始联系人。每位联系人只输出 ID 和名称两条日志;结果完整保留原始联系人。completeRoster=false,不保证完整通讯录;不发送消息。",
"enabled": false,
"priority": 0,
"kind": "Graph",
"graph": {
"nodes": [
{
"id": "array-start",
"capabilityId": "core.start",
"name": "开始",
"x": 160,
"y": 180,
"parameters": {}
},
{
"id": "contacts-query",
"capabilityId": "xfe.wecom.contacts",
"name": "读取本机缓存联系人",
"x": 620,
"y": 180,
"parameters": {
"query": ""
}
},
{
"id": "array-foreach",
"capabilityId": "core.foreach",
"name": "逐个遍历联系人",
"x": 1080,
"y": 180,
"parameters": {},
"children": {
"body": {
"nodes": [
{
"id": "item-start",
"capabilityId": "core.start",
"name": "本轮开始",
"x": 160,
"y": 180,
"parameters": {}
},
{
"id": "item-current",
"capabilityId": "core.foreach.current",
"name": "当前联系人",
"x": 620,
"y": 180,
"parameters": {}
},
{
"id": "contact-id",
"capabilityId": "core.object.get",
"name": "读取联系人 ID",
"x": 1080,
"y": 180,
"parameters": {
"path": "id"
}
},
{
"id": "id-text",
"capabilityId": "core.convert.string",
"name": "ID 转为文本",
"x": 1540,
"y": 180,
"parameters": {}
},
{
"id": "log-id",
"capabilityId": "core.log",
"name": "输出联系人 ID",
"x": 2000,
"y": 180,
"parameters": {}
},
{
"id": "contact-name",
"capabilityId": "core.object.get",
"name": "读取联系人名称",
"x": 1080,
"y": 700,
"parameters": {
"path": "displayName"
}
},
{
"id": "name-text",
"capabilityId": "core.convert.string",
"name": "名称转为文本",
"x": 1540,
"y": 700,
"parameters": {}
},
{
"id": "log-name",
"capabilityId": "core.log",
"name": "输出联系人名称",
"x": 2000,
"y": 700,
"parameters": {}
},
{
"id": "item-end",
"capabilityId": "core.end",
"name": "返回原始联系人",
"x": 2460,
"y": 700,
"parameters": {}
}
],
"edges": [
{
"id": "item-execute-0",
"fromNode": "item-start",
"fromPort": "next",
"toNode": "item-current",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-1",
"fromNode": "item-current",
"fromPort": "next",
"toNode": "contact-id",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-2",
"fromNode": "contact-id",
"fromPort": "next",
"toNode": "id-text",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-3",
"fromNode": "id-text",
"fromPort": "next",
"toNode": "log-id",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-4",
"fromNode": "log-id",
"fromPort": "next",
"toNode": "contact-name",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-5",
"fromNode": "contact-name",
"fromPort": "next",
"toNode": "name-text",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-6",
"fromNode": "name-text",
"fromPort": "next",
"toNode": "log-name",
"toPort": "in",
"kind": "Execution"
},
{
"id": "item-execute-7",
"fromNode": "log-name",
"fromPort": "next",
"toNode": "item-end",
"toPort": "in",
"kind": "Execution"
},
{
"id": "current-id",
"fromNode": "item-current",
"fromPort": "item",
"toNode": "contact-id",
"toPort": "value",
"kind": "Data"
},
{
"id": "id-convert",
"fromNode": "contact-id",
"fromPort": "value",
"toNode": "id-text",
"toPort": "value",
"kind": "Data"
},
{
"id": "id-message",
"fromNode": "id-text",
"fromPort": "value",
"toNode": "log-id",
"toPort": "message",
"kind": "Data"
},
{
"id": "current-name",
"fromNode": "item-current",
"fromPort": "item",
"toNode": "contact-name",
"toPort": "value",
"kind": "Data"
},
{
"id": "name-convert",
"fromNode": "contact-name",
"fromPort": "value",
"toNode": "name-text",
"toPort": "value",
"kind": "Data"
},
{
"id": "name-message",
"fromNode": "name-text",
"fromPort": "value",
"toNode": "log-name",
"toPort": "message",
"kind": "Data"
},
{
"id": "item-return",
"fromNode": "item-current",
"fromPort": "item",
"toNode": "item-end",
"toPort": "result",
"kind": "Data"
}
]
}
}
},
{
"id": "array-end",
"capabilityId": "core.end",
"name": "返回全部迭代结果",
"x": 1540,
"y": 180,
"parameters": {}
}
],
"edges": [
{
"id": "array-execute-foreach",
"fromNode": "array-start",
"fromPort": "next",
"toNode": "contacts-query",
"toPort": "in",
"kind": "Execution"
},
{
"id": "array-execute-end",
"fromNode": "array-foreach",
"fromPort": "next",
"toNode": "array-end",
"toPort": "in",
"kind": "Execution"
},
{
"id": "array-collect-results",
"fromNode": "array-foreach",
"fromPort": "results",
"toNode": "array-end",
"toPort": "result",
"kind": "Data"
},
{
"id": "query-then-foreach",
"fromNode": "contacts-query",
"fromPort": "next",
"toNode": "array-foreach",
"toPort": "in",
"kind": "Execution"
},
{
"id": "query-contacts-array",
"fromNode": "contacts-query",
"fromPort": "contacts",
"toNode": "array-foreach",
"toPort": "items",
"kind": "Data"
},
{
"id": "query-complete-roster",
"fromNode": "contacts-query",
"fromPort": "completeRoster",
"toNode": "array-end",
"toPort": "completeRoster",
"kind": "Data"
}
]
},
"code": "",
"inputs": [],
"outputs": [
{
"name": "result",
"label": "全部迭代结果",
"type": "Array",
"description": "每轮 body 子图的输出对象,按输入数组顺序排列。"
},
{
"name": "completeRoster",
"label": "是否完整通讯录",
"type": "Boolean",
"description": "当前原生接口只提供已加载的缓存联系人,此值为 false。"
}
],
"inputDefaults": {},
"variables": {},
"pluginVersions": {
"xfe.wecom": "3.0.0"
},
"triggers": [],
"modifiedAt": "2026-10-13T00:00:00+08:00"
}