Pular para o conteúdo
Decoding Chat API

Verificação de telefone

A verificação de telefone prova que a conta atual controla um número de telefone. A conta recebe um código de uso único via SMS de saída, ou envia por mensagem de texto um código de desafio emitido para um número do Decoding Chat. O sucesso define o estado do telefone como verificado na conta, o qual as ações obrigatórias de telefone e o nível de verificação VERY_HIGH da guilda verificam.

Toda rota aqui precisa de uma sessão de usuário que não seja um bot, e cada uma admite uma sessão com estado de conta suspeito.

Enviar verificação de telefone e Verificar código de telefone admitem apenas uma conta que atenda a pelo menos uma destas condições.

  • A conta já possui um telefone verificado.
  • Um autenticador TOTP está registrado na conta.
  • O campo de bits de atividade suspeita armazenado é diferente de zero.
  • A conta pertence a pelo menos uma guilda cujo nível de verificação é VERY_HIGH.

Uma conta que não satisfaça nenhuma delas é recusada com 403 PHONE_ADD_NOT_ELIGIBLE.

Ambas as operações executam a verificação antes de examinarem o número enviado. Uma conta recusada não recebe nenhuma mensagem e não consome nenhum desafio. Iniciar desafio de telefone de entrada ignora a verificação completamente e emite um desafio para qualquer sessão não pertencente a bot.

No registro, uma instância pode adiar o requisito de telefone de uma nova conta. A política do portão de telefone adiado define a janela após o registro em que um ingresso qualificativo torna a exigência devida, e a contagem de membros acima da qual uma guilda é qualificativa. Uma guilda com o recurso DISCOVERABLE se qualifica com qualquer contagem de membros.

Uma exigência adiada está ausente da matriz de ações obrigatórias e não restringe nada. Uma tentativa de ingressar em uma guilda qualificativa dentro da janela a torna devida, e Aceitar convite recusa essa tentativa com 403 ACCOUNT_SUSPICIOUS_ACTIVITY. A conta então passa a dever REQUIRE_VERIFIED_PHONE ou REQUIRE_REVERIFIED_PHONE, e toda rota comum de usuário a recusa com o mesmo código.

Obter prévia de fuga do portão de telefone e Executar fuga do portão de telefone deixam essa exigência de lado novamente sem verificar um número. Ambas admitem uma conta que o restante da API recusa. A fuga só está disponível enquanto todas estas condições forem válidas.

  • A instância tem o portão de telefone adiado ativado.
  • A conta não possui nenhum telefone verificado.
  • A conta deve REQUIRE_VERIFIED_PHONE ou REQUIRE_REVERIFIED_PHONE.
  • A conta não deve REQUIRE_INBOUND_PHONE_VERIFICATION.
  • A exigência tornou-se devida por meio de um ingresso qualificativo e não foi adiada novamente.
  • A conta possui pelo menos uma ação obrigatória visível.

O campo phone é um número já na forma canônica E.164. O Decoding Chat remove os caracteres de controle e formatação, apara o valor e, em seguida, faz a correspondência com ^\+[1-9]\d{1,14}$. Um valor que falhe retorna 400 INVALID_FORM_BODY com uma entrada de erro de validação cuja path seja phone e cuja code seja PHONE_NUMBER_INVALID_FORMAT.

Um número cujos caracteres iniciais apareçam na lista de prefixos banidos da instância é recusado com 400 INVALID_PHONE_NUMBER. A lista contém um conjunto integrado de prefixos de países mais adições de operadoras, e uma entrada bloqueia todo número que comece com ela.

ValorDescrição
sms1O Decoding Chat solicita ao provedor de SMS que entregue um código de uso único ao número submetido
inbound_challenge2O usuário envia o código de desafio emitido por mensagem de texto para o número retornado do Decoding Chat

1 Solicitar este valor é equivalente a omitir o campo 2 Solicitar este valor sempre gera um desafio de entrada, e nem o provedor de pesquisa nem o provedor de SMS de saída são contatados

