1. Go to this page and download the library: Download asciisd/nova-chat library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
asciisd / nova-chat example snippets
public function tools(): array
{
return [
new \Asciisd\NovaChat\NovaChat,
];
}
use Asciisd\NovaChat\Contracts\Chattable;
use Asciisd\NovaChat\Concerns\HasChat;
class Signal extends Model implements Chattable
{
use HasChat;
public function chatMessages(): HasMany
{
return $this->hasMany(SignalMessage::class);
}
public function chatTitle(): string { return $this->title; }
public function chatSubtitle(): ?string { return strtoupper($this->order_type); }
public function chatBadge(): ?string { return $this->status?->value; }
}
use Asciisd\NovaChat\Contracts\ChatMessage;
use Asciisd\NovaChat\Concerns\AsChatMessage;
class SignalMessage extends Model implements ChatMessage
{
use AsChatMessage;
protected $fillable = ['signal_id', 'body', 'attachments', 'read_at', 'is_from_admin', 'author_type', 'author_id'];
protected $casts = ['attachments' => 'array', 'read_at' => 'datetime', 'is_from_admin' => 'bool'];
public function chattable(): BelongsTo
{
return $this->belongsTo(Signal::class, 'signal_id');
}
}
// From admin Nova UI (the package's own POST endpoint does this):
$signal->chatMessages()->create([
'author_type' => $admin->getMorphClass(), 'author_id' => $admin->id,
'body' => 'reply', 'is_from_admin' => true, // explicit — kept
]);
// From your custom user-side endpoint:
$signal->chatMessages()->create([
'author_type' => $user->getMorphClass(), 'author_id' => $user->id,
'body' => 'question', // no is_from_admin → derived from $user->isChatAdmin()
]);
use Asciisd\NovaChat\Contracts\ChatParticipant;
use Asciisd\NovaChat\Concerns\AsChatParticipant;
class Admin extends Authenticatable implements ChatParticipant
{
use AsChatParticipant;
public function isChatAdmin(): bool { return true; }
}
class User extends Authenticatable implements ChatParticipant
{
use AsChatParticipant; // isChatAdmin() defaults to false
}