人間風のリマインダーLINEボットが作りたい。
前回の記事で、IFTTTを使うことによってGoogleカレンダーとTwitterを連携させて、自動ツイートをしました。
実はGoogleカレンダー×LINEも可能で、簡単に連携させられるんです。
ただ、その場合、「LINE Nofty」というアカウントから通知が行くことになります。
簡単なんだけど、ちょっと違うんだよな!
そう、私はできることならアニメのキャラクターや実在する人間風のアカウントがカレンダー通知してくれたらいいのにと思ったのです。
カレンダー通知リマインダー作り方 LINE BOTアカウント作成
LINEの仕様が変わっています。 https://manager.line.biz/account にアクセスします。
私は普段使っているLINEアカウントでログインしました。ビジネスアカウントを作ってもいいですね。
「コンソールホーム」→「作成する」をクリックします。
プロバイダ名は適当に付けます。
「メッセージAPI」をクリックして作成します。
著作権的にだめかなぁ~?とは思いつつ、アイコンにいのすけにしてみました。許可されないときにはイノシシにでもしちゃいます。
このように入力して完成。
チェックを付け、「作成する」をクリック。これでLINEボットの下準備が完成です。
こちらを参考にさせていただきました。
カレンダー通知リマインダー作り方 アクセストークン等のメモ。
「自動返信メッセージ」は、「編集」をクリックして、無効にしておきます。
次に「メッセージングAPI」を押しましょう。下のほうまで行くと、「チャンネルアクセストークン」という箇所がありますので、そこにある「問題」というボタンを押しましょう。
するとアクセストークンというパスワードのようなものが表示されます。このアクセストークンをコピーしておきましょう。
Linebotのアクセストークンが取得できないとき
ここで少しつまずきました。ラインの設定画面が変わっていて、アクセストークンが取得できません。
画面下部にある、 LINE Developersをクリックします。 https://developers.line.biz/ja/
ログインが完了すると、右上に自分のラインアイコンがあるので、クリック。
プロバイダリストに、先ほど作ったbotがありました。クリックして、下に進んでいくと、【アクセストークン】の発行の箇所がありました。
アクセストークンの『再発行』をクリック。
LINE BOTとGoogleスプレッドシート・GASを連携する
こちらからGoogleスプレッドシートに飛びましょう。
「+」を押しましょう。ファイルを新規作成します。
ファイルの名前はおまかせします。
シート名は「alart」にします。シートにはこんな感じで打ち込みましょう。
コピペする人はこちらから。
年 | 月 | 日 | 第n週 | 曜日 | 時 | 分 | 本文 |
5 | 20 | 0 | 0 | 今日はミッツの誕生日だよ! |
さらに、アドレスバーのd/~~~~~~~~~~~/edit この間の部分がシートIDになります。これもメモしておきましょう。
「ツール」→「スクリプトエディタ」を選択。コードを入力していきます。以下コピペで、最初のアクセストークンとシートIDを入力しましょう。
// LINEアクセストークン。先ほどコピーしたアクセストークンを貼り付け。
var ACCESS_TOKEN = 'j0c4xVTMqgE38GU7zJ9deRiUUUG5SN+ivFGmjF5L/wnsG2hEtZJddnMb9OThw4pZGNgeCJpD8YF5WPv8vQX1Wb23cY6s1/48/zHZw0T0pAN050i5wMcoNK+EaBnHZPtGfW/SUAaT7JPaAQbudFG2+wdB04t89/1O/w1cDnyilFU=';
// Google スプレッドシートのシートIDを入力してください。
var SHEET_KEY = '1wkyneWH-0SR1FU1PQmL4uSgmVVFXq4yN45_lZAY3TR4';
function doPost(e) {
var event = JSON.parse(e.postData.contents).events[0];
var userMessage = event.message.text;
var message = "";
if ( userMessage === "ID" ) {
message = tellID(event);
}
else if ( userMessage === "id" ) {
message = tellID(event);
}
else if ( userMessage === "電車だ" ) {
//好きな受け答えをすることができます。
message = "猪突猛進!!(ドーン)";
}
else {
// 疎通確認が終わったらコメントアウトすると良いです。
message = "ゴメンネ ワカラナクッテ。「ID」ナラワカルヨ。";
}
replyMessage(event.replyToken, message);
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
function replyMessage(token, message) {
UrlFetchApp.fetch('https://api.line.me/v2/bot/message/reply', {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + ACCESS_TOKEN,
},
'method': 'post',
'muteHttpExceptions': true,
'payload': JSON.stringify({
'replyToken': token,
'messages': [{
'type': 'text',
'text': message,
}],
}),
});
}
function pushMessage(to, message) {
UrlFetchApp.fetch('https://api.line.me/v2/bot/message/push', {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + ACCESS_TOKEN,
},
'method': 'post',
'muteHttpExceptions': true,
'payload': JSON.stringify({
'to': to,
'messages': [{
'type': 'text',
'text': message,
}],
}),
});
}
function tellID(event) {
// ID
var userID = event.source.userId;
var talkID = "";
if (event.source.type === "group") {
talkID = event.source.groupId;
} else if (event.source.type === "room") {
talkID = event.source.roomId;
}
var message = "おまえのIDは、 " + userID;
if (talkID != "") {
message += "\nおまえらのグループのIDは " + talkID;
}
return message;
}
function notice() {
var sheet = SpreadsheetApp.openById(SHEET_KEY).getSheetByName('alart');
var data = sheet.getDataRange().getValues();
var dayStr = ["日", "月", "火", "水", "木", "金", "土"];
var now = new Date();
for (var i=1; i<data.length; i++) {
var [year, month, dayOfMonth, weekNum, dayOfWeek, hour, minute, message, to] = data[i];
// 本文と発言する場所が空の場合はスキップ
if (message === "" || to === "") { continue; }
if ( (year == now.getFullYear() || year === "")
&& (month == now.getMonth() + 1 || month === "")
&& (dayOfMonth == now.getDate() || dayOfMonth === "")
&& (weekNum == parseInt(now.getDate() / 7) + 1 || weekNum === "")
&& (dayOfWeek === dayStr[now.getDay()] || dayOfWeek === "")
&& (hour == now.getHours() || hour === "")
&& (minute == now.getMinutes() || minute === "")
) {
pushMessage(to, message);
}
}
}
すべて終了したら、「公開」→「ウェブアプリケーションとして導入」を選択。
Projectvuversionは「NEW」一番下の場所は、「anyone,even anonymous」を選択。
こんな感じで出た時は、「詳細」をクリック。
「安全ではないページに移動」 をクリック。
で、許可を押します。
appURLをゲットする
こんな感じになれば成功。 appURLは後で必要になるのでメモしておきましょう。
さらに、「トリガーを追加」
このように変更して、保存を押しましょう。これでコードの設定は終了です。
LINE Developersに戻る
さきほどの「メッセージAPI」の場所から、「Webhook設定」のところへ。
「編集」をクリックします。先ほどGASの方でゲットしappURLをここに打ち込みます。更新。
さらに、アカウント機能、自動返信メッセージから、「編集」をクリック。このように設定しましょう。
同じページにQRコードがあるので、スマホで読み込み、友達登録をしましょう。
すべてうまくいくと、こんな感じで会話ができるようになります。
IDを聞くと、答えてくれます。
このIDをスプレッドシートのI列(発言する場所)に入力します。
また、スプレッドシート内の空白部分は、毎時その通知を行います。
例えば、下の入力だと「年」部分が空欄なので、毎年5月20日22:33に通知をするようになります。
うまくいきました。
これを使って、母親ボットを作るもよし、好きなキャラに通知されてもよし、好きに使えますね。
誕生日・命日・記念日など決まっていることのリマインダーとして役に立ちます。