Search by

Caiyun multi-driver instant messaging package for Laravel (Tencent / RongCloud / Easemob / Aliyun / Huawei)

Maintainers

Package info

github.com/763606865/caiyun-im

pkg:composer/caiyun/im

Transparency log

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-09-03 08:31 UTC

This package is auto-updated.

Last update: 2026-09-03 08:36:00 UTC


README

Laravel 多驱动即时通信 SDK,统一封装腾讯云 IM、融云、环信、阿里云互动消息、华为云 IM,以及自定义后端。

环境要求

  • PHP ^8.3
  • Laravel / Illuminate ^12.0 | ^13.0
  • 扩展:ext-jsonext-zlib
  • Guzzle ^7.8

安装

composer require caiyun/im

Laravel 会自动注册服务提供者与 Facade。如需发布配置:

php artisan vendor:publish --tag=im-config

配置

.env 中指定默认驱动:

IM_DRIVER=tencent

可选队列配置(预留):

IM_QUEUE_CONNECTION=database
IM_QUEUE=im

腾讯云 IM(默认)

IM_TENCENT_END_POINT=https://console.tim.qq.com
IM_TENCENT_SDK_APP_ID=1400000000
IM_TENCENT_SECRET_KEY=your-secret-key
IM_TENCENT_ADMINISTRATOR=administrator
IM_TENCENT_USER_SIG_TTL=5184000
IM_TENCENT_ADMIN_SIG_TTL=86400

融云

IM_RONGCLOUD_END_POINT=https://api.rong-api.com
IM_RONGCLOUD_APP_KEY=
IM_RONGCLOUD_APP_SECRET=

环信

IM_EASEMOB_END_POINT=https://a1.easemob.com
IM_EASEMOB_ORG_NAME=
IM_EASEMOB_APP_NAME=
IM_EASEMOB_CLIENT_ID=
IM_EASEMOB_CLIENT_SECRET=

阿里云互动消息

IM_ALIYUN_END_POINT=https://live-im.cn-shanghai.aliyuncs.com
IM_ALIYUN_ACCESS_KEY_ID=
IM_ALIYUN_ACCESS_KEY_SECRET=
IM_ALIYUN_APP_ID=
IM_ALIYUN_APP_SIGN=
IM_ALIYUN_REGION_ID=cn-shanghai

华为云 IM

IM_HUAWEI_END_POINT=https://im-api.cloud.huawei.com.cn
IM_HUAWEI_APP_ID=
IM_HUAWEI_APP_SECRET=
IM_HUAWEI_TOKEN_END_POINT=https://oauth-login.cloud.huawei.com.cn/oauth2/v3/token

自定义后端

IM_CUSTOM_END_POINT=https://im.example.com
IM_CUSTOM_APP_KEY=
IM_CUSTOM_APP_SECRET=
IM_CUSTOM_APP_CODE=

完整配置见 config/im.php

快速使用

Facade

use Caiyun\Im\Facades\Im;
use Caiyun\Im\Api\Tencent\Message as TencentMessage;

// 导入 / 更新用户
Im::user()->createOrUpdateUser([
    'external_user_id' => 'user_1',
    'nickname' => '张三',
    'avatar' => 'https://example.com/avatar.png',
]);

// 获取客户端登录凭证
$token = Im::user()->getImToken('user_1');

// 发送单聊文本(腾讯云示例)
Im::message()->send(
    'user_1',
    'user_2',
    [TencentMessage::text('你好')],
);

// 创建会话 / 群组
Im::conversation()->store([
    'type' => 'group',
    'subject' => '项目群',
    'owner_user_id' => 'user_1',
    'member_user_ids' => ['user_1', 'user_2'],
]);

切换驱动

use Caiyun\Im\Facades\Im;

Im::driver('rongcloud')->api('user')->getImToken('user_1');
Im::driver('easemob')->api('message')->send(...);

容器解析

use Caiyun\Im\Im;

$im = app(Im::class);
$im->api('user')->getImToken('user_1');

统一 API 契约

各驱动尽量实现同一套接口,便于业务层无感切换:

API 方法
user createOrUpdateUsergetUserupdateUsergetImToken
conversation storegetMessagesgetMemberspostMessage
message send

custom 驱动目前提供 userconversation,不含 message

各驱动还可暴露厂商原生能力(如腾讯云的 importbatchSendcreateGroup 等),可直接调用对应 API 类方法。

支持的驱动

驱动名 说明
tencent 腾讯云即时通信 IM
rongcloud 融云
easemob 环信
aliyun 阿里云互动消息
huawei 华为云 IM
custom 自建 IM 后端

腾讯云常用示例

use Caiyun\Im\Facades\Im;
use Caiyun\Im\Api\Tencent\Message as TencentMessage;

$user = Im::driver('tencent')->api('user');

$user->import('user_1', '张三', 'https://example.com/a.png');
$user->setProfile('user_1', [
    'Tag_Profile_IM_Nick' => '张三',
]);
$sig = $user->getImToken('user_1', 86400);

Im::message()->send('user_1', 'user_2', [
    TencentMessage::text('hello'),
]);

Im::message()->batchSend('user_1', ['user_2', 'user_3'], [
    TencentMessage::custom(json_encode(['type' => 'notice'])),
]);

Im::conversation()->createGroup('Public', '公告群', [
    'Owner_Account' => 'user_1',
    'MemberList' => [
        ['Member_Account' => 'user_1'],
        ['Member_Account' => 'user_2'],
    ],
]);

消息元素辅助方法:

  • TencentMessage::text($text)
  • TencentMessage::custom($data, $description = '', $extension = '', $sound = '')
  • TencentMessage::image($url, $uuid, $size, $width, $height)
  • TencentMessage::sound($url, $uuid, $size, $seconds)

异常

异常类 场景
Caiyun\Im\Exceptions\ImException 通用 IM 业务 / 响应错误
Caiyun\Im\Exceptions\UnsupportedDriverException 未知驱动名
Caiyun\Im\Exceptions\InvalidConfigurationException 驱动配置缺失

开发与测试

composer install
composer test
composer lint
composer check   # lint:check + test

License

proprietary