You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过API创建带视频会议链接的Google Hangouts Chat消息

在Google Chat消息中插入视频会议链接的解决方案

我懂你的需求——已经能发送普通消息,但想在Google Chat里嵌入自动创建的Meet视频会议链接对吧?其实要实现这个得拆两步走:先通过Calendar API创建Meet会议并拿到链接,再把这个链接插入到Chat消息中(毕竟Chat API本身不直接提供创建Meet会议的能力)。下面给你具体的代码示例和说明:

第一步:创建Google Meet会议(使用Calendar API)

首先得启用Calendar API,还要在项目里配置好权限(需要https://www.googleapis.com/auth/calendar.events权限)。以下是Go代码示例,用来生成带Meet链接的日历事件:

import (
    "context"
    "log"
    "time"

    "google.golang.org/api/calendar/v3"
    "google.golang.org/api/option"
)

func createMeetMeeting() (string, error) {
    ctx := context.Background()
    // 替换成你的服务账号密钥路径或其他认证方式
    calendarService, err := calendar.NewService(ctx, option.WithCredentialsFile("service-account-key.json"))
    if err != nil {
        return "", err
    }

    event := &calendar.Event{
        Summary:     "团队同步会议",
        Description: "这是通过API创建的Meet会议",
        Start: &calendar.EventDateTime{
            DateTime: time.Now().Add(30 * time.Minute).Format(time.RFC3339),
            TimeZone: "Asia/Shanghai",
        },
        End: &calendar.EventDateTime{
            DateTime: time.Now().Add(90 * time.Minute).Format(time.RFC3339),
            TimeZone: "Asia/Shanghai",
        },
        // 启用Meet会议配置
        ConferenceData: &calendar.ConferenceData{
            CreateRequest: &calendar.CreateConferenceRequest{
                RequestId: "random-unique-string-123", // 唯一请求ID,避免重复创建会议
                ConferenceSolutionKey: &calendar.ConferenceSolutionKey{
                    Type: "hangoutsMeet",
                },
            },
        },
    }

    // 插入事件到主日历(可替换为指定日历ID)
    event, err = calendarService.Events.Insert("primary", event).ConferenceDataVersion(1).Do()
    if err != nil {
        return "", err
    }

    // 返回生成的Meet会议链接
    return event.HangoutLink, nil
}

第二步:将Meet链接插入到Google Chat消息中

拿到链接后,有两种方式把它放到Chat消息里:

方式一:普通文本消息带链接

直接把链接写在Text字段里,Chat会自动识别并渲染成可点击的样式:

import "fmt"

// 先创建Meet会议
meetLink, err := createMeetMeeting()
if err != nil {
    log.Fatal(err)
}

msg := chat.Message{
    Text: fmt.Sprintf("大家好,这是今天的团队同步会议链接:%s", meetLink),
}

_, err = chatService.Spaces.Messages.Create(spaceID, &msg).Do()
if err != nil {
    log.Fatal(err)
}

方式二:使用卡片消息(还原手动创建的样式)

如果想要和Chat界面手动创建会议一样的美观卡片,可以用Chat的Card组件,消息会展示成带标题、按钮的结构化卡片:

import "google.golang.org/api/chat/v1"

// 先创建Meet会议
meetLink, err := createMeetMeeting()
if err != nil {
    log.Fatal(err)
}

// 构建会议卡片
card := &chat.Card{
    Header: &chat.CardHeader{
        Title:    "团队同步会议",
        Subtitle: "点击下方按钮加入会议",
    },
    Sections: []*chat.Section{
        {
            Widgets: []*chat.WidgetMarkup{
                {
                    ButtonList: &chat.ButtonList{
                        Buttons: []*chat.Button{
                            {
                                TextButton: &chat.TextButton{
                                    Text: "加入会议",
                                    OnClick: &chat.OnClick{
                                        OpenLink: &chat.OpenLink{
                                            Url: meetLink,
                                        },
                                    },
                                },
                            },
                        },
                    },
                },
            },
        },
    },
}

msg := chat.Message{
    Cards: []*chat.Card{card},
}

_, err = chatService.Spaces.Messages.Create(spaceID, &msg).Do()
if err != nil {
    log.Fatal(err)
}

几个注意点

  • 确保服务账号拥有足够权限:Calendar API的事件创建权限,以及Chat API的消息发送权限。
  • 创建Meet会议时的RequestId必须唯一,重复调用会返回已存在的会议链接。
  • 如果是企业域环境使用,可能需要配置域范围委派,让服务账号能代表域内用户创建会议。

内容的提问来源于stack exchange,提问作者Jan Petr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:28:11