LoginSignup
4
9

More than 5 years have passed since last update.

LINEmessagingAPIとGoogleAppsScriptを使って在庫管理をする。

Posted at

あいさつ

はじめまして、onm.という者です。(twitter→@loxopr)
プログラム経験的には学生時代に授業で少し学んだぐらいです。(工業機械系です
お仕事は違うことをやっています。
なのでデタラメを書いてることが多いと思いますが、その時は教えてください。。。お願いします。
勉強します。

今回やりたいこと

仕事で消耗品を使う機会が結構多いです。なので在庫管理表を作成します。
今回は録音業務で使用するCD-Rの在庫表を作成します。

しかし、在庫管理表なんかをExcelで作成して手書きでも良いのでしょうけど、
現場上あまり好まれません。紙どっかいっちゃうこと多いし。
なので覚えたてのGoogle Apps Scriptで作っちゃえーっていう。感じです。
すみません適当です。

作業的には
LINE Message APIでBOTを作成、作ったLINE BOTにメッセージ送ることによってスプレッドシートに書き込み。
在庫も知りたいので特定のメッセージに反応して在庫の数を返す。です。

GoogleAppsScript

主にGoogleAppsScript使います。導入は割愛。

Google Apps Script入門
アイデアを記録・想起する LINE Bot を作ってみました。
今回参考にした記事です。ソースはほぼコピペしました。すみません。

コード

code.gs
var CHANNEL_ACCESS_TOKEN = "アクセストークン"; // LINE BOTのアクセストークン

var line_endpoint = 'https://api.line.me/v2/bot/message/reply';

function createSpreadSheet(sh) {
  var spreadSheet = SpreadsheetApp.openById('記入するスプレッドシートのID');
  var sheet = spreadSheet.getSheets()[0];
  sheet.appendRow(['日時', '使用枚数']);
  PropertiesService.getScriptProperties().setProperty(sh,spreadSheet.getId());
  var file = DriveApp.getFileById(spreadSheet.getId());
  file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
  sheet.setColumnWidth(1, 150);
  sheet.setColumnWidth(2, 65);
  return spreadSheet;
}
function getSpreadSheet(sh) {
  var sid = PropertiesService.getScriptProperties().getProperty(sh);
  if (sid == null) {
    return createSpreadSheet(sh);
  } else {
    try {
      return SpreadsheetApp.openById(sid);
    } catch(e) {
      return createSpreadSheet(sh);
    }
  }
}

function addToSpreadSheet(sh, message) {
  var today = new Date();
  var spreadSheet = SpreadsheetApp.openById('スプレッドシートのID');
  var sheet = spreadSheet.getSheets()[0];
  sheet.appendRow([today, message]);
}

function doPost(e) {
  var json = JSON.parse(e.postData.contents);  

  var reply_token= json.events[0].replyToken;
  if (typeof reply_token === 'undefined') {
    return;
  }

  var sh = json.events[0].source.user;
  var user_message = json.events[0].message.text;  

  var reply_messages;
  var spreadSheet;
  if ('ヘルプ' == user_message) {
    reply_messages = ["CD-Rの使用枚数を数字で記入してください。 \在庫を追加したい場合は-数量で入力してください\n\n在庫を知りたい場合は【在庫】と入力してください"];
  } else if ('スプレッドシート' == user_message) {
    spreadSheet = getSpreadSheet(sh);
    reply_messages = [spreadSheet.getUrl()];
  } else if (typeof user_message === 'undefined') {
    reply_messages = ["ゴメンナサイ、文字以外の情報には対応していません。\n\n使い方が知りたいときは「ヘルプ」と入力してみてください。"];
  }

    else if ('在庫' == user_message) {
    spreadSheet = getSpreadSheet(sh);
    var zaiko =[];
    var sheet = spreadSheet.getSheets()[0];
    var zaiko = sheet.getRange("G2").getValue(); 
        reply_messages = [zaiko];
  } 

   else {
    addToSpreadSheet(sh, user_message);
    reply_messages = ['更新されました'];
  }

  var messages = reply_messages.map(function (v) {
    return {'type': 'text', 'text': v};    
  });    
  UrlFetchApp.fetch(line_endpoint, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': reply_token,
      'messages': messages,
    }),
  });
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

まとめ

GASをウェブアプリケーションとして公開して、
でてきたURLをLINEBOTのWebhookに指定しておしまい。

これで、作ったLINE BOTに対して数字を送信すればスプレッドシートに数字が記入されます。(日付と時間も
減算方法はスプレッドシートの方で関数を組んでいます。原始的です。何かもっといい方法があるのかな。
在庫 と送信した場合にはスプレッドシートのセルの値を取得して表示しています(取得先はG2としています

これでライングループに他の作業員の方々を入れて、
そこにBOTをいれておけばCD-Rの使用後にメッセージを送るだけで、在庫管理ができますね!

今後やりたいこと

在庫がある一定の値より少なくなった場合に、そろそろ買ってね!て通知する
在庫追加したよ!っていうのを別の場所に記す。日付も。
数字以外の文字を入れたらエラーを返す。
在庫がCD-Rのみのものになっているので、
LINEで送信する数字の接頭に、名目を入れれば名目別のシートに記入される!

この辺りを今後実装できたらなーっていう妄想はしています。
まだ実務には導入できそうもないけど

最近気になること

最近、Google homeやNatureRemoを手に入れまして遊んでおります。
もっと拡張的なことやるには何ができるかなー。と調べていたところQiitaを見つけました。
とても便利そうなので、自分も覚書程度に記していこうと思います。
同じことをやっている方が多いのでとても参考にしてます。よろしくお願いします。

4
9
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
4
9