プロダクトマネージャーをしている長尾です。今回もTypetalkねたですが、お金を積まれているとかそういうことはありません。
先日の投稿にもありましたが、弊社にはゴミ捨て当番を決めるチャットBotがあります。ゴミが溜まっているのに気づいた人は、チャットbotにメッセージを送信。すると、社内にいる人の中からランダムでゴミ捨て当番が決まります。
非開発職でも簡単に作れる!Google Apps ScriptとTypetalkを使ったチャットBot作成に挑戦
https://blog.shiftall.net/ja/archives/96/
とても便利なbotなのですが、ゴミが溜まってるのを発見→PCスマホでチャットbotにメッセージを送る、というのは少し手間がかかる気がしたので、チャットbotにメッセージを送るスイッチを作ってみました。動作デモの動画を作ってみたのでまずはこちらをご覧下さい。
スイッチの仕様
- スイッチONにしたら、Wi-Fi経由でゴミ捨て当番を決めるチャットbotにメッセージを送る
- スイッチOFFにしたら、チャットに完了通知を投稿する
- スイッチは5個(燃える、燃えない、缶、ペットボトル、段ボール)
買ってきたもの
Wi-FiモジュールにはESP8266を使いました。スイッチは、ゴミ捨てへのモチベーションをあげるべくミサイルスイッチにしました。
ESP8266からTypetalkにメッセージを投稿する
TypetalkのAPIを使ってメッセージを投稿します。ESP8266がbotになってゴミ捨て当番を決めるbot(@shiftallcat+)へメッセージを送ります。こちらのページを参考にさせて頂きました。
メッセージの投稿
https://developer.nulab-inc.com/ja/docs/typetalk/api/1/post-message/Arduino core for ESP8266でHTTPSが叩けるようになっていた件
http://eleclog.quitsq.com/2015/11/esp8266-https.html
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
WiFiClientSecure client;
const char* host = "typetalk.com";
String url = "/api/v1/topics/xxxxx?typetalkToken=xxxxxxxxxxxx";
data = "message=@shiftallcat%2B " + "燃えるゴミ捨ててください";
・・・
void postMessage(){ if (client.connect(host, 443)) {
client.println("POST " + url + " HTTP/1.1");
client.println("Host: " + (String)host);
client.println("User-Agent: ESP8266/1.0");
client.println("Connection: close");
client.println("Content-Type: application/x-www-form-urlencoded;");
client.print("Content-Length: ");
client.println(data.length());
client.println();
client.println(data);
delay(10);
String response = client.readString();
int bodypos = response.indexOf("\r\n\r\n") + 4;
return response.substring(bodypos);
} }
完成
基板はブレッドボードで組んで、筐体は3Dプリンタで作りました。社内のエンジニアに色々教わりながら作れたのもあり、だいたい1週間で完成しました。
改善
当番に指名されたのを忘れてしまう人がいたので、1時間ごとにリマインドを送る機能も追加しました。リマインダーもESP8266から送っています。
せっかくなので、gomi-botに名前をつけようということで「五味捨代」と命名しました。社内の絵のうまい人にお願いしてアイコンも作ってもらいました。きれい好きでおせっかいな50代のおばちゃん、独身という設定です。
社内の少し面倒くさい雑務も、Botとスイッチを組み合わせるとちょっと楽しくなるかも、という話でした。ぜひ御社でも導入をご検討ください。