Um SMS de saída exige que o número passe nas seguintes verificações. O Decoding Chat avalia as linhas na ordem e utiliza o veredito da primeira linha cuja condição corresponda. Um número roteado diretamente para um desafio de entrada não precisa dessa pesquisa.

OrdemCondiçãoVeredito
1A pesquisa não pôde ser realizada1Recusado com INVALID_PHONE_NUMBER
2O provedor relata o número como inválidoRecusado com INVALID_PHONE_NUMBER
3O tipo de linha é fixedVoip ou nonFixedVoipEntrada, motivo voip
4O número começa com +1 e sua área de plano de numeração é canadenseEntrada, motivo canadian
5O tipo de linha é ausente ou unknownEntrada, motivo unknown_line_type
6O tipo de linha é landline, tollFree, premium, sharedCost, uan, voicemail ou pagerRecusado com INVALID_PHONE_NUMBER
7O tipo de linha é qualquer coisa diferente de mobile ou personal2Recusado com INVALID_PHONE_NUMBER
8A pontuação de risco de inflação de SMS atinge o limite para o país relatado3Recusado com INVALID_PHONE_NUMBER
9Nenhuma regra acima correspondeuAceito para SMS de saída

1 Uma instância cujo provedor de pesquisa está indisponível ou não configurado recusa todos os números 2 mobile e personal são os únicos tipos de linha aceitos 3 O limite é 100 para US e CA, 70 para GB, DE, FR, IT, ES, NL, SE, NO, DK, FI, AU, NZ, JP, KR, CH, AT, BE, IE e PT, e 35 para qualquer outro país e para uma pesquisa que não relata nenhum país

Apenas Enviar verificação de telefone converte um veredito de entrada em um desafio. Verificar código de telefone recusa os mesmos vereditos com 400 INVALID_PHONE_NUMBER.

Um motivo explica por que a tentativa não pôde ser concluída via SMS de saída.

ValorDescrição
voipA pesquisa do provedor classificou o destino como uma linha VoIP
canadian1O destino é uma área de plano de numeração canadense
unknown_line_typeA pesquisa do provedor relatou nenhum tipo de linha ou um tipo de linha desconhecido
expensive_destination2A política de prefixo exigido para entrada configurada corresponde ao destino
account_forced3A conta tem a flag que força a verificação de entrada
behavioural_riskOs controles de risco de tentativas de telefone forçaram esta tentativa para o canal de entrada

1 Determinado a partir da área de plano de numeração de um número +1, e avaliado após a regra de VoIP, de modo que um número VoIP canadense relata voip em vez disso 2 Também relatado quando o chamador solicita explicitamente o canal inbound_challenge. A política de prefixos em si aplica-se apenas enquanto a conta não possui nenhum telefone verificado 3 Relatado de preferência a expensive_destination quando ambos se aplicariam

Confirmação de que o provedor de SMS aceitou um código de uso único para entrega. Enviar verificação de telefone o retorna em um resultado de saída. O cliente então envia o mesmo número e o código entregue para Verificar código de telefone.

CampoTipoDescrição
channelstringO canal de entrega, sempre o literal sms

As instruções para enviar um código de texto ao Decoding Chat, retornadas por Enviar verificação de telefone quando a política roteou a tentativa para a entrada. channel diferencia as formas de resposta.

CampoTipoDescrição
channelstringO canal de entrega, sempre o literal inbound_challenge
challenge_code1stringO código que o usuário envia por mensagem de texto para our_number
our_numberstringO número E.164 do Decoding Chat que recebe o código
expires_at2ISO8601 timestampO momento em que o desafio deixa de ser resgatável
reasonstringO motivo de desafio de entrada que forçou esse canal

1 Seis dígitos decimais 2 15 minutos após o desafio ter sido emitido

{
"channel": "inbound_challenge",
"challenge_code": "418207",
"our_number": "+15550000000",
"expires_at": "2026-03-04T18:15:00.000Z",
"reason": "voip"
}

