Pular para o conteúdo
Decoding Chat API

Experimentos

Um experimento é uma implantação em toda a instância (rollout) que um operador configura. Para cada conta, o Decoding Chat determina a partir dessa configuração se a conta está no rollout e quais configurações a conta recebe. A única rota nesta página resolve todos os experimentos que o servidor define e os retorna em um único envelope, juntamente com a cadência de sondagem que eles compartilham. Este servidor define voice_noise_suppression, cuja localização é definida pelo protocolo Voz.

Toda atribuição é um conselho. Um cliente que a ignora se comporta como faria com a implantação desligada, e nenhuma rota e nenhum evento de Gateway relata o que um cliente realmente executou.

Uma resolução de cada experimento definido para uma conta. Todos os campos estão presentes em todas as respostas.

CampoTipoDescrição
poll_interval_secondsintegerSegundos a esperar antes de revalidar, de 60 a 86400
poll_jitter_percentintegerO maior desvio aleatório adicionado ou subtraído da espera, como uma porcentagem da espera, de 0 a 50
assignmentsobjeto assignment mapUma entrada para cada experimento que o servidor define

Cada conta na instância recebe os mesmos poll_interval_seconds e poll_jitter_percent. Uma única requisição atualiza todos os experimentos.

Uma entrada por experimento. O envelope relata este objeto mesmo quando ele está vazio.

CampoTipoDescrição
voice_noise_suppression?objeto noise suppression assignmentA atribuição de supressão de ruído de quem chamou

Ignore os experimentos desconhecidos e trate um experimento ausente como desativado.

Esta versão do servidor escreve voice_noise_suppression em cada resposta, inclusive enquanto uma implantação está desativada. O valor desativado é o primeiro resultado de resolução abaixo, que relata enabled como false e o config_version armazenado, de modo que um cliente que compara o config_version com o valor de sua resposta anterior pode ver que um operador salvou a configuração, mesmo enquanto o rollout permanece desativado, e não precisa de uma segunda solicitação para isso.

A supressão de ruído é executada no cliente, na trilha do microfone, antes dessa trilha ser publicada. O Decoding Chat não processa áudio para isso. O registro é fechado, e um backend fora dele não é um valor que esta API produz ou aceita.

ValorDescrição
noneSem processamento
standardO supressor do navegador ou da plataforma que o cliente já possui
gateUm noise gate baseado no nível de entrada
speexO pré-processador Speex
rnnoiseO modelo recorrente RNNoise
gtcrnO modelo GTCRN
deep_filterO modelo DeepFilterNet

Um cliente DEVE tratar um backend ausente de enabled_backends como indisponível, incluindo um nomeado por backend ou por uma substituição de guilda.

Uma resolução da implantação da supressão de ruído da instância contra uma conta. Todo campo está presente sempre que a chave é escrita.

CampoTipoDescrição
enabledbooleanSe a implantação (rollout) está em execução nesta instância
config_versionintegerA revisão da configuração da instância a partir da qual esta atribuição foi resolvida
user_targetedbooleanSe o usuário está dentro da implantação
backend?stringO backend que o usuário aplica e null quando o usuário não é o alvo
source?stringQual regra direcionou o usuário, sendo user_rule ou canary, e null quando o usuário não é o alvo
guild_overridesarray[objeto guild override]Substituições de backend por guilda que se aplicam ao usuário
enabled_backendsarray[string]Os backends que o cliente PODE executar
allow_user_overridebooleanSe a própria escolha armazenada da conta substitui o backend
stereo_enabledbooleanSe o cliente publica uma trilha de microfone estéreo
suppression_strengthintegerForça da supressão de 0 a 100, que apenas um backend que a lê aplica

config_version identifica a revisão da configuração. Ele pode mudar sem alterar a atribuição de quem chamou.

Os resultados abaixo definem user_targeted como false, e diferem no que mais eles relatam.

  1. A implantação está desativada. enabled é false, enabled_backends e guild_overrides estão vazios, e allow_user_override e stereo_enabled são false.
  2. O operador excluiu quem chamou. enabled é true, e todos os outros campos são como no primeiro resultado.
  3. Quem chamou não foi sorteado. enabled é true, e enabled_backends, guild_overrides, allow_user_override, e stereo_enabled mantêm todos os seus valores configurados.

Quem chamou é sorteado seja pela lista de permissões do operador, que define source como user_rule, ou pela fatia amostrada da população de contas, que define source como canary. Um usuário que é sorteado enquanto seu backend está ausente de enabled_backends é relatado como não sorteado, com user_targeted falso e tanto backend quanto source nulos.

Um cliente ramifica em user_targeted em vez de enabled_backends, porque o terceiro resultado mantém a matriz (array) preenchida. Uma entrada guild_overrides é aplicada em sua guilda, independentemente de quem chamou ter sido sorteado.

config_version relata a revisão armazenada em todos os resultados, incluindo quando a implantação está desativada.

Objeto de substituição de guilda para supressão de ruído

Seção intitulada “Objeto de substituição de guilda para supressão de ruído”

Uma substituição de backend com escopo em uma guilda. Enquanto quem chamou estiver conectado a um canal de voz dessa guilda, o backend da substituição assume o lugar do backend da atribuição.

CampoTipoDescrição
guild_idsnowflakeA guilda na qual a substituição se aplica
backendstringO backend para executar naquela guilda

Uma substituição nomeando um backend que está ausente de enabled_backends é descartada antes da resposta ser escrita, então cada entrada é executável.

GET/v1/experimentsBot

Resolve cada experimento definido para quem chamou e retorna um objeto experiment assignments. A resposta é derivada por conta, portanto, nunca é compartilhada entre contas.

Objeto experiment assignments.

StatusCorpoCondição
200corpo da respostaO envelope foi resolvido
304vazioA solicitação enviou um If-None-Match correspondente
CampoTipoDescrição
If-None-Match?stringUma ETag de uma resposta anterior a esta rota

Um cliente envia a ETag que recebeu pela última vez. O Decoding Chat a compara com a tag do envelope que acabou de resolver e responde 304 sem corpo em caso de correspondência. * corresponde a qualquer tag atual. Uma comparação fraca é usada, de modo que um prefixo W/ em ambos os lados não anula a correspondência.

CampoTipoDescrição
ETagstringUma tag forte sobre o corpo do envelope, enviada em 200 e em 304
Cache-ControlstringO valor literal private, no-cache
VarystringO valor literal Authorization, substituído por Origin quando a política de origem cruzada (cross-origin) repassou uma origem permitida

A ETag muda quando a resposta muda. Trate-a como um valor opaco.

ETag é listada em Access-Control-Expose-Headers e If-None-Match em Access-Control-Allow-Headers, para que um cliente de origem cruzada leia a tag e revalide com ela.

Um cliente lê esta rota uma vez por sessão e, em seguida, novamente a cada poll_interval_seconds, deslocado por um valor aleatório de até poll_jitter_percent desse intervalo em qualquer direção. Ele envia a última ETag em toda requisição após a primeira. Um cliente NÃO DEVE sondar mais rápido que a extremidade inferior dessa faixa de desvio (jitter).

Até a primeira resposta bem-sucedida, use 300 segundos com 15% de jitter.

60 solicitações por 10 segundos para cada usuário autenticado, no bucket default.