Send message to line when server down with python Line api (มอนิเตอร์ server แจ้งเตือนผ่าน Line)


ระบบมอนิเตอร์ server แจ้งเตือนผ่าน Line ( part 1)
   
บทความนี้จะเขียนเกี่ยวกับการประยุกต์นำมา APPLICATION ยอดฮิตคือ Line มาใช้ในการทำงานเกี่ยวกับการ Monitor server
แนวคิด
     ผมมีแนวคิดว่า หาก server down  จะเป็นไปได้ไหมที่เราจะรู้ได้ โดยให้ส่งหมายเลขไอพีแอดเดรสของ server down เข้า line group ของผู้ดูแลระบบแบบอัตโนมัติ  จึงได้ทำการศึกษาหาข้อมูลพบว่า Line มี API ให้กับภาษา python สามารถเขียนเพื่อเชื่อมต่อได้ ซึ่งจริงมีคนค้นพบวิธีการมาได้สักระยะแล้ว แต่บริษัท Line ได้ขอให้ปิด code ในส่วนของการ AUTHEN ไป แต่ในวันนี้ code ในส่วนนั้นกลับมาแล้ว ทำให้เราสามารถเขียนโปรแกรม script ที่บน server โดยอาศัยความสามารถของ Line API ส่งข้อมูล server down เข้าใน line ได้อย่างที่คิดไว้แล้ว โดยกำหนดการทำงานบน cronjob
แนวทางการประยุกต์ใช้
1.เขียน python เพื่อทำการ ping server หาก down ก็ให้ส่งข้อมูลเข้า Line group ของผู้ดูแลระบบ 
2.เขียน python เพื่อทำการ monitor server เช่น  cpu disk ว่ามีการใช้งานเป็นอย่างไร โดยอาจให้เก็บลงในฐานข้อมูล mysql 
3.เขียนโปรแกรมเพื่อดึงข้อมูลจาก database ขึ้นมาส่งข้อมูลเข้า line เช่น มีการรายงานตัวของสมาชิกในแต่ละวัน โปรแกรม python จะดึงข้อมูลสรุปข้อมูลจำนวนคนที่มารายงานตัว และมีจำนวนเท่าใด สรุปแบบ auto รายงานเข้า line ทุกวัน 

เครื่องมือที่ใช้
1.Python เลือกเอาให้ตรงกับระบบปฏิบัติการที่เราจะทำ ตอน test ผมทำบน windows  https://www.python.org/  -> download -> windows -> python 2.7.10   https://www.python.org/ftp/python/2.7.10/python-2.7.10.msi
2.Line API ดาวน์โหลดได้จาก https://github.com/carpedm20/LINE/archive/master.zip
3.อันนี้สำคัญคือ code ในส่วนของการ AUTHEN ที่ถูกปิดไป
/////////////////// code authen //////////////
  #  raise Exception("Code is removed because of the request of LINE corporation

        self.transport    = THttpClient.THttpClient(self.LINE_HTTP_URL)
        self.transport_in = THttpClient.THttpClient(self.LINE_HTTP_IN_URL)

        self.transport.setCustomHeaders(self._headers)
        self.transport_in.setCustomHeaders(self._headers)

        self.protocol    = TCompactProtocol.TCompactProtocol(self.transport)
        self.protocol_in = TCompactProtocol.TCompactProtocol(self.transport_in)

        self._client    = CurveThrift.Client(self.protocol)
        self._client_in = CurveThrift.Client(self.protocol_in)

        self.transport.open()
        self.transport_in.open()

/////////////// end //////////////
การติดตั้งและการใช้งาน

== ดาวน์โหลดและติดตั้ง Python บน windows ===

1.Download python for linux or windows   https://www.python.org/  -> download -> windows -> python 2.7.10   https://www.python.org/ftp/python/2.7.10/python-2.7.10.msi
install  python
1.click install
2.config environment   my computer-> properties-> advance-> environment-> path
  add    C:\Python27;C:\Python27\Scripts

 *** การ set ค่าตรงนี้เพื่อให้สามารถ run python จาก path ไหนก็ได้ครับ

