2021 LINE Bot 教學:讓LINE 機器人知道使用者/ 群組成員的名字

文章推薦指數: 80 %
投票人數:10人

在開發LINE Messaging API 時,你可能需要讓機器人知道傳訊息來的LINE 使用者名稱,但官方預設的API 回傳資料只有一長串的User ID,這篇來分享怎麼 ... LINEBot 程式開發閱讀時間:2分鐘沒有留言2021LINEBot教學:讓LINE機器人知道使用者/群組成員的名字 Shawn2021-08-17 Total 0 Shares 0 0 教學如何讓LINEBot取得使用者名稱等資訊,叫出對方是誰 Total 0 Shares 0 0 0 在開發LINEMessagingAPI時,你可能需要讓機器人知道傳訊息來的LINE使用者名稱,但官方預設的API回傳資料只有一長串的UserID,這篇來分享怎麼用UserID取得使用者的LINE帳號名字,讓訊息內容更貼切~ 目錄 隱藏 1. 問題:LINE官方API只給UserID 2. LINE機器人取得使用者名字(資訊)方法 2.1. Shell 2.2. Python 2.3. Node.js 2.4. GoogleAppScript 3. LINE機器人取得群組成員名稱的方法 4. LINEBot取得使用者名字的應用 問題:LINE官方API只給UserID 在LINE官方的說明文件中,可以看到有使用者傳訊息時,LINEReceiveWebhook的JSON檔案內容如下: { "destination":"xxxxxxxxxx", "events":[ { "replyToken":"***", "type":"message", "mode":"active", "timestamp":1462629479859, "source":{ "type":"user", "userId":"U4af4980629..." }, "message":{ "id":"325708", "type":"text", "text":"@exampleHello,world!(love)", "emojis":[ { "index":23, "length":6, "productId":"5ac1bfd5040ab15980c9b435", "emojiId":"001" } ], "mention":{ "mentionees":[ { "index":0, "length":8, "userId":"U850014438e..." } ] } } } ] } 可以看到接收訊息的Webhook裡面只有一長串的UserID,而沒有該位使用者的帳號名稱,是因為需要呼叫另一個API,讓機器人用這組ID去查詢該帳號的名稱等資料。

下文來分享怎麼讓LINEBot知道帳號名稱,叫出對方名字。

LINE機器人取得使用者名字(資訊)方法 若要讓LINE機器人的程式碼取得使用者的名字,需要以下兩個資訊: 使用者UserID,會包含在LINEMessagingAPI的ReceiveWebhook裡你的LINEAPIToken 而LINE會以json格回傳使用者的資訊給你,包括: 使用者的帳號名字使用者大頭照網址使用者的bio內容使用者的偏好語言 { "userId":"U82******************", "displayName":"張君祥",//傳訊息使用者的帳號名字 "pictureUrl":"https://sprofile.line-scdn.net/***/",//使用者的大頭照圖片網址 "statusMessage":"蘋果仁IG編輯\n做個無所畏懼的謙卑之人",//使用者的Bio "language":"zh-Hant"//使用者的偏好語言 } 再來是呼叫API,各種程式語言的語法如下: Shell user_id改為你自己解析JSON的變數,並將{channelaccesstoken}改成你的APIToken curl-v-XGEThttps://api.line.me/v2/bot/profile/{userId}\ -H'Authorization:Bearer{channelaccesstoken}' Python Python取得LINEuser名稱的語法如下: fromlinebotimportLineBotApi fromlinebot.exceptionsimportLineBotApiError line_bot_api=LineBotApi('') try: profile=line_bot_api.get_profile('') exceptLineBotApiErrorase: #errorhandle ... Node.js constline=require('@line/bot-sdk'); constclient=newline.Client({ channelAccessToken:'' }); client.getProfile('') .then((profile)=>{ console.log(profile.displayName);//顯示使用者名字 console.log(profile.userId); console.log(profile.pictureUrl);//顯示使用者大頭照網址 console.log(profile.statusMessage)//使用者自介內容 }) .catch((err)=>{ //errorhandling }); GoogleAppScript AppScript語法比較特別,要用UrlFetchApp: //user_id要另外取 constmsg=JSON.parse(e.postData.contents); constuser_id=msg.events[0].source.userId; varresponse=UrlFetchApp.fetch("https://api.line.me/v2/bot/profile/"+user_id,{ "method":"GET", "headers":{ "Authorization":"Bearer{刪掉括號,放入你的Token}", "Content-Type":"application/json" }, }); varnamedata=JSON.parse(response);//解析json varuser_name=namedata.displayName;//抓取json裡的displayName } 只要將上述的code放到你的程式碼中即可讓機器人讀取使用者的帳號名字,機器人也就能叫出使用者是誰了~其他語法請參考官方文件 LINE機器人取得群組成員名稱的方法 如果你的想開放機器人加到群組,並取得群組成員的名字,需要多從原始json取出GroupID並修改API網址: constmsg=JSON.parse(e.postData.contents); constgroupid=msg.events[0].source.groupId;//從原始json取出群組ID //並將API網址改成https://api.line.me/v2/bot/group/"+groupid+"/member/"+user_id //還是需要user_id喔 參考資料:LINE官方文件之群組資訊說明 LINEBot取得使用者名字的應用 利用上文的程式碼,你可以在回覆的訊息文字中加上使用者名字的變數,讓機器人叫出對方是誰,或是可以將名稱直接紀錄到資料庫內,而不是落落長的user_id。

像我就是用這個方法取的名字,達到紀錄名字到Google試算表的目的,詳情可以看這篇LINEBot教學: 做個LINE機器人記錄誰+1!群組LINEBot製作教學與分享 嗨囉我是Shawn,首先感謝你看完全部內容!我是位大一學生,也是一間新創的前端實習生,希望跟大家分享如何運用科技提高生產力,並在網站紀錄著自己樸實無華的平凡人生。

如果對於文中內容有任何問題,或是商業合作洽詢,可在下方管道與我聯繫: e-mail:[email protected] Telegram:jschang666 LinelinebotlinemessagingAPILINE機器人取得名字 Share 0 Share 0 發佈留言取消回覆發佈留言必須填寫的電子郵件地址不會公開。

必填欄位標示為*留言*顯示名稱* 電子郵件地址* 個人網站網址 Δ 查看留言(0) 前一篇文章 學習與效率 生活紀錄 上高中這兩年,6個影響我最多的思維模式 2021-07-22 下一篇文章 iOS/iPhone教學 iPad鼠標開啟教學!3種方法讓iPad顯示滑鼠游標 2021-08-17 最新文章 生活紀錄 從金融系到UI設計師:轉職心得分享與經驗談ft.學習家&EliseFu 學習與效率 生活紀錄 程式開發 IT實習生的心得筆記:4個我所學的重點心法(沒有程式碼) 學生資訊 科技教學 準大學生請看!2022大學新生免費資源&優惠懶人包 好站推薦 我的社群帳號 Instagram GitHub LinkedIn Medium



請為這篇文章評分?