Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este guia ajudará você a portar um aplicativo Slack Bolt para JavaScript existente no Teams.
Introdução
Semelhante ao Slack Bolt, o SDK do Teams foi projetado para fazer interface com as APIs de back-end do Teams para criar aplicativos de conversa. Ambos os SDKs fornecem abstrações para lidar com eventos, mensagens e interações de entrada, bem como enviar respostas de volta aos usuários. Se você já tem um bot do Slack, os conceitos devem parecer familiares.
No entanto, há algumas diferenças importantes, como a instalação do aplicativo. No Slack, os aplicativos são instalados nos espaços de trabalho por meio do OAuth, enquanto que no Teams eles são instalados por meio da Teams App App Store. Além disso, os aplicativos do Teams podem ser instalados pessoalmente por usuários individuais ou em escopos colaborativos, como chats em grupo, canais e reuniões.
Vamos dar uma olhada em algumas semelhanças e diferenças entre os conceitos do Slack e do Teams:
| Conceito | Teams | Margem de atraso |
|---|---|---|
| Instalação | Instalado via app store por escopo | Instalado via OAuth no Workspace |
| Início rápido | Novos projetos criados por meio da CLI do desenvolvedor do Teams | Novos projetos criados via Slack CLI. |
| Manifesto do aplicativo | Crie e registre um agente e seu manifesto de aplicativo com a CLI de desenvolvedor do Teams. | Criado por meio do JSON, do YAML ou da página de gerenciamento de aplicativos. |
| Ponto de extremidade de sistema de mensagens | Definir no Portal do Desenvolvedor do Teams configuração de bot ou recurso do Serviço de Bot de IA do Azure. | Definir no manifesto do aplicativo Slack. |
| Autenticação de aplicativo | O Registro do Aplicativo Entra é autorizado durante a instalação do aplicativo Teams. O SDK do Teams busca o token do aplicativo Entra internamente ao enviar mensagens. Os principais recursos do aplicativo, como mensagens, usam esse tipo de autenticação internamente no SDK. | O aplicativo armazena o token de bot do Slack depois que o usuário autoriza escopos delegados pelo aplicativo (por exemplo,incoming-webhook,commands). Os principais recursos do aplicativo, como mensagens, usam esse tipo de autenticação internamente no SDK. |
| Autenticação de usuário para APIs REST | Os tokens de Entra do usuário podem ser obtidos usando o SSO do Teams. As APIs REST do Graph são integradas ao SDK do Teams. Os tokens são armazenados e atualizados pelo serviço de token de bot do Azure. | Os tokens de folga do usuário podem ser obtidos usando o OAuth 2.0. As APIs REST do Slack são integradas ao Slack Bolt. Os tokens devem ser armazenados e atualizados pelo aplicativo. |
| Autenticação com serviços externos | Obtenha tokens de acesso do usuário para serviços externos usando o OAuth 2.0. Os tokens são armazenados e atualizados pelo serviço de token de bot do Azure. | Os usuários se autenticam em serviços externos usando o OAuth 2.0, talvez iniciado por meio de vinculação de conta (veja abaixo). Os tokens devem ser armazenados e atualizados pelo aplicativo. |
| Vinculação de contas |
Activity os eventos incluem Activity.from.id, que é a ID de objeto do AAD do usuário. Se você autenticar seu serviço externo com o OAuth 2.0, essas contas serão vinculadas implicitamente por meio do Serviço de Token do Azure, mas você também poderá seguir um fluxo semelhante ao recomendado pelo Slack. |
O Slack recomenda seguir o guia de vinculação de contas entre serviços . |
| Cartões | Elementos avançados da interface do usuário em mensagens usando Cartões Adaptáveis. | Elementos avançados de interface do usuário em mensagens usando o Kit de Blocos. |
| Files | Files pode ser anexado ou baixado usando APIs do SharePoint / OneDrive Graph. | Files pode ser anexado ou baixado por meio das APIs de arquivos do Slack. |
| Mensagens privadas em conversas em grupo | Mensagens direcionadas | Mensagens efêmeras. |
| Comandos de barra |
Comandos de barra, declarados no manifesto do aplicativo e tornados detectáveis por meio de um menu de preenchimento automático. Os comandos podem ser enviados como mensagens privadas direcionadas ou visíveis para todos os usuários em uma conversa por meio do @mention. Os comandos são enviados como mensagens: ouça comandos com um app.message manipulador, via app.message('/command') ou app.message(regexp). |
O Slack Bolt tem um manipulador dedicado app.command para comandos no manifesto do aplicativo Slack. Os comandos de barra não são exibidos para outros usuários em contextos colaborativos. |
| Fluxos de trabalho | O Teams integra-se ao Power Automate para fluxos de trabalho. Os fluxos de trabalho não são um componente do SDK do Teams. | Os fluxos de trabalho do Slack são integrados ao Slack Bolt. |
| Caixas de diálogo da interface do usuário | Os Cartões Adaptáveis podem incluir ações que abrem caixas de diálogo da interface do usuário com um site inserido ou outro card adaptável. As caixas de diálogo devem ser abertas por meio de uma ação de card adaptável e, portanto, não podem ser abertas diretamente por meio de um comando de barra. | Os modais da interface do usuário do Block Kit podem ser abertos por meio de comandos de barra (usando client.views.open) ou ações do Block Kit. |
| Estratégia de IA | O Teams tem recursos nativos de IA exclusivos para coisas como comentários do usuário, rótulos gerados por IA, sugestões de prompt, streaming e citações. Também apresentamos uma classe opcional ChatPrompt para simplificar a integração de LLMs em seu bot. Aproveite a pesquisa fundamentada por meio da API do Graph de Recuperação do Microsoft 365 Copilot. Os recursos de IA geralmente são projetados para uso em qualquer tipo de conversa. |
O Slack tem uma classe dedicada Assistant para interações de IA em uma exibição de painel lateral do agente dedicada, que difere da estratégia do Teams de usar padrões de interação de bot existentes. Ainda pode usar a IA em outros tipos de conversa usando APIs de bot padrão. Pode usar a API de Acesso a Dados do Slack para pesquisa fundamentada. |
| Comentários do usuário de IA | Os botões de comentários do usuário são renderizados nativamente no Teams com APIs dedicadas para lidar com comentários. Depois que o usuário dá feedback positivo ou negativo, um modal é aberto onde informações adicionais (por exemplo, resposta de texto simples) podem ser capturadas. | O Slack usa um tipo de elemento Block Kit dedicado feedback_buttons para app.action('feedback') anexar comentários do usuário (positivos versus negativos) às mensagens. |
Registrar um agente do Teams
Primeiro, conclua o início rápido para registrar um novo agente do Teams, para que você possa usá-lo no Teams assim que tiver adicionado a implementação do SDK do Teams ao seu aplicativo existente.
Instalar o SDK do Teams
Instale o SDK do Teams em seu projeto do Slack Bolt:
npm install @microsoft/teams.apps
Copiar configuração de autenticação
Copie as configurações do arquivo que a CLI do desenvolvedor do .env Teams criou no aplicativo de início rápido para a implementação do Slack Bolt. Essas configurações são credenciais para autenticar um aplicativo SDK do Teams para que ele possa se comunicar com o Teams.
Inicializar o tempo de execução
Adicione ou substitua o código em sua implementação para iniciar o tempo de execução do aplicativo SDK do Teams usando a App classe. Isso é equivalente à classe de App Slack Bolt.
import { App } from '@microsoft/teams.apps';
const app = new App();
app.start(process.env.PORT || 3978).catch(console.error);
Adicionar manipuladores de mensagens
No Slack, existem manipuladores de mensagens para eventos com diferentes subtipos (por exemplo, subtipo indefinido é uma mensagem normal, event.subtype == 'file_share' é uma mensagem de compartilhamento de arquivos etc.). No Teams, há diferentes Activity manipuladores para diferentes tipos de eventos que são enumerados por meio da enumeração (por ActivityTypes exemplo, app.activity(ActivityTypes.Message)), com alguns Activity tipos tendo APIs personalizadas no SDK (por exemplo, app.message). Esses conceitos são aproximadamente semelhantes, embora as convenções de nomenclatura e a sintaxe sejam diferentes.
// triggers when user sends "hi" or "@bot hi"
app.message("hi", async ({ send, activity }) => {
await send(`Hello, ${activity.from.name}!`);
});
// listen for ANY message to be received
app.on('message', async ({ send, activity }) => {
// echo back users request
await send(`you said: ${activity.text}`);
});
Converter uso do Kit de Blocos em Cartões Adaptáveis
Para incluir uma interface do usuário avançada nas mensagens enviadas pelo seu agente, os Cartões Adaptáveis do Teams são equivalentes ao Kit de Bloqueio do Slack.
import { Card, TextBlock } from '@microsoft/teams.cards';
app.message('/card', async ({ send }) => {
await send(
new Card(new TextBlock('Hello, world!', { wrap: true, isSubtle: false }))
.withOptions({
width: 'Full',
})
);
});
Implementar autenticação de usuário
Há dois tipos principais de autenticação de usuário para o Teams e o Slack: autenticação para APIs REST do Slack & Graph e autenticação para serviços externos. Vamos dar uma olhada em cada um deles.
APIs REST delegadas pelo usuário
No Slack, se você quiser usar as APIs REST do Slack que exigem escopos delegados pelo usuário, será necessário implementar um fluxo de instalação do OAuth 2.0 em seu aplicativo para obter e armazenar tokens de usuário do Slack, mesmo que o aplicativo já tenha sido instalado por outro usuário. No Teams, você pode aproveitar o SSO do Teams para obter tokens do Entra do usuário para chamar APIs REST do Graph. O SDK do Teams integra-se ao SSO do Teams e ao Serviço de Token de Bot do Azure para lidar com a aquisição, o armazenamento e a atualização de token automaticamente para você.
Primeiro, siga as instruções no guia de SSO do Teams. Em seguida, configure a autenticação em seu código.
const app = new App({
// ... rest of App config
oauth: {
// The key here should match the OAuth Connection setting
// defined in your Azure Bot resource.
defaultConnectionName: 'graph',
},
});
app.message('me', async ({ signin, userGraph, send }) => {
if (!await signin()) {
return;
}
const me = await userGraph.call(endpoints.me.get);
await send(JSON.stringify(me));
});
Autenticação de usuário para serviços externos
No Slack, você pode acessar serviços externos implementando um fluxo de associação de conta usando o OAuth 2.0, conforme documentado aqui. No Teams, você pode acessar serviços externos implementando um fluxo OAuth 2.0, com o Serviço de Token de Bot do Azure lidando com a aquisição, o armazenamento e a atualização de tokens para você.
Primeiro, defina as configurações de conexão OAuth 2.0 no Portal do Azure para seu recurso de Bot do Azure.
Em seguida, adicione o código de autenticação ao seu aplicativo para obter o token de usuário relevante e chame seu serviço externo.
import
{ App } from '@microsoft/teams.apps';
const app = new App({
// ... rest of App config
oauth: {
// The key here should match the OAuth Connection setting
// defined in your Azure Bot resource.
defaultConnectionName: 'custom',
},
});
app.message('me', async ({ activity, signin, token, send }) => {
// In production, it is probably better to implement a local cache.
// (e.g. \`activity.from.id\` <-> token).
// Otherwise this triggers an API call to Azure Token Service on every inbound message.
if (!await signin()) {
return;
}
// Call external API
const response = await fetch('https://example.com/api/helloworld', {
method: 'POST',
headers: {
"Authorization": token,
},
});
const result = await response.json();
await send(JSON.stringify(result));
});