test  cmd -> python -V  ถ้าได้ จะมีข้อความออกมา

=== ดาวน์โหลดและติดตั้ง Line API ====

install line api
  extract   master.zip
   cd  D:\project_line_python_api\LINE-master\line
  แก้ไขไฟล์  api.py
   search ( about line 63)   to  comment  and add

  #  raise Exception("Code is removed because of the request of LINE corporation
 # เพิ่ม code authen เข้าไป

        self.transport    = THttpClient.THttpClient(self.LINE_HTTP_URL)
        self.transport_in = THttpClient.THttpClient(self.LINE_HTTP_IN_URL)

        self.transport.setCustomHeaders(self._headers)
        self.transport_in.setCustomHeaders(self._headers)

        self.protocol    = TCompactProtocol.TCompactProtocol(self.transport)
        self.protocol_in = TCompactProtocol.TCompactProtocol(self.transport_in)

        self._client    = CurveThrift.Client(self.protocol)
        self._client_in = CurveThrift.Client(self.protocol_in)

        self.transport.open()
        self.transport_in.open()

  == ติดตั้ง line api ด้วย command line ===

3.install line api
   D:\project_line_python_api\LINE-master>config.py
   D:\project_line_python_api\LINE-master>setup.py install
## หากติดปัญหา python2.7 setup.py install ขึ้น error แบบนี้
[root@localhost LINE-master]# python2.7 setup.py install
Traceback (most recent call last):
  File "setup.py", line 30, in <module>
    from ez_setup import use_setuptools
ImportError: No module named ez_setup
ให้ใช้ pthon2.6 ติดตั้ง จะไม่ error

== ตัวอย่าง code แบบง่าย ===

4.แนะนำตัวอย่างแบบง่ายๆ 
 ตัวอย่างจะมีมา 1 ตัวอย่าง อยู่ใน D:\project_line_python_api\LINE-master\examples
ตัวอย่าง code การ ping server ด้วย python หลักการทำงาน คือ ถ้า server down มันจะ ping ไม่เห็น โดยจะ return ค่ากลับมาเป็น 0 เราก็จะให้ส่งข้อความว่า server down เข้า line group แต่ถ้าหากมันเป็น ping เห็น ก็จะ return ค่ากลับมาเป็น 1  จะ return ค่ากลับมาเป็น 1เราก็จะให้ส่งข้อความว่า server ok เข้า line group หรือจะไม่ให้ส่งก็ได้ โดยเราจะตั้งการทำงานผ่าน cronjob บน server linux

//////////////////////
ตัวอย่างที่ 1   code pingserver.py

import os, re
from line import LineClient, LineGroup, LineContact
user = "LineUser" # เป็นอีเมล์ของไลน์ที่เราได้ลงทะเบียนไว้
passw = "LinePassword"
No = 0 #เป็นหมายเลขของ group line ที่ต้องการจะส่งหากไม่ทราบจะต้อง print array ออกมาดู
ip = "192.168.0.0" # ip address ที่ต้องการจะ ping
r = "".join(os.popen("ping line -c 1").readlines())
print r
if re.search("64 bytes from", r):
  client = LineClient(user , passw)
    kitti = client.groups[No]
    kitti.sendMessage(ip +"ok")
else:
client = LineClient(user , passw)
    kitti = client.groups[No]
    kitti.sendMessage(ip +  "  down")

/////////////////

ตัวอย่างที่ 2 เป็นการอ่านค่า ip จากไฟล์ txt เพื่อ check สถานะว่า up หรือ down
/////////////////////hosts.txt///////////////////

192.168.1.1
www.google.com
www.hotmail.com
10.156.2.4

///////////////////////////////////////////////

code pingserver2.py

import sys
import os
import platform
import subprocess

from line import LineClient, LineGroup, LineContact
user = "UsernameLine"
passw = "PasswordLine"
No = 1

