トーク画面にメッセージを投稿したユーザの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