はじめに
会社の会議室兼FabスペースSonorite Creative Satellite(SCS)にGoogle Homeさんがやってきました。
とりあえずHackしたくなるのがエンジニアの性というもの。
備品管理とか大変なので、備品が無くなった報告をSlackにストックできるといいよねということで、IFTTT経由でSlackに飛ばすようにしました。
とりあえずやってみたら、「これもうちょっとかしこい返事できるようになったら便利じゃね?」ということでIFTTTの投稿に反応するbotも作ることに。
開発環境
言語 : Python 3.6
使用ライブラリ : slackbot (https://github.com/lins05/slackbot)
参考サイト : https://qiita.com/sukesuke/items/1ac92251def87357fdf6
Slack上でbotユーザー作ってー
ライブラリインストールしてー
それっぽい応答文作ってー
人間の投稿に反応すること確認してー
IFTTTの投稿も反応すること確に…だめでした
といった感じでハマりました。
対応策
1, 別のライブラリを試す
会社がMS系のあれこれをやっているので MS bot FrameWorkを試す
結構頑張って、Slackに繋いだけど、こちらでもIFTTTの投稿は拾え無かった。
IFTTTの投稿にだけ反応してくれないので、IFTTT→Slackに送られてくるやつがおかしいのでは?という仮説が立った
2, ライブラリをフォークしてデバッグ
やっぱりPythonでやろうってことで、改めてslackbotのリポジトリを見に行った。
IFTTT対応する雰囲気もないのでForkさせて頂いて、ローカル環境でコードを読みつつ投稿拾ってそうな場所にデバッガを仕込み、ユーザの投稿とIFTTTの投稿を比較
IFTTT経由のメッセージのJSONと通常のメッセージのJSONの形式が違っていたことが判明
ユーザ名がIFTTTだった場合JSONを綺麗にする処理を実装し、無事IFTTTの投稿を拾うことができるようになった
その後
想定できる範囲内で、応答文を作り
ついでに「機材どこ?」っていう問い合わせにも反応できるようしてー
IFTTT or ユーザとbotとのやり取りをloggingするようにしてー
AzureにUbuntuマシンにデプロイして、社内にリリース
今のところちゃんと動いています
今後の課題
Google Homeに話しかけると、返事がSlack上に文字列として帰ってくるという歪なコミュニケーションスタイルが形成されているので、Google Homeが喋って返事できるようしたいなぁとか
備品購入はbotのレスに対してスタンプつけたら発注メール飛ばしたいなぁとか
思いつきで作ったからbotのキャラ設定ガバガバだなぁとか
やることいろいろあるんでゆるゆると改造していこうと思っています。
まとめ
ガジェットが届いたらとりあえず遊ぶ
Google Homeはポンコツかわいい
わたしは魔改造する人とGoogle Homeに認識されたのか、何を聞いても「わかりません」と言われている(悲しい)