LINE messaging API
ในปัจจุบัน เราจะพบว่า การสื่อสารส่วนใหญ่ของคนในประเทศไทยมีการเปลี่ยนแปลงจากรูปแบบ Voice ไปเป็น Data มากขึ้น ซึ่งอันดับหนึงตอนนี้คงไม่พ้น LINE Application ที่ใช้กันอยู่ทุกวัน ไม่ว่าจะเป็นเรื่องส่วนตัว ครอบครัว รวมถึง เรื่องงาน ก็จะสื่อสารกันผ่าน LINE ซะส่วนใหญ่ ส่วนหนึ่งก็เพราะประหยัดค่าใช้จ่ายในการโทร อีกทั้งยังสะดวกและมี feature ต่างๆที่น่าใช้งาน (User friendly) ซึ่งสำหรับ developer แล้วสิ่งที่ต้องการคือ LINE API spec
เนื่องจากงานประจำของผมคืองาน operation ซึ่งจำเป็นต้องคอยดูแล monitor ระบบต่างๆ 24/7 ซึ่งทำให้เกิด idea ที่ว่า ทำไมเราไม่ใช้ LINE เป็นช่องทางในการแจ้ง Alert แทนการนั่ง monitor อยู่หน้าคอม จากการศึกษาอยู่ระยะแรกก็พบว่า LINE ยังไม่มี official API ในขณะนั้น (เริ่มมามีช่วงปลายปี 2016) แต่ด้วยความโชคดีมีชาวเกาหลีได้ทำการแกะ packet และสร้าง python library ออกมาให้ลองใช้งานกัน ลองไป download กันดู
Link : https://github.com/Saixiii/LINE-API
How to install
ก่อนอื่นต้องติดตั้ง Apache Thrift (รายละเอียดจะอธิบายภายหลัง)
$ # Install your choice of java $ sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libboost-system-dev libboost-filesystem-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev $ cd /tmp $ curl http://archive.apache.org/dist/thrift/0.9.1/thrift-0.9.1.tar.gz | tar zx $ cd thrift-0.9.1/ $ ./configure $ make $ sudo make install $ thrift --help
ติดตั้ง Line python lib
$ pip install line
or
$ easy_install line
ในส่วนนี้ไม่ขออธิบายรายละเอียดนะครับ ไปลองดูกันเอง แต่จะอธิบายในส่วนของการทำงานของ LINE API ที่น่าสนใจกัน
จากการลองแกะ code แล้วพบว่า protocol ที่ LINE messaging ใช้คือ Apache Thrift ตามที่เราได้ install ไว้ด้านบน ซึ่งง่ายต่อเราเพราะเป็น open soruce ที่คุ้นเคยกันดี
URL ที่ใช้ในการ authen connect กับ LINE Server คือ
LINE_DOMAIN = "http://gd2.line.naver.jp" LINE_HTTP_URL = LINE_DOMAIN + "/api/v4/TalkService.do" LINE_HTTP_IN_URL = LINE_DOMAIN + "/P4" LINE_CERTIFICATE_URL = LINE_DOMAIN + "/Q" LINE_SESSION_LINE_URL = LINE_DOMAIN + "/authct/v1/keys/line" LINE_SESSION_NAVER_URL = LINE_DOMAIN + "/authct/v1/keys/naver"
LINE Service Flow
เครื่องมือที่ใช้ในการแกะ flow การทำงานที่ผมใช้เป็นหลักก็หนีไม่พ้น Wireshark นั้นเอง
ซึ่งก็คือโปรแกรม แกะ packet ที่ใช้ดู data transmit ระหว่าง Client และ Server
1. Request authen key จาก https://gd2.line.naver.jp/authct/v1/keys/line เพื่อใช้ในการ login ถ้าเราลองเรียกดูจะได้ผลลัพธ์ดังนี้
{"session_key":"L|y3nWJuqRKl","rsa_key":"5608,b4e755a4daec5bd00f4e0e2b8401347f3ad5aaaafdc2385d68b19538762514e8e8b28a586a96bc744e772cdaca9c0b3510bf2e73b3b6624f45941a14c512d8264be6ea4d5a7d8444ffb02856aa0566ff94c890fb433069a81bb5bd08375d62669447a869697c5d5f08eaab81c233e048d5db5cb3994d40e8cdac4a882c10a5f7c146722e24484f78ba48b3c8e62da1d78f12645e34bb,10001"}
2. เอา authen key มา login ด้วย user/pass ที่ https://gd2.line.naver.jp/api/v4/TalkService.do
POST /api/v4/TalkService.do HTTP/1.0
Host: gd2.line.naver.jp
Content-Type: application/x-thrift
Content-Length: 480
X-Line-Application: DESKTOPWIN.5.1.2.WINDOWS.5.1.2600-XP-x64
User-Agent: DESKTOP:WIN:5.1.2600-XP-x64(5.1.2)
.!.)loginWithIdentityCredentialForCertificate..user@gmail.com..password..5162...565035f06cfb61ebe5a2af4d1fa96329acd853af834ffe9df5270a5c4da5dca8467759c9962b9877c340817cefea70b4c244bb84fcb962ddb1daf7d253583cc7318f0d58bdff72e5e57b35d5f5216c2e5fd925f407fb4c3d381e00423e6e8f49938678f0cbb5cb8e216729e512a9b5aacd2c276e46cf99fb65828c8c628d2a7fa4c87ba81718b0425c6b9cb700546df9c53e66e1fba1...127.0.0.1.
OPERVAS-PC...@f11a57475fdd349c66559023d4a0722eb0c9eca3f0d127d7d4b62a8a50d58b56.
HTTP/1.0 200 OK
Content-Length: 81
Content-Type: application/x-thrift;charset=UTF-8
Connection: close
Date: Tue, 15 Nov 2016 04:29:02 GMT
.A.)loginWithIdentityCredentialForCertificate.....Authentication fault exceeded..
ซึ่งถ้า login success ทาง Line Server จะส่ง Token key กลับมาเพื่อใช้ในการ access data ของ Line id นั้น เช่น
X-Line-Access: EbjzHzOwovOQjrvJER10.FIgoOdH26lifZ3JfVpFjOa.dY9hicIH6G8Ku8Pps5Y3EnAxHMsZecz8LmENI8+P+uw=
3. ทำการ fetch message ของ Line id เราผ่านทาง https://gd2.line.naver.jp/P4
POST /S4 HTTP/1.0
Host: gd2.line.naver.jp
Content-Type: application/x-thrift
Content-Length: 26
X-Line-Application: DESKTOPWIN.5.1.2.WINDOWS.5.1.2600-XP-x64
X-Line-Access: EbjzHzOwovOQjrvJER10.FIgoOdH26lifZ3JfVpFjOa.dY9hicIH6G8Ku8Pps5Y3EnAxHMsZecz8LmENI8+P+uw=
User-Agent: DESKTOP:WIN:5.1.2600-XP-x64(5.1.2)
.!..fetchOperations&....d.
HTTP/1.0 200 OK
content-length: 424
content-type: application/x-thrift;charset=UTF-8
server: legy
x-lcr: 255
x-ls: X/Ru+QsqSgRrEPu1hP1BCQ
Connection: close
Date: Fri, 02 Dec 2016 17:35:49 GMT
.A..fetchOperations..L..........V.n..h!c3335af1908268d31401bfdaa843088f9.!u2c97dbf6bd0dbc835fc4167cad580acf. 5292504851453...........V.n..h!c3335af1908268d31401bfdaa843088f9.!u62270c55b29376cbbb035fdb6553a64a. 5292504851453...........V.4..h.0..!u9460fe0b277c1cb65d7bbcb078c0d839.!c3335af1908268d31401bfdaa843088f9... 5292507499391......V..H6............ move insert ............... 14k .........B..;...EMTVER.4..............
ต่อไปเป็นวิธีการ ทำ LINE bot แบบ Unofficial สามารถโต้ตอบแบบ Charbot
หรือสำหรับผู้สนใจจะใช้วิธี Official ในการ ทำ LINE Bot สามารถโต้ตอบ ด้วย python
Reference:
- ทำความเข้าใจ LINE API (Unofficial) – Messaging API
- ทำ LINE bot (Unofficial) สามารถโต้ตอบแบบ Chatbot หรือ Echobot
- วิธีสมัคร LINE Business Center และ LINE@
- บทที่1 ทำ LINE Bot สามารถโต้ตอบ หรือ Chatbot ด้วย Python (Official)
- บทที่2 เรียนรู้ LINE API คืออะไร ทำ LINE Bot ผ่าน LINE Messaging API (Official)
- บทที่3 วิธีใช้ LINE API (Messaging API) เพื่อทำ LINE Bot
- บทที่4 Webhook หลักการของ LINE API ที่เอาไว้ ทำ LINE Bot
- บทที่5 วิธีส่งข้อความผ่าน LINE API หรือ LINE Bot ด้วย Curl
Author: Suphakit Annoppornchai
Credit: https://saixiii.com
[…] สำหรับบทความนี้ต่อเนื่องมาจาก บทความก่อนหน้า ที่เล่าถึง LINE API ซึ่งหลังจากเราทราบกระบวนการทำงานระหว่าง LINE Client – Server แล้วทีนี้เราลองมาทำ LINE Robot หรือ Chat Bot มาลองเล่นกันดูครับ […]
[…] ทำความเข้าใจ LINE API (Unofficial) – Messaging API […]
[…] ทำความเข้าใจ LINE API (Unofficial) – Messaging API […]
[…] ทำความเข้าใจ LINE API (Unofficial) – Messaging API […]
[…] ทำความเข้าใจ LINE API (Unofficial) – Messaging API […]
[…] ทำความเข้าใจ LINE API (Unofficial) – Messaging API […]
[…] ทำความเข้าใจ LINE API (Unofficial) – Messaging API […]
[…] ทำความเข้าใจ LINE API (Unofficial) – Messaging API […]