これは何
個人で色々試行錯誤して公式LINEを利用した、介護の緊急時に職場へメールを送る仕組みができたので共有&ブラッシュアップしたいので、ご意見を是非ください!!
作成背景
- 職場では私用携帯が使えない時がある(データセンター訪問時とか会議中)ので、社用携帯に通知をさせたかった
- 家族の連絡手段が「LINE」なので「LINE」⇒「職場メールアドレスが受信」ができれば、私用携帯につながらないとき時の連絡経路を作っておきたかった
利用環境
- LINE公式アカウント
- 自分の私用LINEアカウントで開設
- LINE Developers
- 開設した個人のLINE公式アカウントと紐づける
- GAS(Google Apps Script)
- gmail送信用
- WebhookURL(サーバー)用
準備
LINE公式アカウント
公式サイト通りに登録を進めていくだけ
LINE Developers
- LINE Developersへ登録
- 公式アカウント開設したアカウントと紐づけ
この記事がかなりわかりやすかったです
構築~稼働開始
初期動作確認
以下のプログラムをGASに実装&公開&WebhookURLを設定して応答確認
const ACCESS_TOKEN = 'ここにチャネルアクセストークン'
const REPLY_URL = 'https://api.line.me/v2/bot/message/reply';
function doPost(e) {
let json = JSON.parse(e.postData.contents);
let replytoken= json.events[0].replyToken;
const userMessage = JSON.parse(e.postData.contents).events[0].message.text;
Logger.log(json);
if (typeof replytoken === 'undefined') {
return;
}
let message = json.events[0].message.text;
Logger.log(message);
UrlFetchApp.fetch(REPLY_URL, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + ACCESS_TOKEN,
},
'method': 'post',
'payload': JSON.stringify({
'replyToken': replytoken,
'messages': [{
'type': 'text',
'text': '動作確認テスト',
}],
}),
});
return ContentService.createTextOutput(
JSON.stringify({'content': 'post ok'})
).setMimeType(ContentService.MimeType.JSON);
}
実行結果
特定の文字に反応して返答をするように修正
function doPost(e) {
let json = JSON.parse(e.postData.contents);
let replytoken= json.events[0].replyToken;
const userMessage = JSON.parse(e.postData.contents).events[0].message.text;
Logger.log(json);
if (typeof replytoken === 'undefined') {
return;
}
let message = json.events[0].message.text;
Logger.log(message);
if(userMessage == 'Help') {
UrlFetchApp.fetch(REPLY_URL, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + ACCESS_TOKEN,
},
'method': 'post',
'payload': JSON.stringify({
'replyToken': replytoken,
'messages': [{
'type': 'text',
'text': '動作確認テスト',
}],
}),
});
return ContentService.createTextOutput(
JSON.stringify({'content': 'post ok'})
).setMimeType(ContentService.MimeType.JSON);
}
}
実行結果
「リッチメニュー」を使って簡単に指定文字を送信
公式アカウントの「トークルーム管理」「リッチメニュー」でボタンを追加
⇒「テキスト」で「Help」の文字がボタンを押すだけで送信されるようにする
設定方法
設定結果
Gmailで職場の連絡先へ送信するようにプログラムを修正
function doPost(e) {
let json = JSON.parse(e.postData.contents);
let replytoken= json.events[0].replyToken;
const userMessage = JSON.parse(e.postData.contents).events[0].message.text;
Logger.log(json);
if (typeof replytoken === 'undefined') {
return;
}
let message = json.events[0].message.text;
Logger.log(message);
if(userMessage == 'Help') {
sendEmail();
}
}
function sendEmail(){
let to = "******@****.jp";
let subject = "介護用緊急連絡";
let body = "家族より介護の緊急連絡が入りました。";
MailApp.sendEmail(to, subject, body);
}
よしできた~
作成した後の振り返り
- Line⇒メールの手段はいくつかある(ZapierとかのSaaSサービス)が、公式LINEなら家族も使っているので受け入れやすかった
- GAS側でCcを加えることができるので、複数人(介護関係者)に送るのができそう
- サーバーいらなくてGmailをさくっと送信できるのは「GAS」の強みだなぁ
改善点
- GASのプロパティを使ってちょっとセキュリティ意識しよう、、
- 「MailApp.sendEmail()」⇒「UrlFetchApp.fetch()」という順番で実行させたかった、、
- 同期処理の順番が分からなく、試行錯誤をしたがうまくいかなかったので「Gmailで職場の連絡先へ送信するようにプログラム」で運用開始
- 以下の記事等を参考にして、「LINE」と「メール」の両方にメッセージが飛ぶようにしたい
- https://qiita.com/tanaike/items/e6b3b43461bfdec8005b
ご精読ありがとうございました。
改善点とかこの箇所こうしたほうがいいよ随時コメントください!!