- SDK สำหรับ LINE Messaging API สำหรับ Node.js
โปรดดูรายละเอียดในเอกสาร API อย่างเป็นทางการ
$ npm install linebot --save
var linebot = require ( 'linebot' ) ;
var bot = linebot ( {
channelId : CHANNEL_ID ,
channelSecret : CHANNEL_SECRET ,
channelAccessToken : CHANNEL_ACCESS_TOKEN
} ) ;
bot . on ( 'message' , function ( event ) {
event . reply ( event . message . text ) . then ( function ( data ) {
// success
} ) . catch ( function ( error ) {
// error
} ) ;
} ) ;
bot . listen ( '/linewebhook' , 3000 ) ;
const app = express ( ) ;
const linebotParser = bot . parser ( ) ;
app . post ( '/linewebhook' , linebotParser ) ;
app . listen ( 3000 ) ;
ดูโฟลเดอร์ examples
สำหรับตัวอย่างเพิ่มเติม
สร้างอินสแตนซ์ LineBot ด้วยการกำหนดค่าที่ระบุ
var bot = linebot ( {
channelId : CHANNEL_ID ,
channelSecret : CHANNEL_SECRET ,
channelAccessToken : CHANNEL_ACCESS_TOKEN ,
verify : true // Verify 'X-Line-Signature' header (default=true)
} ) ;
เริ่มเซิร์ฟเวอร์ http ในตัวบน port
ที่ระบุ และยอมรับการเรียกกลับคำขอ POST บน webHookPath
ที่ระบุ
วิธีการนี้มีไว้เพื่อความสะดวก คุณสามารถเขียนเซิร์ฟเวอร์ของคุณเองและใช้วิธี verify
และ parse
เพื่อประมวลผลเหตุการณ์ webhook ดู examples/echo-express-long.js
เป็นต้น
สร้างมิดเดิลแวร์ Express.js เพื่อแยกวิเคราะห์คำขอ
parser สันนิษฐานว่าเนื้อหาคำขอไม่เคยถูกแยกวิเคราะห์โดย parser เนื้อความใดๆ มาก่อน ดังนั้นจึงต้องวางไว้ก่อน parser เนื้อความทั่วไปใดๆ เช่น app.use(bodyParser.json());
ตรวจสอบส่วนหัว X-Line-Signature
ประมวลผลคำขอเว็บฮุคที่เข้ามา และสร้างกิจกรรม
เกิดขึ้นเมื่อได้รับเหตุการณ์ Webhook
bot . on ( 'message' , function ( event ) { } ) ;
bot . on ( 'follow' , function ( event ) { } ) ;
bot . on ( 'unfollow' , function ( event ) { } ) ;
bot . on ( 'join' , function ( event ) { } ) ;
bot . on ( 'leave' , function ( event ) { } ) ;
bot . on ( 'memberJoined' , function ( event ) { } ) ;
bot . on ( 'memberLeft' , function ( event ) { } ) ;
bot . on ( 'postback' , function ( event ) { } ) ;
bot . on ( 'beacon' , function ( event ) { } ) ;
ตอบกลับข้อความ
ดู: Event.reply(ข้อความ)
ส่งข้อความพุช
to
คือ userId หรืออาร์เรย์ของ userId userId สามารถบันทึกได้จาก event.source.userId
เมื่อเพิ่มเป็นเพื่อน (ติดตามกิจกรรม) หรือระหว่างการแชท (กิจกรรมข้อความ)
message
อาจเป็นสตริง อาร์เรย์ของสตริง ออบเจ็กต์ส่งข้อความ หรืออาร์เรย์ของออบเจ็กต์ส่งข้อความ
ส่งข้อความพุชถึงผู้ใช้หลายราย (สูงสุด: 150 ผู้ใช้) วิธีนี้จะมีประสิทธิภาพมากกว่า push
เนื่องจากจะทำการเรียก API เพียงครั้งเดียว
to
คืออาร์เรย์ของ userId
message
อาจเป็นสตริง อาร์เรย์ของสตริง ออบเจ็กต์ส่งข้อความ หรืออาร์เรย์ของออบเจ็กต์ส่งข้อความ
ส่งข้อความพุชถึงผู้ใช้ทุกคน วิธีนี้จะมีประสิทธิภาพมากกว่า push
เนื่องจากจะทำการเรียก API เพียงครั้งเดียว
message
อาจเป็นสตริง อาร์เรย์ของสตริง ออบเจ็กต์ส่งข้อความ หรืออาร์เรย์ของออบเจ็กต์ส่งข้อความ
รับข้อมูลรูปภาพ วิดีโอ และเสียงที่ผู้ใช้ส่งเป็นออบเจ็กต์บัฟเฟอร์
โปรดดูที่ Event.message.content()
รับข้อมูลโปรไฟล์ผู้ใช้ของผู้ใช้
โปรดดู: Event.source.profile()
รับโปรไฟล์ผู้ใช้ของสมาชิกในกลุ่ม
รับรหัสผู้ใช้ของสมาชิกทั้งหมดในกลุ่ม
โปรดดู: Event.source.member()
ออกจากกลุ่ม
รับโปรไฟล์ผู้ใช้ของสมาชิกในห้องสนทนา
รับรหัสผู้ใช้ของสมาชิกทั้งหมดในห้องสนทนา
โปรดดู: Event.source.member()
ออกจากห้อง
รับจำนวนผู้ใช้ที่เพิ่มไลน์บอทนี้ในหรือก่อนวันที่ระบุ
วันที่เริ่มต้นคือเมื่อวาน (UTC+9)
ดู: รับจำนวนผู้ติดตาม
รับจำนวนโควต้าข้อความในเดือนปัจจุบัน
โปรดดู: รับขีดจำกัดเป้าหมายสำหรับข้อความเพิ่มเติม
รับจำนวนข้อความที่ไลน์บอตนี้ตอบกลับ พุช ออกอากาศ หรือมัลติคาสต์
วันที่เริ่มต้นคือเมื่อวาน (UTC+9)
ดู: รับจำนวนข้อความตอบกลับที่ส่ง
จัดเตรียมชวเลขที่สะดวกในการเรียกใช้ฟังก์ชันของ LineBot ซึ่งต้องใช้พารามิเตอร์จากออบเจ็กต์เหตุการณ์ต้นทาง
ตอบรับเหตุการณ์..
message
อาจเป็นสตริง อาร์เรย์ของสตริง ออบเจ็กต์ส่งข้อความ หรืออาร์เรย์ของออบเจ็กต์ส่งข้อความ
ส่งคืนวัตถุ Promise จากโมดูล node-fetch
นี่เป็นชวเลขสำหรับ: LineBot.reply(event.replyToken, message)
// reply text message
event . reply ( 'Hello, world' ) . then ( function ( data ) {
// success
} ) . catch ( function ( error ) {
// error
} ) ;
// reply multiple text messages
event . reply ( [ 'Hello, world 1' , 'Hello, world 2' ] ) ;
// reply message object
event . reply ( { type : 'text' , text : 'Hello, world' } ) ;
// reply multiple message object
event . reply ( [
{ type : 'text' , text : 'Hello, world 1' } ,
{ type : 'text' , text : 'Hello, world 2' }
] ) ;
event . reply ( {
type : 'image' ,
originalContentUrl : 'https://example.com/original.jpg' ,
previewImageUrl : 'https://example.com/preview.jpg'
} ) ;
event . reply ( {
type : 'video' ,
originalContentUrl : 'https://example.com/original.mp4' ,
previewImageUrl : 'https://example.com/preview.jpg'
} ) ;
event . reply ( {
type : 'audio' ,
originalContentUrl : 'https://example.com/original.m4a' ,
duration : 240000
} ) ;
event . reply ( {
type : 'location' ,
title : 'my location' ,
address : '〒150-0002 東京都渋谷区渋谷2丁目21−1' ,
latitude : 35.65910807942215 ,
longitude : 139.70372892916203
} ) ;
event . reply ( {
type : 'sticker' ,
packageId : '1' ,
stickerId : '1'
} ) ;
event . reply ( {
type : 'imagemap' ,
baseUrl : 'https://example.com/bot/images/rm001' ,
altText : 'this is an imagemap' ,
baseSize : { height : 1040 , width : 1040 } ,
actions : [ {
type : 'uri' ,
linkUri : 'https://example.com/' ,
area : { x : 0 , y : 0 , width : 520 , height : 1040 }
} , {
type : 'message' ,
text : 'hello' ,
area : { x : 520 , y : 0 , width : 520 , height : 1040 }
} ]
} ) ;
event . reply ( {
type : 'template' ,
altText : 'this is a buttons template' ,
template : {
type : 'buttons' ,
thumbnailImageUrl : 'https://example.com/bot/images/image.jpg' ,
title : 'Menu' ,
text : 'Please select' ,
actions : [ {
type : 'postback' ,
label : 'Buy' ,
data : 'action=buy&itemid=123'
} , {
type : 'postback' ,
label : 'Add to cart' ,
data : 'action=add&itemid=123'
} , {
type : 'uri' ,
label : 'View detail' ,
uri : 'http://example.com/page/123'
} ]
}
} ) ;
event . reply ( {
type : 'template' ,
altText : 'this is a confirm template' ,
template : {
type : 'confirm' ,
text : 'Are you sure?' ,
actions : [ {
type : 'message' ,
label : 'Yes' ,
text : 'yes'
} , {
type : 'message' ,
label : 'No' ,
text : 'no'
} ]
}
} ) ;
event . reply ( {
type : 'template' ,
altText : 'this is a carousel template' ,
template : {
type : 'carousel' ,
columns : [ {
thumbnailImageUrl : 'https://example.com/bot/images/item1.jpg' ,
title : 'this is menu' ,
text : 'description' ,
actions : [ {
type : 'postback' ,
label : 'Buy' ,
data : 'action=buy&itemid=111'
} , {
type : 'postback' ,
label : 'Add to cart' ,
data : 'action=add&itemid=111'
} , {
type : 'uri' ,
label : 'View detail' ,
uri : 'http://example.com/page/111'
} ]
} , {
thumbnailImageUrl : 'https://example.com/bot/images/item2.jpg' ,
title : 'this is menu' ,
text : 'description' ,
actions : [ {
type : 'postback' ,
label : 'Buy' ,
data : 'action=buy&itemid=222'
} , {
type : 'postback' ,
label : 'Add to cart' ,
data : 'action=add&itemid=222'
} , {
type : 'uri' ,
label : 'View detail' ,
uri : 'http://example.com/page/222'
} ]
} ]
}
} ) ;
รับข้อมูลโปรไฟล์ผู้ใช้ของผู้ส่ง
นี่เป็นชวเลขสำหรับ:
LineBot.getUserProfile(event.source.userId)
หากเป็นการแชทแบบ 1:1LineBot.getGroupMemberProfile(event.source.groupId, event.source.userId)
หากบอทอยู่ในกลุ่มLineBot.getRoomMemberProfile(event.source.roomId, event.source.userId)
หากบอทอยู่ในห้องสนทนา event . source . profile ( ) . then ( function ( profile ) {
event . reply ( 'Hello ' + profile . displayName ) ;
} ) ;
รับรหัสผู้ใช้ของสมาชิกทั้งหมดในกลุ่มหรือห้องสนทนา
นี่เป็นชวเลขสำหรับ:
LineBot.getGroupMember(event.source.groupId)
หากบอทอยู่ในกลุ่มLineBot.getRoomMember(event.source.roomId)
หากบอทอยู่ในห้องสนทนา event . source . member ( ) . then ( function ( member ) {
console . log ( member . memberIds ) ;
} ) ;
รับข้อมูลรูปภาพ วิดีโอ และเสียงที่ผู้ใช้ส่งเป็นออบเจ็กต์บัฟเฟอร์
นี่เป็นชวเลขสำหรับ: LineBot.getMessageContent(event.message.messageId)
event . message . content ( ) . then ( function ( content ) {
console . log ( content . toString ( 'base64' ) ) ;
} ) ;
เอ็มไอที