line/line-bot-sdk-python sits at 2.1k stars on GitHub, written primarily in Python. LINE Messaging API SDK for Python
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
from flask import Flask, request, abort
from linebot.v3 import (
WebhookHandler
)
from linebot.v3.exceptions import (
InvalidSignatureError
)
from linebot.v3.messaging import (
Configuration,
ApiClient,
MessagingApi,
ReplyMessageRequest,
TextMessage
)
from linebot.v3.webhooks import (
MessageEvent,
TextMessageContent
)
app = Flask(__name__)
configuration = Configuration(access_token='YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')
@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:
app.logger.info("Invalid signature. Please check your channel access token/channel secret.")
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessageContent)
def handle_message(event):
with ApiClient(configuration) as api_client:
line_bot_api = MessagingApi(api_client)
line_bot_api.reply_message_with_http_info(
ReplyMessageRequest(
reply_token=event.reply_token,
messages=[TextMessage(text=event.message.text)]
)
)
if __name__ == "__main__":
app.run()
API
See linebot/v3/messaging/docs <linebot/v3/messaging/docs/MessagingApi.md>__ . Other docs are in linebot/v3/<feature>/docs/*.md.
Webhook
WebhookParser
※ You can use WebhookParser
\_\_init\_\_(self, channel\_secret, skip\_signature\_verification=lambda: False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code:: python
parser = linebot.v3.WebhookParser('YOUR_CHANNEL_SECRET')
# or with skip_signature_verification option
parser = linebot.v3.WebhookParser(
'YOUR_CHANNEL_SECRET',
skip_signature_verification=lambda: False
parse(self, body, signature, as_payload=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Parses the webhook body, and returns a list of Event objects or a WebhookPayload object (depending on as_payload).
If the signature does NOT match, ``InvalidSignatureError`` is raised.
.. code:: python
events = parser.parse(body, signature)
for event in events:
do_something(event)
.. code:: python
payload = parser.parse(body, signature, as_payload=True)
for event in payload.events:
do_something(payload.event, payload.destination)
WebhookHandler
Handles webhooks with handlers added
by the decorators add <#add-self-event-message-none>__ and default <#default-self>__.
If the signature does NOT match, InvalidSignatureError is raised.
`aiohttp-echo <examples/aiohttp-echo>`__
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sample echo-bot with asynchronous processings.
`fastapi-echo <examples/fastapi-echo>`__
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sample echo-bot using `FastAPI <https://fastapi.tiangolo.com/>`__
`flask-echo <examples/flask-echo>`__
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sample echo-bot using `Flask <http://flask.pocoo.org/>`__
`flask-kitchensink <examples/flask-kitchensink>`__
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sample bot using `Flask <http://flask.pocoo.org/>`__
`rich-menu <examples/rich-menu>`__
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Switching richmenu script
`simple-server-echo <examples/simple-server-echo>`__
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sample echo-bot using
`wsgiref.simple\_server <https://docs.python.org/3/library/wsgiref.html>`__
How to deserializes JSON to FlexMessage or RichMenu
line-bot-python-sdk provides from_json method for each model.
It deserializes the JSON into the specified model.
Thus, you can send a JSON designed with Flex Message Simulator <https://developers.line.biz/console/fx/>__.
How to get x-line-request-id header and error message
You may need to store the ``x-line-request-id`` header obtained as a response from several APIs.
In this case, please use ``~_with_http_info`` functions. You can get headers and status codes.
The ``x-line-accepted-request-id`` or ``content-type`` header can also be obtained in the same way.
.. code:: python
response = line_bot_api.reply_message_with_http_info(
ReplyMessageRequest(
reply_token=event.reply_token,
messages=[TextMessage(text='see application log')]
)
)
app.logger.info("Got response with http status code: " + str(response.status_code))
app.logger.info("Got x-line-request-id: " + response.headers['x-line-request-id'])
app.logger.info("Got response with http body: " + str(response.data))
You can get error messages from ``ApiException`` when you use ``MessagingApi``. Each client defines its own exception class.
.. code:: python
from linebot.v3.messaging import ApiException, ErrorResponse
try:
line_bot_api.reply_message_with_http_info(
ReplyMessageRequest(
reply_token='invalid-reply-token',
messages=[TextMessage(text='see application log')]
)
)
except ApiException as e:
app.logger.info("Got response with http status code: " + str(e.status))
app.logger.info("Got x-line-request-id: " + e.headers['x-line-request-id'])
app.logger.info("Got response with http body: " + str(ErrorResponse.from_json(e.body)))
When you need to get ``x-line-accepted-request-id`` header from error response, you can get it: ``e.headers['x-line-accepted-request-id']``.
Help and media
--------------
FAQ: https://developers.line.biz/en/faq/
News: https://developers.line.biz/en/news/
Versioning
----------
This project respects semantic versioning
- See `semver.org <https://semver.org/>`_
However, if a feature that was publicly released is discontinued for business reasons and becomes completely unusable, we will release changes as a patch release.
Version 3.x
-----------
LINE's SDK developer team decided to generate SDK code based on OpenAPI spec. https://github.com/line/line-openapi
As a result, LINE bot sdk 3.x is not compatible with 2.x. It can follow the future API changes very quickly.
We will be maintaining only ``linebot.v3`` going forward.
To utilize the latest features, we recommend you gradually transition to ``linebot.v3`` modules in your application, although you can still continue to use the 2.x ``linebot`` modules.
While we won't update ``linebot`` modules anymore, users can still continue to use the version 2.x ``linebot`` modules.
We also welcome pull requests for the version ``2.x`` and ``3.x`` modules.
How to suppress deprecation warnings
------------------------------------
If you keep using old line-bot-sdk library (``version < 3.x``) but use ``3.x``, you'll get
::
LineBotSdkDeprecatedIn30: Call to deprecated method get_bot_info. (Use 'from linebot.v3.messaging import MessagingApi' and 'MessagingApi(...).get_bot_info(...)' instead. See https://github.com/line/line-bot-sdk-python/blob/master/README.rst for more details.) -- Deprecated since version 3.0.0.
If it's noisy, you can suppress this warning as follows.
.. code:: python
import warnings
from linebot import LineBotSdkDeprecatedIn30
## your code here
...
if __name__ == '__main__':
warnings.filterwarnings("ignore", category=LineBotSdkDeprecatedIn30)
Contributing
------------
Please check `CONTRIBUTING <CONTRIBUTING.md>`__ before making a contribution.
.. |PyPI version| image:: https://badge.fury.io/py/line-bot-sdk.svg
:target: https://badge.fury.io/py/line-bot-sdk
License
--------
::
Copyright (C) 2016 LINE Corp.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
How active is development on line/line-bot-sdk-python?
The most recent commit recorded on line/line-bot-sdk-python was 19 days ago, based on the GitHub push timestamp. The repository has 1.1k forks — one of the better signals of community interest.
How many stars does line/line-bot-sdk-python have?
line/line-bot-sdk-python has 2.1k GitHub stars — refresh the page for the live number, or check github.com/line/line-bot-sdk-python. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
Is line/line-bot-sdk-python open source?
Yes — line/line-bot-sdk-python ships under the Apache-2.0 license, which makes its source code freely readable (and, depending on license terms, forkable and reusable). Source: github.com/line/line-bot-sdk-python.
What else is in the Automation space?
line/line-bot-sdk-python is tracked by TopGit under the Automation category, alongside 5 GitHub-tagged topics. Trending and Topics pages list peer repositories of comparable stars and language.
What topics is line/line-bot-sdk-python associated with?
GitHub's repository topics for line/line-bot-sdk-python: "bot", "line", "linebot", "python", "sdk". TopGit's editorial category is Automation.
Where can I see line/line-bot-sdk-python in action?
The project maintains a homepage at https://pypi.python.org/pypi/line-bot-sdk. The README tab on this page also usually contains screenshots and a quickstart.
Where do I read more about line/line-bot-sdk-python?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/line/line-bot-sdk-python is the definitive source.
Read full README in the tab above.
Is line-bot-sdk-python worth your time?
ChatGPT, Claude and Perplexity can all read this page. Ask one of them what it makes of line-bot-sdk-python.