Developer Blog エンジニアブログ

2019.04.15

【オフィスIoT】ICカードで出退勤する。2

佐藤です。2回目の話です。

残念ながら問題が発生しました。

問題

まず何が問題なのか。
APIによって自身が発言することは叶いました。

$ curl -XPOST -d 'token={api-token}' -d 'channel=@{my-account}' -d 'text=/jobcan_status' -d 'as_user=true' 'https://slack.com/api/chat.postMessage'

ただ、1番の問題点がスラッシュコマンドが認識されないということです。

原因は、Slackさんが意図しないコマンド発動を防ぐためスラッシュをエスケープしてくれちゃってます。

{ "ok":true,
  "channel":"{my-account-code}",
  "ts":"1555059895.001200",
  "message":{
    "bot_id":"{bot-id}",
    "type":"message",
    "text":"\/jobcan_status",     #バックスラッシュついてる
    "user":"{user-code}",
    "ts":"1555059895.001200"
  }
}

これがレスポンスですね。
textの部分で、自動的にバックスラッシュがつけられてます。本当にありがた迷惑ってやつです。

どうしたものか、めちゃくちゃ考えました。

オフィスまで往復の電車でも色々調べては見ましたが、エスケープさせない方法は見つかりませんでした・・・。

解決策

仕方ないので自動エスケープからエスケープします。
逃げ先はヘッドレスChromeです。

ヘッドレスChromeとは

文字通り受け止めようとするとデュラハンみたいなChromeですがそんな物騒なもんじゃ無いです。

簡単に言うと、「プログラミング言語で操作できるブラウザ」みたいなとこですね。名前の由来は「ヘッドレスモード」と言って画面を表示させずにブラウザをいじいじできるところから。

これだけ聞いても何が良いのか、僕でも説明しづらいのですがメイン機能はプログラムで動かせることなので正直どうでも良いです。

主にスクレイピング程度の目的で使われるツールですが今回はゴリゴリアクティブに動かしていきます。

実はヘッドレスブラウザは他にも種類がありますが、以前Nodeから使えるヘッドレスブラウザとしてChromeをいじったことがあるので、これにしました。より良いブラウザがあれば是非情報を。

フロー改善

と言うわけでフローを改善する必要が出てきました。

  1. ICカードを読み取る。
  2. ヘッドレスChromeからブラウザ版Slackで「/jobcan_toutch」する
  3. 打刻できる

ブラウザをいじるなら、もはや直接打刻したらという意見もありそうですが、そうなると前回の話がまるっきり無駄になるので非常に困ります。

という悪しき勿体無い精神は冗談で、Slackの処理ミスったところで痛みは少ないですがジョブカンの処理ミスったとき致命的なダメージ受ける可能性が高いです。というわけであえてSlackを経由させます。

タイムリミット

なんとこの実装を考えるので1週間使いました。開発の時間を確保できなかったため実装開始は次回からになりますね・・・。

最近ようやく時間の作り方を身につけてきたので、次回更新までに作業のコアの部分である「ヘッドレスChromeからブラウザ版Slackで「/jobcan_toutch」する」を半分くらいまでは作っておきたいですね。

個人的な話

ちょっと個人的な話です。
日に日に同期との仲が深まっているような気がします。

うちの同期、めっちゃすごいんですよ。ほんと。
中学生から大学生まで「いいところより悪いところばっかり見つける」と言われていた僕が、いいところしか見つけられないくらいです。

そんな同期へのお礼やリスペクトを何か伝える手段を最近考えています。どんな形がいいかなあ。

0

この記事を書いたメンバー
Avatar
佐藤樹
2019年4月にハッピーズへ新卒入社。 面白いものを作るのが好きで、1年目の目標は月1で新作を作ること。