Google Home x IFTTTで、オフトゥンの中からチャットワークに午前休の連絡

[スマートスピーカーIFTTT 大喜利 アドベントカレンダー](https://qiita.com/advent-calendar/2017/ssifttt)11日目です。

[布団から腕すら出さずに会社を休む [Google Home]](https://qiita.com/diescake/items/4f354a5dc7cb738efd4f)を拝見し、チャットワーク版があったら面白いなぁと思って作りました。

なお自分が今勤めている会社は、勤怠連絡はメールベースです。つまりこの装置の実戦配備はしておりませんので、上司にバレたらどのくらい怒られるかの手探りをしてません！ご利用の際は、自己責任でお願いします。（笑）


# やりたいこと

- Google Homeに「ねぇグーグル、午前休したいんだけど」と言うと、会社のチャットワークに丁寧な文言で書き込みする。


![スクリーンショット 2017-12-11 20.22.26.png](https://qiita-image-store.s3.amazonaws.com/0/173392/aa333c37-640d-1624-d008-9fe1378aaa55.png)

# フロー

Google Home
↓ 
IFTTT
↓ 
Googleシートに、行追加
↓ 
Google Apps Script 
↓　
Chatwork


# 作り方


## チャットワークのAPIトークンの取得

- フリープラン、パーソナルプランの場合、自分でAPI設定ページからチャットワーク社に申請する。
→[こちら](https://help.chatwork.com/hc/ja/articles/115000172402-API-Token%E3%82%92%E7%99%BA%E8%A1%8C%E3%81%99%E3%82%8B)


- 組織契約の場合、社内のチャットワーク管理者に依頼して発行してもらう必要がある。→　[こちら](https://help.chatwork.com/hc/ja/articles/115000169501)


## Googleシート作成

- 名前：「午前休シート」

![スクリーンショット 2017-12-11 20.29.57.png](https://qiita-image-store.s3.amazonaws.com/0/173392/05adf371-f40c-375d-bd49-030c34a73782.png)


1行目をヘッダ行とし、A列を日付、B列を休む内容にして、見出しを適当に入れておきます。


## Google apps script作成

「午前休シート」の「ツール」＞「スクリプトエディタ」で、
コード.gsファイルに、以下のようなコードを記入。

```
//チャットワークに投げる
function chatwork() {
  
 var roomId ='xxxxx'//休みを書き込みしたいチャットグループのルームID 
 var apiToken ='xxxxxxxxxxxxxxxxxxxxx'//発行したAPIトークンをここに書く
 var msgBody
  = "各位\nシュコドラン・ムスタフィです。\n"
  + "大変申し訳ないのですが、本日、体調不良のため午前休いたします。" 
 
 var client = ChatWorkClient.factory({token: apiToken});
 client.sendMessage({room_id: roomId, body: msgBody});    
}

//1列名に日時を書き込む
function addDate(e) {
    var lr = SpreadsheetApp.getActiveSheet().getLastRow();
    SpreadsheetApp.getActiveSheet().getRange(lr, 1).setValue(new Date());
}
```
※ルームIDとは、ttps://www.chatwork.com/#!rid**91578650**なら「91578650」。

## Google Apps Scriptにライブラリを追加
cw-shibuyaさんの作られたライブラリを使わせていただきます。ありがたや。
[こちら](https://qiita.com/y_minowa/items/39db8ca5bffc9c440caf#2-chatworkclient%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E8%BF%BD%E5%8A%A0)を参考にさせていただきました。
・「ライブラリを検索」欄には「M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT」を入力する。
・現時点でのバージョンは18なので、18を指定する。

## テスト
「関数を選択」＞「chatwork」を選ぶ。

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3137333339322f66326464366264372d306539362d353833342d643537372d6536323138316435343035332e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/173392/23f03d8b-8140-db8a-ffdd-a7be4b1cdbc4.png)


そのあと、「実行」の右下あたりにある右向きの三角アイコンを押す。
正常動作すれば、即時チャットワークにメッセージが飛ぶはずです！
メッセージの内容は、**「もっと謝る気持ちが伝わるようにしたい」**とかあると思いますので、好きなように書き換えます。


## トリガーを仕掛ける


Google Apps Scriptの画面で時計アイコンをクリックします。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3137333339322f35313132663437642d613066612d313562312d323434362d3930313032343961646562342e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/173392/0cdc8692-e953-c7f8-46b9-d155a628e086.png)

ポップアップが出たら、「トリガーを追加します」的な文のところがリンクになってるのでクリックし、以下のように入力します。


![スクリーンショット 2017-12-11 13.38.31.png](https://qiita-image-store.s3.amazonaws.com/0/173392/d2c05baa-8292-ab29-436f-74a4b2ff393d.png)

chatwork()のトリガー：Googleシートに行が追加されたときに、自動でGoogle Apps Scriptが動くようにするため。
addDate()のトリガー：IFTTTからGoogleシートに行が追加されたときに、日付が書き込まれないというバグがあるので、これを解消するため。

保存をクリックすると、認証画面に遷移します。
以下の警告画面が出て心臓がコトコトしますが、たった今自分が作ったスクリプトの保存なので、「詳細」のところを押して進みます。
<img width=400 src="https://qiita-image-store.s3.amazonaws.com/0/173392/c11e3ce6-5ddd-9663-624b-da254292c336.png">
そして冗談のようですが、以下の入力欄には日本語で「次へ」と打ち込んで、から、「次へ」リンクをクリックします。
<img width=400 src="https://qiita-image-store.s3.amazonaws.com/0/173392/4775e04d-52a6-de07-99fc-4134276d43cc.png">


## テスト

スプレッドシートのB列に「午前休」と記入する
![スクリーンショット 2017-12-11 20.42.08.png](https://qiita-image-store.s3.amazonaws.com/0/173392/e0ee3fd8-f745-be9e-aa54-9f0ba65bf2c6.png)
↓
すると、1秒弱でポンとA列に日時が記入される
![スクリーンショット 2017-12-11 21.26.25.png](https://qiita-image-store.s3.amazonaws.com/0/173392/14a96de3-89f4-e6c9-c256-c6c71ddccb68.png)
↓
さらにチャットワークの該当のルームに書き込まれる
![スクリーンショット 2017-12-11 21.26.21.png](https://qiita-image-store.s3.amazonaws.com/0/173392/b061772b-a1dc-2b65-bf3d-e0a83eedea28.png)

ここまでできればoK、次はイフトを作ります！

## IFTTTの作成

![スクリーンショット 2017-12-11 13.57.09.png](https://qiita-image-store.s3.amazonaws.com/0/173392/31a82129-5cad-db63-fa05-abda1de22df8.png)
![スクリーンショット 2017-12-11 13.57.23.png](https://qiita-image-store.s3.amazonaws.com/0/173392/7e9b5bd5-f024-34eb-827d-c1bbc7498341.png)
![スクリーンショット 2017-12-11 13.57.38.png](https://qiita-image-store.s3.amazonaws.com/0/173392/5fc5523f-0007-24f2-93d4-6b4e97098212.png)


### IF
- Google Assistant:"say a simple phrase"
- What do you want to say?:午前休したい
- What's another way to say it? (optional):ごぜんきゅうしたい
- What do you want the Assistant to say in response?:イエスマイロード
- Language:Japanese

### Then
- Google Sheets:add row to spreadsheet
- Spreadsheet name:午前休シート

## テスト
Google Homeに「ねぇグーグル、午前休したい」と言うと、チャットワークに投稿されたら、oKです。


## 最後に

ここまで書いて何ですが、Botアカウントではなく個人へのAPIトークンの発行を、会社の管理者に依頼する時点で、「怪しい、こいつは何か良からぬことを自動化しようとしている、まさか勤怠連絡では」と勘ぐられると思います。
で、思ったのですが、そもそも体調が悪いのに休めない方が問題で、休む連絡をしないよりした方が絶対によく、その連絡はGoogle Homeからやったって何ら問題はないはずなのです！
ですから逆に、チャットワークへの勤怠連絡はBot化して、堂々とGoogleHomeで送ったらええと思うのです（笑）

こうですね

```
勤怠連絡Bot
----
しとっぷたんです。
大変申し訳ないのですが、本日、体調不良のため午前休いたします。
緊急時連絡先：090-xxxx-xxxx
----
```
休みの理由くらいは、パラメタで渡すようにした方がいいかもですね。

```
勤怠連絡Bot
----
しとっぷたんです。
急で申し訳ないのですが、本日、私用で2時間ほど遅れます。
緊急時連絡先：090-xxxx-xxxx
----
```
とかね。

例えばスタートレックのThe Next Generation（ピカード艦長のやつ）では、音声で**「コンピュータ、体調が悪いから当直ができないと、少佐に連絡してくれないか」**などと連絡するわけです。**上司がウォーフだったら死を覚悟**しなければならないですが、クラッシャーだったらどうですか。**データなら？ラフォージュなら？**　人間だったら誰しも体調不良はありますし。音声で連絡を入れることは、特に悪くないと思うんです。いずれそうなっていくと思えば。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/173392/887df531-6342-fc68-86b6-d2b92c6d52b7.png)

最初の頃のデータは痩せてたなぁ。。

以上です！(^^)