LoginSignup
5
4

More than 3 years have passed since last update.

LINE Messaging APIとGoogle Apps ScriptでLINEをインストールしていない人でもグループトークに参加できるようにする

Last updated at Posted at 2017-03-25

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をインストールさせたほうが楽ですね。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4