Line logo

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 นั้นเอง

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:

 

Author: Suphakit Annoppornchai

Credit: https://saixiii.com

8 Thoughts to “ทำความเข้าใจ LINE API (Unofficial) – Messaging API”

  1. […] สำหรับบทความนี้ต่อเนื่องมาจาก บทความก่อนหน้า ที่เล่าถึง LINE API  ซึ่งหลังจากเราทราบกระบวนการทำงานระหว่าง LINE Client – Server แล้วทีนี้เราลองมาทำ LINE Robot หรือ Chat Bot มาลองเล่นกันดูครับ […]

  2. […] ทำความเข้าใจ LINE API (Unofficial) – Messaging API […]

  3. […] ทำความเข้าใจ LINE API (Unofficial) – Messaging API […]

Leave a Reply