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

使用Slack CLI部署应用后无法接收DM及Manifest配置不生效问题

解决Slack Deno应用部署后DM功能失效及Manifest配置不生效问题

一、Manifest配置不生效的修复

Slack CLI v2.x会自动管理Manifest文件,手动修改生成的配置文件后,执行slack deploy大概率会被CLI覆盖——因为它会根据项目里的slack.json、触发器、工作流等自动生成Manifest。

正确操作方式:

  • 直接修改项目根目录的manifest.ts(TS项目),在其中明确定义App Home配置:
    import { Manifest } from "deno-slack-sdk/mod.ts";
    
    export default Manifest({
      name: "你的应用名称",
      description: "你的应用描述",
      icon: "assets/icon.png",
      features: {
        app_home: {
          home_tab_enabled: true,
          messages_tab_enabled: true,
          messages_tab_read_only_enabled: false, // 这里固定设置为false
        },
      },
      // 必须添加DM相关权限
      oauth_scopes: [
        "app_mentions:read",
        "chat:write",
        "commands",
        "im:history",
        "im:read",
        "im:write",
        "users:read",
      ],
      settings: {
        event_subscriptions: {
          bot_events: [
            "message.im", // 订阅DM消息事件
          ],
        },
      },
    });
    
  • 先执行slack manifest validate验证配置合法性,再执行slack deploy,此时CLI会基于你定义的manifest.ts生成正确的Manifest,不会覆盖你的配置。

二、部署后找不到App Settings页面的解决

部署后的应用设置不在本地路径,要通过Slack开发者控制台访问:

  1. 打开Slack开发者控制台,找到你部署的目标应用
  2. 进入「App Home」配置页,确认「Messages Tab」的配置是否和Manifest定义一致
  3. 如果配置不一致,手动在控制台修改后点击「Save Changes」,再重新执行slack deploy同步配置

三、确保DM消息能被正确接收

除了Manifest的权限配置,还要做好事件监听和触发器设置:

  • 新建事件处理函数,处理message.im事件:
    import { SlackFunction } from "deno-slack-sdk/mod.ts";
    
    export default SlackFunction("handle_dm_message", async ({ event, client }) => {
      const { text, user } = event as any;
      // 这里添加你的签到签退逻辑
      console.log(`收到用户${user}的DM:${text}`);
      await client.chat.postMessage({
        channel: event.channel,
        text: `已收到你的消息:${text}`,
      });
      return { completed: true };
    });
    
  • 在triggers/目录下创建事件触发器,订阅message.im事件:
    import { Trigger } from "deno-slack-api/types.ts";
    import HandleDmMessage from "../functions/handle_dm_message.ts";
    
    const trigger: Trigger<typeof HandleDmMessage.definition> = {
      type: "event",
      name: "接收用户DM消息",
      description: "用户向机器人发DM时触发",
      workflow: `#/functions/${HandleDmMessage.definition.callback_id}`,
      event: {
        event_type: "slack#/events/message.im",
        // 过滤掉机器人自己发的消息
        filter: {
          version: 1,
          root: {
            operator: "NOT",
            operand: {
              operator: "EQ",
              left: "{{data.user}}",
              right: "{{data.bot_id}}",
            },
          },
        },
      },
    };
    
    export default trigger;
    
  • 执行slack triggers create --trigger-def triggers/dm_trigger.ts创建触发器,再重新部署应用。

四、检查部署后的权限有效性

部署后在Slack开发者控制台的「OAuth & Permissions」页面,确认已添加im:history、im:read、im:write权限,且已订阅message.im事件。如果权限缺失,点击「Reinstall to Workspace」重新安装应用,确保权限生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:13:29