芋出し画像

LINEで䜓枩🌡を蚘録する、を䜜る

LINE公匏アカりントを䜿っお、毎日の䜓枩を蚘録をするプログラムを䜜りたした。

いわゆる「チャットボット」ず呌ばれおいる代物。
こんな感じ ↓

画像1

プログラムず蚀っおも、そんな倧仰なものではなく、Google スプレッドシヌトで䜜っただけなんですけどね。

Google スプレッドシヌトに付随しおるスクリプト、Google Apps Script ※を䜿っお。

・

䜓枩蚘録 LINE の機胜は、

● 䜓枩を入力する、蚘録する
● 2週間分14日分のデヌタを衚瀺する
● アラヌム。蚭定した時刻に通知が来る

だけです。シンプルむズベスト。

蚘録した䜓枩デヌタの倉曎・削陀に぀いおは、
元垳の Google スプレッドシヌトでやっおね♡  ず蚀う感じで。
凊理が煩雑になるので取り入れたせんでした。

※ Google Apps Script『Googleのサヌビスを自動化するスクリプト蚀語』だそうです。略称 GAS。


「だれが䜿うの」

お店や家族で䜿えるかず思っお。

䜓枩蚘録しおおけば、䜕かのずきに、孊校や機関ぞすぐ提出できたすしね。

サッず確認できるようにしたした。こんなふうに ↓

画像2

蚭定した時間朝になるず LINE に通知が来るアラヌム機胜をくっ぀けたので、蚘録挏れも枛るでしょう。

・

実はこれ、もずもず「売䞊を蚘録するプログラム」だったんですよ。

毎日、Excel にデヌタ売䞊や客数を入力するのがメンドくさいずいう声があっお。

PC起ち䞊げ → Excel 起ち䞊げ → ファむル開いお → 今日の日付を探しおデヌタ入力。
確かに面倒くさい。

なら、
LINE で「今日の売䞊デヌタ」を入力すれば良いんじゃ  ず。
デヌタは Google スプレッドシヌトに蓄積されおいるので、蚘録のコピペもグラフ化も簡単らくちん♪


ずころが結局、その売䞊蚘録 LINE はボツになりたしおん。HaHaHa
捚おおしたうのもなんだし、䜓枩蚘録 LINE に曞き換えた次第。

さお。


【LINE 公匏アカりント・リッチメニュヌの蚭定】

たずは「LINE 公匏アカりント」の䜜成。

â–Œ LINE公匏アカりントの開蚭
https://www.linebiz.com/jp/entry/

  開蚭できたら
    ↓

《LINE Official Account Manager》にログむンした状態で、リッチメニュヌの線集画面ぞ。

  ホヌム > トヌクルヌム管理 > リッチメニュヌ

① タむトルをクリック。新芏の堎合は「䜜成」をクリック
② 「テンプレヌトを遞択」で、小・3぀ボタンを遞択。

画像3

③ 「背景画像をアップロヌド」で、メニュヌボタンの画像をアップロヌド。

メニュヌ画像のデザむンはお奜みで。わたしが䜜ったボタンはこんな感じ↓

画像4

画像サむズ1200 × 405px

④「アクション」に、ボタンをタップした時のアクションを登録。

ボタンABCのタむプはすべお「テキスト」にしお、
 A「/menu」
 B「/alarm」
 C「/contact」
を入力しおおきたす。
これらはスクリプトに枡すコマンドです

「保存」をクリックしお完了。

リッチメニュヌのできあがり。

画像5


【LINE の Messaging API】

LINE 公匏アカりントで、メッセヌゞのやりずりをするには「アクセストヌクン」ず呌ばれる IDのようなものが必芁です。
※ 取埗するのは「チャネルアクセストヌクン長期」。

管理者向けペヌゞで取埗したしょう。こちら↓


詳しくは @njn0te さんの動画を参考に。
きっちり最埌たで芖聎したわけではないですが2時間ありたす。わお、すごく䞁寧に説明されおいたした。いいですね、動画で孊べるっお。


【Google スプレッドシヌトの初期蚭定】

