Neste tutorial, mostramos como usar a API REST do Google Meet com a a API Google Workspace Events e o Google Cloud Pub/Sub para observar e reagir a eventos. em um espaço para reuniões do Meet. O aplicativo de amostra registra conferências começam e terminam, quando os participantes entram ou saem e quando qualquer os artefatos gerados da reunião estão disponíveis.
Em vez de se inscrever em um espaço específico para reuniões, você pode assinar que um usuário do Meet receba eventos de qualquer espaço para reuniões que o usuário possui ou organiza. Para mais detalhes, consulte Inscrever-se em eventos do Google Meet na documentação da API Google Workspace Events.
Pré-requisitos
Se você precisa ativar algum desses pré-requisitos na sua organização, peça seu administrador do Google Workspace para ativá-las:
- Uma conta do Google Workspace com acesso ao Google Meet.
- Acesso para criar um projeto do Google Cloud.
- O Python 3 (em inglês) instalado.
- A CLI gcloud instalada.
Preparar o ambiente
Esta seção mostra como criar e configurar seu ambiente local e as Projeto do Google Cloud para este tutorial.
Crie um diretório de trabalho e um ambiente virtual do Python
Para criar e ativar uma nova nova rede ambiente, execute o seguinte no terminal.
Linux/macOS
mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
source env/bin/activate
Windows (prompt de comando)
mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.bat
Windows (PowerShell)
mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.ps1
Criar um projeto do Google Cloud
Console do Google Cloud
- No console do Google Cloud, acesse o menu > IAM e Administrador > Criar um projeto.
-
No campo Nome do projeto, insira um nome descritivo para o projeto.
Opcional: para editar o ID do projeto, clique em Editar. O ID do projeto não pode ser alterado após a criação do projeto, então escolha um ID que atenda às suas necessidades para o ciclo de vida projeto.
- No campo Local, clique em Procurar para mostrar os possíveis locais para sua projeto. Em seguida, clique em Selecionar.
- Clique em Criar. O console do Google Cloud acessa a página "Painel" e seu projeto é criado em alguns minutos.
CLI da gcloud
Em um dos ambientes de desenvolvimento a seguir, acesse o Google Cloud CLI (`gcloud`):
-
Cloud Shell: para usar um terminal on-line com a gcloud CLI
configure o Cloud Shell.
Ativar o Cloud Shell -
Local Shell: para usar um ambiente de desenvolvimento local,
instalar e
inicializar
a CLI gcloud.
Para criar um projeto do Cloud, use o comando "gcloud projects create":gcloud projects create PROJECT_ID
Ativar o faturamento do projeto do Google Cloud
Console do Google Cloud
- No console do Google Cloud, acesse Faturamento. Clique em Cardápio > Faturamento > Meus projetos.
- Em Selecionar uma organização, escolha a organização associada a seu projeto do Google Cloud.
- Na linha do projeto, abra o menu Ações. ( ), Clique em Alterar faturamento e escolha conta do Cloud Billing.
- Clique em Definir conta.
CLI da gcloud
- Para listar as contas de faturamento disponíveis, execute:
gcloud billing accounts list
- Vincule uma conta de faturamento a um projeto do Google Cloud:
gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID
Substitua:
PROJECT_ID
é o ID do projeto da projeto do Google Cloud em que você quer ativar o faturamento.BILLING_ACCOUNT_ID
é o ID da conta de faturamento a ser vinculada. no projeto do Google Cloud.
Configurar a autenticação e a autorização
A autenticação e a autorização permitem que o app acesse a API REST do Meet do Google Cloud. A autorização do usuário é necessária para chamar a API REST do Meet. Nesta seção, você aprende a configurar as credenciais do usuário e solicitar autorização.
Configurar a tela de permissão OAuth e escolher escopos
As etapas a seguir sugerem informações de marcador para configurar a tela de consentimento do OAuth para seu app. Antes de publicar o app externamente, atualize estas informações.
- No console do Google Cloud, acesse o menu > APIs e Serviços > Tela de permissão OAuth.
- Em Tipo de usuário, selecione Interno e clique em Criar.
- Em Nome do app, digite
Meet REST API Tutorial
. - Preencha o formulário de registro do app e clique em Save and continue.
- Clique em Adicionar ou remover escopos. Será exibido um painel com uma lista de escopos. para cada API ativada no projeto do Google Cloud.
- Em Adicionar escopos manualmente, cole os seguintes escopos:
https://www.googleapis.com/auth/meetings.space.created
- Clique em Adicionar à tabela.
- Clique em Atualizar.
- Após selecionar os escopos necessários ao lado do seu app, clique em Salvar e continuar.
- Se você selecionou Externo como tipo de usuário, adicione usuários de teste:
- Em Usuários de teste, clique em Adicionar usuários.
- Insira seu endereço de e-mail e qualquer outro usuário de teste autorizado e clique em Salvar e continuar.
- Analise o resumo do registro do app. Para fazer alterações, clique em Editar. Se o app estiver tudo certo, clique em Voltar para o painel.
Criar um Client-ID
O ID do cliente funciona como credenciais para o aplicativo durante a OAuth 2.0 flui. Como o app é executado localmente, crie um ID do cliente para computadores.
- No console do Google Cloud, acesse Menu > APIs e Serviços > Credenciais.
- Clique em Criar credenciais > ID do cliente OAuth.
- Clique em Tipo de aplicativo > App para computador.
- No campo Nome, digite um nome para a credencial. Esse nome só é mostrado no console do Google Cloud.
- Clique em Criar. A tela criada pelo cliente OAuth será exibida, mostrando o novo ID e a chave secreta do cliente.
- Clique em OK. A credencial recém-criada aparece em IDs do cliente OAuth 2.0.
Instalar as bibliotecas de autenticação do Google
Instale as bibliotecas de autenticação do Google:
pip install google-auth google-auth-oauthlib
Executar autorização
A API REST do Meet exige credenciais de usuário na forma de um OAuth 2.0 token de acesso. Nesta seção, você vai implementar o fluxo do OAuth 2.0 para solicitar uma token de acesso e um token de atualização para o usuário.
No diretório de trabalho, crie o arquivo
main.py
e adicione o seguinte conteúdo:import os import json from google.auth.transport import requests from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow def authorize() -> Credentials: """Ensure valid credentials for calling the Meet REST API.""" CLIENT_SECRET_FILE = "./client_secret.json" credentials = None if os.path.exists('token.json'): credentials = Credentials.from_authorized_user_file('token.json') if credentials is None: flow = InstalledAppFlow.from_client_secrets_file( CLIENT_SECRET_FILE, scopes=[ 'https://www.googleapis.com/auth/meetings.space.created', ]) flow.run_local_server(port=0) credentials = flow.credentials if credentials and credentials.expired: credentials.refresh(requests.Request()) if credentials is not None: with open("token.json", "w") as f: f.write(credentials.to_json()) return credentials USER_CREDENTIALS = authorize()
Para executar o código, tanto o ID do cliente quanto a chave secreta criados anteriormente são obrigatórios. Copie o arquivo da chave secreta do cliente baixado para o projeto em funcionamento e renomeie-o como
client_secret.json
.Para testar como a autorização funciona, execute o comando a seguir. O app solicita autorização e cria um arquivo
token.json
no do projeto após a aprovação da solicitação.python3 main.py
Adicionar a API REST do Meet
Agora que o código de autorização está concluído, é hora de ativar e chamar o método Conheça a API REST.
Ative as APIs
Embora esta seção se concentre na API REST do Meet, este tutorial também usa Google Cloud Pub/Sub e API Google Workspace Events.
Console do Google Cloud
No console do Google Cloud, ative a API REST do Google Meet, a na API Google Workspace Events e no Google Cloud Pub/Sub.
Confirme se você está ativando as APIs projeto do Google Cloud e clique em Próxima.
Confirme se você está ativando as APIs corretas e clique em Ativar.
CLI da gcloud
Se necessário, defina o projeto atual do Cloud para aquele que você criado com o comando
gcloud config set project
:gcloud config set project PROJECT_ID
Substitua PROJECT_ID pelo ID do projeto da do Google Cloud que você criou.
Ative a API REST do Google Meet, a API Google Workspace Events. Google Cloud Pub/Sub com o comando
gcloud services enable
:gcloud services enable meet.googleapis.com workspaceevents.googleapis.com pubsub.googleapis.com
Instalar a biblioteca de cliente da API REST do Meet
Siga estas etapas para instalar a biblioteca de cliente da API REST do Meet:
Execute o comando:
pip install google-apps-meet
Edite o arquivo
main.py
para importar o cliente:from google.apps import meet_v2 as meet
Criar um espaço
Agora que a API REST do Meet está disponível, defina uma função para criar um espaço para reuniões que pode ser inscrito.
Edite main.py
e adicione:
def create_space() -> meet.Space:
"""Create a meeting space."""
client = meet.SpacesServiceClient(credentials=USER_CREDENTIALS)
request = meet.CreateSpaceRequest()
return client.create_space(request=request)
Inscrever-se em eventos
Para receber eventos sobre um espaço para reuniões, crie uma assinatura usando o na API Google Workspace Events. Você também deve criar e se inscrever em um tópico do Google Cloud Pub/Sub, que serve como ponto de extremidade de notificação em que sua recebe os eventos.
Configurar o Google Cloud Pub/Sub
Para criar e se inscrever em um tópico do Pub/Sub:
Console do Google Cloud
- No console do Google Cloud, acesse o menu > Pub/Sub.
Verifique se o projeto do Cloud para seu app está selecionado.
- Clique em
- Digite
workspace-events
como o nome do tópico. - Deixe a opção Adicionar uma assinatura padrão selecionada.
- Clique em Criar. O nome completo do seu tópico está formatado como
projects/{project}/topics/{topic}
: Fazer uma anotação com esse nome para uso em etapas posteriores.
Criar tópico e faça o
seguintes:
- Digite
- Conceda acesso para publicar mensagens do Pub/Sub no seu tópico:
- No painel lateral, abra o Guia Permissões.
- Clique em Adicionar principal.
- Em Novos principais, digite
meet-api-event-push@system.gserviceaccount.com
. - Em Atribuir funções, selecione
Pub/Sub Publisher
. - Clique em Salvar.
A atualização das permissões do tópico pode levar alguns minutos.
CLI da gcloud
- No projeto do Cloud, execute o comando a seguir para criar um tópico:
gcloud pubsub topics create workspace-events
A saída mostra o nome completo do tópico, formatado como
projects/{project}/topics/{topic}
: Fazer uma anotação com esse nome para uso em etapas posteriores. - Conceda acesso para publicar mensagens no seu tópico:
gcloud pubsub topics add-iam-policy-binding workspace-events --member='serviceAccount:meet-api-event-push@system.gserviceaccount.com' --role='roles/pubsub.publisher'
A atualização das permissões do tópico pode levar alguns minutos.
- Crie uma assinatura do Pub/Sub para o tópico:
gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAME
Substitua:
TOPIC_NAME
: o nome do tópico que você criou na etapa anterior.
Anote o nome do tópico e verifique se o valor de {project}
é o
ID do projeto do Google Cloud para seu app. Você vai usar o nome do tópico para criar o
assinatura do Google Workspace mais tarde.
Criar uma conta de serviço
Console do Google Cloud
- No console do Google Cloud, acesse o menu > IAM e Administrador > Contas de serviço.
- Clique em Criar conta de serviço.
- Preencha os detalhes da conta de serviço e clique em Criar e continuar.
- Opcional: atribua papéis à conta de serviço para conceder acesso aos recursos do projeto do Google Cloud. Para mais detalhes, consulte Como conceder, alterar e revogar o acesso a recursos.
- Clique em Continuar.
- Opcional: insira usuários ou grupos que podem gerenciar e realizar ações com essa conta de serviço. Para mais detalhes, consulte Como gerenciar a representação de uma conta de serviço.
- Clique em Concluído. Anote o endereço de e-mail da conta de serviço.
CLI da gcloud
- Crie a conta de serviço:
gcloud iam service-accounts create meet-event-listener \ --display-name="meet-event-listener"
- Opcional: atribua papéis à conta de serviço para conceder acesso aos recursos do projeto do Google Cloud. Para mais detalhes, consulte Como conceder, alterar e revogar o acesso a recursos.
Usar a conta de serviço
Depois de criar a conta de serviço, conceda a si mesmo acesso para personificar o conta de serviço.
Console do Google Cloud
- Na coluna Ações da conta de serviço recém-criada, clique em > Gerenciar permissões.
- Clique em Adicionar chave. > Conceder acesso.
- Digite seu endereço de e-mail em Adicionar participantes.
- Selecione Contas de serviço > Criador de token da conta de serviço como a função.
- Clique em Salvar.
- Volte ao terminal e faça login com
gcloud
para definir as credenciais padrão do aplicativo como o conta de serviço. Quando a autorização for solicitada, faça login usando a mesma usada nas etapas anteriores.gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
CLI da gcloud
- Para adicionar a permissão, execute
gcloud iam service-accounts add-iam-policy-binding
usando o endereço de e-mail da conta de serviço e o usuário.gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_EMAIL \ --member="user:YOUR_EMAIL \ --role="roles/iam.serviceAccountTokenCreator"
- Faça login para definir o Application Default Credentials como o
conta de serviço. Quando a autorização for solicitada, faça login usando a mesma
usada nas etapas anteriores.
gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
Instalar a biblioteca de cliente do Pub/Sub
Use
pip
para instalar a biblioteca de cliente para Pub/Sub:pip install google-cloud-pubsub
Em seguida, edite
main.py
para importar o cliente:from google.cloud import pubsub_v1
Criar a assinatura do Google Workspace
Adicione o seguinte código a main.py
para definir um método de assinatura
Eventos do Meet. Este código se inscreve em todos os eventos de uma reunião
espaço. Quando inscritos, os eventos são postados no tópico do Pub/Sub.
def subscribe_to_space(space_name: str = None, topic_name: str = None):
"""Subscribe to events for a meeting space."""
session = requests.AuthorizedSession(USER_CREDENTIALS)
body = {
'targetResource': f"//meet.googleapis.com/{space_name}",
"eventTypes": [
"google.workspace.meet.conference.v2.started",
"google.workspace.meet.conference.v2.ended",
"google.workspace.meet.participant.v2.joined",
"google.workspace.meet.participant.v2.left",
"google.workspace.meet.recording.v2.fileGenerated",
"google.workspace.meet.transcript.v2.fileGenerated",
],
"payloadOptions": {
"includeResource": False,
},
"notificationEndpoint": {
"pubsubTopic": topic_name
},
"ttl": "86400s",
}
response = session.post("https://workspaceevents.googleapis.com/v1/subscriptions", json=body)
return response
Em seguida, adicione o código correspondente para extrair e processar os eventos.
Detectar e processar eventos
Continue para editar main.py
e adicione o exemplo de código a seguir. Este código
implementa o receptor e usa a API do Google Cloud Pub/Sub para extrair
conforme são disponibilizados. Os vários métodos de gerenciamento imprimem informações
sobre os eventos correspondentes.
def format_participant(participant: meet.Participant) -> str:
"""Formats a participant for display on the console."""
if participant.anonymous_user:
return f"{participant.anonymous_user.display_name} (Anonymous)"
if participant.signedin_user:
return f"{participant.signedin_user.display_name} (ID: {participant.signedin_user.user})"
if participant.phone_user:
return f"{participant.phone_user.display_name} (Phone)"
return "Unknown participant"
def fetch_participant_from_session(session_name: str) -> meet.Participant:
"""Fetches the participant for a session."""
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
# Use the parent path of the session to fetch the participant details
parsed_session_path = client.parse_participant_session_path(session_name)
participant_resource_name = client.participant_path(
parsed_session_path["conference_record"],
parsed_session_path["participant"])
return client.get_participant(name=participant_resource_name)
def on_conference_started(message: pubsub_v1.subscriber.message.Message):
"""Display information about a conference when started."""
payload = json.loads(message.data)
resource_name = payload.get("conferenceRecord").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
conference = client.get_conference_record(name=resource_name)
print(f"Conference (ID {conference.name}) started at {conference.start_time.rfc3339()}")
def on_conference_ended(message: pubsub_v1.subscriber.message.Message):
"""Display information about a conference when ended."""
payload = json.loads(message.data)
resource_name = payload.get("conferenceRecord").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
conference = client.get_conference_record(name=resource_name)
print(f"Conference (ID {conference.name}) ended at {conference.end_time.rfc3339()}")
def on_participant_joined(message: pubsub_v1.subscriber.message.Message):
"""Display information about a participant when they join a meeting."""
payload = json.loads(message.data)
resource_name = payload.get("participantSession").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
session = client.get_participant_session(name=resource_name)
participant = fetch_participant_from_session(resource_name)
display_name = format_participant(participant)
print(f"{display_name} joined at {session.start_time.rfc3339()}")
def on_participant_left(message: pubsub_v1.subscriber.message.Message):
"""Display information about a participant when they leave a meeting."""
payload = json.loads(message.data)
resource_name = payload.get("participantSession").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
session = client.get_participant_session(name=resource_name)
participant = fetch_participant_from_session(resource_name)
display_name = format_participant(participant)
print(f"{display_name} left at {session.end_time.rfc3339()}")
def on_recording_ready(message: pubsub_v1.subscriber.message.Message):
"""Display information about a recorded meeting when artifact is ready."""
payload = json.loads(message.data)
resource_name = payload.get("recording").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
recording = client.get_recording(name=resource_name)
print(f"Recording available at {recording.drive_destination.export_uri}")
def on_transcript_ready(message: pubsub_v1.subscriber.message.Message):
"""Display information about a meeting transcript when artifact is ready."""
payload = json.loads(message.data)
resource_name = payload.get("transcript").get("name")
client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
transcript = client.get_transcript(name=resource_name)
print(f"Transcript available at {transcript.docs_destination.export_uri}")
def on_message(message: pubsub_v1.subscriber.message.Message) -> None:
"""Handles an incoming event from the Google Cloud Pub/Sub API."""
event_type = message.attributes.get("ce-type")
handler = {
"google.workspace.meet.conference.v2.started": on_conference_started,
"google.workspace.meet.conference.v2.ended": on_conference_ended,
"google.workspace.meet.participant.v2.joined": on_participant_joined,
"google.workspace.meet.participant.v2.left": on_participant_left,
"google.workspace.meet.recording.v2.fileGenerated": on_recording_ready,
"google.workspace.meet.transcript.v2.fileGenerated": on_transcript_ready,
}.get(event_type)
try:
if handler is not None:
handler(message)
message.ack()
except Exception as error:
print("Unable to process event")
print(error)
def listen_for_events(subscription_name: str = None):
"""Subscribe to events on the subscription."""
subscriber = pubsub_v1.SubscriberClient()
with subscriber:
future = subscriber.subscribe(subscription_name, callback=on_message)
print("Listening for events")
try:
future.result()
except KeyboardInterrupt:
future.cancel()
print("Done")
Finalizar o código
Adicione o código abaixo ao main.py
para chamar os métodos e criar o espaço.
inscrever-se em eventos e ouvir. Atualize o TOPIC_NAME
e constantes SUBSCRIPTION_NAME
com seu próprio topic
e nomes de assinaturas que você já
criados.
Adicione o código a
main.py
:space = create_space() print(f"Join the meeting at {space.meeting_uri}") TOPIC_NAME = "projects/PROJECT_ID/topics/TOPIC_ID" SUBSCRIPTION_NAME = "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID" subscription = subscribe_to_space(topic_name=TOPIC_NAME, space_name=space.name) listen_for_events(subscription_name=SUBSCRIPTION_NAME)
Substitua:
PROJECT_ID
: o ID exclusivo do projeto do Cloud para seu app, comomy-sample-project-191923
.TOPIC_ID
: o nome do tópico do Pub/Sub que você criados no projeto do Cloud.SUBSCRIPTION_ID
: o nome da assinatura, como comoworkspace-events-sub
.
Execute o programa:
python3 main.py
Se você ainda não executou o programa, ele vai solicitar a autorização, pela primeira vez. Conceda acesso ao aplicativo para chamar a API REST do Meet. Após a execução do programa, você verá uma resposta semelhante a esta:
Join the meeting at https://meet.google.com/abc-mnop-xyz
Participe da conferência
Para gerar eventos para o aplicativo, participe da conferência usando o URL exibidos pelo aplicativo. Depois disso, tente estas ações para eventos acionadores:
- Saia e entre novamente na reunião.
- Convide outras pessoas ou ligue para a reunião usando seu smartphone.
- Ativar gravações e transcrições.
Cada uma dessas atividades gera um evento que o aplicativo recebe e no console do Google Cloud.
Use ctrl-c
para interromper o programa quando terminar.
Opcional: outras etapas a serem testadas
O app registra detalhes básicos sobre os eventos. Para continuar explorando o Conheça a API REST, tente modificar o aplicativo para executar essas ações.
- Use a API People para recuperar informações adicionais sobre participantes que fizeram login.
- Usar a API Google Drive para fazer o download das gravações. e transcrições.
- Em vez de fazer o download de transcrições do Google Drive, você pode recuperá-las usando o a transcrição estruturada métodos na API REST do Meet.
Opcional: limpar
Para evitar cobranças dos recursos na conta do console do Google Cloud neste tutorial, recomendamos que você limpe todos os recursos e projetos criados.
Para excluir a assinatura:
Console
No console do Google Cloud, acesse o menu > Pub/Sub > Assinaturas
Selecione a assinatura e clique em
Mais ações.Clique em Excluir. A janela Excluir assinatura vai aparecer.
Clique em Excluir.
CLI da gcloud
Exclua a assinatura:
gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
Para excluir o tópico:
Console
No console do Google Cloud, acesse o menu > Pub/Sub > Tópicos
Selecione o tópico e clique em
Mais ações.Clique em Excluir. A janela Excluir tópico é exibida.
Digite
delete
e clique em Excluir.
CLI da gcloud
Exclua o tópico:
gcloud pubsub topics delete TOPIC_NAME
Para excluir o projeto:
Console
- No console do Google Cloud, acesse a página Gerenciar recursos. Clique em Cardápio > IAM e Administrador > Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo o projeto.
CLI da gcloud
Para excluir um projeto, use o comando gcloud projects excluir comando:
gcloud projects delete PROJECT_ID
Temas relacionados
- Saiba mais sobre o tipos de eventos do Meet em que você pode se inscrever.
- Saiba mais sobre o que a API REST do Google Meet pode fazer e leia a documentação de referência.
- Criar uma assinatura do Google Workspace para espaços de reunião do Meet ou usuários que usam na API Google Workspace Events.
- Para saber mais sobre a autenticação, consulte Configurar a tela de permissão OAuth e escolher os escopos.