Slack ワークフローを使って問い合わせを管理する
この記事を読んで分かること
- Slack を使って問い合わせのリクエストを受ける方法
- 問い合わせ件数を可視化する方法
Slack ワークフローを使って問い合わせフォームを作る
Slack にはワークフロービルダーという機能があり、これを使うと Slack から起動できる「フォーム」を作ることができます。これで Slack から簡単に問い合わせできるようにするのが今回のメインの内容です。この機能自体は昔からありますが、最近のアップデートで様々な回答形式が追加され、更に使いやすくなりました。
ワークフロービルダーを起動する
まずワークフロービルダーを起動するには、左上のメニューから ツールと設定
> ワークフロービルダー
を開きます。起動するとこれまで作成したワークフローの一覧や、ワークフローを作成する
ボタンが表示されます
ワークフローの基本形
最も基本的なワークフローはこのような形式になります。右側のメニューから フォーム
を追加して項目を入力し、送信した結果を メッセージ
を使ってチャンネルに投稿、その投稿を元に対応する形です。ワークフローを 公開する
と リンクをコピーする
ボタンが出てくるため、コピーしておきます。
ワークフローのリンクを共有する
コピーしたワークフローのリンクは Slack に投稿すると ワークフローを開始
できるようになりますし、関連ページ
機能を使ってヘッダーのメニューに表示したり、Canvas を使って右のサイドバーに表示することができます。
以前は左下に ⚡ が表示されているだけでしたが、ワークフローのリンクを共有できるようになったことで、様々な方法でワークフローを起動できるようになりました。ヘッダーや Canvas に表示されていたら問い合わせ先を見つけやすいですし、別のチャンネルや DM で問い合わせを受けたときも、リンクを返して "ここから送信してください" と伝えることができます。また作成した問い合わせ一覧の Canvas を別のチャンネルの Canvas に埋め込むことで、各部署のメインチャンネルに問い合わせ一覧を表示することができます。
ワークフローを起動する
ワークフローを起動するとまずフォームが起動して、Submit
するとメッセージが送信されます。このスレッドに返信して問い合わせ対応をしましょう
問い合わせを集計する
ここまでは基本的なワークフローの使い方で、問い合わせ対応を実施することはできるようになりました。しかし問い合わせ件数を把握するにはこれだけでは足りません。この2種類の方法で実現することができます。Zapier を契約している場合、その方が柔軟な対応ができるため、②の方法がお勧めです。自分が作成するときは2つのやり方を使い分けています
- Slack のプレミアムワークフローを使う
- Zapier を使う
1. Slack のプレミアムワークフローを使う
プレミアムワークフローは最近追加された新しい概念で、通常のワークフローよりも複雑な自動処理を作ることができます。一方でプランによって実行回数に制限があり、それを超えると従量課金が発生します。明示的にプレミアムワークフローを使うと宣言するのではなく、条件を満たすとプレミアムワークフローに判定されるという仕組みになっています。
ワークフローがプレミアム判定される条件はこの2つなので、使用する際はご注意ください。ここでは前者の方法で Spreadsheet を使って問い合わせを集計するパターンについてまとめます
- 外部のツールを2つ以上連携させる
- カスタムワークフローを使う
Spreadsheet を作成する
まず最初に記録に使いたい Spreadsheet を作成します。使用する列は Slack ワークフローで使えるものなら何でもいいですが、これらの項目は必須だと思います
- 依頼日
- 依頼者
- 依頼項目
- 対応日
- 対応者
- リンク
Spreadsheet に行を追加する
行を追加するには、まずワークフローの編集画面で Google Sheets
を選択し、スプレッドシートに追加する
を選びます。次に作成した Spreadsheet やシートを選択し、依頼に関する項目を埋めます。依頼日や依頼者はいくつか選択肢がありますが、個人的には Unix タイムスタンプ
や Eメール
を使うとその後の加工や変更に耐えやすいと思っています。本当はリンクも入れたいところですが、残念ながら後述の理由からメッセージを投稿する「前」に Spreadsheet に追記する必要があり、このタイミングでは書き込むリンクがありません
Slack の投稿にボタンを追加する
次にチャンネルへの投稿で ボタンを含める
のチェックを入れます。こうすることでチャンネル上で対応が完了したことを確認できると共に、ボタンを押すまで処理を中断して、ボタンを押したらその語の処理を続行することができます
Spreadsheet の行を更新する
最後に、完了
ボタンを押したら Spreadsheet の対応欄を入力する仕組みを作成します。スプレッドシートを更新する
を選び、更新する行を検索します。リンクがないため確実ではないが、同じタイムスタンプに問い合わせがない前提で、問い合わせ日を使うのが現実的です。列の更新項目の設定は追加時と同じです
可視化
ここまでで Spreadsheet に依頼と対応の履歴が残るため、日付や依頼者・対応者を使って集計します。ピボットでも Looker Studio でもその他 BI ツールでも使い慣れているもの、社内でよく使っているものを使いましょう。ちなみに Spreadsheet で Unixtime を JST に直すにはこのような関数を使います
=ARRAYFORMULA(if(row(C1:C)=1,"問い合わせ日",(B1:B/86400)+date(1970,1,1)+time(9,0,0)))
※if を使っているのは関数を固定表示の行に集約するためなので、必須ではありません
2. Zapier を使う
Zapier を契約している場合、Spreadsheet を使った集計に使うことができます。こちらの方法のメリットとして、Zap を1つ作成しておけば Slack のワークフローを作るたびに上記作業をしなくて済む点があります。投稿形式のルールさえ守れば1つの仕組みですべての問い合わせを集計できるため、効率化、保守性を考えるとこちらを使うことをお勧めします
作成する Zap はこちらの2つです。それぞれ Slack のワークフローで投稿した内容を取得する Zap, 対応が完了したら :sumi: スタンプを押して対応状況を更新する Zap になっています
- #req-xxx の投稿を取得する
- 問い合わせ対応の :sumi: 対応
#req-xxx の投稿を取得する
こちらの Zap ではこのような流れで Spreadsheet に行を追加しています。特に投稿内容から問い合わせ名や依頼者を取得する必要があるため、チャンネルに投稿するメッセージにキーワードを設定するのがポイントです
- (Slack ワークフローから #req-xxx に投稿する内容にキーワードを追加する)
- #req-xxx の投稿を取得する
- 投稿内容のキーワードを元に情報を取得する
- 問い合わせ名
- 依頼者
- Spreadsheet の行の検索に使うため、リンクから thread_ts を削除する
- 問い合わせの投稿以外は無視する
- 行を追加する
Slack ワークフローから #req-xxx に投稿する内容にキーワードを追加する
まず最初に Zap で項目が取得できるように、投稿の末尾にキーワードを追加します。キーワードはいろんな方法が考えられますが、こういうのがシンプルです
NAME:問い合わせ名
REQ:このワークフローを使用した人のEメール
投稿内容のキーワードを元に情報を取得する
投稿内容とキーワードを元に情報を取得するには、Zap の Formatter by Zapier
を使います。このように設定することで「正規表現」を使ってNAME:に続くキーワードを取得することができます。NAME を REQ にすれば E メールを取得できます
- App: Formatter by Zapier
- Event: Text
- Transform: Extract Pattern
- Input: Text (Slackの投稿)
- Pattern:
NAME:(.*)
Spreadsheet の行の検索に使うため、リンクから thread_ts を削除する
これは必須ではありませんが、thread_ts があることでうまく動かないパターンがあったため追加しています。正規表現を使うところは上と同じで、違うのは Pattern のみになります。ここでは thread_ts がある場合はそれを削除し、ない場合は何もしない、という設定をしています
- Pattern:
(.*)(\?thread_ts)?
問い合わせの投稿以外は無視する
#req-xxx にフォーム以外の投稿がされたときは無視したいため、Filter を使ってキーワードが見つからなかったときはこの後の処理を続けないようにします
行を追加する
Spreadsheet に行を追加するにはこのようなアクションを追加します。問い合わせ名や依頼者には、上で取得した NAME や REQ を指定します。これで Slack のワークフローを使ってフォームが送信されたら Spreadsheet に行が追加される仕組みができました
- App: Google Sheets
- Event: Create Spreadsheet Row
- Drive, Spreadsheet, Worksheet: 作成したシートを選択
問い合わせ対応の :sumi: 対応
Slack のプレミアムワークフローを使う仕組みでは対応が完了したらボタンを押す運用でしたが、こちらでは対応が完了したら :sumi: などのスタンプを押します。これが押されたら動くように Zap を設定することで、Spreadsheet を更新できます
- スタンプが押されたことを検知する
- 検索用のリンクを取得する
- Spreadsheet から行を検索する
- Spreadsheet を更新する
スタンプが押されたことを検知する
- App: Slack
- Event: New Reaction Added
- Reaction: 使用したいスタンプ。 :sumi: など
- Channel: #req-xxx
検索用のリンクを取得する
1つ目の Zap 同様、こちらも検索用のリンクを取得するため、thread_ts を削除したものを作成します
- Pattern:
(.*)(\?thread_ts)?
Spreadsheet から行を検索する
- App: Google Sheets
- Event: Lookup Spreadsheet Row
- Drive, Spreadsheet, Worksheet: 作成したシートを選択
- Lookup Column: 問い合わせリンク
- Lookup Value: 検索用のリンクを取得するの結果
Spreadsheet を更新する
- App: Google Sheets
- Event: update Spreadsheet Row
- Drive, Spreadsheet, Worksheet: 作成したシートを選択
- Row: Spreadsheet から行を検索するの結果の Row
- 各カラム: 更新する
問い合わせチャンネルを集約する
※追記予定
「みんなの想いを集め、社会を良くするお金の流れをつくる」READYFORのエンジニアブログです。技術情報を中心に様々なテーマで発信していきます。 ( Zenn: zenn.dev/p/readyfor_blog / Hatena: tech.readyfor.jp/ )
Discussion