🦊

Slack通話の内容をSlack上で見えるようにしてみる

2021/12/07に公開

本記事は Slack Advent Calendar 2021 の 7 日目の記事です。

はじめに

ここ数年で多くの企業がリモートワークを導入するようになりました。このような企業では、Slack をはじめ、業務を効率化するために様々なコミュニケーションツールを活用していると思います。しかし、それでも会話や雑談が不足して様々な問題が発生している状況のようです。
参考:会話と雑談の不足で 7 割以上が心的不調

一方で、オフィスのように雑談が突発的に時間を選ばずに発生するような環境のほうが嫌だという人も一定数いそうです。仕事に集中したい時に、近くで面白そうな話を雑談されていると気になって困ることもありますし(自分の意志が弱いだけです。。)。

とはいうものの、やはり楽しそうに話している雑談や興味のある話をしている雑談には混ざりたいです。おそらく、"雑談の内容が面白そうレベル"が"仕事に集中したいレベル"を超える場合があり、そういったときに意識的に参加できるというのがストレスのない環境なのではないでしょうか。

ところで、私の職場では Slack に雑談用のチャネルがあり、そこで Slack 通話を用いて雑談をすることが多いです。Slack 通話を始めてしまうと参加者以外は雑談の内容を一切知ることができません。オフィスで業務している時であれば、雑談の内容が漏れ聞こえてきて、面白そうなら参加するといったこともできました。しかし、Slack 通話の場合は内容がわからないので、私のような引っ込み思案の人たちは参加していいものか迷ってしまいます。もし、Slack 通話の内容を参加者以外が知ることができれば、このような人たちが雑談に加わる機会が増えるかもしれません。また、オフィスでは耳栓でもしないと雑談を完全にシャットアウトするのは難しいです。しかし、Slack 通話の内容を Slack 上で見えるようにする方法であれば意図的に雑談用のチャネルを開かなければ雑談に気を散らされることなく仕事に集中できそうです。

そういうわけで、今回は Slack 通話の内容をチャネル内に表示する "speech-to-text-chat" という Slack App を作ってみましたのでご紹介します。
実際の動きとしては、下図のように Slack 通話の内容がテキストで投稿されるようになります。
image

speech-to-text-chat の構成と動き

下図が speech-to-text-chat のラフな構成です。
image

speech-to-text-chat を構成するコンポーネントは大きく4つあります。

(1) Slack の workspace 並びにチャネルを表示しているブラウザタブ。 (Slack タブと呼ぶ)
(2) Slack から起動される Slack 通話のブラウザタブ (Slack 通話タブと呼ぶ)
(3) マイク入力をテキスト化(Transcribe)するブラウザタブ (transcribe タブと呼ぶ)
(4) Slack の各種イベントや(3)からのテキストを受け取り Slack のチャネルにメッセージを投稿する Slack App(speech-to-text-chat サーバ と呼ぶ)

なお、図中の矢印でデータの流れも記載してありますが、Slack タブへのデータの流れは実際はバックエンドの Slack のサーバへのデータの流れです。
図の簡略化のために Slack のサーバを省略しています。
今回新たに作成したコンポーネントは (3)transcribe タブと (4)speech-to-text-chat サーバです。

もう少し詳細な挙動は次のようになります。なお、ここでも Slack タブは Slack のサーバの意味も含みます。
image

ユーザが Slack 通話を開始すると、ブラウザ上では別のタブが開かれ Slack 通話が開始されます。
この時発行されるイベントをトリガとして speech-to-text-chat サーバが動き、会話のテキスト化を開始するためのボタン(Join ボタン)を Slack 上に表示させます。

ユーザがこの Join ボタンをクリックすると、speech-to-text-chat サーバはイベントに含まれるユーザ情報等をエンコードした URL を作成し、Slack 上に表示させます。ユーザがこの URL を開くと Transcribe タブが開きます。

以降、ユーザが発した声は Slack 通話タブと transcribe タブの両方に送信されるようになります。Slack 通話のタブの挙動には特に変更は加えていません。transcribe タブでは、ブラウザ組み込みの音声認識 API を用いて声をテキスト化します。このテキストは speech-to-text-chat サーバに送信されます。speech-to-text-chat サーバ はテキストを受け取るとそれを Slack タブに表示させます。

以上が大まかな構成と動きです。
詳細な実装については、コードが後述するリポジトリに格納されてますので、そちらをご参照ください。

使い方

ここでは、私が heroku にアップロード済みの speech-to-text-chat サーバを用いる方法を説明します。

導入方法

下記のリンクをクリックしてください。下記のような Slack App インストール画面が表示されると思います。
https://speech-to-text-chat.herokuapp.com/slack/install

image

使用されるスコープを確認して問題がなければ 許可するをクリックをしてください。下記の画面が出たら OK です。
なお、インストール先の workspace は右上のプルダウンメニューから選択できます。
image

次に、Slack にログインして、speech-to-text-chat を使いたいチャンネルに @speech-to-text-chat を実行して invite してください。
image

以降、speech-to-text-chat を追加したチャンネルで Slack 通話を開始すると、下記の表示が出るので join ボタンを押してください。
image
次のメッセージが表示されるので、opentTab をクリックしてください。
image
新しいタブが開いて、画面上に Listening と表示されていたら準備完了です。
image
試しに何かしゃべってみてください。slack にしゃべった内容が表示されます。
image

なお、動かしてみるとお分かりになると思いますが、実は speech-to-text-chat は slack 通話とは独立して動いています。このため、slack 通話を使わずに speech-to-text-chat を使用できます。スラッシュコマンドで/speech-to-text-chat <room-name>で開始できます。これにより、Zoom や Teams などの別のビデオ会議ツールと併用することもできます。

リポジトリ

本ブログで紹介した speech-to-text-chat のソースコードはこちらのリポジトリにおいてあります。
皆様の環境でデプロイしたい場合は、こちらの readme をご参照ください。

https://github.com/w-okada/speech-to-text-chat

さいごに

今回は Slack 通話の会話をテキスト化して Slack に投稿するアプリを紹介しました。
もともとの目的は Slack 通話に未参加のユーザの興味をひくというところにあります。今回のように単純に会話をテキスト化するだけでなく、いい感じにユーザの興味を引くような要約を示すなどの発展形も考えています。もし良いアイデア等ございましたらぜひコメントを頂けるとありがたいです。

追記

Slack 通話に未参加のユーザの興味を引くための要約について、先日行われた「第 12 回 対話システムシンポジウム、雑談に介入する際に必要な対話要約の調査(名古屋大)」がかなり参考になりました。面白い研究をしているなと思いました。

Disclaimer

本ブログのソフトウェアの使用または使用不能により生じたいかなる直接損害・間接損害・波及的損害・結果的損害 または特別損害についても、一切責任を負いません。

Discussion