Slack:有没有办法禁用所有@channel 通知

Posted

技术标签:

【中文标题】Slack:有没有办法禁用所有@channel 通知【英文标题】:Slack: is there a way to disable all @channel notifications 【发布时间】:2015-11-30 19:11:36 【问题描述】:

默认情况下,Slack 聊天工具会发送电子邮件通知说“您被提及...”,而实际上是 @channel 而不是您。我能找到关闭这些的唯一方法是进入每个频道设置。

【问题讨论】:

是的,默认打开并为每个频道关闭它真的很烦人。找到一种方法将其默认为关闭并仅为几个频道打开它会更好(或者完全静音主题对我来说很好)。 我认为这不可能,但您可能想询问 Slack 支持。他们非常好。 【参考方案1】:

我遇到同样的问题已经有一段时间了,手动调整首选项太费时了。 我已经编写了一个脚本来为我自动化它。

更深入的解释,请访问我的博文:https://mobeigi.com/blog/programming/disable-slack-channel-and-here-notification-for-all-channels/

否则,前面的完整解决方案。

先决条件

首先下载这个脚本:https://gist.github.com/mobeigi/8e5372f1e14e2a302e186d1753f9a649

或者从这里复制粘贴:

// Slack User Notification Preference Bulk Update
// By Mo Beigi

const slackTeamId = "EXAMPLE17";
const localConfigJson = JSON.parse(localStorage.localConfig_v2);
const slackUrl = localConfigJson.teams[slackTeamId].url;
let channel_ids = [];

// client.boot contains list of channel ids user is subscribed to amongst other things
await fetch(slackUrl + "api/client.boot?" +
    "_x_id=noversion-1598950616.732" +
    "&_x_version_ts=noversion" + 
    "&_x_gantry=true", 
  
    method: 'post',
    credentials: 'include',
    headers:  "Content-type": "application/x-www-form-urlencoded; charset=UTF-8" ,
    body: "token=" + localConfigJson.teams[slackTeamId].token + 
        "&only_self_subteams=1" + 
        "&flannel_api_ver=4" + 
        "&include_min_version_bump_check=1" + 
        "&version_ts=1598934919" + 
        "&_x_reason=deferred-data" + 
        "&_x_sonic=true",
  ,
)
.then(result => result.json())
.then(result => channel_ids = result.channels);

// iterate channel id list and set notification prefs asynchronously
let fetchPromises = [];
for (i = 0; i < channel_ids.length; ++i) 
    console.log("Setting user notification prefs for channel id: " + channel_ids[i].id + " ...");
    fetchPromises.push(
        fetch(slackUrl + "api/users.prefs.setNotifications?" +
            "_x_id=c189c956-1598949859.880" + 
            "&_x_csid=7dP2GCgBJsY" + 
            "&slack_route=" + localConfigJson.teams[slackTeamId].enterprise_id + ":" + slackTeamId +
            "&_x_version_ts=1598934919" + 
            "&_x_gantry=true", 
            
                method: 'post',
                credentials: 'include',
                headers:  "Content-type": "application/x-www-form-urlencoded; charset=UTF-8" ,
                body: "name=suppress_at_channel" +
                    "&value=true" + 
                    "&channel_id=" + channel_ids[i].id +
                    "&global=false" + 
                    "&sync=false" +
                    "&token=" + localConfigJson.teams[slackTeamId].token +
                    "&_x_reason=prefs-store/setChannelNotificationOverride" +
                    "&_x_mode=online" +
                    "&_x_sonic=true"
            
        )
        .then(result => result.json())
        .then(console.log("Done (" + channel_ids[i].id + ")"))
    );

    // Generous delay to get around rate limit
    await new Promise(r => setTimeout(r, 250));


Promise.all(fetchPromises).then(function() 
    console.log("Successfully set user notification prefs for " + channel_ids.length + " channels.");
);

步骤

    访问支持 React 原生 Slack 客户端的 React Web 应用程序: http://app.slack.com/client 登录并切换到感兴趣的工作区,然后等待页面完全加载。 打开浏览器开发者控制台 执行以下行:JSON.parse(localStorage.localConfig_v2).teamsjavascript 脚本中的 slackTeamId 替换为您在第 4 步中的 ID。 将编辑后的 ​​Javascript 脚本复制并粘贴到开发者控制台并执行它。 该脚本可能需要几分钟才能运行,具体取决于您加入的频道数量。

就是这样!

您现在应该已关闭所有频道 @channel@here 通知首选项。

【讨论】:

【参考方案2】:

如果您找不到取消选中“还包括@channel 和@here”的选项,您可能首先需要取消频道静音,然后在频道特定选项中取消选中“还包括@channel 和@here”。

我不确定该复选框在通道静音时是否有效,但设置通过静音和取消静音保留。

【讨论】:

【参考方案3】:

你可以使用这个: 您可以选择“通知”>“您的通知首选项”>“无”。

当用户选择Nothing 时,意味着用户禁用了所有类型的通知。

【讨论】:

桌面通知与此类之间存在差异,Slack 会显示“被提及”的通知图标。这对抑制问题没有任何作用,只是通常禁用通知。【参考方案4】:

我一直在寻找相同的内容,但我发现没有人回答,所以这就是我发现的:你不能而且你永远也不能。

@channel:频道中的每个人,这是与用户的一种合同,频道中的每个人都应该收到通知。

关键是 Slack 有一套网络礼仪,用户必须知道它。 @channel 关键字的替代品是 @everyone@here,第一个仅适用于“大”频道,第二个仅适用于当前活跃的人。您可以禁用这些关键字的通知。

https://get.slack.help/hc/en-us/articles/202009646-Make-an-announcement

【讨论】:

您能否详细说明contract 的含义?或者是在哪里指定的? 但是如果我将频道静音,我不会收到通知的“合同”呢?我希望这份合同不要被破坏 @DavidNathan 如果你遇到了一个频道并且有人引用了你的话,你会收到一个通知,我刚刚尝试过。真的我不明白为什么我的答案有 2 票反对... 我投了反对票,因为这个答案似乎是说你根本不能禁用@channel,这是不正确的。您可以在屏幕截图的菜单中执行此操作,但如果您在#general 设置中,它会显示“@everyone”而不是“@channel”,因为它们在该频道中是相同的。 我如何到达您截取屏幕截图的位置?

以上是关于Slack:有没有办法禁用所有@channel 通知的主要内容,如果未能解决你的问题,请参考以下文章

通过Slack API发送命令

php 修补程序通知Slack Channel

php Laravel Notification类 - 通知Slack Channel

python 下载Slack Channel / PrivateChannel / DirectMessage History

python 下载Slack Channel / PrivateChannel / DirectMessage History

python 下载Slack Channel / PrivateChannel / DirectMessage History