LANG SELRCT

コードを書く場所

2019年1月17日木曜日

LINE BOTでprofileを取得してみる


トーク画面にメッセージを投稿したユーザのprofileをトーク画面に返してみます

profileで取得できるのは
  • userId
  • displayName
  • pictureUrl
  • statusMessage

値はマスクしていますが、こんな感じで取得できます



公式リファレンスのこれを参考にしました
https://developers.line.biz/en/reference/messaging-api/#get-profile




コード.gs
function getToken() {
  return PropertiesService.getScriptProperties().getProperty('token');
}

function doPost(e) {
  var contents = e.postData.contents;
  var obj = JSON.parse(contents)
  var events = obj["events"];
  for(var i = 0; i < events.length; i++){
    if(events[i].type == "message"){
      replyMessage(events[i]);
    }
  }
}

function replyMessage(e) {
  var userId = e.source.userId;
  var profile = getProfile(userId)
  var postData = {
    "replyToken" : e.replyToken,
    "messages" : [
      {
        "type" : "text",
        "text" : profile.toString()
      }
    ]
  };
  var options = {
    "method" : "post",
    "headers" : getHeaders(),
    "payload" : JSON.stringify(postData)
  };
  var url = "https://api.line.me/v2/bot/message/reply"; 
  UrlFetchApp.fetch(url, options);
}

function getHeaders() {
  var headers = {
      "Content-Type" : "application/json",
      "Authorization" : "Bearer " + getToken()
    };
  return headers;
}

function getProfile(userId) {
  var options = {
    "method" : "get",
    "headers" : getHeaders()
  };
  var url = 'https://api.line.me/v2/bot/profile/' + userId; 
  var response = UrlFetchApp.fetch(url, options);
  return response;
}

意訳
この機能がやること
スクリプトのプロパティに保存してあるtokenの値を返す


この機能がやること
送られてきた投稿内容を取り出して
オブジェクトに変換して
eventsを取り出して
eventsの数だけ繰り返す
eventsをひとつずつ見てtypeがmessageなら
replyMessageに渡す




この機能がやること
userIdを取得して
getProfile()に渡した戻り値を取得して
postDataを作る
replyTokenを取り出して設定して
メッセージを作る

typeを決める
textを決める



optionsを作る
methodを決める
headersを決める
payloadを決める

urlを指定して
UrlFetchApp.fetchでLINEに送る


この機能がやること
headersを作る
Content-Typeを決める
Authorizationを決める

返す


この機能がやること
optionsを作る
methodを決める
headersを決める

profileのURLにuserIdを付けて 
UrlFetchApp.fetchでLINEに送って
返ってきたデータを返す




関連記事


参考

Get profile
https://developers.line.biz/en/reference/messaging-api/#get-profile