plat = platform.system()
scriptDir = sys.path[0]
hosts = os.path.join(scriptDir, 'hosts.txt')
hostsFile = open(hosts, "r")
lines = hostsFile.readlines()
if plat == "Windows":
    for line in lines:
        line = line.strip( )
         ping = subprocess.Popen(

            ["ping", "-n", "1", "-l", "1", "-w", "100", line],
           
            stdout = subprocess.PIPE,
            stderr = subprocess.PIPE
            

        )
        out, error = ping.communicate()
        client = LineClient(user , passw)
        
        kitti = client.groups[No] 
        kitti.sendMessage(out)
               
if plat == "Linux":
    for line in lines:
        line = line.strip( )
        line = line.strip( )
    
        ping = subprocess.Popen(
            ["ping", "-c", "1", "-l", "1", "-s", "1", "-W", "1", line],
            stdout = subprocess.PIPE,
            stderr = subprocess.PIPE
         
        )
        out, error = ping.communicate()
        client = LineClient(user , passw)
        kitti = client.groups[1] 
        kitti.sendMessage(out)
       

hostsFile.close()

หน้าจอผลลัพธ์จากโปรแกรมไลน์



ตัวอย่างที่ 3
 
              ///////////////////////////////  pingserver2.py ////////////////////////

import sys
import os
import platform
import subprocess

from line import LineClient, LineGroup, LineContact


def getIps( fileName , osName ) :
oFile = open( fileName , "r" )
lines = oFile.readlines()
oFile.close()
ips = []
for line in lines :
line = line.strip()
if osName == "Linux" :
line = line.strip()
ips.append( line )
return ips

def isServerLive( ip , osName ) :
if  osName == "windows":

command = ["ping", "-n", "1", "-l", "1", "-w", "100", ip ]
else :
command = ["ping", "-c", "1", "-l", "1", "-s", "1", "-W", "1", ip ]

    ping = subprocess.Popen( command,
    stdout = subprocess.PIPE,
            stderr = subprocess.PIPE
        )
out , error = ping.communicate()
#error = ping.communicate()
# success => error return ''
return error == ''


def getLineGroup( user , password , groupId ) :
client = LineClient(user , password )
group = client.groups[groupId]
return group


def testServer( ips , osName , lineGroup ) :
for ip in ips :
if isServerLive( ip , osName ) != 0 :
lineGroup.sendMessage( " %s is work" % ip )

else :
lineGroup.sendMessage( " %s is down" % ip )

user = "UsernameLine"
passw = "PasswordLine"
groupId = 1

lineGroup = getLineGroup( user , passw , groupId )

osName = platform.system()
scriptDir = sys.path[0]
fileName = os.path.join( scriptDir, 'hosts.txt')
ips = getIps( fileName , osName )

# MAIN routine
testServer( ips  , osName , lineGroup )

     


ผลลัพธ์ที่ได้




ตัวอย่างที่ 4   code สุดท้าย ping แล้วให้แจ้งเตือนเฉพาะ server ที่ down

                                  ///////////// ping  server.py //////////////

import sys
import os
import platform
import subprocess

from line import LineClient, LineGroup, LineContact


def getIps( fileName , osName ) :
        oFile = open( fileName , "r" )
        lines = oFile.readlines()
        oFile.close()
        ips = []
        for line in lines :
                line = line.strip()
                if osName == "Linux" :
                        line = line.strip()
                ips.append( line )
        return ips

def isServerLive( ip , osName ) :
        if osName == "window" :
                command = ["ping", "-n", "1", "-l", "1", "-w", "100", ip ]
        else :
                command = ["ping", "-c", "1", "-l", "1", "-s", "1", "-W", "1", ip ]

        ping = subprocess.Popen( command , stdout = subprocess.PIPE,stderr = subprocess.PIPE )
        out, error = ping.communicate()
        print out
        print error
        if(out.find("100% packet loss") != -1):
                return False
        return True


def getLineGroup( user , password , groupId ) :
        client  = LineClient(user , password )
        group   = client.groups[groupId]
        return group


