4
0

Slack WorkflowからSheetsにSlack URLを入れる方法

Last updated at Posted at 2023-12-03

SlackのWorkflowを使って他部署からのお問い合わせフォームを作ることがよくあります。

スクリーンショット 2023-11-28 19.39.44.png

この時にGoogle Sheetsと連携させて問い合わせ内容を集約すると便利です。
スクリーンショット 2023-11-28 19.42.10.png

問い合わせがあった時刻や、問い合わせ内容や、問い合わせた人などはシートに出力できますが、問い合わせのやり取りをしているURLはSlack Workflowの機能では出力できないです。
そのため、頑張ってURLを作ってみます。

Slack URLの構造

まず、Slack URLを眺めることで、以下のような構造であることがわかります。

https://<Workspace名>.slack.com/archives/<チャンネルID>/p<UNIX timestampをusで表記したもの>

Workspace名やチャンネルIDはチャンネル毎に固定値を埋め込めばよいので、最終パラメータのUNIX timestampをいい感じに生成できれば良さそうです。
Workflowが起動したタイミングは上のスクショで分かるように簡単に取得できるので、生成してみます。

UNIX timestampを生成

ちょうどよい関数がなかったので、AppScriptで関数を作成します。Extensions → AppsScriptからエディタ画面を開いて、以下の関数を保存します。

スクリーンショット 2023-11-28 19.54.34.png

function to_unixtime(utc_str){
  jst_format = Utilities.formatDate(new Date(utc_str), "GMT+0900", "dd MMM yyyy HH:mm:ss z")
  unix_time = Date.parse(jst_format)/1000
  return unix_time
}

そして、ここに以下の数式を入力します。

=CONCAT(CONCAT("https://<Workspace名>.slack.com/archives/<チャンネルID>/p",to_unixtime(CONCAT(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())), 0, -2),"Z"))),"000000")

スクリーンショット_2023-11-28_20_00_29.png

OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())), 0, -2) という呪文の正体は以下の記事を参照ください。

これで、「概ね」問い合わせのあった場所に飛べるURLを生成できました。
「概ね」という表現をしているのは秒未満の情報を取得出来ないのでその部分を 000000 にしているためです。
Slackの仕様(?)では、その時刻に送られたメッセージがなくても、概ねその近くの場所に飛んでくれるようです。

記事書いた後に気づいたこと

SlackのWorkflow機能が新しくなり、標準機能でできるようになっていました。この記事に書かれているような面倒なことをしなくても良くなったので、良かったですね!

スクリーンショット 2023-11-28 19.48.57.png

スクリーンショット_2023-11-28_20_07_48.png

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0