Zum Hauptinhalt springen

Webhook

Das Paket bietet Webhook-Routing und einen Controller.

Webhook-URL

Die Standard-Webhook-URL lautet wie folgt:
https://example.com/line/webhook
Sie können den Pfad über .env ändern.
LINE_BOT_WEBHOOK_PATH=webhook

Integration mit dem Laravel-Eventsystem

Beim Empfang eines Webhook-Ereignisses wird ein Laravel-Event ausgelöst. Event-Discovery ist standardmäßig aktiviert.
Führen Sie in Produktionsumgebungen php artisan event:cache aus.

Standard-Listener veröffentlichen

php artisan vendor:publish --tag=line-listeners
Ein MessageListener wird in app/Listeners/Line/ erstellt.
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()
        );
    }
}

Bot-Facade

Revolution\Line\Facades\Bot delegiert an alle Methoden der offiziellen SDK-Klasse MessagingApiApi.
use Revolution\Line\Facades\Bot;

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

reply-Methode

Mit Bot::reply() können Sie eine Antwort senden, indem Sie das Reply-Token übergeben.
Die Push-Zustellung mit Bot::pushMessage() unterliegt je nach Tarif einer Beschränkung der Nachrichtenanzahl. Antworten auf Nachrichten von Benutzern (Bot::reply()) unterliegen dagegen keiner Mengenbeschränkung und sind kostenlos nutzbar.
use Revolution\Line\Facades\Bot;

// Text antworten
Bot::reply($token)->text('text');

// Mehrere Texte mit geändertem Absendernamen antworten
Bot::reply($token)->withSender('alt-name')->text('text1', 'text2');

// Sticker antworten
Bot::reply($token)->sticker(package: 1, sticker: 1);

Anpassung

Bot-Makros

Da Bot Macroable implementiert, können Sie beliebige Methoden hinzufügen. Registrieren Sie sie in AppServiceProvider@boot.
use Revolution\Line\Facades\Bot;

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

Ersetzen der MessagingApiApi-Instanz

Bot::bot() gibt eine MessagingApiApi-Instanz zurück. Mit Bot::botUsing() können Sie die Instanz ersetzen.
$bot = new MyBot();

Bot::botUsing($bot);
Es werden auch Callables akzeptiert.
Bot::botUsing(function () {
    return new MyBot();
});

Ersetzen des WebhookHandlers

Wenn Sie eine eigene Webhook-Verarbeitung ohne das Laravel-Eventsystem schreiben möchten, implementieren Sie das WebhookHandler-Interface und ersetzen Sie es. Erstellen Sie 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');
    }
}
Registrieren Sie ihn in AppServiceProvider@register.
use App\Actions\LineWebhook;
use Revolution\Line\Contracts\WebhookHandler;

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

Middleware der Standardroute

Standardmäßig ist die throttle-Middleware aktiviert. Sie können sie über .env ändern.
# Deaktivieren
LINE_BOT_WEBHOOK_MIDDLEWARE=null

# throttle-Konfiguration ändern
LINE_BOT_WEBHOOK_MIDDLEWARE=throttle:120,1

Http::line()

Da das Paket die Http-Klasse erweitert, können Sie API-Anfragen auch ohne die Bot-Facade direkt senden.
use Illuminate\Support\Facades\Http;

$response = Http::line()->post('/v2/bot/channel/webhook/test', [
    'endpoint' => '',
]);
Die aktuellsten Informationen finden Sie im GitHub-Repository.
Zuletzt geändert am 13. Juli 2026