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

基于文件名指定URL上传:Slack机器人按单元码分渠道传报告问题

我来帮你搞定这个基于Batch+Curl的Slack文件上传系统,刚好我之前做过类似的场景,给你梳理一套可行的方案:

核心思路拆解

你的需求本质是**「文件名规则匹配→频道映射→批量调用Slack API上传」**的流程,用Batch脚本就能完美实现,结合Windows任务计划器还能自动化执行。关键要解决两个核心点:

  • 从PDF文件名中精准提取UNIT_CODE
  • 把UNIT_CODE映射到对应的Slack频道ID(注意:Slack API上传需要频道ID,不是频道名称,这点很重要)
具体实现步骤

1. 准备Slack权限与Token

首先得在Slack后台创建一个Bot应用:

  • 给Bot添加files:write权限,生成Bot Token(格式类似xoxb-xxxxxx-xxxxxx-xxxxxx)
  • 把这个Bot手动加入所有目标上传频道,否则会提示无权限上传

2. 编写Batch上传脚本

下面是完整的可复用脚本,你只需要替换配置部分的参数即可:

@echo off
setlocal enabledelayedexpansion

:: -------------------------- 配置参数(请根据实际修改) --------------------------
set "REPORT_FOLDER=C:\Your\Report\Storage\Path"  :: 存放报告PDF的文件夹
set "SLACK_TOKEN=xoxb-Your-Bot-Token-Here"       :: 你的Slack Bot Token
set "DONE_FOLDER=C:\Your\Report\Done\Path"       :: 上传完成后文件的归档文件夹
:: -----------------------------------------------------------------------------

:: 创建归档文件夹(如果不存在)
if not exist "%DONE_FOLDER%" mkdir "%DONE_FOLDER%"

:: 遍历文件夹中所有PDF文件
for %%f in ("%REPORT_FOLDER%\*.pdf") do (
    :: 从文件名提取UNIT_CODE(按下划线分割,取第一个字段)
    for /f "tokens=1 delims=_" %%a in ("%%~nxf") do set "UNIT_CODE=%%a"
    
    :: 映射UNIT_CODE到Slack频道ID(请替换成你的实际频道ID)
    set "CHANNEL_ID="
    if "!UNIT_CODE!"=="MX001" set "CHANNEL_ID=U12345678"  :: Unit A的频道ID
    if "!UNIT_CODE!"=="MH001" set "CHANNEL_ID=U87654321"  :: Unit B的频道ID
    if "!UNIT_CODE!"=="MX002" set "CHANNEL_ID=U11223344"  :: Unit C的频道ID
    :: 可继续添加更多UNIT_CODE与频道ID的映射
    
    :: 如果匹配到有效频道ID,执行上传
    if not "!CHANNEL_ID!"=="" (
        echo 正在上传文件: %%~nxf 到频道(UNIT: !UNIT_CODE!)
        curl -F file="@%%~f" -F channels=!CHANNEL_ID! -F token=%SLACK_TOKEN% https://slack.com/api/files.upload
        
        :: 上传成功后归档文件(避免重复上传)
        if !errorlevel! equ 0 (
            move "%%~f" "%DONE_FOLDER%\"
            echo 上传完成,文件已归档
        ) else (
            echo 上传失败,请检查Token权限或网络连接
        )
    ) else (
        echo 未找到UNIT_CODE: !UNIT_CODE!对应的频道配置,跳过该文件
    )
)

endlocal
pause

脚本关键说明

  • enabledelayedexpansion:启用延迟变量扩展,确保在for循环中能动态读取变量值
  • %%~nxf:提取文件的完整文件名(不含路径),方便分割UNIT_CODE
  • curl命令:用表单提交方式上传文件,-F file=@"文件路径"指定要上传的文件,-F channels=频道ID指定目标频道
  • errorlevel:判断curl命令是否执行成功,成功则归档文件

3. 配置Windows任务计划器自动化执行

  1. 打开任务计划器,点击「创建基本任务」
  2. 设置触发条件(比如每天凌晨2点)
  3. 操作选择「启动程序」,程序选择cmd.exe,参数填写:/c "C:\Path\To\Your\Upload_Script.bat"
  4. 勾选「不管用户是否登录都要运行」,并设置「最高权限运行」(避免文件访问权限问题)
  5. 完成任务创建,测试运行一次确认效果
常见问题排查
  • Curl上传报错:检查Bot Token是否正确、Bot是否加入目标频道、files:write权限是否已开启
  • UNIT_CODE提取失败:确保文件名严格遵循[UNIT_CODE]_ReportName_Date.pdf格式,UNIT_CODE部分无下划线
  • 重复上传:如果不需要重复上传,务必保留归档文件的逻辑,或者在脚本中记录已上传的文件名清单

内容的提问来源于stack exchange,提问作者Richard Pangalila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:20:23