Teams
Teams de desenvolvedores: cargos e permissões, convites, transferir aplicativos, excluir, sair e como as recompensas chegam a todos os membros.
Um team reúne pessoas que cuidam dos mesmos aplicativos. Em Configurações de usuário > Desenvolvedores > Teams você cria um team, convida gente, escolhe o que cada pessoa pode fazer e move aplicativos para dentro dele. Todas as rotas abaixo são de pessoa (Authorization: Bearer); tokens de bot recebem 403.
- Um aplicativo é pessoal (só do dono, como sempre foi) ou de um team. Em aplicativos pessoais nada muda.
- Cada conta pode ser dona de até 10 teams e participar de até 20. Um team tem até 25 membros (convites pendentes contam).
- Bots não entram em teams.
Cargos e permissões#
Cada membro tem um cargo, que define as permissões iniciais, e pode ter permissões personalizadas por quem gerencia membros.
| Permissão | Faz |
|---|---|
VIEW | Ver o team, os membros e os aplicativos (todo membro tem). |
MANAGE_TEAM | Renomear o team e trocar o ícone. |
MANAGE_MEMBERS | Convidar, remover e alterar cargo e permissões de quem tem cargo menor. |
MANAGE_APPS | Editar o aplicativo, os comandos, a URL de interações e as redirect URIs; ver a chave de assinatura. |
RESET_TOKEN | Redefinir o token do bot, a chave de assinatura e o client secret OAuth2. |
DELETE_APPS | Excluir aplicativos do team. |
TRANSFER_APPS | Mover aplicativos para dentro e para fora do team. |
| Cargo | Permissões iniciais |
|---|---|
| Dono | Todas. Só existe um; não pode ser removido nem ter permissões alteradas. |
| Administrador | Todas. Não exclui o team nem transfere a posse (isso é só do dono). |
| Desenvolvedor | VIEW, MANAGE_APPS, RESET_TOKEN |
| Visualizador | VIEW |
Regras que o servidor aplica sempre:
- Você só altera ou remove quem tem cargo menor que o seu (o dono altera qualquer um, menos a si mesmo no cargo). Ninguém altera o próprio cargo.
- Você nunca concede uma permissão que não tem, nem um cargo igual ou maior que o seu.
- Excluir o team e transferir a posse são só do dono.
- Quem não é membro recebe
404(o team não é revelado); quem é membro mas não tem a permissão recebe403com{ "error": "...", "permission": "MANAGE_APPS" }.
Convites#
Convidar cria um convite pendente (7 dias); a pessoa só entra se aceitar, em Desenvolvedores > Teams (o banner "Convites de team" mostra o que chegou). Não dá para convidar a si mesmo, quem já está no team, quem já tem convite pendente, bots ou contas banidas. O cargo inicial do convite pode ser admin, developer ou viewer (padrão viewer), nunca acima do seu.
Transferir aplicativos#
- Para um team: em Zona de perigo > "Transferir para uma team". Vale para aplicativo pessoal (você é o dono) e exige
TRANSFER_APPSno team de destino. - Para mim: "Transferir para mim" tira o aplicativo do team e o torna seu. Exige
TRANSFER_APPSno team. - Entre teams: exige
TRANSFER_APPSnos dois.
O token, os segredos, os comandos e os servidores onde o bot está continuam iguais: nada precisa ser reinstalado. A transferência registra quando e por quem foi feita. Cada pessoa tem no máximo 10 aplicativos pessoais e cada team no máximo 50.
Excluir, sair e posse#
- Excluir aplicativo: exige
DELETE_APPS(em aplicativo pessoal, ser o dono). - Excluir o team: só o dono, digitando o nome do team. Se houver aplicativos, é preciso escolher: excluí-los (
deleteApps) ou transferi-los para você (moveAppsTo: "me"); sem escolha a API responde409informando quantos são. - Sair: qualquer membro, menos o dono. O dono precisa antes transferir a posse para outro membro; ele vira administrador.
- Se uma conta é excluída pela equipe do vsync, a posse dos teams dela passa ao administrador (ou membro) mais antigo; sem ninguém, o team é removido junto com seus aplicativos.
Recompensas#
Hoje existe uma recompensa de aplicativo: a insígnia Desenvolvedor de bot verificado pioneiro (VERIFIED_BOT_DEVELOPER), veja Insígnia de desenvolvedor. Quando um aplicativo de team bate a meta (100 servidores com 3 ou mais pessoas), todos os membros do team naquele momento recebem a insígnia, não só quem transferiu ou criou o aplicativo. Aplicativos pessoais continuam premiando só o dono.
- Quem entra depois: ao aceitar um convite, a pessoa recebe as recompensas que os aplicativos do team já tinham conquistado. O mesmo vale quando um aplicativo que já bateu a meta é transferido para um team: os membros recebem na hora.
- Quem sai: não perde nada. A insígnia é concedida e nunca é retirada automaticamente, então continua com a pessoa; ela só deixa de contar para as próximas. A insígnia é uma marca da conta, não depende de continuar no team.
- Se a equipe do vsync revogou a insígnia de uma pessoa, ela não volta sozinha para ela, mesmo em team.
Rotas#
| Rota | O que faz |
|---|---|
GET /developer/teams | Seus teams, com seu cargo, suas permissões, nº de membros e de aplicativos. |
POST /developer/teams | { name } (2 a 40 caracteres). |
GET /developer/teams/:id | Membros (com identidade pública), convites pendentes (com MANAGE_MEMBERS) e aplicativos. |
PATCH /developer/teams/:id | { name?, iconUrl? }. Exige MANAGE_TEAM. |
DELETE /developer/teams/:id | Dono. { deleteApps: true } ou { moveAppsTo: "me" } se houver aplicativos. |
POST /developer/teams/:id/invites | { username } ou { accountId }, mais role?. Exige MANAGE_MEMBERS. |
DELETE /developer/teams/:id/invites/:inviteId | Cancela um convite pendente. |
GET /developer/team-invites | Convites que você recebeu. |
POST /developer/team-invites/:id/accept e /decline | Aceita ou recusa. |
PATCH /developer/teams/:id/members/:accountId | { role?, permissions? }. |
DELETE /developer/teams/:id/members/:accountId | Remove um membro. |
POST /developer/teams/:id/leave | Sai do team. |
POST /developer/teams/:id/transfer-ownership | { accountId } (o novo dono precisa ser membro). |
POST /developer/apps/:id/transfer | { teamId } ou { to: "me" }. |
GET /developer/applications lista os aplicativos pessoais e os dos seus teams; cada item traz team (null se pessoal) e myPermissions. A chave de assinatura (signingSecret) só vem para quem tem MANAGE_APPS. Convites recebidos chegam também como o evento em tempo real team-invite.