こんにちは。サカイです。
仕事から疲れて家に帰ってきて、晩ごはん何にしようかを決めるのすら面倒くさい時、
誰かに決めてもらいたいですよね。
決して自堕落ツールを作りたいのではなく生活効率化ツールという体で
初歩的チャットボット制作記録を書いていきたいと思います。
LINE BOTを作るまでのフローと動作内容
おおまかに、下記作業が必要になります。
- LINE作業
- LINE Developer登録
- BOT登録
- BOT設定
- Google作業
- Googleスプレッドシート作成
- GoogleAppsScript(GAS)作成
BOTの動作内容としては、下記の流れを想定します。
●「ご飯」とBOTに送信
→ 予め用意した候補の中からランダムで返事してくれる
ここで用意する候補というのは、ご飯リストのようなものです。
ご飯リストはGoogleスプレッドシートにて管理します。
LINE作業
LINE Developerにいつも利用しているLINEのアカウント等でログインするだけで
LINE Developerコンソール画面を開く事が出来ます。
https://developers.line.biz/ja/ LINE Developerサイト
※BOTの登録までは様々なサイトで解説しつくされているので割愛させて頂きます。
Google作業
ご飯リストを作るため、Googleドライブより新規スプレッドシートを作りましょう。
A1セルから順に下へ候補を入力していきます。
↑筆者はサボりメーターが振り切ってますが、返事が来たものは何が何でも食べなければいけない縛りプレイも面白いかと思います。
LINEからPOSTされた時のjsonデータから、返事を返す際の返し先を特定します。
したがって、POSTされた時のjsonデータログを溜める用のスプレッドシートも作成します。
手順はご飯リストと同様で、シート名を「log」にします。
※スプレッドシート名ではなく、下部のシート名なので注意
次にGASを使って、LINEからのPOSTをトリガーにGoogleスプレッドシートの対象のセルからランダムに選んだ候補を送信する仕組みを実装していきます。
スプレッドシートの作成と同様に、その他からGoogleAppsScriptを選択します。
存在していない場合は「アプリを追加」から追加します。
エディタ画面が出てきたら、下記ソースをコピペして、必要情報は書き換えます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
// LINE Developerのアクセストークン
var access_token = "YourAccessToken"
// リプライ先を特定するためのログ管理スプレッドシートID
var spreadsheet_id = "spreadsheet_id"
// ご飯リストのスプレッドシートID
var gohan_spreadsheet_id = "spreadsheet_id"
/**
reply
*/
function reply(data) {
var url = "https://api.line.me/v2/bot/message/reply";
var headers = {
"Content-Type" : "application/json; charset=UTF-8",
'Authorization': 'Bearer ' + access_token,
};
var text = "";
if (data.events[0].message.text === "ご飯") {
// ご飯リストスプレッドシートを取得
var gohan = SpreadsheetApp.openById(gohan_spreadsheet_id).getSheetByName("ごはん");
// A1セルから入力されている最終行まで一気に取得
var gohanData = gohan.getRange(1, 1, gohan.getLastRow());
// ランダムで候補を選ぶ
var intRandomNum = Math.round(Math.random()*gohan.getLastRow());
text = gohanData.getValues()[intRandomNum][0];
}
else {
text = "「ご飯」って話しかけてね。"
}
var postData = {
"replyToken" : data.events[0].replyToken,
"messages" : [
{
'type':'text',
'text':text,
}
]
};
var options = {
"method" : "post",
"headers" : headers,
"payload" : JSON.stringify(postData)
};
return UrlFetchApp.fetch(url, options);
}
/**
LINEからのPOST受け取り
*/
function doPost(e) {
var json = JSON.parse(e.postData.contents);
var data = SpreadsheetApp.openById(spreadsheet_id).getSheetByName('log').getRange(1, 1).setValue(json.events);
reply(json);
}
|
参考:https://blog.pnkts.net/2018/06/03/line-messaging-api/
スプレッドシートIDはシートを開いてる際のURL以降の部分がIDになります。
公開
ここまできたら、GASを公開可能にします。
「公開」メニューから「ウェブアプリケーションとして導入」を選択します。
※画像はいろいろ施し入れた現在のバージョンなので28になってます。。。
アプリケーションにアクセスできるユーザーを「全員(匿名ユーザーを含む)」にして導入ボタンを押せば、公開完了です!
承認などの画面が出た場合は画面の手順に沿って承認をして下さい。
ちなみに、コードを改修した場合は都度この手順が必要です。
また、プロジェクトバージョンをその都度「New」にしてあげないと、最新コードが反映されない事がありますのでご注意を!
LINE Developerコンソール画面を開き、Webhook設定を「利用する」に設定し、
URL部分に「現在のウェブアプリケーションのURL」を入力してあげます。
その時、疎通確認が出来ますので、下記のような表示になることを確認しましょう!
話しかけてみる
LINE Developerコンソール画面の、「LINEアプリへのQRコード」からBOTと友達になって話しかけてみます。
お手軽簡単に作ることが出来ました。
次回はこのBOTをどんどこ強化していきたいなと思います。