Search by

caiyun / meeting

763606865@qq.com

为 Laravel 提供统一的在线会议能力,支持腾讯会议、华为云会议、钉钉会议与飞书会议。

v1.0.0 2026-10-14 06:06 UTC

This package is auto-updated.

Last update: 2026-10-14 06:08:58 UTC


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