linecorp / line-bot-sdk
SDK of the LINE BOT API for PHP
Installs: 2 164 598
Dependents: 30
Suggesters: 0
Security: 0
Stars: 713
Watchers: 98
Forks: 643
Open Issues: 3
Requires
- php: >=8.1
- guzzlehttp/guzzle: ^7.3
- guzzlehttp/psr7: ^1.7 || ^2.0
Requires (Dev)
- guzzlehttp/guzzle: ^7.3
- guzzlehttp/psr7: ^1.7 || ^2.0
- orchestra/testbench: *
- phpmd/phpmd: 2.15.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.2
- squizlabs/php_codesniffer: 3.10.3
- dev-master
- 9.12.0
- 9.11.0
- 9.10.0
- 9.9.1
- 9.9.0
- 9.8.0
- 9.7.1
- 9.7.0
- 9.6.1
- 9.6.0
- 9.5.0
- 9.4.4
- 9.4.3
- v9.4.2
- 9.4.1
- 9.4.0
- 9.3.0
- 9.2.0
- 9.1.0
- 9.0.0
- 8.1.0
- 8.0.0
- 7.6.1
- 7.6.0
- 7.5.0
- 7.4.0
- 7.3.1
- 7.3.0
- 7.2.0
- 7.1.0
- 7.0.0
- 6.3.0
- 6.2.0
- 6.1.0
- 6.0.0
- 5.1.0
- 5.0.0
- 4.6.0
- 4.5.0
- 4.4.2
- 4.4.1
- 4.4.0
- 4.3.0
- 4.2.0
- 4.1.0
- 4.0.1
- 4.0.0
- 3.15.0
- 3.14.0
- 3.13.0
- 3.12.0
- 3.11.0
- 3.10.0
- 3.9.0
- 3.8.0
- 3.7.0
- 3.6.1
- 3.6.0
- 3.5.0
- 3.4.1
- 3.4.0
- 3.3.0
- 3.2.0
- 3.1.0
- 3.0.0
- 2.3.0
- 2.2.0
- 2.1.0
- 2.0.0
- 1.6.0
- 1.5.0
- 1.4.0
- 1.3.0
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.0
- 0.1.0
- 0.0.2
- 0.0.1
- dev-renovate/major-phpstan-packages
This package is auto-updated.
Last update: 2024-12-25 05:10:06 UTC
README
Introduction
The LINE Messaging API SDK for PHP makes it easy to develop bots using LINE Messaging API, and you can create a sample bot within minutes.
Documentation
See the official API documentation for more information.
- English: https://developers.line.biz/en/docs/messaging-api/overview/
- Japanese: https://developers.line.biz/ja/docs/messaging-api/overview/
Requirements
- PHP 8.1 or later
Installation
Install the LINE Messaging API SDK using Composer.
$ composer require linecorp/line-bot-sdk
Getting started
Create the bot client instance
The bot client instance is a handler of the Messaging API.
$client = new \GuzzleHttp\Client(); $config = new \LINE\Clients\MessagingApi\Configuration(); $config->setAccessToken('<channel access token>'); $messagingApi = new \LINE\Clients\MessagingApi\Api\MessagingApiApi( client: $client, config: $config, );
You must use the Client with GuzzleHttp\ClientInterface
implementation.
Call API
You can call an API through the messagingApi instance.
A very simple example:
$message = new TextMessage(['type' => 'text','text' => 'hello!']); $request = new ReplyMessageRequest([ 'replyToken' => '<reply token>', 'messages' => [$message], ]); $response = $messagingApi->replyMessage($request);
This procedure sends a message to the destination that is associated with <reply token>
.
We also support setter style.
$message = (new TextMessage()) ->setType(\LINE\Constants\MessageType::TEXT) ->setText('hello!'); $request = (new ReplyMessageRequest) ->setReplyToken('<reply token>') ->setMessages([$message]); try { $messagingApi->replyMessage($request); // Success } catch (\LINE\Clients\MessagingApi\ApiException $e) { // Failed echo $e->getCode() . ' ' . $e->getResponseBody(); }
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 ~WithHttpInfo
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.
$request = new ReplyMessageRequest([ 'replyToken' => $replyToken, 'messages' => [$textMessage = (new TextMessage(['text' => 'reply with http info', 'type' => MessageType::TEXT]))], ]); $response = $messagingApi->replyMessageWithHttpInfo($request); $this->logger->info('body:' . $response[0]); $this->logger->info('http status code:' . $response[1]); $this->logger->info('headers(x-line-request-id):' . $response[2]['x-line-request-id'][0]);
You can get error messages from \LINE\Clients\MessagingApi\ApiException
when you use MessagingApiApi
. Each client defines its own exception class.
try { $profile = $messagingApi->getProfile("invalid-userId"); } catch (\LINE\Clients\MessagingApi\ApiException $e) { $headers = $e->getResponseHeaders(); $lineRequestId = isset($headers['x-line-request-id']) ? $headers['x-line-request-id'][0] : 'Not Available'; $httpStatusCode = $e->getCode(); $errorMessage = $e->getResponseBody(); $this->logger->info("x-line-request-id: $lineRequestId"); $this->logger->info("http status code: $httpStatusCode"); $this->logger->info("error response: $errorMessage"); }
When you need to get x-line-accepted-request-id
header from error response, you can get it: $headers['x-line-accepted-request-id'][0]
.
Components
Webhook
LINE's server sends user actions (such as a message, image, or location) to your bot server. Request of that contains event(s); event is action of the user.
The following shows how the webhook is handled:
- Receive webhook from LINE's server.
- Parse request payload by
EventRequestParser#parseEventRequest($body, $channelSecret, $signature)
. - Iterate parsed events and some react as you like.
The following examples show how webhooks are handled:
More information
For more information, see the official API documents and PHPDoc.
If it's your first time using this library, we recommend taking a look at examples
and the PHPDoc of \LINE
.
Hints
Examples
This repository contains two examples of how to use the LINE Messaging API.
EchoBot
A simple sample implementation. This application reacts to text messages that are sent from users.
KitchenSink
A full-stack (and slightly complex) sample implementation. This application demonstrates a practical use of the LINE Messaging API.
PHPDoc
https://line.github.io/line-bot-sdk-php/
This library provides PHPDoc to describe how to use the methods. You can generate the documentation using phpDocumenter using the following command.
$ wget https://github.com/phpDocumentor/phpDocumentor/releases/download/v3.3.1/phpDocumentor.phar $ php phpDocumentor.phar run -d src -t docs The HTML files are generated in docs/.
Official API documentation
Official API documents shows the detail of Messaging API and fundamental usage of SDK.
See also
Laravel Support
Easy to use from Laravel.
After installed, add LINE_BOT_CHANNEL_ACCESS_TOKEN
to .env
LINE_BOT_CHANNEL_ACCESS_TOKEN=<Channel Access Token>
then you can use facades like following.
$profile = \LINEMessagingApi::pushMessage(....);
Facade uses \GuzzleHttp\Client
by default. If you want to change the config, run
$ php artisan vendor:publish --provider="LINE\Laravel\LINEBotServiceProvider" --tag=config
Then line-bot.php
will be published to config/
dir.
If you want to configure a custom header, do the following.
return [ 'channel_access_token' => env('LINE_BOT_CHANNEL_ACCESS_TOKEN'), 'channel_id' => env('LINE_BOT_CHANNEL_ID'), 'channel_secret' => env('LINE_BOT_CHANNEL_SECRET'), 'client' => [ 'config' => [ 'headers' => ['X-Foo' => 'Bar'], ], ], ];
Help and media
FAQ: https://developers.line.biz/en/faq/
News: https://developers.line.biz/en/news/
Versioning
This project respects semantic versioning.
Contributing
Please check CONTRIBUTING before making a contribution.
For hacking instructions, please refer HACKING.md.
License
Copyright 2016 LINE Corporation
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
https://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.