LINEを使った1on1促進ツールのプログラミングについて-LINE公式とGoogle Apps ScriptとGoogle スプレッドシートの連携-SUNABACO DX8th&あんとれ1st
みなさん普段からLINEを使ってますか?
LINEをプログラムで動かすことでもっと便利に使えるようになります。
今回は以下2つの機能を実装しました。
・グループチャット内で毎日決まった時間にランダムにメッセージを送信する
→リマインダーとして使える
・公式アカウントがメッセージを受信した時にメッセージとタイムスタンプとユーザーIDを一緒にGoogle スプレッドシートに転記する
→誰がどんなメッセージを送ったかデータベースとして見られる。今回は業務進捗や予定などを管理。
12月9日にSUNABACO DX8th&あんとれ1stを卒業しました。
1ヶ月と2週間の受講期間、ついていくのに大変で挫折しそうになりました。
2週間の卒業制作ではチームの方々のおかげで制作を進めることができ、なんとか完走しました。その中でLINEを使ったツールを作りました。
受講するととてもいい経験になります。チームでやる大人の自由研究といった感じです。詳しくはhttps://sunabaco.com/dx/
今回の卒業制作ではプログラマを担当しました。
どうやって作ったか、順を追って説明していきます。
グループチャット内で毎日決まった時間にランダムにメッセージを送信するBotの作り方
Googleスプレッドシートを用意する
こちらをクリックすると新しいGooleスプレッドシートができます。
シート1のA列に送信したいメッセージを下のように1行に1つ記入してください。
続いてスプレッドシートIDを確認します。
スプレッドシートのURLのd/と/editの間の文字列がスプレッドシートIDです。後から使うのでそのままページを開いておいてください。
LINE公式アカウントの作成からGoogleAppScript(GAS)の設定
いくつか手順があります。
こちらの記事に詳しくわかりやすく載っています。
https://qiita.com/kanta_yamaoka/items/dd830cf23ff59353824d
記事内の「6.メッセージ自動送信用のGASプロジェクトの実装」の部分のみ記事とは変えます。
下記2件の.gsファイルを作成してください。
以下のコードの【】の部分を上書きして入力してください。
const LINE_TOKEN = '【ここにLINE公式アクセストークンを入力】';
const LINE_ENDPOINT = 'https://api.line.me/v2/bot/message/push';
const LINE_GROUPID = '【ここにLINEグループIDを入力】';
function notifyTheNightBefore() {
var message = randommessage()[0][0];
Logger.log(message);
lineReply(message);
}
// LINEへの応答
function lineReply(replyText) {
const headers = {
"Authorization": "Bearer " + LINE_TOKEN,
'Content-type': 'application/json'
}
const messages = {
"headers": headers,
"to": LINE_USERID,
"messages": [{
"type": "text",
"text": replyText
}]
};
const options = {
"headers": headers,
"payload": JSON.stringify(messages)
};
UrlFetchApp.fetch(LINE_ENDPOINT, options);
}
以下のコードのスプレッドシートIDは前に確認したスプレッドシート内の文字列を入力してください。
function randommessage() {
const File = SpreadsheetApp.openById('【ここにスプレッドシートのIDを入力】');
const baseSheet = File.getSheetByName('シート1');
var lastRow = baseSheet.getLastRow();
var row = Math.ceil(Math.random() * (lastRow-1)) + 1;
const range = baseSheet.getRange(row, 1);
console.log(range.getValue());
return range.getValues();
}
続いて記事の「7.GASでの関数の定期実行を設定する」を進めてください。
これでグループチャット内で毎日決まった時間にランダムにメッセージを送信するBotが完成しました。
公式アカウントがメッセージを受信した時にメッセージとタイムスタンプとユーザーIDを一緒にGoogle スプレッドシートに転記するの作り方
先ほど作ったスプレッドシートに新しく投稿という名前のシートを作成してください。
次に先ほど作ったGASプロジェクトに新しい.gsファイルを追加して下記のコードを入力してください。
// スプレッドシートのID
var SPREADSHEET_ID = "【ここにスプレッドシートのIDを入力】";
// シート名
var SHEET_NAME = "投稿";
var CHANNEL_ACCESS_TOKEN = "【ここにLINE公式アクセストークンを入力】";
function doPost(e) {
var json = JSON.parse(e.postData.contents);
if (json.events && json.events[0].type === 'message' && json.events[0].message.type === 'text') {
var userId = json.events[0].source.userId;
var message = json.events[0].message.text;
// ユーザーの表示名を取得または保存
var displayName = getUserDisplayName(userId);
// テキストメッセージとユーザー名をスプレッドシートに転記
appendToSpreadsheet(userId, displayName, message);
}
return ContentService.createTextOutput(JSON.stringify({}));
}
function appendToSpreadsheet(userId, displayName, message) {
var sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME);
var timestamp = new Date();
sheet.appendRow([timestamp, userId, displayName, message]);
}
function getUserDisplayName(userId) {
var sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME);
var userRow = findUserRow(userId);
if (userRow !== -1) {
// 保存済みの表示名を取得
return sheet.getRange(userRow, 3).getValue();
} else {
// ユーザープロフィールを取得して新しいユーザーを保存
var userProfile = getUserProfile(userId);
sheet.appendRow([new Date(), userId, userProfile.displayName, '']);
return userProfile.displayName;
}
}
function getUserProfile(userId) {
var url = 'https://api.line.me/v2/bot/profile/' + userId;
var options = {
'headers': {
'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN
}
};
var response = UrlFetchApp.fetch(url, options);
var userProfile = JSON.parse(response.getContentText());
return userProfile;
}
function findUserRow(userId) {
var sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME);
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) {
if (data[i][1] === userId) {
return i + 1; // 行数は1から始まるため
}
}
return -1;
}
以上で受信したメッセージがスプレッドシートに書き込まれていきます。
これでリマインダーとデータベースの作成ができるLINEグループチャットが作成できました。
この記事が気に入ったらサポートをしてみませんか?