https://a.storyblok.com/f/270183/28313/9c4d86fa0c/blog_video-api_moderation_1200x600.png

Fim aos trolls! Adicionando moderação à Video API

Publicado em November 12, 2020

Tempo de leitura: 3 minutos

Bem-vindo à internet! Se você já está aqui há mais de cinco minutos, provavelmente já percebeu que a moderação dos usuários é extremamente necessária. O mesmo vale para as sessões da Video API. Pessoas mal-intencionadas podem atrapalhar reuniões e apresentações se não forem controladas. Nesta postagem, discutiremos algumas maneiras de manter suas sessões da Video API seguras para todos.

Fora dos limites

Existem alguns processos que você deve implementar e que estão fora do escopo deste artigo. Abordaremos alguns deles de forma conceitual, mas os detalhes da implementação dependem da arquitetura das suas Applications.

Você está fora daqui

Ao remover alguém de uma sessão da Video API, certifique-se de que não está apenas desconectando essa pessoa da sessão de vídeo, mas também redirecionando-a para outro local e/ou revogando sua autenticação.

... E não volte

Para que um usuário participe de uma sessão de Video, ele precisa de um token. Certifique-se de identificar a quem você está atribuindo os tokens. Isso pode ser feito por meio de um sistema de autenticação ou, caso os usuários participem anonimamente, pelo endereço IP deles. Em seguida, ao remover um usuário, registre que o “usuário X” foi removido da sessão.

Depois de identificar quem são os usuários mal-intencionados, você pode evitar a reemissão inadvertida de tokens e impedir que eles voltem a ter acesso à sessão.

Assumindo o controle

Com os fundamentos acima já estabelecidos, vamos falar sobre os recursos integrados da Video API para moderação de usuários.

Quer pular direto para o final? Você pode encontrar um exemplo funcional e todo o código-fonte deste tutorial no GitHub.

Shhhhhh

Todos nós já passamos por aquela situação em que alguém esqueceu de desativar o silenciador do microfone. Seja uma única pessoa ou um público, precisamos poder silenciar os participantes. Para isso, vamos utilizar o recurso de sinalização da Video API. Vamos começar silenciando uma pessoa.

Na interface do usuário do seu cliente, você precisará adicionar código que interrompa a publicação do áudio. Primeiro, certifique-se de guardar o objeto publisher ao inicializá-lo. Isso permitirá que você acesse o objeto posteriormente e publique ou cancele a publicação do seu áudio e Video.

Em seguida, vamos adicionar um método que impedirá o editor de publicar áudio sob demanda.

let publisher = OT.initPublisher('publisher');

function muteAudio() {
  publisher.publishAudio(false);
}

Podemos chamar esse método a partir da interface dos convidados, caso eles optem por silenciar o microfone, mas também o utilizaremos ao receber sinais do anfitrião. Vamos adicionar um pouco de código para monitorar esses sinais.

Depois de criar a sessão, adicione o seguinte para começar a escutar sinais personalizados com mute como tipo. Quando recebermos um sinal para mute, chamaremos nossa muteAudio função para interromper a publicação de áudio.

// listens for the custom signal type 'mute' and 'muteAll' and 
// calls the muteAudio function to stop publishing audio to the session
session.on("signal:mute", function (event) {
  muteAudio();
});

Com o lado do cliente pronto, vamos adicionar um pouco de lógica à interface dos hosts para enviar esses sinais. Começaremos adicionando um método para lidar com toda a nossa sinalização.

/**
 * Send a signal to all or specific members of the Video API session
 * @param {Object} session Video API session to send signal through
 * @param {String} type Type of signal being sent (the topic)
 * @param {String} data Payload to send with the signal
 * @param {Object} [to] An optional Video API connection or array of connections for use in sending to individual connections
 */
function signal(session, type, data, to) {
  const signalData = Object.assign({}, { type, data }, to ? { to } : {});
  session.signal(signalData, function (error) {
    if (error) {
      console.log(['signal error (', error.code, '): ', error.message].join(''));
    } else {
      console.log('signal sent');
    }
  });
};

Agora podemos adicionar funções para nos comunicarmos com os participantes da sessão da Video API. Vamos adicionar dois métodos para indicar a eles que desliguem o áudio. Uma das funções enviará um sinal a um convidado específico, e a outra será enviada a todos os convidados da sessão.

/**
 * Mutes a subscriber in the session
 * @param {Object} subscriber The Video API subscriber object
 */
function muteSubscriber(subscriber) {
  signal(session, 'mute', '', subscriber.stream.connection);
};

/**
 * Mutes all guests in the session
 */
function muteAll() {
  signal(session, 'mute', '');
};

O único passo que falta seria associar um evento, como o clique em um botão, para chamar essas funções.

Não quero ver isso

Existem várias razões pelas quais você pode precisar impedir que um convidado publique sua transmissão de vídeo. Felizmente, o objeto de sessão da Video API oferece um método para fazer isso. No entanto, é necessário que a função de moderador esteja atribuída ao token que você usou para entrar na sessão. Para garantir que você possa chamar o forceUnpublish método em uma sessão, verifique primeiro as permissões dos usuários. O método abaixo mostra como verificar suas permissões e chamar o forceUnpublish método.

/**
 * Force un-publishes a subscriber in the session
 * @param {Object} subscriber The OpenTok subscriber object
 */
function unpublishSubscriber(subscriber) {
  if (session.capabilities.forceUnpublish == 1) {
    session.forceUnpublish(subscriber.stream);
  }
};

Que venha o martelo do banimento

Infelizmente, há momentos em que um participante precisa ser removido de uma sessão. A equipe responsável pela Video API garantiu que isso seja possível por meio do forceDisconnect método. Assim como o forceUnpublish método, é necessário estar conectado como moderador para usá-lo. A função abaixo verifica se o usuário possui essa autorização e, em seguida, força a desconexão de um convidado da sessão.

/**
 * Disconnects a subscriber from the session
 * @param {Object} subscriber The OpenTok subscriber object
 */
function disconnectSubscriber(subscriber) {
  if (session.capabilities.forceDisconnect == 1) {
    session.forceDisconnect(subscriber.stream.connection);
  }
};

Conclusão

Quando implementada com processos e políticas robustas, a Video API oferece as ferramentas necessárias para manter suas sessões de vídeo seguras para todos. Quer saber mais sobre como implementar a moderação nas suas sessões da Video API da Vonage? Confira os recursos abaixo:

Compartilhar:

https://a.storyblok.com/f/270183/225x225/b0360f94ad/michaeljolley.png
Michael JolleyEx-funcionários da Vonage

Michael é o construtor careca e barbudo. Com seus 20 anos de experiência em desenvolvimento de software e DevOps, esse desenvolvedor com pouco cabelo dedica seus dias a ajudar os outros a terem sucesso.