O código e o número do Decoding Chat para um chamador que solicitou um desafio de entrada diretamente. Iniciar desafio de telefone de entrada o retorna.

CampoTipoDescrição
challenge_code1stringO código que o usuário envia por mensagem de texto para our_number
our_numberstringO número E.164 do Decoding Chat que recebe o código
expires_at2ISO8601 timestampO momento em que o desafio deixa de ser resgatável

1 Seis dígitos decimais 2 15 minutos após o desafio ter sido emitido

Retornado por Verificar código de telefone em uma verificação bem-sucedida.

CampoTipoDescrição
verifiedbooleanSempre o literal true

Uma guilda em um objeto phone gate escape preview.

CampoTipoDescrição
idsnowflakeO ID da guilda
namestringO nome sob o qual a guilda está listada

O que Executar fuga do portão de telefone faria pela conta atual.

CampoTipoDescrição
availablebooleanSe a fuga está aberta para esta conta no momento
guildsarray[objeto phone gate escape guild]As guildas qualificativas que a fuga abandona, vazio enquanto available for false
owned_guildsarray[objeto phone gate escape guild]As guildas qualificativas que a conta possui, as quais a fuga mantém
POST/v1/users/@me/phone/send-verification

Inicia a verificação do número submetido. Requer uma conta que satisfaça a elegibilidade. Retorna um objeto SMS delivery ou um objeto inbound challenge em caso de sucesso.

Diversas políticas independentes podem forçar o canal de entrada, e cada uma anula uma solicitação de sms. O Decoding Chat roteia a tentativa de forma de entrada antes de contatar os provedores de pesquisa e de SMS quando qualquer uma destas condições for verdadeira.

  • O chamador pede inbound_challenge.
  • A conta possui a flag que força a verificação de entrada.
  • A política configurada de prefixo exigido para entrada corresponde ao número enquanto a conta não possui um telefone verificado.

Uma tentativa que sobrevive a essa etapa passa por controles de risco de tentativa de telefone categorizados por conta, por endereço IP do cliente e por rede /24. Um bloqueio rígido retorna 429 PHONE_RATE_LIMIT_EXCEEDED com um Retry-After de 86400. Uma decisão de captcha retorna 400 CAPTCHA_REQUIRED, e esta rota não lê nenhum cabeçalho de solução de CAPTCHA, então a tentativa não pode ser repetida com uma solução. Uma decisão de entrada retorna um desafio com o motivo behavioural_risk.

Quando o provedor de SMS limita um envio ou uma verificação de código anterior para a mesma conta ou número, o Decoding Chat registra um tempo de recarga (cooldown). Uma solicitação durante esse tempo de recarga retorna 429 PHONE_RATE_LIMIT_EXCEEDED. O destino é então resolvido por meio da pesquisa do provedor. Um número que já completou a verificação duas vezes é recusado com 400 PHONE_ALREADY_USED.

Controles adicionais limitam a entrega de saída a 3 envios a cada 6 horas para cada conta e 3 envios a cada 5 dias para cada número. Qualquer negação retorna 429 PHONE_RATE_LIMIT_EXCEEDED. O provedor também pode recusar o envio. Um destino inválido retorna 400 INVALID_PHONE_NUMBER, e uma limitação retorna 429 PHONE_RATE_LIMIT_EXCEEDED. Qualquer outra recusa, incluindo um provedor inacessível, retorna 400 SMS_VERIFICATION_UNAVAILABLE. Em uma instância em que o fluxo de entrada ou o seu número de recebimento estiver desconfigurado, uma tentativa roteada como entrada retorna o mesmo código.

CampoTipoDescrição
phonestringO número na forma canônica E.164, correspondendo a ^\+[1-9]\d{1,14}$
channel?1stringO canal de verificação de telefone preferido

1 A omissão do campo solicita SMS de saída. Solicitar inbound_challenge sempre gera um desafio relatado com o motivo expensive_destination, a menos que a flag da conta force independentemente o canal e o motivo se torne account_forced

