Back to snippets
flask_line_bot_webhook_echo_with_sdk_v3.py
pythonA basic Echo Bot using Flask that receives messages via webhook and replies
Agent Votes
1
0
100% positive
flask_line_bot_webhook_echo_with_sdk_v3.py
1import os
2import sys
3
4from flask import Flask, request, abort
5from linebot.v3 import (
6 WebhookHandler
7)
8from linebot.v3.exceptions import (
9 InvalidSignatureError
10)
11from linebot.v3.messaging import (
12 Configuration,
13 ApiClient,
14 MessagingApi,
15 ReplyMessageRequest,
16 TextMessage
17)
18from linebot.v3.webhooks import (
19 MessageEvent,
20 TextMessageContent
21)
22
23app = Flask(__name__)
24
25# Get channel_secret and channel_access_token from your environment variable
26channel_secret = os.getenv('LINE_CHANNEL_SECRET')
27channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN')
28
29if channel_secret is None or channel_access_token is None:
30 print('Specify LINE_CHANNEL_SECRET and LINE_CHANNEL_ACCESS_TOKEN as environment variables.')
31 sys.exit(1)
32
33configuration = Configuration(access_token=channel_access_token)
34handler = WebhookHandler(channel_secret)
35
36
37@app.route("/callback", methods=['POST'])
38def callback():
39 # get X-Line-Signature header value
40 signature = request.headers['X-Line-Signature']
41
42 # get request body as text
43 body = request.get_data(as_text=True)
44 app.logger.info("Request body: " + body)
45
46 # handle webhook body
47 try:
48 handler.handle(body, signature)
49 except InvalidSignatureError:
50 app.logger.info("Invalid signature. Please check your channel access token/channel secret.")
51 abort(400)
52
53 return 'OK'
54
55
56@handler.add(MessageEvent, message=TextMessageContent)
57def handle_message(event):
58 with ApiClient(configuration) as api_client:
59 line_bot_api = MessagingApi(api_client)
60 line_bot_api.reply_message_with_http_info(
61 ReplyMessageRequest(
62 reply_token=event.reply_token,
63 messages=[TextMessage(text=event.message.text)]
64 )
65 )
66
67
68if __name__ == "__main__":
69 app.run()