LINEで情報共有したいけどLINEをインストールしていない人もいるんじゃないかと思って作ってみました。
使用したもの
・Google Apps Script
・Gmail
・LINEのMessaging API(Developer Trial)
始めに
Google Apps Scriptの準備
Googleドライブで新規->その他->Google Apps Scriptを選択するとスクリプトファイルが作成できます。
次に、LINEから送られるJSONを受け取れるようにURLを取得します。スクリプトファイルを開き、公開->ウェブアプリケーションとして導入->更新を選択するとURLが表示されるのでこれをメモしておきます。
LINE Messaging APIのアカウント作成
LINE Messaging API に登録する必要があります。以下のURLからDeveloper Trialでアカウントを作成して下さい。
https://business.line.me/ja/services/bot
Botの設定
LINE@MANAGERでアカウント設定->Bot設定を選択して、Webhook送信とBotのグループトーク参加を利用する、自動応答メッセージと友達あいさつは利用しないを選択してください。
次にLINE developersのBasic informationでWebhook URLにGoogle Apps Scriptで表示されたURLを入力、Channel Access TokenはISSUEを選択して下さい。
1.LINEのグループIDを取得する
始めにグループトークのIDを取得します。IDはグループトークに参加した時に送られるので、送られてきたIDをGASを使ってスプレッドシートに書き込みます。
LINEのMessaging API Reference (Join event)
GASのSpreadSheeet関連のReference
//MAIL_ADDRESSは送信先のメールアドレス
function sendMail(text) {
try{
var address = PropertiesService.getScriptProperties().getProperty('MAIL_ADDRESS');
MailApp.sendEmail(address, 'LINE', text);
}
catch(e){
}
}
//SPREAD_SHEETはスプレッドシートのURL
function writeSpread(group_id){
var url = PropertiesService.getScriptProperties().getProperty('SPREAD_SHEET');
var spreadsheet = SpreadsheetApp.openByUrl(url);
var sheets = spreadsheet.getSheets();
var sheet = sheets[0];
var lastrow = sheet.getLastRow();
sheet.getRange(lastrow+1, 1).setValue(group_id);
sendMail('good');
}
function doPost(e) {
var webhook = JSON.parse(e.postData.contents).events[0];
if(webhook.type === 'join'){
writeSpread(webhook.source.groupId);
}
}
2.グループトークのメッセージを取得してメールで送信する
グループトークに新しいメッセージが送られた時にメッセージの内容をメールで送信します。doPostにメッセージを送信する追加します。
また、このプログラムではtextメッセージしかメールで送れないようになっています。
function doPost(e) {
var webhook = JSON.parse(e.postData.contents).events[0];
if(webhook.type === 'join'){
writeSpread(webhook.source.groupId);
}else{
var message_type= JSON.parse(e.postData.contents).events[0].message.type;
if (message_type === 'text') {
var user_message = JSON.parse(e.postData.contents).events[0].message.text;
sendMail(user_message);
}
}
}
3.メールで送信した文章をグループトークに送信する
メールをGmailに送信しGmailの未読となっているメールの文章を取得してグループトークに送ります。
最初にグループIDをスプレッドシートから取得していますが、1Aに書いてあるIDを取得するようにしています。
LINEのMessaging API Reference (Push message)
function get_groupid(){
var url = PropertiesService.getScriptProperties().getProperty('SPREAD_SHEET');
var spreadsheet = SpreadsheetApp.openByUrl(url);
var sheets = spreadsheet.getSheets();
var sheet = sheets[0];
var startrow = 1;
var startcol = 1;
var lastrow = sheet.getLastRow();
var lastcol = 2;
var sheetdata = sheet.getSheetValues(startrow, startcol, lastrow, lastcol);
return sheetdata[0][0];
}
function Push_message(text){
var group_id = get_groupid();
//url_pushはhttps://api.line.me/v2/bot/message/push
//CHANNNEL_ACCESS_TOKENはBotのChannel Access Token
UrlFetchApp.fetch(url_push, {
'headers': {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN
},
'method': 'post',
'payload': JSON.stringify({
'to': group_id,
'messages': [{
'type': 'text',
'text': text
}]
})
});
}
未読メールの文章を取得するコードです。
GASのGmail関連のReference
function getMail(){
var start = 0;
var max = 500;
var label = 'LINE'
var mail = GmailApp.search('label:' + label + ' is:unread', start, max);
for(var i = 0; i < mail.length; i++){
var messages = mail[i].getMessages();
for(var j = 0; j < messages.length; j++){
if(messages[j].isUnread()){
var body = messages[j].getBody();
body = body.replace(/<div>Windows メール から送信<\/div>/g, '');
var body_array = body.match(/<div>.+<\/div>|<div>.+<br>/g);
body = '';
for(var k = 0; k < body_array.length; k++){
body += body_array[k];
}
body = body.replace(/<div>/g, '');
body = body.replace(/<\/div>/g, '\n');
body = body.replace(/<br>/g, '');
Push_message(body);
}
}
message[i].markRead();
}
}
これでメールからグループトークにメッセージを送れるようになりますが、このプログラムを定期的に実行する必要があります。
スクリプトファイルで時計のアイコンを選択して実行をgetMail,イベントを分タイマー、1分ごとに設定すると1分おきにgetMailが実行され未読メールからグループトークにメッセージを送信できます。
後はLINE Botをグループトークに招待すればメールでLINEのやり取りができます。
最後に
一応メールでLINEのやり取りができるようになりましたが、メールからではグループトークで誰が発言したのかがわかりません。こんな遠回りなことをするよりLINEをインストールさせたほうが楽ですね。