def testServer( ips , osName , lineGroup ) :
        for ip in ips :
                #if !isServerLive( ip , osName ) :
                if not isServerLive( ip , osName ):
                        lineGroup.sendMessage( "Ip %s is death" % ip )


user = "UsernameLine"
passw = "PasswordLine"
groupId = 0

lineGroup = getLineGroup( user , passw , groupId )

osName          = platform.system()
scriptDir       = sys.path[0]
fileName        = os.path.join( scriptDir, 'hosts.txt')
ips                     = getIps( fileName , osName )

# MAIN routine
testServer( ips  , osName , lineGroup )





//////////////////////////
อัพเดต พ.ย. 2558
 ขณะนี้ได้ให้ไลน์ทำงาน 2 อย่างคือ
1.แจ้งเตือน server down  ดังรูป


2.ดึงข้อมูลจาก database มาแสดงตามช่วงเวลาที่กำหนดไว้ เช่น ตอน 12.00 นาฬิกา ให้ส่งข้อมูลผู้ใช้งานทั้งหมดในแต่ละ site และ bandwidth ที่ใช้ในแต่ละที่ โดยมีการเก็บข้อมูลอุปกรณ์ network ผ่าน SNMP เก็บไว้ในฐานข้อมูล แล้วนำมาแสดง




///////////////////////////////////

วิธีการทดสอบ code

 กรณี windows ให้เข้า command prompt และไปที่ path ของ code  แล้วสั่ง run ได้เลยครับ เช่น pingsever.py
กรณี linux ให้เข้า path ของ python ก่อนครับ แล้วตามด้วยไฟล์
[root@network examples]# /root/Python-2.7.9/python     pingserver2.py

*** ในส่วนของ group number คือ หมายเลขของกลุ่มครับ กา่รนับให้ print ออกมาดูก่อนน่ะครับ โดยให้ print เป็น array

////// อัพเดต  2016/05/13 //////
  ตอนแรกที่ทำใน server ตัวแรกไม่มีปัญหาอะไร ต่อมามีความจำเป็นต้องเปลี่ยน server ใหม่ ปรากฏว่ามันให้ใส่ pin เกือบทุกครั้งเวลา run คำสั่ง   สุดท้ายลองใช้  LINE TOKEN แทนการใช้ username & password เดิม ปรากฏว่าปัญหาให้ใส่ pin หายไปเลยครับ  สามารถใช้งานได้ปกติ

***สำหรับการหา Line Token
 client = LineClient("ID", "PASSWORD")
   #client = LineClient(authToken="AUTHTOKEN")
  ให้ใช้คำสั่งนี้ครับ print line token ออกมา
>>> authToken = client.authToken
>>> print authToken
DJg5VZTBdksdfsfjMCQdsfsfOeodf4.9guiWkX1koTnwiGNVkacva.5555549blBzv5W9ex/2M06QQofByLxigMCAnnGfmTOAgY3wo=
                                                                            ///////////////////

///// อัพเดต  2016/06/15 //////
 หลังจากใช้งานมาได้ยาวๆ ก็เกิดปัญหา อยู่ๆ ก็ไม่แจ้งเตือน ทดสอบ run scripts แบบ manual มันฟ้องว่า Token หมดอายุ ก็เลยต้องใช้ Token ใหม่ มาใส่ ระบบแจ้งเตือนก็กลับมาทำงานได้ปกติ
วิธีการหา token ใหม่ ก็ใช้วิธีการเหมือนเดิมครับ ตามนี้เลย

***สำหรับการหา Line Token
 client = LineClient("ID", "PASSWORD")
   #client = LineClient(authToken="AUTHTOKEN")
  ให้ใช้คำสั่งนี้ครับ print line token ออกมา
>>> authToken = client.authToken
>>> print authToken
DJg5VZTBdksdfsfjMCQdsfsfOeodf4.9guiWsdkX1koTnwiGNVkacva.55555sd49blBzv5W9ex/2M06QQofByLxig


                                                                              //////////////////////  

