NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Broadcasting je predvolene vypnutý — bežné udalosti sa spúšťajú tak či tak. Zapnite ho, ak chcete zmeny posielať naživo cez broadcasting v Laraveli (Reverb, Pusher, Ably, …):

REALTIME_MESSAGES=true

Po zapnutí používajú modely Thread, Participant a Message trait BroadcastsEvents z Laravelu pri vytvorení, úprave, zmazaní a obnovení. Nové vlákno sa ohlási až vtedy, keď sú v ňom jeho účastníci, takže súkromné vlákno sa dostane ku každému z nich.

Vlákno vysiela len svoje vytvorenie: premenovanie, archivácia ani zmazanie sa nevysielajú. Ak ich chcete posielať, reagujte na udalosti ThreadRenamed a ThreadArchived — alebo zapnite systémové správy, ktoré do vlákna vložia (vysielanú) správu o premenovaní.

Kanály

KanálTypPrenáša
messagingverejnýmessaging.thread.created pre verejné vlákna.
messaging.participant.{name}.{id}súkromnýmessaging.thread.created pre súkromné a priame vlákna — raz pre každého účastníka; {name} je názov triedy malými písmenami (napr. user), {id} jeho kľúč.
messaging.thread.{id}súkromnýUdalosti účastníkov (joined, read, left), správ (sent, updated, unsent, restored) a písania.

Balík neregistruje žiadne autorizačné callbacky kanálov — súkromné kanály autorizujte v routes/channels.php vašej aplikácie, napríklad overením, že používateľ je účastníkom vlákna (Thread::query()->forParticipant($user)).

Názvy kanálov a udalostí

Každý názov kanála aj udalosti je konfigurovateľný:

'broadcasting' => [
    'enabled' => env('REALTIME_MESSAGES', false),

    'threads' => [
        'public-channel' => 'messaging',
        'per-participant-channel' => 'messaging.participant.{name}.{id}',
        'events' => [
            'created' => 'messaging.thread.created',
        ],
    ],

    'participants' => [
        'channel' => 'messaging.thread.{id}',
        'events' => [
            'created' => 'messaging.participant.joined',
            'updated' => 'messaging.participant.read',
            'trashed' => 'messaging.participant.left',
            'restored' => 'messaging.participant.joined',
            'deleted' => 'messaging.participant.left',
        ],
    ],

    'typing' => [
        'event' => 'messaging.participant.typing',
    ],

    'messages' => [
        'channel' => 'messaging.thread.{id}',
        'events' => [
            'created' => 'messaging.message.sent',
            'updated' => 'messaging.message.updated',
            'trashed' => 'messaging.message.unsent',
            'restored' => 'messaging.message.restored',
            'deleted' => 'messaging.message.unsent',
        ],
    ],
],

Payloady

  • Thread — id, name, is_public, everyone_can_join.
  • Participant — id, participant (participateAs()), read_at, joined_at, left_at.
  • Message — id, sender (participateAs()), message (po zrušení odoslania null), sent_at, updated_at, deleted_at.
  • Písanie — thread_id, participant (participateAs()).

Indikátor písania

Na kanál vlákna vyšlete živý indikátor písania — len sa vysiela (nikdy neukladá), rešpektuje broadcasting.enabled a každého, kto nie je aktuálnym účastníkom, odmietne výnimkou ParticipationException, či je broadcasting zapnutý, alebo nie:

use RoundlyConsulting\Messages\Facades\Messages;

Messages::thread($thread)->typing($user);   // broadcasts ParticipantTyping — never persisted
$thread->typing($user);                     // the same, from the model

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.