carandclassic / talkjs
PHP client for TalkJS API
Installs: 54 677
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 0
Forks: 7
Open Issues: 2
pkg:composer/carandclassic/talkjs
Requires
- php: >=7.4
- ext-json: *
- symfony/http-client: ^4.4|^5.2|^6.0
Requires (Dev)
- phpunit/phpunit: ^9.5.4
This package is auto-updated.
Last update: 2025-09-23 11:55:59 UTC
README
Forked from shapintv/talkjs.
For more information on parameters, custom data, and other things you can send with this API, please see the TalkJS REST API documentation.
The structure of this package is crafted around the TalkJS REST API structure, and as such all the following are treated as distinct APIs:
- Users
- Conversations
- Messages
Not implemented currently:
- Notifications
- Sending file Messages
Install
Via Composer
$ composer require carandclassic/talkjs
Usage
This can be used as-is or with auto discovery in Laravel.
Create a TalkJSClient
use CarAndClassic\TalkJS\TalkJSClient; $appId = 'my_app_id'; $secretKey = 'my_secret_key'; $talkJSClient = new TalkJSClient($appId, $secretKey);
Laravel
Firstly, add TALKJS_APP_ID and TALKJS_SECRET_KEY to your env file. These are pulled in from the package's config automatically talkjs.app_id and talkjs.secret_key respectively.
If you'd like to change this, you can publish the application config and modify the talkjs.php config file in your application:
php artisan vendor:publish --provider=CarAndClassic\\TalkJS\\Providers\\TalkJSServiceProvider
Laravel's automatic service discovery will let you dependency inject TalkJSClient as per normal. Alternatively for one-off use you can also pass overriding appId and secretKey arguments using app()->make():
$talkJSClient = app()->make(TalkJSClient::class, ['appId' => 'my_custom_app_id', 'secretKey' => 'my_custom_secret_key']);
Input vs API data
Below you'll see "input data" and "API data" referenced.
- Input data = data you sent via this package
- API data = data returned from the API
This is done because currently TalkJS returns empty 200 responses for successful resource update/creation, but it's still helpful to return what you've sent along.
IDs
TalkJS IDs for users and conversations are custom and managed by your application.
Filtering
All endpoints that fetch multiple records (users, conversations, messages) have limit & pagination options. API usage below will use a $filters variable where possible for demonstration, and it will look like this:
$filters = [ 'limit' => 50, 'startingAfter' => 'latestMessageId' ];
Creating a TalkJSClient
$appId = 'YOUR_APP_ID'; $secretKey = 'YOUR_SECRET_KEY'; $talkJSClient = new TalkJSClient($appId, $secretKey);
Users
Please note TalkJS currently does not offer a user deletion API, and instead recommend you use the update/edit endpoints to anonymise personally identifiable information.
- Creating or updating a user, returns
UserCreatedclass with input data
$talkJSClient->users->createOrUpdate('my_custom_id', [ "name" => "Alice", "email" => ["alice@example.com"], "welcomeMessage" => "Welcome!", "photoUrl" => "https =>//demo.talkjs.com/img/alice.jpg", "role" => "buyer", "phone" => ["+1123456789"], "custom" => [ "foo" => "bar" ] ]);
- Retrieve a user, returns a
Usermodel class with API data
$talkJSClient->users->find('my_user_id');
- Get all users, returns an array of
Usermodel class with API data
$talkJSClient->users->find($filters);
- Get user's conversations, returns an array of
Conversationmodel class with API data
$talkJSClient->users->getConversations('my_user_id');
Conversations
- Create or update a conversation, returns a ConversationCreatedOrUpdated event class with input data
$talkJSClient->conversations->createOrUpdate('my_conversation_id', [ 'subject' => 'My new conversation', 'participants' => ['my_user_id_1', 'my_user_id_2'], 'welcomeMessages' => ['Welcome!'], 'custom' => ['test' => 'test'], 'photoUrl' => null ]);
- Retrive a conversation, returns a Conversation model class with API data
$talkJSClient->conversations->get('my_conversation_id');
- Find conversations, returns an array of
Conversationmodel class with API data
$talkJSClient->conversations->find();
- Join a conversation, returns a
ConversationJoinedevent class with input data
$talkJSClient->conversations->join('my_conversation_id', 'my_user_id');
- Leave a conversation, returns a
ConversationLeftevent class with input data
$talkJSClient->conversations->leave('my_conversation_id', 'my_user_id');
- Delete a conversation, returns a
ConversationLeftevent class with input data
$talkJSClient->conversations->delete('my_conversation_id');
- Update participation settings (notifications and read/write access)
$notify = true; // Boolean, default true $access = 'ReadWrite'; // ReadWrite or Read, default ReadWrite $talkJSClient->conversations->updateParticipation('my_conversation_id', 'my_user_id', $notify, $access);
Messages
For more information on custom data and filters, please refer to the TalkJS documentation linked above.
Please note:
- Sending file attachment is not yet implemented.
- Endpoints that return multiple messages will return them in descending order, i.e. latest first.
$custom = [ 'foo' => 'bar' ];
- Get messages in a conversation, returns an array of
Messagemodel class with API data
$talkJSClient->messages->get('my_conversation_id', $filters);
- Find specific message in a conversation
$talkJSClient->messages->find('my_conversation_id', 'message_id');
- Post a system message, returns a
MessageCreatedevent class with input data andtypeofSystemMessage
$talkJSClient->messages->postSystemMessage('my_conversation_id', $text, $custom);
- Post a user message, returns a
MessageCreatedevent class with input data andtypeofUserMessage
$talkJSClient->messages->postUserMessage('my_conversation_id', $username, $text, $custom);
- Edit a message, returns a
MessageEditedevent class with input data
$talkJSClient->messages->edit('my_conversation_id', 'message_id', $text, $custom);
- Delete a message, returns a
MessageDeletedevent class with no data
$talkJSClient->messages->delete('my_conversation_id', 'message_id');
License
The MIT License (MIT). Please see License File for more information.