Slackでメンション以外も音を鳴らす
Slackではメンションで@iwbjpのようにメッセージで@を使用するとメンバーに直接「スッコココ」という音で通知できます。
しかし、メンションを使用しない普通のメッセージだと送信されても、デフォルト設定では音が鳴りません。
チャンネル内に新しいメッセージが送信されたら音を鳴らして知らせてほしいことがありますが、相手が必ずしもメンションで送信するとは限らないです。
現在見ているチャンネルのみで、メンション以外のメッセージも音を鳴らしてほしくても、Slackにはそのような設定はありません。
そのため、もし通常のメッセージで音を鳴らす場合はJavaScriptでメッセージを検知して音を鳴らします。
これはブラウザ版のSlackのみで使用可能な方法で、やり方はブラウザのConsoleに以下のコードを貼り付けて実行するだけです。
これは単純にSlackにメッセージが送信されたら検知してAudioContextで音を鳴らしているだけです。
function startDingDong() {
let tmpText = ''
setInterval(() => {
const msgContent = document.querySelectorAll('[data-qa="message_content"]')
const len = msgContent.length
const msg = msgContent[len - 1]
const msgText = msg.innerText.replace(/^\d{1,3}$/gm, '').trim()
if (tmpText !== msgText) {
tmpText = msgText
const audioCtx = new (window.AudioContext || window.webkitAudioContext)()
const playDingDong = () => {
const oscillator1 = audioCtx.createOscillator()
const oscillator2 = audioCtx.createOscillator()
const gainNode = audioCtx.createGain()
oscillator1.frequency.setValueAtTime(523.25, audioCtx.currentTime)
oscillator1.type = 'sine'
oscillator2.frequency.setValueAtTime(659.25, audioCtx.currentTime)
oscillator2.type = 'sine'
gainNode.gain.setValueAtTime(0, audioCtx.currentTime)
oscillator1.connect(gainNode)
oscillator2.connect(gainNode)
gainNode.connect(audioCtx.destination)
oscillator1.start(audioCtx.currentTime)
gainNode.gain.linearRampToValueAtTime(1, audioCtx.currentTime + 0.01)
gainNode.gain.linearRampToValueAtTime(0, audioCtx.currentTime + 0.3)
oscillator1.stop(audioCtx.currentTime + 0.3)
oscillator2.start(audioCtx.currentTime + 0.5)
gainNode.gain.setValueAtTime(0, audioCtx.currentTime + 0.5)
gainNode.gain.linearRampToValueAtTime(1, audioCtx.currentTime + 0.51)
gainNode.gain.linearRampToValueAtTime(0, audioCtx.currentTime + 0.8)
oscillator2.stop(audioCtx.currentTime + 0.8)
}
playDingDong()
}
}, 1000)
}
startDingDong()
ChromeであればSnippetに保存して使用すると使いやすいです。
Slackで現在見ているチャンネルに新しいメッセージが来るのをにらめっこしながら待機して、仕事で無駄な仕事を浪費している方はぜひご活用ください。