Cenário de exemplo de Scripts do Office: Agendar entrevistas no Teams

Neste cenário, você é um recrutador de RH agendando reuniões de entrevista com candidatos no Teams. Você gerencia o agendamento de entrevistas de candidatos em um arquivo do Excel. Você precisará enviar o convite da reunião do Teams para o candidato e os entrevistadores. Em seguida, você precisa atualizar o arquivo do Excel com a confirmação de que as reuniões do Teams foram enviadas.

A solução tem três etapas combinadas em um único fluxo do Power Automate.

  1. Um script extrai dados de uma tabela e retorna uma matriz de objetos como dados JSON .
  2. Os dados são então enviados para a ação Criar uma reunião do Teams para enviar convites.
  3. Os mesmos dados JSON são enviados para outro script para atualizar o status do convite.

Para obter mais informações sobre como trabalhar com JSON, leia Usar JSON para passar dados de e para Scripts do Office.

Habilidades de script abordadas

  • Fluxos do Power Automate
  • Integração com o Teams
  • Análise de tabela

Instruções de configuração

Baixar a pasta de trabalho

  1. Baixe a pasta de trabalho de exemplo para o OneDrive.

  2. Abra a pasta de trabalho no Excel.

  3. Altere pelo menos um dos endereços de email para o seu próprio para receber um convite.

Crie os scripts

  1. Na guia Automatizar , selecione Criar Novo Script>no Editor de Códigos. Cole o script a seguir no editor. Isso extrairá os dados da tabela para agendar convites.
function main(workbook: ExcelScript.Workbook): InterviewInvite[] {
  const MEETING_DURATION = workbook.getWorksheet("Constants").getRange("B1").getValue() as number;
  const MESSAGE_TEMPLATE = workbook.getWorksheet("Constants").getRange("B2").getValue() as string;

  // Get the interview candidate information.
  const sheet = workbook.getWorksheet("Interviews");
  const table = sheet.getTables()[0];
  const dataRows = table.getRangeBetweenHeaderAndTotal().getValues();

  // Convert the table rows into InterviewInvite objects for the flow.
  let invites: InterviewInvite[] = [];
  dataRows.forEach((row) => {
    const inviteSent = row[1] as boolean;
    if (!inviteSent) {
      const startTime = new Date(Math.round(((row[6] as number) - 25569) * 86400 * 1000));
      const finishTime = new Date(startTime.getTime() + MEETING_DURATION * 60 * 1000);
      const candidateName = row[2] as string;
      const interviewerName = row[4] as string;

      invites.push({
        ID: row[0] as string,
        Candidate: candidateName,
        CandidateEmail: row[3] as string,
        Interviewer: row[4] as string,
        InterviewerEmail: row[5] as string,
        StartTime: startTime.toISOString(),
        FinishTime: finishTime.toISOString(),
        Message: generateInviteMessage(MESSAGE_TEMPLATE, candidateName, interviewerName)
      });
    }    
  });

  console.log(JSON.stringify(invites));
  return invites;
}

function generateInviteMessage(
  messageTemplate: string,
   candidate: string,
   interviewer: string) : string {
  return messageTemplate.replace("_Candidate_", candidate).replace("_Interviewer_", interviewer);
}

// The interview invite information.
interface InterviewInvite {
  ID: string
  Candidate: string
  CandidateEmail: string
  Interviewer: string
  InterviewerEmail: string
  StartTime: string
  FinishTime: string
  Message: string
}
  1. Nomeie o script como Agendar Entrevistas para o fluxo.

  2. Crie outro novo script com o código a seguir. Isso marcará as linhas como convidadas.

function main(workbook: ExcelScript.Workbook, invites: InterviewInvite[]) {
  const table = workbook.getWorksheet("Interviews").getTables()[0];

  // Get the ID and Invite Sent columns from the table.
  const idColumn = table.getColumnByName("ID");
  const idRange = idColumn.getRangeBetweenHeaderAndTotal().getValues();
  const inviteSentColumn = table.getColumnByName("Invite Sent?");

  const dataRowCount = idRange.length;

  // Find matching IDs to mark the correct row.
  for (let row = 0; row < dataRowCount; row++){
    let inviteSent = invites.find((invite) => {
      return invite.ID == idRange[row][0] as string;
    });

    if (inviteSent) {
      inviteSentColumn.getRangeBetweenHeaderAndTotal().getCell(row, 0).setValue(true);
      console.log(`Invite for ${inviteSent.Candidate} has been sent.`);
    }
  } 
}

// The interview invite information.
interface InterviewInvite {
  ID: string
  Candidate: string
  CandidateEmail: string
  Interviewer: string
  InterviewerEmail: string
  StartTime: string
  FinishTime: string
  Message: string
}
  1. Nomeie o segundo script como Record Sent Invites para o fluxo.

Criar o fluxo do Power Automate

Esse fluxo executa os scripts de agendamento de entrevistas, envia as reuniões do Teams e registra a atividade de volta na pasta de trabalho.

  1. Crie um novo fluxo de nuvem do Instant.

  2. Escolha Disparar manualmente um fluxo e selecione Criar.

  3. No construtor de fluxo, selecione o + botão e Adicionar uma ação. Use a ação Executar script do conector do Excel Online (Business). Conclua a ação com os seguintes valores.

    • Localização: OneDrive for Business
    • Biblioteca de Documentos: OneDrive
    • Arquivo: hr-interviews.xlsx (Escolhido por meio do navegador de arquivos)
    • Script: Agendar Entrevistas A ação de Executar script concluída para obter dados de entrevista da pasta de trabalho.
  4. Adicione uma ação que use a ação Criar uma reunião do Microsoft Teams do conector do Microsoft Teams. Ao selecionar conteúdo dinâmico no conector do Excel, um bloco For each será gerado para o fluxo. Preencha o conector com os seguintes valores.

    • Assunto: Entrevista da Contoso
    • Mensagem: Mensagem (conteúdo dinâmico de Executar script)
    • Fuso horário: Hora Standard do Pacífico
    • Hora de início: StartTime (conteúdo dinâmico de Executar script)
    • Hora de término: FinishTime (conteúdo dinâmico de Executar script)
    • Calendar id: Calendar
    • Participantes necessários: CandidateEmail ; InterviewerEmail (conteúdo dinâmico do script Executar - observe o ';' separando os valores) A ação do Teams concluída para agendar reuniões.
  5. No mesmo bloco , adicione outra ação Executar script . Use os seguintes valores.

    • Localização: OneDrive for Business
    • Biblioteca de Documentos: OneDrive
    • Arquivo: hr-interviews.xlsx (Escolhido por meio do navegador de arquivos)
    • Script: Registrar convites enviados
    • convites: resultado (conteúdo dinâmico de Executar script)
  6. Salve o fluxo. O designer de fluxo deve se parecer com a imagem a seguir.

    Um diagrama do fluxo concluído que mostra duas etapas que levam a um controle For each e duas etapas dentro do controle For each.

  7. Use o botão Testar na página do editor de fluxo ou execute o fluxo por meio da guia Meus fluxos . Certifique-se de permitir o acesso quando solicitado.

Vídeo de treinamento: Enviar uma reunião do Teams a partir de dados do Excel

Assista Sudhi Ramamurthy percorrer uma versão deste exemplo no YouTube. Sua versão usa um script mais robusto que lida com colunas variáveis e horários de reunião obsoletos.