SlackのWorkflowを使って他部署からのお問い合わせフォームを作ることがよくあります。
この時にGoogle Sheetsと連携させて問い合わせ内容を集約すると便利です。
問い合わせがあった時刻や、問い合わせ内容や、問い合わせた人などはシートに出力できますが、問い合わせのやり取りをしている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からエディタ画面を開いて、以下の関数を保存します。
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")
OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())), 0, -2)
という呪文の正体は以下の記事を参照ください。
これで、「概ね」問い合わせのあった場所に飛べるURLを生成できました。
「概ね」という表現をしているのは秒未満の情報を取得出来ないのでその部分を 000000
にしているためです。
Slackの仕様(?)では、その時刻に送られたメッセージがなくても、概ねその近くの場所に飛んでくれるようです。
記事書いた後に気づいたこと
SlackのWorkflow機能が新しくなり、標準機能でできるようになっていました。この記事に書かれているような面倒なことをしなくても良くなったので、良かったですね!