さお、お次はスプレッドシヌトの䜜成です。

ファむルを新芏䜜成埌、シヌトを4぀準備し、それぞれ「total」「record」「faq」「log」ずしおくださ  

画像6

  ず説明をするより、サンプルを耇補しおもらったほうが早いですね。
こちらからファむルをコピヌしおください。↓

《🌡 䜓枩蚘録テンプレヌトコピヌしお利甚しおください》

画像7

※ 芁 Google アカりントでログむン。


【GAS ( Google Apps Script ) のコヌド】

぀づいお、「スクリプト ゚ディタ」を起動させたす。

画像8

画像9

で、ここにプログラムスクリプトを蚘述するわけですが、なんのかんのず 1500 行ぐらいあったので曞き始めの郚分だけ公開しおおきたす。

note に党文掲茉しおも鬱陶しいでしょうから。
欲しいずいう人がいたら、どこかに掲茉したす😀 

最初の 100 行はこんな感じ ↓

const BOTNAME="\🌡 䜓枩蚘録垳";
const CONTACT_URL="http://lin.ee/p0zqFRP";// 連絡先アドレス
const MAILTO="xxxxxxx@xxxxxxx.jp";// 通知先アドレス蚭定
// ================;
// LINE API アクセストヌクン蚭定
const LINE_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// Google スプレッドシヌト蚭定。シヌトはあらかじめは䜜っおおくこず
// https://docs.google.com/spreadsheets/d/<SS_ID>/
const SS_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const SHEET_RECORD="record";
const SHEET_TOTAL="total";
const SHEET_FAQ="faq";
const SHEET_LOG="log";
// 通知蚭定
const NOTIFICATION_MAIL=0;// メヌル通知を受ける堎合は1に (default: 0)
const NOTIFICATION_LINE=1;// LINE 通知を受ける堎合は1に (default: 0)
// 確認時の衚瀺日数
const VIEW_DAYS=14;
// ボタンの蚭定
var actKwd={};
actKwd.A="/menu";//リッチメニュヌAメニュヌ
actKwd.B="/alarm";//リッチメニュヌB通知
actKwd.C="/contact";//リッチメニュヌC連絡
actKwd.A1="/input";//入力
actKwd.A2="/check";//確認
actKwd.A3="/edit";//倉曎
actKwd.B1="/activate";//アラヌム有効
actKwd.B2="/disable";//アラヌム解陀
const btnColor="#554466";
// 遞択ボタン蚭定
var btnWords={};
btnWords.menuA=[
	["デヌタ入力 \✏",actKwd.A1],
	["蚘録の確認 \🔍",actKwd.A2],
	["倉曎・削陀 \📗",actKwd.A3],
];
btnWords.menuB=[
	["通知アラヌムを蚭定 \🔔",actKwd.B1],
	["通知の解陀 \🔕",actKwd.B2],
	//["No","thx"],
];
btnWords.confirm=[
	["OK。確定する","/ok"],
	["キャンセル","/cxl"],//再入力
];
btnWords.confirmB=[
	["キャンセルする","/cxl"],
	["いいえ。そのたたで","/keep"],
];
//================================//
// !● 凊理の本道
//================================//
function doGet(e){
	return ContentService.createTextOutput("Hello!");
}
function doPost(e){
	if(typeof e==undefined)return;
	try{
		main(e);
	}
	catch(error){
		logging(JSON.stringify(e));
		logging(JSON.stringify(error));
		var replyToken=JSON.parse(e.postData.contents).events[0].replyToken;
		return replyMess(replyToken,{"type":"text","text":error.message});
	}
}
function main(e){
	// Google スプレッドシヌト蚭定
	var SSfile=SpreadsheetApp.openById(SS_ID);
	var SSl=SSfile.getSheetByName(SHEET_LOG);
	// LINE からのデヌタ敎理
	var json=JSON.parse(e.postData.contents);
	var event=json.events[0];
	var repToken=event.replyToken;
	var type=event.type;
	var chatId=getChatId(json);
	var displayName=getDisplayName(chatId);
	if(type==="message"){
		var message=event.message.text;
		var pbParams=null;
	}
	else if(type==="postback"){
		var message=event.postback.data;
		var pbParams=event.postback.params;
	}
	// ================;
	// 時間(d)・トランザクションID生成
	var d=new Date();
	var dt=Utilities.formatDate(d,"JST","yyyy/MM/dd HH:mm:ss");
	var ts=~~(d/1000);
	var QID=MD5(chatId+ts);
	// キャッシュ蚭定
	var cache=makeCache(600);
	// フラグ蚭定
	var FLG=(cache.get(chatId+".FLG"))?cache.get(chatId+".FLG"):cache.put(chatId+".FLG",null);// フラグ
	var SID=(cache.get(chatId+".SID"))?cache.get(chatId+".SID"):cache.put(chatId+".SID",null);// セッションID
	if(!SID)cache.put(chatId+".SID",QID);
	var RID=(cache.get(chatId+".RID"))?cache.get(chatId+".RID"):cache.put(chatId+".RID",null);// 泚文ID
	var SEQa=(cache.get(chatId+".SEQa"))?cache.get(chatId+".SEQa"):cache.put(chatId+".SEQa",0);// シヌケンス番号(Aラむン)
	var SEQb=(cache.get(chatId+".SEQb"))?cache.get(chatId+".SEQb"):cache.put(chatId+".SEQb",0);// シヌケンス番号(Bラむン)
	// ログ
	SSl.appendRow(["'"+QID,dt,chatId,displayName,"'"+message,FLG,SID,RID,SEQa,SEQb,"EOR"]);
	// LINE通知したい堎合はコメントアりトを倖しお
	// notifyMess(LINE_NOTIFY_TOKEN,QID+"\n\n"+displayName+"\n"+message+"\n\n"+FLG+", "+SID+", "+RID+", "+SEQa+", "+SEQb);
	// メニュヌ文蚀蚭定
	var strM="[MENU]\nコマンドを遞択しおください";
	var strA1="デヌタを送信しおください\n\n※数字のみで。小数点䞍芁";//\n※蚘号は自動削陀したす。\n※党角半角は問いたせん。
	var strB1="通知アラヌムを蚭定したす";
	/*
	 *
	 * //!▜メむンシヌケンス────────
	 *
	*/
	var messArr=[];
    ・
    ・
    ・
    ・
    ・
    ・


【LINE 通知のためにトリガヌ蚭定を】

スクリプトの蚭眮を終えたら、
LINE 通知アラヌムのために、GAS のトリガヌ蚭定をしたす。

蚭定は以䞋のように。

画像10

1分おきにスクリプトを起動させたす。

GAS のトリガヌ蚭定に぀いお詳しくは、@ntakahashi0505さんのブログ蚘事を参考に。
 â†’ https://tonari-it.com/gas-trigger-set/

画像11

LINE でのアラヌム蚭定画面はこんな感じ↑


【最初の蚭定はたくさんあっお倧倉だけど】

初期蚭定は以䞊です。

解説が雑になっちゃいたした。
どれぐらい詳しく説明すればいいのか、あたり考えずに曞き始めおしたったためによく分からなくなっお、途䞭で手を抜きたした。😆

LINE 公匏アカりントの開蚭に始たり 〜〜〜 Google Apps Script のコヌディング蚭定  
最初の蚭定がけっこうたくさんあっお、ちょっず面倒。

今さらですが、note に曞くこずじゃなかったなあず。Qiita ネタでしたねこれ。た、そんな日もあるよね。

・

いったん皌働し始めたら、あずはラクです。

今たで䜓枩を玙に蚘録しおたしたが、蚘録挏れが倚く、穎だらけでした。
けど、LINE 䜓枩蚘録を䜿い始めおからは毎日ちゃんず蚘録できおたす。アラヌム機胜を䜜っおおいおよかったヌ。

●
『むマキケ今さら聞けないアむティ講座』はこちらから
http://fb.com/imakike

この蚘事が気に入ったらサポヌトをしおみたせんか