Passer au contenu principal

Webhook

Le package fournit le routage et le contrôleur du Webhook.

URL du Webhook

L’URL du Webhook par défaut est la suivante :
https://example.com/line/webhook
Vous pouvez modifier le chemin via .env.
LINE_BOT_WEBHOOK_PATH=webhook

Intégration avec le système d’événements de Laravel

Lorsqu’un événement Webhook est reçu, un événement Laravel est dispatché. La découverte d’événements est activée par défaut.
En production, exécutez php artisan event:cache.

Publier les listeners par défaut

php artisan vendor:publish --tag=line-listeners
Un MessageListener est généré dans app/Listeners/Line/.
namespace App\Listeners\Line;

use LINE\Clients\MessagingApi\ApiException;
use LINE\Webhook\Model\MessageEvent;
use LINE\Webhook\Model\StickerMessageContent;
use LINE\Webhook\Model\TextMessageContent;
use Revolution\Line\Facades\Bot;

class MessageListener
{
    protected string $token;

    public function handle(MessageEvent $event): void
    {
        $message = $event->getMessage();
        $this->token = $event->getReplyToken();

        match ($message::class) {
            TextMessageContent::class => $this->text($message),
            StickerMessageContent::class => $this->sticker($message),
        };
    }

    protected function text(TextMessageContent $message): void
    {
        Bot::reply($this->token)->text($message->getText());
    }

    protected function sticker(StickerMessageContent $message): void
    {
        Bot::reply($this->token)->sticker(
            $message->getPackageId(),
            $message->getStickerId()
        );
    }
}

Facade Bot

Revolution\Line\Facades\Bot délègue à toutes les méthodes de la classe MessagingApiApi du SDK officiel.
use Revolution\Line\Facades\Bot;

Bot::replyMessage();
Bot::pushMessage();

Méthode reply

Bot::reply() permet de répondre à un message en passant le reply token.
Les envois push via Bot::pushMessage() sont limités en nombre selon votre plan tarifaire. En revanche, les réponses aux messages des utilisateurs (Bot::reply()) sont illimitées et gratuites.
use Revolution\Line\Facades\Bot;

// Répondre par un texte
Bot::reply($token)->text('text');

// Répondre par plusieurs textes en changeant le nom de l'expéditeur
Bot::reply($token)->withSender('alt-name')->text('text1', 'text2');

// Répondre par un sticker
Bot::reply($token)->sticker(package: 1, sticker: 1);

Personnalisation

Macros Bot

Bot implémente Macroable, vous pouvez donc lui ajouter n’importe quelle méthode. Enregistrez-la dans AppServiceProvider@boot.
use Revolution\Line\Facades\Bot;

public function boot(): void
{
    Bot::macro('foo', function () {
        return $this->bot()->...;
    });
}
$foo = Bot::foo();

Remplacer l’instance de MessagingApiApi

Bot::bot() renvoie une instance de MessagingApiApi. Vous pouvez remplacer cette instance avec Bot::botUsing().
$bot = new MyBot();

Bot::botUsing($bot);
Un callable est également accepté.
Bot::botUsing(function () {
    return new MyBot();
});

Remplacer le WebhookHandler

Si vous souhaitez écrire votre propre traitement du Webhook sans passer par le système d’événements de Laravel, implémentez l’interface WebhookHandler et remplacez le handler. Créez app/Actions/LineWebhook.php.
<?php

namespace App\Actions;

use Illuminate\Http\Request;
use LINE\Webhook\Model\MessageEvent;
use Revolution\Line\Contracts\WebhookHandler;
use Revolution\Line\Facades\Bot;

class LineWebhook implements WebhookHandler
{
    public function __invoke(Request $request): mixed
    {
        Bot::parseEvent($request)->each(function ($event) {
            if ($event instanceof MessageEvent) {
                //
            }
        });

        return response('OK');
    }
}
Enregistrez-le dans AppServiceProvider@register.
use App\Actions\LineWebhook;
use Revolution\Line\Contracts\WebhookHandler;

public function register(): void
{
    $this->app->scoped(WebhookHandler::class, LineWebhook::class);
}

Middleware de la route par défaut

Le middleware throttle est activé par défaut. Vous pouvez le modifier via .env.
# Désactiver
LINE_BOT_WEBHOOK_MIDDLEWARE=null

# Modifier la configuration de throttle
LINE_BOT_WEBHOOK_MIDDLEWARE=throttle:120,1

Http::line()

Le package étend la classe Http, vous pouvez donc également envoyer directement des requêtes API sans passer par la Facade Bot.
use Illuminate\Support\Facades\Http;

$response = Http::line()->post('/v2/bot/channel/webhook/test', [
    'endpoint' => '',
]);
Pour les dernières informations, consultez le dépôt GitHub.
Dernière modification le 13 juillet 2026