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()->...;
});
}
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' => '',
]);
Zuletzt geändert am 13. Juli 2026