Line Messaging
line 是國外一個很火的實時通訊軟體,類似與WX,由於公司業務需求,需要基於line開發一個聊天平臺,下面主要介紹關於line messaging api 的使用。
官方api:https://developers.line.biz/en/docs/messaging-api/overview/
起步
建立開發人員賬號和建立channel
官方教程:https://developers.line.biz/en/docs/line-developers-console/overview/
python開發人員使用
-
安裝 module
pip install line-bot-sdk
-
要求:python2 >= 2.7 或 python3 >=3.4
-
示例
from flask import Flask, request, abort from linebot import ( LineBotApi, WebhookHandler ) from linebot.exceptions import ( InvalidSignatureError ) from linebot.models import ( MessageEvent, TextMessage, TextSendMessage, ) app = Flask(__name__) line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN') # channel的token,建立channel之後有 handler = WebhookHandler('YOUR_CHANNEL_SECRET') # channel的secret,建立channel之後有 @app.route("/callback", methods=['POST']) def callback(): # 用於確認通訊 # get X-Line-Signature header value signature = request.headers['X-Line-Signature'] # get request body as text body = request.get_data(as_text=True) app.logger.info("Request body: " + body) # handle webhook body try: handler.handle(body, signature) except InvalidSignatureError: print("Invalid signature. Please check your channel access token/channel secret.") abort(400) return 'OK' @handler.add(MessageEvent, message=TextMessage) # 處理訊息事件,text型別的資訊 def handle_message(event): line_bot_api.reply_message( # 回覆訊息 event.reply_token, TextSendMessage(text=event.message.text) ) if __name__ == "__main__": app.run()
Python Api
githup: https://github.com/line/line-bot-sdk-python
建立例項
line_bot_api = linebot.LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
答覆訊息
用於響應來自使用者,組和聊天室的事件。您可以從webhook事件物件獲取reply_token。
reply_message(self, reply_token, messages, notification_disabled=False, timeout=None)
line_bot_api.reply_message(reply_token, TextSendMessage(text='Hello World!'))
傳送訊息
1.隨時向單個使用者,組和聊天室傳送訊息
push_message(self, to, messages, notification_disabled=False, timeout=None)
line_bot_api.push_message(to, TextSendMessage(text='Hello World!'))
2.隨時向多個使用者,組和聊天室傳送訊息
multicast(self, to, messages, notification_disabled=False, timeout=None)
line_bot_api.multicast(['to1', 'to2'], TextSendMessage(text='Hello World!'))
廣播
隨時向所有關注的使用者傳送訊息
broadcast(self, messages, notification_disabled=False, timeout=None)
line_bot_api.broadcast(TextSendMessage(text='Hello World!'))
獲取使用者資訊
get_profile(self, user_id, timeout=None)
profile = line_bot_api.get_profile(user_id) # 通過使用者id,獲取使用者資訊
print(profile.display_name)
print(profile.user_id)
print(profile.picture_url)
print(profile.status_message)
獲取訊息內容
獲取使用者傳送的影像,視訊和音訊資料。
get_message_content(self, message_id, timeout=None)
message_content = line_bot_api.get_message_content(message_id)
basedir = os.path.abspath(os.path.dirname(__file__))
file_path = basedir + "../.."
with open(file_path, 'wb') as fd:
for chunk in message_content.iter_content():
fd.write(chunk)
獲取機器人資訊
get_bot_info(self, timeout=None)
bot_info = line_bot_api.get_bot_info()
print(bot_info.display_name)
print(bot_info.user_id)
print(bot_info.basic_id)
print(bot_info.premium_id)
print(bot_info.picture_url)
print(bot_info.chat_mode)
print(bot_info.mark_as_read_mode)
Exception
line api 伺服器返回錯誤
try:
line_bot_api.push_message('to', TextSendMessage(text='Hello World!'))
except linebot.exceptions.LineBotApiError as e:
print(e.status_code)
print(e.request_id)
print(e.error.message)
print(e.error.details)
Webhook
示例:
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "0f3779fba3b349968c5d07db31eab56f",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"message": {
"id": "325708",
"type": "text",
"text": "Hello, world"
}
},
{
"replyToken": "8cf9239d56244f4197887e939187e19e",
"type": "follow",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
}
}
]
}
欄位說明
destination
:接收Webhook事件,漫遊器的使用者IDevents
: 事件列表replyToken
:使用reply token能夠直接回復type
:事件型別mode
:channel的狀態active
:活動狀態standby
(正在開發中):頻道正在等待
timestamp
:事件的時間(時間戳)source
:具有事件源資訊,user、group、room物件type
:型別userId
:使用者Id
message
:訊息物件id
:訊息idtype
:訊息型別text
:文字
更多欄位清查:https://developers.line.biz/en/reference/messaging-api/
訊息事件
未發生事件
使用者在組或聊天室中取消傳送訊息時的事件物件
type:unsend
檢視
跟蹤事件
LINE官方帳戶被新增為好友(或被拒絕)時觸發的事件物件
type: follow
檢視
取消關注事件
LINE官方帳戶被取消關注時觸發的事件物件
type: unfollow
檢視
參加事件
LINE官方帳戶加入群組或聊天室時觸發的事件物件
type: join
檢視
會員加入事件
使用者加入LINE官方帳戶所在的組或聊天室時觸發的事件物件
type: memberJoined
檢視
會員退出事件
使用者退出LINE官方帳戶所在的組或聊天室時觸發的事件物件
type: memberLeft
檢視
更多事件
請檢視:https://developers.line.biz/en/reference/messaging-api/#webhook-event-objects