StatusCorpoCondição
200objeto SMS delivery | objeto inbound challengeA verificação foi iniciada no canal nomeado pela resposta
400resposta de erroO número é recusado com INVALID_PHONE_NUMBER, foi verificado duas vezes antes e retorna PHONE_ALREADY_USED, os controles de risco exigem CAPTCHA_REQUIRED, ou o envio não pôde iniciar e retorna SMS_VERIFICATION_UNAVAILABLE
403resposta de erroA conta não é elegível e a requisição retorna PHONE_ADD_NOT_ELIGIBLE
4291resposta de limite de taxaControles de risco, uma limitação do provedor ou um controle de envio por conta ou por número nega a solicitação, que retorna PHONE_RATE_LIMIT_EXCEEDED

1 Uma recusa de telefone usa o envelope de limite de taxa com o code definido como PHONE_RATE_LIMIT_EXCEEDED. Uma recusa de rota comum retorna RATE_LIMITED

No 429, o X-RateLimit-Scope relata shared quando o controle por número ou uma limitação de provedor com escopo de número produziu a recusa.

Em um resultado de saída, o Decoding Chat solicita ao provedor de SMS configurado para entregar um código de uso único. Em um resultado de entrada, ele cria um desafio de uso único para a conta atual.

5 requisições por minuto para cada usuário autenticado, no bucket phone:send_verification.

POST/v1/users/@me/phone/inbound-challenge

Emite um desafio de entrada sem submeter ou examinar um número de telefone. Retorna um objeto direct inbound challenge em caso de sucesso.

A verificação de elegibilidade não se aplica aqui. O código de desafio possui seis dígitos decimais, dura por 15 minutos e pode ser resgatado uma vez. Solicitar um desafio adicional não revoga o anterior, então vários códigos emitidos para a mesma conta podem estar ativos ao mesmo tempo até que cada um expire ou seja resgatado.

StatusCorpoCondição
200objeto direct inbound challengeUm desafio foi emitido
400resposta de erroA instância não possui nenhum número de recepção para o desafio de entrada e a solicitação retorna SMS_VERIFICATION_UNAVAILABLE

O Decoding Chat cria um desafio de uso único para a conta atual. O desafio se completa de forma independente quando o provedor entrega a mensagem de entrada correspondente, e a resposta HTTP não possui participação nisso. Na conclusão, o Decoding Chat define o estado de telefone verificado, limpa as exigências de telefone do campo de bits de atividade suspeita armazenado, e despacha User Update. Quando o número de envio já tiver completado a verificação duas vezes, o Decoding Chat abandona a conclusão e não produz nenhum erro observável.

5 requisições por minuto para cada usuário autenticado, no bucket phone:send_verification, compartilhado com Enviar verificação de telefone.

POST/v1/users/@me/phone/verify

Verifica um código de SMS de saída. Requer uma conta que satisfaça a elegibilidade. Retorna um objeto phone verification result em caso de sucesso. Emite um evento de Gateway User Update.

O número é resolvido através da pesquisa de provedor novamente antes que o código seja verificado, de modo que um número que se tornou inelegível desde que o código foi enviado é recusado.

O provedor de SMS configurado verifica o número e o código em conjunto, então o provedor decide o tempo de vida do código e o limite de tentativas. Um código rejeitado retorna 400 INVALID_PHONE_VERIFICATION_CODE. Uma limitação do provedor retorna 429 PHONE_RATE_LIMIT_EXCEEDED e registra um tempo de recarga que também nega o Enviar verificação de telefone até que o mesmo expire. Um provedor inacessível, ou que responde com um erro de servidor, retorna 400 SMS_VERIFICATION_UNAVAILABLE. Depois que o código tiver sido aceito, um registro de conta que foi excluído ou que não pode mais ser lido falha com 400 PHONE_VERIFICATION_REQUIRED.

