如何通过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
相关产品推荐
相关产品推荐

