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の表示名を取得するのにてこずりました。
コメント