CampoTipoDescrição
phonestringO número na forma canônica E.164, correspondendo a ^\+[1-9]\d{1,14}$
code1stringO código que o SMS de saída entregou (1-32 caracteres)

1 Com os caracteres de controle e formatação removidos e aparado antes da verificação de comprimento, sendo o valor normalizado o que o provedor verifica

StatusCorpoCondição
200objeto phone verification resultO número agora está verificado para a conta
400resposta de erroO número retorna INVALID_PHONE_NUMBER, o código retorna INVALID_PHONE_VERIFICATION_CODE, o provedor retorna SMS_VERIFICATION_UNAVAILABLE, o número retorna PHONE_ALREADY_USED, ou a conta retorna PHONE_VERIFICATION_REQUIRED
403resposta de erroA conta não é elegível e a solicitação retorna PHONE_ADD_NOT_ELIGIBLE
4291resposta de limite de taxaUma limitação do provedor recusa a solicitação, que retorna PHONE_RATE_LIMIT_EXCEEDED

1 Uma recusa de telefone usa o envelope de limite de taxa com code definido como PHONE_RATE_LIMIT_EXCEEDED. Uma recusa de rota comum retorna RATE_LIMITED

No 429, X-RateLimit-Scope relata shared quando uma limitação de provedor com escopo de número produziu a recusa.

O Decoding Chat marca a conta como possuidora de um telefone verificado. Ele então limpa toda exigência de telefone do campo de bits de atividade suspeita armazenado: REQUIRE_VERIFIED_PHONE, REQUIRE_REVERIFIED_PHONE, as exigências combinadas de e-mail ou telefone, REQUIRE_INBOUND_PHONE_VERIFICATION, e o marcador de adiamento de um requisito de telefone até a conta se juntar a uma guilda comunitária qualificativa. Exigências apenas de e-mail permanecem, de modo que uma conta que também deve verificação de e-mail permanece restrita.

O Decoding Chat limpa a flag de spammer, quando presente, e despacha User Update. Quando a flag de spammer foi limpa, o Decoding Chat também despacha Guild Member Update para a conta em todas as guildas às quais ela pertence, antes do retorno da resposta HTTP.

10 requisições por minuto para cada usuário autenticado, no bucket phone:verify_code.

GET/v1/users/@me/required-actions/phone-gate-escape

Retorna um objeto phone gate escape preview para a conta atual. Para uma conta fora do estado descrito em Requisito de telefone adiado, available é false e ambos os arrays estão vazios.

StatusCorpoCondição
200objeto phone gate escape previewA prévia foi retornada

20 requisições por minuto para cada usuário autenticado, no bucket user:phone_gate_escape:preview.

POST/v1/users/@me/required-actions/phone-gate-escape

Abandona as guildas qualificativas que a conta não possui e adia o requisito de telefone novamente. Retorna o objeto user.

O corpo é um objeto vazio. O Decoding Chat lê um corpo ausente ou vazio como um objeto vazio e descarta qualquer propriedade fornecida. Um corpo que não seja um JSON válido retorna 400 INVALID_FORM_BODY com INVALID_FORMAT no caminho body. Um JSON válido que não é um objeto é rejeitado com 400.

StatusCorpoCondição
200objeto userA fuga foi executada, totalmente ou até o limite por requisição
400resposta de erroA fuga não está disponível e a requisição retorna PHONE_GATE_ESCAPE_UNAVAILABLE

O Decoding Chat abandona cada guilda qualificativa que a conta não possui, no máximo 25 em uma requisição, com os mesmos efeitos de Sair da guilda. Uma guilda qualificativa que a conta possui é mantida e não bloqueia a fuga.

Uma requisição que abandona todo o conjunto então adia o requisito novamente e despacha User Update. Uma que parou no limite não escreve nenhum campo na conta, não despacha nada e retorna a conta com a exigência ainda pendente. Repita a requisição até que o required_actions retornado não possua entrada de telefone.

5 requisições por hora para cada usuário autenticado, no bucket user:phone_gate_escape:execute.