caiyun / meeting
为 Laravel 提供统一的在线会议能力,支持腾讯会议、华为云会议、钉钉会议与飞书会议。
Requires
- php: ^8.2
- illuminate/http: ^11.0 || ^12.0 || ^13.0
- illuminate/support: ^11.0 || ^12.0 || ^13.0
Requires (Dev)
- orchestra/testbench: ^9.0 || ^10.0 || ^11.0
- phpunit/phpunit: ^10.5 || ^11.5 || ^12.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
为 Laravel 提供统一的在线会议接口。业务侧只依赖同一套预约、修改、取消和查询方法,具体请求由服务商驱动发出。
当前已接入的驱动:
| 驱动名 | 服务商 | 说明 |
|---|---|---|
tencent |
腾讯会议 | 已对接创建、修改、取消、查询 |
huawei |
华为云会议 | App ID 鉴权 |
dingtalk |
钉钉会议 | 企业内部应用 |
feishu |
飞书会议 | 自建应用 tenant_access_token |
腾讯会议走企业自建应用的 AKSK 签名。华为云会议、钉钉会议、飞书会议的 HTTP 请求尚未接入,调用创建、修改、取消、查询会抛出 ProviderNotImplementedException。
环境要求
- PHP 8.2 及以上
- Laravel 11、12 或 13
安装
composer require caiyun/meeting
Laravel 会自动注册 MeetingServiceProvider,并提供 Meeting 门面。
发布配置:
php artisan vendor:publish --tag=meeting-config
.env 示例:
MEETING_DRIVER=tencent TENCENT_MEETING_APP_ID= TENCENT_MEETING_SDK_ID= TENCENT_MEETING_SECRET_ID= TENCENT_MEETING_SECRET_KEY= TENCENT_MEETING_USER_ID= TENCENT_MEETING_OPERATOR_ID= TENCENT_MEETING_OPERATOR_ID_TYPE=1 HUAWEI_MEETING_APP_ID= HUAWEI_MEETING_APP_KEY= DINGTALK_MEETING_APP_KEY= DINGTALK_MEETING_APP_SECRET= FEISHU_MEETING_APP_ID= FEISHU_MEETING_APP_SECRET=
使用
use Caiyun\Meeting\Data\Meeting; use Caiyun\Meeting\Facades\Meeting as MeetingClient; use DateTimeImmutable; $result = MeetingClient::create(new Meeting( topic: '产品周会', startsAt: new DateTimeImmutable('2026-10-15 10:00:00'), endsAt: new DateTimeImmutable('2026-10-15 11:00:00'), hostId: 'host-user-id', invitees: ['user-a', 'user-b'], )); $result->id; $result->joinUrl; $result->meetingCode; MeetingClient::driver('feishu')->find($result->id); MeetingClient::driver('feishu')->cancel($result->id);
不传 driver() 时使用 meeting.default。驱动名也可以用枚举:
use Caiyun\Meeting\Driver; MeetingClient::driver(Driver::Dingtalk);
在容器里建议依赖工厂契约,而不是直接 new 驱动:
use Caiyun\Meeting\Contracts\Factory; public function __construct(private Factory $meetings) {} public function schedule(): void { $this->meetings->driver('huawei')->create($meeting); }
Meeting::$options 用来放某个服务商才有的字段。腾讯会议里,type 为 0(预约会议)或 1(快速会议),userid 是接口调用方,instanceid 是设备类型,默认 PC。hostId 会写入主持人,invitees 会写入邀请成员。
按会议 ID 查询会请求 /v1/meetings/{meetingId},查询参数为 instanceid、operator_id、operator_id_type。按会议号查询使用 findByCode(),请求 /v1/meetings,并额外带上 meeting_code 和 userid。operator_id 默认取 TENCENT_MEETING_USER_ID,operator_id_type 默认为 1(userid)。
扩展驱动
use Caiyun\Meeting\Facades\Meeting as MeetingClient; MeetingClient::extend('custom', function ($app) { return new \App\Meetings\CustomDriver( config('meeting.drivers.custom', []), $app->make(\Illuminate\Http\Client\Factory::class), ); });
自定义类继承 Caiyun\Meeting\Drivers\AbstractDriver,并实现 Caiyun\Meeting\Contracts\MeetingDriver。
目录
config/meeting.php 可发布配置
src/MeetingServiceProvider.php Laravel 服务提供者
src/MeetingManager.php 驱动管理器
src/Facades/Meeting.php 门面
src/Contracts/MeetingDriver.php 统一能力:创建、更新、取消、查询
src/Data/Meeting.php 预约参数
src/Data/MeetingResult.php 返回结果
src/Drivers/ 腾讯会议、华为云会议、钉钉会议、飞书会议
测试
composer test