IT関係初心者が、LINEのグループにメッセージが来ると、それをChatworkへ飛ばして見せます!
先日、ChatworkからLINEへメッセージを送信したので、今度は逆にLINEからChatWorkへ投稿してみます。
LINE DevelopersでBotの作成
これは前回のBotを使用します。
新しく作成するときはこちらを参考にして下さい。
GASでプログラム
実際は1つのプログラムですが、それぞれのパートに分けて説明していきます。
LINEにメッセージがあったときの処理
Botがいるグループにメッセージがあると、登録しているWebhookをたたいてくれます。まずは、その部分です。
今回もですが、こちらのサイトを参考にしています。ありがとうございます。
var Chatwork_API = '*******************************'; var CW_room_id = '********'; //ルームID var LINE_CHANNEL_ACCESS_TOKEN = '************************************'; function doPost(e){ var reply_token= JSON.parse(e.postData.contents).events[0].replyToken; //メッセージが無かったら殺す if (typeof reply_token === 'undefined') { return; } //きたメッセージを取得 var GroupID = json.events[0].source.groupId; var UserID = json.events[0].source.userId; var text = json.events[0].message.text; var UserName = getUserName(UserID);// 表示名を確認 if (UserName == 0){ var body = '[info][title]「LINEのグループ」にメッセージきたけど、名前がわかりません。[/title]' + text + '[/info]'; }else{ var body = '[info][title] ' + UserName + 'さんから「LINEのグループ」にメッセージだよ。[/title]' + text + '[/info]'; } }
Chatwork側ではChatworkに作成したアカウントがメッセージを送ります。1対1だったら、いいのですが、グループだと誰から送られてきたか知る必要があります。
幸いLINEから送られてくるJSONの中にはUserIDが入っていますが、これではだれだかわかりません。
そこで、下で表示名を取得します。
UserIDを利用して、LINEの表示名を取得する
//Userの表示名取得 function getUserName(UID){ var url = 'https://api.line.me/v2/bot/profile/' + UID; try {//エラー処理 var response = UrlFetchApp.fetch(url,{ 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN, } }) }catch(e){//表示名を取得できなかったら return 0; } var json = JSON.parse(response.getContentText()); return json["displayName"] }
これで、LINE Developersでプロフィールの表示名を取得できます。
つまずきポイント
自分のアカウントでテストしていて、表示名も取得しているし、うまくいっていると思ってました。
ところが、他の人がグループに送信したメッセージがChatworkにこないんです。
??テストで送ってみよう!→成功。
他の人が送る→失敗(;・∀・)ハッ?
????悩みました。
そうして、出た解がLINEで友達追加していないと取得できないんじゃない?→正解でした。
友達として登録すると、表示名を取得できました。
そこで、表示名を取得できなかったら「0」を返して、分岐条件としました。
テスト環境が自分ひとりだと、意外な落とし穴がありますね。(意外じゃないかな?)
Chatworkにメッセージ送信
こちらのサイトを参考にさせていただきました。
Google Apps Scriptでチャットワーク上におみくじチャットを作る
/* チャットワークにメッセージを送る */ function sendMessage(token,room_id,Body){ var params = { headers:{"X-ChatWorkToken":token},method:"post",payload:{"body":Body} }; var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/messages"; UrlFetchApp.fetch(url,params); }
ウェブアプリケーションとして導入
上記プログラムをまとめて、ウェブアプリケーションとして導入します。
LINEのBotのWebhookにプログラムのURLを登録
LINEにメッセージがあったら上のプログラムをたたいてほしいので、LINEのBotでWebhookの設定をします。
ウェブアプリケーションとして導入したときのアドレスを記入します。
完成です!
うまくいきましたかね?
自分としてはLINEの表示名を取得するのにてこずりました。
コメント