#はじめに
自社のWEBサイトのQ&Aで、LINE BOT作れたらなと考え、
とりあえず何か簡単なLINE BOTを作ってみようと思いました。
普段、人材開発の仕事に携わっているので、
自分の1日の振り返り用のLINE BOTだったら実用的かなと、
作ることにチャレンジしました。
#コーチング用LINE BOTの意図
振り返りで自動化したいことは、
・月間目標のリマインド
・月間の残り日数
・振り返りの質問
・PDCAを回す時の視点
です。
そのあたりを自動化しつつ、
明日の行動をイメージできるように、
明日の天気も自動で取得できるようにしてみました。
#結果できたLINE BOT
天気apiを使うまでのLINE BOTは作れた。
"use strict";
const express = require("express");
const line = require("@line/bot-sdk");
const axios = require('axios');
const PORT = process.env.PORT || 3000;
const config = {
channelSecret: "channelSecret",
channelAccessToken: "channelAccessToken",
};
const app = express();
app.get("/", (req, res) => res.send("Hello LINE BOT!(GET)"));
app.post("/webhook", line.middleware(config), (req, res) => {
console.log(req.body.events);
if (
req.body.events[0].replyToken === "00000000000000000000000000000000" &&
req.body.events[1].replyToken === "ffffffffffffffffffffffffffffffff"
) {
res.send("Hello LINE BOT!(POST)");
console.log("疎通確認用");
return;
}
Promise.all(req.body.events.map(handleEvent)).then((result) =>
res.json(result)
);
});
const client = new line.Client(config);
async function handleEvent(event) {
if (event.type !== "message" || event.message.type !== "text") {
return Promise.resolve(null);
}
const message = event.message.text;
let replyMessage = event.message.text;
if (message == "完了") {
replyMessage = "お疲れ様!1日振り返りましょう!";
}
if (message == "はい") {
replyMessage = "今月の目標は、Qiitaの記事を3つ書くことです。現状は?";
}
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
let eom = new Date( year, month, 0 ).getDate();
let number = eom - day ;
if (message.indexOf("現状") > -1) {
replyMessage = `今月は残り${number}日です。順調ですか?`;
}
if (message == "いいえ") {
replyMessage = "いますぐリスケしましょう。";
}
if (message == "やばい") {
replyMessage = "6つの変数<質・量・納期・方法・代替・金>どこ変えますか?";
}
if (message.indexOf("目標") > -1) {
replyMessage = "今月は「WEBサイトに新サービスを追加」です";
}
if (message == "順調") {
const randomMessages = [
"さすが!間違いなく成長してます!",
"素晴らしい!!いうことなし!",
"成功間違いなし!明日も頑張りましょう!",
];
replyMessage = randomMessages[Math.floor(Math.random() * 3)];
}
if (message == "ヒント") {
const randomMessages = [
"Tips:タスクじゃなく得たい結果を意識しよう",
"Tips:タスクを15分単位に分解してみよう",
"Tips:移動時間でもできるタスクを見つけよう",
];
replyMessage = randomMessages[Math.floor(Math.random() * 3)];
}
if (message == "明日もよろしく") {
const randomMessages = [
"こちらこそ!!",
"明日もがんばって!",
"たのしんで!!",
];
replyMessage = randomMessages[Math.floor(Math.random() * 3)];
}
return client.replyMessage(event.replyToken, {
type: 'text',
text: mes
});
}
app.listen(PORT);
console.log(`Server running at ${PORT}`);
最後に天気apiで明日の天気を取得し、明日の行動スケジュールを立てやすくしようとしたが、うまくいかなかった。
上のソースコードに、挿入したのがこちら。
if(event.message.text == '天気教えて') {
let replyText = '';
replyText = '考え中';
await client.replyMessage(event.replyToken, {
type: 'text',
text: replyText
});
}
const CITY_ID = `400040`;
const URL = `http://weather.livedoor.com/forecast/webservice/json/v1?city=${CITY_ID}`;
const res = await axios.get(URL);
const pushText = res.data.description.text;
return client.pushMessage(event.source.userId, {
type: 'text',
text: pushText,
});
}
return client.replyMessage(event.replyToken, {
type: 'text',
text: mes
});
}
やはりプログラム1つ1つの意味が解読できないと、どこをどう変えればいいかわからない。
まずはJavascriptのプログラムの勉強からはじめる必要がありそう。
#工夫したこと
・目標達成に向けて順調に進んでいたら、褒める、労う。
・目標達成ノウハウで、たまに思い出したいものを、いつでも引き出せるようにする
・今月の残り日数を自動計算することで、目標達成の具体的なスケジュールを意識できるようにした
#今後の改善事項
・まずはapiを使ったプログラムを完成させる。
・状況に合わせて、効果的な問いが自動で出てくるようにしたい
・もっとリマインドしたい目標達成ノウハウを詰め込みたい
・計画をリスケしたら自動でgoogleカレンダーに入力されるようにしたい
今後、改善して、より実用的なものに繋げていこうと思います。
#まとめ
LINE BOTの勉強をはじめて3日でやってみましたが、
思いの外できた部分と、うまくいかない部分と味わった。
これからも色々チャレンジしながら、学んでいけたらと思います。