Siri に Slackbot が投稿した AWS 請求額を読み上げる仕事をさせる

# はじめに
iPhone を使い始めて10年弱、 Siri が全く働いていないことに気付きました。
スマートスピーカーが流行っている昨今、自分の Siri にももっと活躍して欲しいので Slackbot が投稿した AWS 請求額を読み上げてもらうことにしました。

結果から見せるとこんな感じです。
料金を聞くと...
<img width="384" alt="スクリーンショット 2020-01-14 22.12.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/482a69e0-2d82-a611-ebdb-eebc4ed3f5a3.png">

Slackに投稿した内容を読み上げてくれました。
<img width="386" alt="スクリーンショット 2020-01-14 22.12.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/cf7dfa71-6450-da36-e80f-dd4f7c9a88e1.png">
では、作り方諸々を紹介していきます。

# 構成
構成はこんな感じになります。
<img width="974" alt="アーキテクチャ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/fa083b57-2142-9c77-39e8-e4abff6b0540.png">

それぞれの役割を紹介していきます。

- Siri
 - 音声呼び出しによるショートカットアプリの実行
 - Slack に投稿された AWS 請求額の読み上げ
- ショートカットアプリ
 - SlackAPI を使用して投稿
 - SlackAPI を使用して最新の投稿を JSON で取得
 - 取得された JSON 情報から必要な内容を抽出
- Slackbot
 - Lambda の呼び出し
- Lambda
 - AWS 請求額の取得

# 処理内容
今回は**ショートカットアプリ**に重点を置いて説明していきます。
Lambda と Slackbot についてはそれぞれ以下の記事にて詳細を記載しているので参照してください。
Lambda：[(Python)AWSの請求金額を取得する](https://qiita.com/Nidhog-tm/items/e602bb5d3a4950f92dfa)
Slackbot：[echobotを作成し、Slackに通知する](https://qiita.com/Nidhog-tm/items/54f15b1205bfab46974c)

それでは、ショートカットを作成していきます。
まず、ショートカット名を決めます。
Siri にショートカット名を呼びかけると登録しているショートカットを実行してくれます。
なので今回は『今月の料金は』というショートカット名にします。
（『AWSの料金は』としたかったのですが Siri が AWS の部分を理解してくれませんでした...）

続いて、各処理で使用する変数を定義していきます。

- token：SlackAPI で使用する token （今回は Legacy tokens を使用しています。）
- channel_nm：SlackAPI で投稿するチャンネル名
- channel_id：SlackAPI で最新の投稿を取得する対象のチャンネルID
- text：Slack に投稿する文章

変数が設定できたら、 Slack 投稿用 API の URL を作成し、実行します。
<img width="379" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/b571957e-1a62-ede7-30b8-f5c82efc8af7.png">
<img width="379" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/02d50111-97e5-bbd5-a712-ee62f682d5e6.png">
API を実行すると、 AWS 請求額取得 Lambda が実行されます。結果がSlackに投稿されるまで時間がかかるので待機させます。
<img width="373" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/b777c5e7-1d1d-351e-e754-5feb726e9fab.png">
待機後、 Slack の最新投稿取得APIを実行していきます。
投稿用 API の時と同様に URL を作成し、APIを実行します。
<img width="370" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/961cf63f-4979-7411-df4f-2b92f139cd0d.png">
<img width="372" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/948db1ab-53fd-c9f8-665a-fe4f1afe55cd.png">
最新投稿取得 API を実行すると以下のような JSON が返却されます。

```
{"messages":
    [{
        "bot_id":"XXXXXXXX",
        "ts":"1579095866.000200",
        "attachments":
        [{
            "color":"36a64f",
            "id":1,
            "fallback":"　・AWS Cost Explorer: 1.04 USD\n　・Tax: 0.10 USD",
            "pretext":"01月01日から01月14日の請求額は、1.14 USDです。",
            "text":"　・AWS Cost Explorer: 1.04 USD\n　・Tax: 0.10 USD"
        }],
        "type":"message",
        "subtype":"bot_message",
        "text":""
    }],
    "has_more":true,
    "ok":true,
    "channel_actions_ts":null,
    "channel_actions_count":0}
```
ここから pretext の値を変数に追加していきます。
<img width="380" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/26a8063e-d434-f1c7-9664-1b300431ae75.png">
<img width="373" alt="7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/692bd0f1-8b51-1cf1-bb71-bcaae65d72de.png">
<img width="377" alt="8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/7fd123c3-d923-c625-86f7-ee20fb21db05.png">
<img width="372" alt="9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/f75e7fda-ae4b-eb82-f459-0362844b5cab.png">
<img width="375" alt="10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/2d78cfe6-8290-2499-e69c-e43a013ef356.png">
<img width="373" alt="11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/b45f47fc-880b-7604-e49d-7b19b00c80a9.png">
これで Siri に読み上げてもらう内容が取得できました。
最後に読み上げる文章をテキストに起こし、読み上げのアクションを設定します。
<img width="371" alt="12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472784/903cb4c3-7be5-fec5-b969-d39acaf576a0.png">
完成です。
Siri に向かって『 Hey Siri！ 』と話しかけましょう！

# おわりに
これで Siri が一つ仕事を覚えてくれました。
この構成を使えばもっといろいろな事ができると思います。
今回は Slack ＋ Lambda をショートカットアプリから呼び出しましたが、 アプリの Pythonista3 から Python を実行しても面白い事ができると思います。