credit : https://github.com/carpedm20/LINE
credit : https://www.youtube.com/playlist?list=PLv55tReH1ENzu9z5oaU46VNtU0G9wESTH
             (stephack.com)
credit : พลเรือตรีนายแพทย์วิชัย มนัสศิริวิทยา จากกรมแพทย์ทหารเรือ
credit : น้องจิรภัทร์  เต็มวุฒิโรจน์



ความคิดเห็น

  1. ขอบคุณสำหรับบทความครับผม เป็นแนวทางที่ดีเลยครับ

    ตอบลบ
  2. เป็นอะไรที่ดีงามมากมายครับ

    ตอบลบ
  3. "ในส่วนของ group number คือ หมายเลขของกลุ่มครับ กา่รนับให้ print ออกมาดูก่อนน่ะครับ โดยให้ print เป็น array"

    ใช้คำสั่งอะไรหรือครับ
    ขอบคุณครับ

    ตอบลบ
    คำตอบ
    1. import sys
      from line import LineClient, LineGroup, LineContact

      xid = 'UserLine'
      xpassword = 'PasswordLine'

      try:
      client = LineClient( xid , xpassword )

      except:
      print "Login Failed"
      exit()

      i = 0

      for i in client.groups :
      #kitti = client.contacts;
      print client.groups # อันนี้พิมพ์รายชื่อกลุ่มออกมาทั้งหมด
      print client.groups[0] # อันนี้พิมพ์เฉพาะกลุ่มที่เป็นกลุ่มแรก array= 0
      exit()
      ** ประมาณนี้ครับ

      ลบ
    2. มันจะ print ออกไหนอ่า ผม run ทีไร line PC มัน log off ตลอดเลย

      ลบ
    3. ลองใช้ token ดูครับ
      **สำหรับการหา Line Token
      client = LineClient("ID", "PASSWORD")
      #client = LineClient(authToken="AUTHTOKEN")
      ให้ใช้คำสั่งนี้ครับ print line token ออกมา
      >>> authToken = client.authToken
      >>> print authToken

      ลบ
  4. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
  5. ใช้งานได้ปกติไปซักพักนึงครับ หลังจากนั้นมันขึ้น
    Enter PinCode 'XXXX' to your mobile phone in 2 minutes

    แบบนี้แก้ยังไงเหรอครับ

    ตอบลบ
    คำตอบ
    1. น่าจะเป็นที่ security ของ line ต้องให้ใส่ pin เพื่ออนุญาตให้ใช้งาน line account ที่อื่นครับ

      ลบ
  6. มัน จะ รายงาน เอง อัตโนมัติ หรอคับ เมื่อ server ip ดับ

    ตอบลบ
    คำตอบ
    1. ช่ายครับ อัตโนมัติครับ

      ลบ
    2. ความคิดเห็นนี้ถูกผู้เขียนลบ

      ลบ
    3. ถ้า ใน ระบบ window ตัวอย่าง code จะเป็นยังไง หรอครับ เฉพาะ linux เท่านั้นใช่มั้ยครับ

      ลบ
    4. ของผมก็ขึ้นให้ใส่น่ะครับ วิธีทำของผมก็คือ
      ไป run code ที่เขียนไว้ มันจะขึ้นให้ใส่เลข 4 หลัก สมมติว่า "1234" นำ code ที่เห็นไปใส่ใน line app หลักที่ลงไว้ ของผมลง line app หลักบน ipad ครับ พอ run code เสร็จเปิด line app บน ipad มันก็จะขึ้นให้ใส่ code เลยครับ ผมก็ใส่ทำครั้งเดียวครับ

      ลบ
    5. ผมใส่แล้ว รันได้ผ่านหมด แต่พอ รันครั้งที่ สอง ใส่ Code แล้ว login ไม่ได้ผ่าน มันขึ้นว่า "ไม่สามารถเข้าสู่ระบบชั่วคราว กรุณารอสักครู่และลองเข้าใหม่อีกครั้ง" แต่ผมรอมา 2 วันละยังไม่ได้เลย เป็นงี้หมด ครั้งแรกผ่าน ครั้งสองเข้าไม่ได้

      ลบ
    6. ลองเปลี่ยนมาใช้ login แบบ token แทน แบบ username น่ะครับ

      ลบ
  7. สำหรับ windows ผมก็ใช้ code เดียวกันครับ โดยลง python for windows

    ตอบลบ
    คำตอบ
    1. ขอบคุณมากคับ ^^

      ลบ
    2. ยินดีครับ ผมทำระบบ line monitor server มาได้หลายเดือนแล้ว ก็ใช้งานได้ดีครับ ตอนนี้ก็เพิ่มเติมฟังค์ชั่น ให้ไปดึงค่าจาก database ที่เก็บพวกข้อมูลต่างๆ ส่งเข้า line group ของ admin ครับ ตามช่วงเวลาที่กำหนด เช่น ตอนเที่ยงของทุกวันให้แจ้งว่า มี user ใช้งานกี่คน

      ลบ
    3. ผม ใช้ code ตัว สุดท้าย มัน ขึ้นว่า Bad option C: แบบนี้ ถูกต้องรึเปล่าครับ

      ลบ
    4. capture มาดูได้ไหมครับ ของผมไม่ขึ้นแบบนี้น่ะครับ

      ลบ
  8. ใช้งานได้ปกติไปซักพักนึงแล้วเหมือน ip จะโดน block เล่น lineไม่ได้ อันนี้แก้ยังไงหรอครับ หาทางแก้ไม่ได้เลยครับ

    ตอบลบ
    คำตอบ
    1. ผมยังไม่เคยเจอ รp block ครับ ลองเปลี่ยนเป็น login แบบ token ดูน่ะครับ

      ลบ
  9. มี log ไหมครับ ของผมยังไม่เคยเจอน่ะครับ เปิดใช้งานมาประมาณ 5 เดือน ปัญหาที่เคยเจอก็เคยมีอยู่วันหนึ่งมันไม่ทำงาน ก็เลยลอง run ดู ปรากฏว่ามันให้ใส่รหัส pin ซึ่งก็เกิดขึ้นเพียงครั้งเดียว เมื่อสัปดาห์ที่แล้ว หลังจากนั้นก็ไม่มีปัญหาครับ ตอนนี้สิ่งที่ผมให้ไลน์แจ้งเตือนก็คือ server down และดึงข้อมูลจาก database ที่เก็บข้อมูล snmp มาแสดงตอน เวลา 5,6,10,12,16,18,20 นาฬิกา

    ตอบลบ
    คำตอบ
    1. ขอบคุณมากครับ
      ผมติดตั้งบน centos 7 เปิดทดสอบ echobot.py ใน example
      ก็ใช้ได้โต้ตอบปกติครับ แต่ผ่านไปซัก 1-2 นาทีก็จะใช้ line ไม่ได้ทั้งบ้านครับ
      หลังจาก 1-2 ชั่วโมงก็กลับมาใช้ได้ครับ

      ลบ
  10. สอบถามหน่อยครับ หากนำไปให้ส่ง Message โดยใช้ Trigger จาก Application หลายๆ ระบบ
    เวลามีปัญหา จะส่งมาเป็น หลายๆ message ในเวลา พร้อมๆ กันจะเกิดปัญหาอะไรไหมครับ

    ตอบลบ
    คำตอบ
    1. ขอโทษน่ะครับตอบช้าไปหน่อย ผมยังไม่เจอปัญหาน่ะครับ ผมทำระบบเช็ค server ,switch ,app ก็ยังใช้งานไ้ดปกติน่ะครับ

      ลบ
  11. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
  12. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
  13. รบกวนสอบถามอีกทีครับ พอดีผมใช้ล็อกอินแบบนี้

    import os, re
    from line import LineClient, LineGroup, LineContact



    try:
    #client = LineClient("User", "PASS")
    #client = LineClient(authToken="AUTHTOKEN")
    client = LineClient(authToken=" ")
    except:
    print "Login Failed"

    authToken = client.authToken

    print authToken,"\n"

    มันเชื่อมต่อไลน์ได้ แต่พอใช้ล็อกอินแบบโค้ดตัวอย่างมันใช่ไม่ได้อะครับ พอจะแนะนำได้มั้ยครับ

    ตอบลบ
    คำตอบ
    1. การ login ทำได้ 2 แบบ คือ ใช้ user password กับใช้ token ครับ ตอนแรกผมใช้ user password มาได้สักพักพบปัญหา มันให้ใส่รหัส เลยเปลี่ยนมาใช้ token ครับ ตอนนี้ยังไม่เจอปัญหาครับ สรุป คือ ใช้แบบไหนก็ได้ครับ แต่ user อาจจะต้องให้ใส่รหัส

      ลบ
  14. ผมได้อัพเดตบทความ ในวันที่ 13 มิ.ย. 2559 เนื่องจากเจอปัญหา line ไม่ทำงานครับ เดิมใช้ login แบบ username password ตอนหลังเปลี่ยน login เป็นแบบ token ก็สามารถทำงานได้ตามปกติครับ

    ///// อัพเดต 2016/05/13 //////
    ตอนแรกที่ทำใน server ตัวแรกไม่มีปัญหาอะไร ต่อมามีความจำเป็นต้องเปลี่ยน server ใหม่ ปรากฏว่ามันให้ใส่ pin เกือบทุกครั้งเวลา run คำสั่ง สุดท้ายลองใช้ LINE TOKEN แทนการใช้ username & password เดิม ปรากฏว่าปัญหาให้ใส่ pin หายไปเลยครับ สามารถใช้งานได้ปกติ

    ***สำหรับการหา Line Token
    client = LineClient("ID", "PASSWORD")
    #client = LineClient(authToken="AUTHTOKEN")
    ให้ใช้คำสั่งนี้ครับ print line token ออกมา
    >>> authToken = client.authToken
    >>> print authToken

    ตอบลบ
  15. ผมได้อัพเดตบทความ ในวันที่ 15 มิ.ย. 2559 เนื่องจากเจอปัญหา Line token หมดอายุ ถ้าใครเจอปัญหาระบบไม่ส่งแจ้งเตือนไลน์ ก็ลองตรวจสอบดูน่ะครับ ลอง run script แบบ manual มันจะฟ้องว่า Line token expire

    ตอบลบ
  16. ขอบคุณมากครับสำหรับบทความดี ๆ ใช้งานได้ดีมาก...ครับ แต่ถ้าเราจะส่งในเป็นรายบุคคลไม่ทราบใช้คำสั่งอย่างไร ?

    ขอบคุณมากครับ

    ตอบลบ
    คำตอบ
    1. ในส่วนของ การส่งข้อความ หรือ sticker ให้กับรายบุคคล นั้น ไลน์จัดเก็บรายชื่อบุคคลเป็น Array ครับ คนแรกที่เก็บจะมีค่าเท่ากับ [0] ครับ ถ้าเราไม่รู้ก็ใช้คำสั่งหา โดยให้ print รายชื่อออกมาทั้งหมดก่อนครับ คำสั่งมีดังนี้
      >> profile = client.profile
      >> print profile

      หรือ
      >>> print client.contacts
      สมมุติว่า ชื่อคนเราที่ต้องการส่งเป็นรายชื่อแรก จะมี Array ที่ 0 [0]

      >>> friend = client.contacts[0]
      >>> friend.sendMessage("hello world!")

      ส่งรูป
      >>> friend.sendImage("./image.jpg") # use your path for image to send

      ส่ง sticker

      >>> friend.sendSticker() # send a default sticker
      True
      >>> friend.sendSticker(stickerId="13",stickerPackageId="1",stickerVersion="100")
      True

      อ่านเพิ่มเติม
      http://carpedm20.github.io/line/tutorial.html#part-2-profile-and-contacts

      ลบ
  17. ช่วยหน่อย ครับ ไครที่ทำได้ช่วย ติดต่อกลับมา LINE wittayaem

    ตอบลบ
  18. ตอนนี้ผม Login ผ่าน authToken ไม่ได้เลยครับ ไม่แน่ใจว่า Line เปลี่ยนรูปแบบการ Authen รึเปล่า เห็นทุกครั้งที่ Login แล้วใส่ Pin Code จะได้ Cert File .line.crt

    ตอบลบ
    คำตอบ
    1. เพิ่มเติมนะครับที่ผมลองทดสอบดู Token มันเปลี่ยนไปทุกครั้งที่ Login ถึงแม้ว่าจะไม่ได้ใส่ Pin Code ใหม่ครับ

      ลบ
  19. ก่อนนั้นผมมีปัญหากับ token แต่ gen ใหม่ก็หายครับ ล่าสุดใช้มา 3 สัปดาห์ ก็ยังเป็น token เดิมครับ

    ตอบลบ
    คำตอบ
    1. ของผมมีปัญหากับการอัพเดทข้อความ
      คือผมให้บอทส่งข้อความไปที่ไลน์ของผม พอเริ่มโปรแกรม ไลน์ของผมอัพเดทข้อความจากที่บอทส่งมาได้แค่ 1-2 ข้อความ แล้วก็ไม่อัพเดทอีก ต้องพิมพ์ตอบกลับไปถึงจะเห็นข้อความที่บอทส่งมา เป็นแบบนี้แก้ตรงไหนอ่าครับ

      ลบ

  20. ผมสอบถามขั้นตอนการใช้ authToken ครับ
    Code ผมเป็นตามข้างล่างโดยผมทดลอง Login 2 ครั้ง ครั้งแรกใช้ User/Password เพื่อ Get authToken และครั้งที่ 2 ใช้ authToken ที่ได้มาจากครั้งแรก แต่ครั้งที่ 2 Login ไม่สำเร็จครับ พอจะมีคำแนะนำมั๊ยครับ

    client = LineClient("ID", "PASSWORD")
    authToken1 = client.authToken

    try:
    client2 = LineClient(authToken = authToken1)
    except:
    print "Login authToken Failed"

    ตอบลบ
  21. ผมเขียนโปรแกรมด้วย Microsoft Visual Foxpro 9 บน Windows 7 อยากส่ง Line จากโปรแกรมผมโดยอาจทำเป็น DLL / OCX ให้ผมเรียกใช้ ไม่ทราบเป็นไปได้ไหมครับ ? ใครทำได้ช่วยแจ้งให้ทราบหน่อยได้ไหมครับ ผมอยากขอซื้อโปรแกรมครับ ขอบคุณมาก

    ตอบลบ
  22. มันขึ้นอย่างงี้ง่ะคับต้องแก้ส่วนไหนคับแนะนำหน่อยคับC:\Users\Admin\Downloads\LINE-master>setup.py install
    Traceback (most recent call last):
    File "C:\Users\Admin\Downloads\LINE-master\setup.py", line 30, in
    from ez_setup import use_setuptools
    ImportError: No module named ez_setup

    ตอบลบ
  23. ประยุกต์ใช้กับ line notfiy อย่างไรครับ

    ตอบลบ
  24. ตอนนี้ยังใช้ได้อยู่รึเปล่าคับ

    ตอบลบ
  25. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
  26. มีใครยังใช้ได้อยู่มั้ยครับ

    ตอบลบ

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจ้งเตือนเข้าไลน์กลุ่ม ผ่าน Line notify เมื่อมีคน login เข้า server ของเราผ่าน SSH (linux) หรือ remote desktop เข้ามา (windows server)

การทำ cloud iot ด้วย thingsboard ไว้ใช้เองครับ

การประยุกต์ใช้ line notify ในการแจ้งปัญหาการใช้งาน สำหรับ php