Siri から「ごはんですよ」と呼びかけて Slack ステータスと DND を設定する
お昼休みの時間は固定化されていないフレキシブルなフルリモート環境で働いています。
お昼休憩は仕事の通知を忘れてご飯を楽しみたい!ある程度早い反応を期待されるチャットにおいて 1 時間ほど反応できないことはチャット上で周知しておきたい!
毎日お昼休憩のたびにポチポチ UI を触ってステータスや DND を変更するのが手間なため、「Hey Siri! ごはんですよ」と音声入力するだけでお昼休憩をチャットで表明しておけるようにしました。
今回 Slack API を使って Apple のショートカットアプリを呼び出すのに苦労したため、手順を残しておきます。
Slack ユーザートークンを発行する
アプリを作成する
自分自身のステータスや DND を変更するために Slack ユーザートークンを発行するアプリを作成します。
アプリページを開き、 Create New App > From scratch からアプリを新規に作成します。
スコープを追加する
サイドバーにある OAuth & Permission を開いて User Token Scopes までスクロールします。
Add an OAuth Scope から users.profile:write
と dnd.write
スコープを追加します。
アプリから API を使ってステータスと DND を書き換えられるようになります。
アプリを組織にインストールする
サイドバーにある Install App を開き、アプリを利用するワークスペースにインストールするための Slack OAuth 確認画面へ進みます。
インストールを承認すると User OAuth Token が発行されトークンを利用する準備が整います。
Slack API を呼び出すショートカットを作成する
Shortcuts アプリを開いて + ボタンから新規ショートカットを作成します。
Title は ごはんですよ
にします。このタイトルが Siri に呼びかける魔法の言葉になります。
ランチ
やごはん
などの名詞をタイトルに設定しても Map アプリが優先的に呼ばれるようでした。
実行現在日時を取得するアクションを登録する
アクション一覧から Date を選択して開きます。
実行する現在日時を取得するため、初期値の Current Date のままにします。
実行現在日時に 1 時間追加するアクションを登録する
アクション一覧から Adjust Date を選択して開きます。
Add 60 minutes to Date
に変更します。
UNIX エポックの日時を取得するアクションを登録する
アクション一覧から Date を選択して開きます。
Specified Date に変更し 1970/01/01 09:00
を設定します。
Slack のステータスに期限を設ける時間には UNIX 時間が要求されます。
UNIX 時間とは協定世界時 (UTC) での 1970 年 1 月 1 日午前 0 時 0 分 0 秒(UNIX エポック)からの経過秒数です。まずはこの日時を取得するアクションを登録します。
日本は UTC より 9 時間進んでいるため、1970 年 1 月 1 日午前 0 時 0 分 0 秒に 9 時間追加した時間を指定しています。
休憩終了秒数を取得するアクションを登録する
アクション一覧から Get Time Between Dates を選択して開きます。
Get Seconds between Date and Adjusted Date
に変更します。
休憩終了時間と UNIX エポックの秒数を計算します。この秒数を API パラメーターの status_expiration
に渡します。
Date は UNIX エポック、 Adjusted Date は実行現在日時に 1 時間追加したものを参照しています。 Shortcuts (v7.0 時点) は変数に名前をつけられないため混乱しやすいです。
ステータスを更新する API を呼ぶ
アクション一覧から Get Contents of URL を選択して開きます。
Get Contents of https://slack.com/api/users.profile.set
に変更します。
Show More を押して Method を POST
に変更します。
Headers
に以下の 2 項目を追加します。
Key | Value |
---|---|
Content-type |
application/json; charset=utf-8 |
Authorization |
Bearer xoxp-****-****-**** |
Bearer
のあとの xoxp-****-****-****
には、アプリをインストールしたときの User OAuth Token を入力します。
Request Body
は JSON
を指定し、以下の項目を設定します。
Key | Type | Value |
---|---|---|
profile | Dictionary |
さらに Dictionary に指定した profile
変数にパラメーターを追加していきます。
Key | Type | Value |
---|---|---|
status_text | Text | Lunch |
status_emoji | Text | :rice_ball: |
status_expiration | Number | Time Between Dates |
status_text
と status_emoji
はお好みのメッセージ、絵文字を設定できます。
status_expiration
は休憩終了秒数が格納されている Time Between Dates を指定します。
DND を 1 時間有効にする API を呼ぶ
アクション一覧から Get Contents of URL を選択して開きます。
Get Contents of https://slack.com/api/dnd.setSnooze
に変更します。
Show More を押して Method を POST
に変更します。
Headers
にステータスと同じ項目を入力します。
Request Body
は JSON
を指定し、以下の項目を設定します。
Key | Type | Value |
---|---|---|
num_minutes | Number | 60 |
Siri に呼びかける
お疲れ様でした。以上で完了です!
Siri に向かって「Hey Siri!」と声を出して呼び出してみましょう。
「はい」と Siri が聞いてくるので「ごはんですよ」と声を出して返信するだけで、 Slack のステータスや DND を更新できるようになりました。
PC やスマホをポチポチいじらずに、声だけで昼休みに入れる革命が起こせました。
Discussion