Talk
Talk is a real-time users messaging and chatting system for Laravel.
Install / Use
/learn @nahid/TalkREADME
Laravel-Talk
Talk is a user conversation (chatting) system with realtime messaging for Laravel. You can easily integrate this package with any Laravel based project. It helps you to develop a messaging system in just few minutes. Here is a project screenshot that was developed by Talk.
Talk v2.1.0 supports realtime messaging. Learn more about Talk Live Messaging
Feedback
If you already used Talk, please share your experience with us. It will make the project better.
Built with Talk
If you are using Talk in your project please share your project URL or project name with us. It will inspire other people to use Talk.
See which project was Built with Talk.
Caution
Do not migrate 1.1.7 from its higher version directly. Please try our sample project first and then apply it on your project.

You may try Talk-Example project.
Or you can try live Demo by using this credentials:
username: admin
password: admin
So let's start your tour :)
Features
- Head to head messaging
- Realtime messaging
- Creating new conversation
- Message threads with latest one
- View conversations by user id or conversation id
- Support pagination in threads and messages
- Delete (soft delete) message from both end. Sender and receiver can delete their message from their end
- Permanent delete message
- Mark message as seen
- Only participant can view or access there message or message threads
- Inline url render using oembed specifications
Installation
Talk is a Laravel package so you can install it via Composer. Run this command in your terminal from your project directory:
composer require nahid/talk
Wait for a while, Composer will automatically install Talk in your project.
Configuration
When the download is complete, you have to call this package service in config/app.php config file. To do that, add this line in app.php in providers section:
Nahid\Talk\TalkServiceProvider::class,
To use facade you have to add this line in app.php in aliases array:
'Talk' => Nahid\Talk\Facades\Talk::class,
Now run this command in your terminal to publish this package resources:
php artisan vendor:publish --provider="Nahid\Talk\TalkServiceProvider"
After running this command, all necessary file will be included in your project. This package has two default migrations. So you have to run migrate command like this. (But make sure your database configuration is configured correctly.)
php artisan migrate
Okay, now you need to configure your user model for Talk. Go to config/talk.php and config it:
return [
'user' => [
'model' => 'App\User',
'foreignKey' => null,
'ownerKey' => null,
],
'broadcast' => [
'enable' => true,
'app_name' => 'talk-example',
'driver' => env('TALK_BROADCAST_DRIVER', 'pusher'), // pusher or laravel-websockets
'pusher' => [
'app_id' => env('PUSHER_APP_ID', ''),
'app_key' => env('PUSHER_APP_KEY', ''),
'app_secret' => env('PUSHER_APP_SECRET', ''),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER', 'ap2'),
'encrypted' => env('PUSHER_APP_ENCRYPTION', false),
'host' => '127.0.0.1',
'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001),
'scheme' => 'http',
'wsHost' => '127.0.0.1',
'wsPort' => env('LARAVEL_WEBSOCKETS_PORT', 6001),
'forceTLS' => false,
'disableStats' => true
]
],
],
'oembed' => [
'enabled' => false,
'url' => '',
'key' => ''
]
];
Usage
Its very easy to use. If you want to set authenticate user id globally then you have to set a middleware first. Go to app/Http/Kernel.php and set it in $routeMiddleware array:
'talk' => \Nahid\Talk\Middleware\TalkMiddleware::class,
And now you can use it from anywhere with middleware. Suppose you have a Controller and you want to set authenticate user id globally then write this in controller constructor:
$this->middleware('talk');
But instead of set id globally you can use these procedure from any method in controller:
Talk::setAuthUserId(auth()->user()->id);
Now you may use any method what you need. But if want pass authentic id instantly, this method may help you:
Talk::user(auth()->user()->id)->anyMethodHere();
Please see the API Doc.
API List
- setAuthUserId
- user
- isConversationExists
- isAuthenticUser
- sendMessage
- sendMessageByUserId
- getInbox
- getInboxAll
- threads
- threadsAll
- getConversationsById
- getConversationsAllById
- getConversationsByUserId
- getConversationsAllByUserId
- getMessages
- getMessagesByUserId
- getMessagesAll
- getMessagesAllByUserId
- readMessage
- makeSeen
- getReceiverInfo
- deleteMessage
- deleteForever
- deleteConversations
setAuthUserId
setAuthUserId method sets the currently loggedin user id, which you pass through parameter. If you pass null or empty value then it returns false.
Syntax
void setAuthUserId($userid)
Example
Constructor of a Controller is the best place to write this method.
function __construct()
{
Talk::setAuthUserId(auth()->user()->id);
}
When you pass logged in user ID, Talk will know who is currently authenticated for this system. So Talk retrieve all information based on this user.
user
You may use this method instead of setAuthUserId() method. When you have to instantly access users conversations then you may use it.
Syntax
object user($id)
Example When you haven't set authenticated user id globally, then you just use this method directly with others method.
$inboxes = Talk::user(auth()->user()->id)->threads();
return view('messages.threads', compact('inboxes'));
isConversationExists
This method checks currently logged in user and if given user is already in conversation
Syntax
int|false isConversationExists($userid)
Example
if ($conversationId = Talk::isConversationExists($userId)) {
Talk::sendMessage($conversationId, $message);
}
isAuthenticUser
isAuthenticUser checks if the given user exists in given conversation.
Syntax
boolean isAuthenticUser($conversationId, $userId)
Example
if (Talk::isAuthenticUser($conversationId, $userId)) {
Talk::sendMessage($conversationId, $message);
}
sendMessage
You can send messages via conversation id by using this method. If the message is successfully sent, it will return objects of Message model otherwise, it will return false
Syntax
object|false sendMessage($conversationId, $message)
Example
$message = Talk::sendMessage($conversationId, $message);
if ($message) {
return response()->json(['status'=>'success', 'data'=>$message], 200);
}
sendMessageByUserId
You can send message via receiver id by using this method. If the message is successfully sent, it will return objects of Message model otherwise, it will return false
Syntax
object|false sendMessageByUserId($userId, $message)
getInbox
If you want to get all the inboxes except soft deleted message , this method may help you. This method gets all the inboxes via previously assigned authenticated user id. It returns collections of message thread with latest message.
Syntax
array getInbox([$order = 'desc'[,$offset = 0[, $take = 20]]])
Example
// controller method
$inboxes = Talk::getInbox();
return view('message.threads', compact('inboxes'));
<!-- messages/threads.blade.php -->
<ul>
@foreach($inboxes as $inbox)
<li>
<h2>{{$inb
