You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataWeave中如何将Slack消息日志的@用户ID替换为真实用户名

DataWeave 实现Slack用户提及替换方案

核心逻辑说明

Slack消息中用户提及的固定格式为<@用户ID>,通过正则捕获组直接提取中间的用户ID,配合replace函数即可完成替换,不需要额外做字符串截取操作。
正则表达式使用<@([^>]+)>:

  • 精确匹配以<@开头、>结尾的提及片段
  • 括号内的捕获组自动提取两个符号中间的纯用户ID,自动跳过外层包裹符
  • 兼容所有Slack用户ID格式,不会因为ID包含特殊字符出现漏匹配

生成@lookup中间格式

如果需要先输出带lookup调用标记的中间文本,直接用以下DataWeave脚本即可:

%dw 2.0
output application/json
---
// 替换payload.messageContent为你实际存储消息内容的字段路径
payload.messageContent replace /<@([^>]+)>/ with "@lookup($1)"

传入示例输入后,输出结果为:

Hello @lookup(UA12345) how are you?
I'm good @lookup(UA67890). How about you?

直接替换为真实用户名(无需生成中间格式)

DataWeave的replace函数支持在with参数中直接执行函数逻辑,匹配到用户ID时可以直接调用lookup方法查询真实用户名,一步输出最终结果,不需要二次替换:

%dw 2.0
output application/json
// 替换为你实际的lookup实现,比如调用Slack用户查询接口的逻辑
fun lookup(userId) = do {
    // 此处为示例映射,实际使用时替换为Slack API调用逻辑即可
    {
        "UA12345": "Adam",
        "UA67890": "David"
    }[userId]
}
---
payload.messageContent replace /<@([^>]+)>/ with "@" ++ lookup($1)

传入示例输入后,直接输出预期结果:

Hello @Adam how are you?
I'm good @David. How about you?

注意事项

  • 如果你的用户ID规则固定为大写字母+数字,可以把正则里的[^>]+替换为[A-Z0-9]+,匹配精度更高
  • 如果单条消息中存在多个用户提及,该正则会全局匹配所有片段,不需要额外加全局匹配参数,DataWeave的replace默认会替换所有匹配项
  • lookup函数如果需要调用外部Slack API,直接在函数内部编写HTTP请求逻辑即可,匹配到ID时会自动触发调用

内容的提问来源于stack exchange,提问作者aditya parkhe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:15:11