Enviar e receber mensagens
Os bots de conversação comunicam com os utilizadores através de mensagens, permitindo interações totalmente integradas. Pode simular conversações da vida real com os utilizadores através de interações de texto ou voz. Tem de garantir que as conversações do bot são interativas, dinâmicas, adaptáveis e fáceis de utilizar.
Conteúdo da mensagem
A interação de mensagens entre o bot e o utilizador pode incluir diferentes tipos de conteúdo de mensagens que:
Tipo de conteúdo | Do usuário para o bot | Do bot para o usuário |
---|---|---|
Texto formatado e emojis | ✔️ | ✔️ |
Imagens | ✔️ | ✔️ |
Cartões Adaptáveis | ❌ | ✔️ |
Utilizar emojis e mensagens de texto formatados
O seu bot do Teams pode enviar texto formatado e emojis. O Teams suporta emojis através de UTF-16, como U+1F600 para um rosto sorridente.
Utilizar mensagens de imagem
Para fazer com que a mensagem do bot apareça, o utilizador pode adicionar imagens como anexos:
As imagens podem ter até 1024 × 1024 píxeis e 1 MB no formato PNG, JPEG ou GIF. Os GIFs animados não são suportados.
Pode especificar a altura e a largura de cada imagem com XML. Em Markdown, o tamanho da imagem é predefinido para 256×256. Por exemplo:
- ✔️ :
<img src="http://aka.ms/Fo983c" alt="Duck on a rock" height="150" width="223"></img>
. -
❌:
![Duck on a rock](http://aka.ms/Fo983c)
.
- ✔️ :
Para obter mais informações sobre anexos, consulte Adicionar anexos multimédia a mensagens.
Utilizar Cartões Ajustáveis
Um bot de conversação pode incluir Cartões Ajustáveis que simplificam os fluxos de trabalho empresariais. Os Cartões Ajustáveis oferecem texto, voz, imagens, botões e campos de entrada personalizáveis avançados. Pode criar Cartões Ajustáveis num bot e apresentado em várias aplicações, como o Teams, o seu site, etc.
Para saber mais, confira:
- Cartões Ajustáveis para.
- O Teams card referência para cartões suportados.
O código seguinte mostra um exemplo de envio de um Cartão Adaptável simples:
Exemplo: Enviar um Cartão Adaptável simples
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.5",
"body": [
{
"items": [
{
"size": "large",
"text": " Simple Adaptivecard Example with a Textbox",
"type": "TextBlock",
"weight": "bolder",
"wrap": true
},
],
"spacing": "extraLarge",
"type": "Container",
"verticalContentAlignment": "center"
}
]
}
Enviar e receber mensagens
Enviar e receber mensagens é a principal funcionalidade de um bot. Permite que um bot:
- Enviar e receber mensagens.
- Atualizar e eliminar mensagens de bot.
- Enviar ações sugeridas.
- Enviar mensagens nos dados do canal do Teams.
Numa conversa, cada mensagem é um Activity
objeto do tipo messageType: message
. Quando alguém envia uma mensagem, o Microsoft Teams publica-a no seu bot. O Teams envia um objeto JSON para o ponto final de mensagens do bot e permite apenas um ponto final para mensagens. Em seguida, o bot verifica a mensagem para descobrir o respetivo tipo e responde em conformidade.
As conversações básicas são geridas através do conector do Bot Framework, que é uma única API REST. Esta API permite que o bot fale com o Teams e outros canais. O SDK do Bot Builder oferece as seguintes funcionalidades:
- Acesso fácil ao conector do Bot Framework.
- Ferramentas para gerir o fluxo e o estado da conversação.
- Formas simples de adicionar serviços cognitivos, como o processamento de linguagem natural (NLP).
O bot recebe mensagens do Teams com a Text
propriedade e pode enviar respostas individuais ou múltiplas aos utilizadores.
Para obter mais informações, veja Atribuição de utilizador para mensagens de bot.
A tabela seguinte lista a atividade que o bot pode receber e tomar medidas:
Tipo de mensagem | Objeto do conteúdo | Escopo |
---|---|---|
Receber uma atividade de mensagem | Atividade de mensagens | Todos |
Receber atividade de edição de mensagens | Atividade de edição de mensagens | Todos |
Receber atividade de não eliminação de mensagens | Atividade de anular eliminação de mensagens | Todos |
Receber atividade de mensagem de eliminação recuperável | Atividade de eliminação recuperável de mensagens | Todos |
Receber uma atividade de mensagem
Para receber uma mensagem sms, utilize a Text
propriedade de um Activity
objeto. No manipulador de atividades do bot, alterne o contexto do objeto Activity
para ler uma única solicitação de mensagem.
O código seguinte mostra um exemplo de como receber uma atividade de mensagem:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
// Sends an activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(MessageFactory.Text($"Echo: {turnContext.Activity.Text}"), cancellationToken);
}
Receber um recibo de leitura
A definição Recibos de leitura no Teams permite que o remetente de uma mensagem de chat seja notificado quando a mensagem foi lida pelo destinatário em conversas um-a-um e em grupo. Depois de o destinatário ler a mensagem, é apresentada a mensagem Vista junto à mensagem. Também tem a opção de configurar o bot para receber eventos de recibos de leitura através da definição Recibos de leitura. O evento de recibo de leitura ajuda-o a melhorar a experiência do utilizador das seguintes formas:
Pode configurar o bot para enviar uma mensagem de seguimento se o utilizador da sua aplicação não tiver lido a mensagem no chat pessoal.
Pode criar um ciclo de comentários com recibos de leitura para otimizar a experiência do bot.
Observação
- Os recibos de leitura são suportados apenas em cenários de chat de utilizador para bot.
- Os recibos de leitura para bots não suportam âmbitos de chat de equipa, canal e grupo.
- Se um administrador ou utilizador desativar a definição Recibos de leitura, o bot não recebe o evento de recibo de leitura.
Para receber eventos de recibos de leitura para o bot, certifique-se do seguinte:
- Adicione a permissão RSC
ChatMessageReadReceipt.Read.Chat
no manifesto da aplicação, da seguinte forma:
"webApplicationInfo": {
"id": "38f0ca43-1c38-4c39-8097e-47f62c686500",
"resource": ""
},
"authorization": {
"permissions": {
"orgwide": [],
"resourceSpecific": [
{
"name": "ChatMessageReadReceipt.Read.Chat",
"type": "Application"
}
]
}
}
Também pode adicionar permissões RSC através de API do Graph. Para obter mais informações, confira consentedPermissionSet
.
Substitua o método
OnTeamsReadReceiptAsync
peloIsMessageRead
processador.O
IsMessageRead
método auxiliar é útil para determinar se a mensagem é lida pelos destinatários. Se forcompareMessageId
menor ou igual aLastReadMessageId
, significa que a mensagem foi lida. Substitua oOnTeamsReadReceiptAsync
método para receber recibos de leitura comIsMessageRead
o método auxiliar:protected override async Task OnTeamsReadReceiptAsync(ReadReceiptInfo readReceiptInfo, ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken) { var lastReadMessageId = readReceiptInfo.LastReadMessageId; if (IsMessageRead("{id of the message that you care}", LastReadMessageId)) { await turnContext.SendActivityAsync(MessageFactory.Text("User read the bot's message"), cancellationToken); } }
O exemplo seguinte mostra um pedido de evento de recibos de leitura que um bot recebe:
{ "name": "application/vnd.microsoft.readReceipt", "type": "event", "timestamp": "2023-08-16T17:23:11.1366686Z", "id": "f:b4783e72-9d7b-2ed9-ccef-ab446c873007", "channelId": "msteams", "serviceUrl": "https://smba.trafficmanager.net/amer/", "from": { "id": "29:1-8Iuh70W9pRqV8tQK8o2nVjxz33RRGDKLf4Bh7gKnrzN8s7e4vCyrFwjkPbTCX_Co8c4aXwWvq3RBLr-WkkVMw", "aadObjectId": "5b649834-7412-4cce-9e69-176e95a394f5" }, "conversation": { "conversationType": "personal", "tenantId": "6babcaad-604b-40ac-a9d7-9fd97c0b779f", "id": "a:1xlimp68NSUxEqK0ap2rXuwC9ITauHgV2M4RaDPkeRhV8qMaFn-RyilMZ62YiVdqs8pp43yQaRKvv_U2S2gOS5nM-y_pOxVe4BW1qMGPtqD0Bv3pw-nJXF0zhDlZHMZ1Z" }, "recipient": { "id": "28:9901a8b6-4fef-428b-80b1-ddb59361adeb", "name": "Test Bot" }, "channelData": { "tenant": { "id": "6babcaad-604b-40ac-a9d7-9fd97c0b779f" } }, "value": { "lastReadMessageId": "1692206589131" } }
A definição de administrador de recibos de leitura ou a definição de utilizador está ativada para o inquilino para que o bot receba os eventos de recibo de leitura. O administrador ou o utilizador tem de ativar ou desativar a definição de recibo de leitura.
Depois de o bot estar ativado num cenário de chat de bot de um utilizador, o bot recebe prontamente um evento de recibo de leitura quando o utilizador ler a mensagem do bot. Pode controlar a interação do utilizador ao contar o número de eventos e também pode enviar uma mensagem com suporte para o contexto.
Receber atividade de edição de mensagens
Quando edita uma mensagem, o bot recebe uma notificação da atividade editar mensagem.
Para obter uma notificação de atividade de edição de mensagens num bot, pode substituir OnTeamsMessageEditAsync
o processador.
Segue-se um exemplo de uma notificação de atividade de edição de mensagens que utiliza OnTeamsMessageEditAsync
quando uma mensagem enviada é editada:
protected override async Task OnTeamsMessageEditAsync(ITurnContext<IMessageUpdateActivity> turnContext, CancellationToken cancellationToken)
{
var replyActivity = MessageFactory.Text("message is updated");
await turnContext.SendActivityAsync(replyActivity, cancellationToken);
}
Enviar uma mensagem
Para enviar uma mensagem sms, especifique a cadeia que pretende enviar como uma atividade. No processador de atividade do bot, utilize o método do objeto de SendActivityAsync
contexto turn para enviar uma única resposta de mensagem. Utilize o método do SendActivitiesAsync
objeto para enviar várias respostas.
O código seguinte mostra um exemplo de envio de uma mensagem quando um utilizador é adicionado a uma conversação:
protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
// Sends an activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(MessageFactory.Text($"Hello and welcome!"), cancellationToken);
}
Observação
- A divisão de mensagens ocorre quando uma mensagem sms e um anexo são enviados no mesmo payload de atividade. O Teams divide esta atividade em duas atividades separadas, uma com uma mensagem de texto e outra com um anexo. À medida que a atividade é dividida, não recebe o ID da mensagem em resposta, que é utilizado para atualizar ou eliminar a mensagem proativamente. Recomenda-se que envie atividades separadas em vez de depender da divisão de mensagens.
- As mensagens enviadas podem ser localizadas para fornecer personalização. Para obter mais informações, veja Localizar a sua aplicação.
As mensagens enviadas entre utilizadores e bots incluem dados de canal internos na mensagem. Estes dados permitem que o bot comunique corretamente nesse canal. O SDK do Bot Builder permite-lhe modificar a estrutura da mensagem.
Receber atividade de não eliminação de mensagens
Quando anula a eliminação de uma mensagem, o bot recebe uma notificação da atividade de anular a eliminação da mensagem.
Para obter uma notificação de atividade de anulação de eliminação de mensagens num bot, pode substituir OnTeamsMessageUndeleteAsync
o processador.
Segue-se um exemplo de uma notificação de atividade de não eliminação de mensagens que utiliza OnTeamsMessageUndeleteAsync
quando uma mensagem eliminada é restaurada:
protected override async Task OnTeamsMessageUndeleteAsync(ITurnContext<IMessageUpdateActivity> turnContext, CancellationToken cancellationToken)
{
var replyActivity = MessageFactory.Text("message is undeleted");
await turnContext.SendActivityAsync(replyActivity, cancellationToken);
}
Receber atividade de mensagem de eliminação recuperável
Quando elimina uma mensagem de forma recuperável, o bot recebe uma notificação da atividade da mensagem de eliminação recuperável.
Para obter uma notificação de atividade de mensagem de eliminação recuperável num bot, pode substituir OnTeamsMessageSoftDeleteAsync
o processador.
O exemplo seguinte mostra uma notificação de atividade de eliminação recuperável de mensagens utilizando OnTeamsMessageSoftDeleteAsync
quando uma mensagem é eliminada de forma recuperável:
protected override async Task OnTeamsMessageSoftDeleteAsync(ITurnContext<IMessageDeleteActivity> turnContext, CancellationToken cancellationToken)
{
var replyActivity = MessageFactory.Text("message is soft deleted");
await turnContext.SendActivityAsync(replyActivity, cancellationToken);
}
Atualizar e excluir mensagens enviadas do bot
Importante
Os exemplos de código nesta secção baseiam-se na versão 4.6 e versões posteriores do SDK do Bot Framework. Se estiver à procura de documentação para versões anteriores, veja a secção bots – SDK v3 na pasta SDKs Legados da documentação.
Seu bot pode atualizar mensagens dinamicamente depois de enviá-las em vez de enviá-las como instantâneos estáticos de dados. As mensagens também podem ser excluídas usando o método DeleteActivity
do Bot Framework.
Observação
Um bot não pode atualizar ou eliminar mensagens enviadas pelo utilizador no Microsoft Teams.
Atualizar mensagens
Você pode usar atualizações de mensagens dinâmicas para cenários, como atualizações de votação, modificação de ações disponíveis após um pressionamento de botão ou qualquer outra alteração de estado assíncrona.
Não é necessário que a nova mensagem corresponda ao tipo original. Por exemplo, se a mensagem original contiver um anexo, a nova mensagem poderá ser uma mensagem de texto simples.
Para atualizar uma mensagem existente, passe um novo objeto Activity
com a ID de atividade existente para o método UpdateActivityAsync
da classe TurnContext
.
// Send initial message
var response = await turnContext.SendActivityAsync(MessageFactory.Attachment(card.ToAttachment()), cancellationToken);
var activityId = response.Id; // Fetch activity id.
// MessageFactory.Text(): Specifies the type of text data in a message attachment.
var newActivity = MessageFactory.Text("The new text for the activity");
newActivity.Id = activityId;
// UpdateActivityAsync(): A method that can participate in update activity events for the current turn.
await turnContext.UpdateActivityAsync(newActivity, cancellationToken);
Agora que você atualizou as mensagens, atualize o cartão existente na seleção de botão para atividades de entrada.
Atualizar cartões
Para atualizar o cartão existente na seleção de botão, você pode usar ReplyToId
atividade de entrada.
Para atualizar o cartão existente em uma seleção de botão, passe um novo objeto Activity
com cartão atualizado e ReplyToId
como ID de atividade para o método UpdateActivityAsync
da classe TurnContext
.
// Returns a message activity that contains an attachment.
var activity = MessageFactory.Attachment(card.ToAttachment());
activity.Id = turnContext.Activity.ReplyToId;
// A method that can participate in update activity events for the current turn.
await turnContext.UpdateActivityAsync(activity, cancellationToken);
Agora que você atualizou os cartões, pode excluir mensagens usando o Bot Framework.
Excluir mensagens
No Bot Framework, cada mensagem tem seu identificador de atividade exclusivo. As mensagens podem ser excluídas usando o método DeleteActivity
do Bot Framework.
Para excluir uma mensagem, passe a ID da atividade para o DeleteActivityAsync
da classe TurnContext
.
foreach (var activityId in _list)
{
// When overridden in a derived class, deletes an existing activity in the conversation.
await turnContext.DeleteActivityAsync(activityId, cancellationToken);
}
Enviar ações sugeridas
As ações sugeridas permitem que o bot apresente botões que o utilizador pode selecionar para fornecer entradas. As ações sugeridas melhoram a experiência do utilizador ao permitir que o utilizador responda a uma pergunta ou faça uma escolha com a seleção de um botão, em vez de escrever uma resposta com um teclado. Quando o utilizador seleciona um botão, este permanece visível e acessível nos cartões avançados, mas não para as ações sugeridas. Isto impede o utilizador de selecionar botões obsoletos numa conversação.
Para adicionar ações sugeridas a uma mensagem, defina a suggestedActions
propriedade de um objeto de atividade para especificar a lista de objetos de ação card que representam os botões a apresentar ao utilizador. Para obter mais informações, confira sugestedActions
.
Segue-se um exemplo de implementação e experiência de ações sugeridas:
"suggestedActions": {
"actions": [
{
"type": "imBack",
"title": "Action 1",
"value": "Action 1"
},
{
"type": "imBack",
"title": "Action 2",
"value": "Action 2"
}
],
"to": [<list of recepientIds>]
}
O seguinte ilustra um exemplo de ações sugeridas:
Observação
-
SuggestedActions
só são suportados para bots de chat um-para-um com mensagens baseadas em texto e Cartões Ajustáveis. -
SuggestedActions
não são suportados para bots de chat com anexos para qualquer tipo de conversação. -
imBack
é o único tipo de ação suportado e o Teams apresenta até seis ações sugeridas.
Enviar mensagens nos dados do canal do Teams
O channelData
objeto contém informações específicas do Teams e é uma origem definitiva para IDs de equipa e de canal. Opcionalmente, pode colocar em cache e utilizar estes IDs como chaves para o armazenamento local. O TeamsActivityHandler
no SDK obtém informações importantes do channelData
objeto para torná-lo acessível. No entanto, pode sempre aceder aos dados originais a turnContext
partir do objeto.
O channelData
objeto não está incluído em mensagens em conversações pessoais, uma vez que estas ocorrem fora de um canal.
Um objeto típico channelData
numa atividade enviada para o bot contém as seguintes informações:
-
eventType
: o tipo de evento do Teams só é transmitido em casos de eventos de conversação no bot do Teams. -
tenant.id
: Microsoft Entra ID de inquilino transmitido em todos os contextos. -
team
: transmitido apenas em contextos de canal e não em conversas pessoais.-
id
: GUID para o canal. -
name
: nome da equipa transmitido apenas em casos de eventos de mudança de nome da equipa.
-
-
channel
: transmitido apenas em contextos de canal, quando o bot é mencionado ou para eventos em canais em equipas, onde o bot é adicionado.-
id
: GUID para o canal. -
name
: nome do canal transmitido apenas em casos de eventos de modificação do canal.
-
-
channelData.teamsTeamId
: Preterido. Esta propriedade só está incluída para retrocompatibilidade. -
channelData.teamsChannelId
: Preterido. Esta propriedade só está incluída para retrocompatibilidade.
O código seguinte mostra um exemplo do objeto channelData (channelCreated event):
"channelData": {
"eventType": "channelCreated",
"tenant": {
"id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
},
"channel": {
"id": "19:693ecdb923ac4458a5c23661b505fc84@thread.skype",
"name": "My New Channel"
},
"team": {
"id": "19:693ecdb923ac4458a5c23661b505fc84@thread.skype"
}
}
Dados do canal do Teams
O channelData
objeto contém informações específicas do Teams e é uma origem definitiva para IDs de equipa e de canal. Opcionalmente, pode colocar em cache e utilizar estes IDs como chaves para o armazenamento local. O TeamsActivityHandler
no SDK obtém informações importantes do channelData
objeto para torná-lo acessível. No entanto, pode sempre aceder aos dados originais a turnContext
partir do objeto.
O channelData
objeto não está incluído em mensagens em conversações pessoais, uma vez que estas ocorrem fora de um canal.
Um objeto típico channelData
numa atividade enviada para o bot contém as seguintes informações:
-
eventType
: Tipo de evento do Teams transmitido apenas em casos de eventos de modificação de canais. -
tenant.id
: Microsoft Entra ID de inquilino transmitido em todos os contextos. -
team
: transmitido apenas em contextos de canal e não em conversas pessoais.-
id
: GUID para o canal. -
name
: nome da equipa transmitido apenas em casos de (procedimentos/conversações/subscribe-to-conversation-events.md#team-renamed).
-
-
channel
: transmitido apenas em contextos de canal, quando o bot é mencionado ou para eventos em canais em equipas, onde o bot é adicionado.-
id
: GUID para o canal. -
name
: nome do canal transmitido apenas em casos de eventos de modificação do canal.
-
-
channelData.teamsTeamId
: Preterido. Esta propriedade só está incluída para retrocompatibilidade. -
channelData.teamsChannelId
: Preterido. Esta propriedade só está incluída para retrocompatibilidade.
Exemplo de channelData object
O código seguinte mostra um exemplo do objeto channelData (channelCreated event):
"channelData": {
"eventType": "channelCreated",
"tenant": {
"id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
},
"channel": {
"id": "19:693ecdb923ac4458a5c23661b505fc84@thread.skype",
"name": "My New Channel"
},
"team": {
"id": "19:693ecdb923ac4458a5c23661b505fc84@thread.skype"
}
}
Códigos de estado das APIs de conversação do bot
Certifique-se de que lida com estes erros adequadamente na sua aplicação Teams. A tabela seguinte lista os códigos de erro e as descrições nas quais os erros são gerados:
Código de status | Código de erro e valores de mensagens | Descrição | Pedido de repetição | Ação de programador |
---|---|---|---|---|
400 |
Código: Bad Argument Mensagem: *cenário específico |
Payload de pedido inválido fornecido pelo bot. Veja a mensagem de erro para obter detalhes específicos. | Não | Reavalie o payload do pedido para erros. Verifique a mensagem de erro devolvida para obter detalhes. |
401 |
Código: BotNotRegistered Mensagem: Não foi encontrado nenhum registo para este bot. |
O registo deste bot não foi encontrado. | Não | Verifique o ID e a palavra-passe do bot. Confirme que o ID do bot (Microsoft Entra ID) está registado no Portal do Programador do Teams ou através do registo do canal de bot do Azure no Azure com o canal "Teams" ativado. |
403 |
Código: BotDisabledByAdmin Mensagem: O administrador de inquilinos desativou este bot |
Administração interações bloqueadas entre o utilizador e a aplicação de bot. Administração tem de permitir a aplicação para o utilizador dentro das políticas de aplicações. Para obter mais informações, veja Políticas de aplicações. | Não | Pare a publicação na conversação até que a interação com o bot seja explicitamente iniciada por um utilizador na conversação que indica que o bot já não está bloqueado. |
403 |
Código: BotNotInConversationRoster Mensagem: O bot não faz parte da lista de conversações. |
O bot não faz parte da conversação. A aplicação tem de ser reinstalada na conversação. | Não | Antes de tentar enviar outro pedido de conversação, aguarde por um installationUpdate evento, que indica que o bot é adicionado novamente. |
403 |
Código: ConversationBlockedByUser Mensagem: O utilizador bloqueou a conversação com o bot. |
O utilizador bloqueou o bot no chat pessoal ou num canal através das definições de moderação. | Não | Elimine a conversação da cache. Pare de tentar publicar em conversações até que a interação com o bot seja explicitamente iniciada por um utilizador na conversação, indicando que o bot já não está bloqueado. |
403 |
Código: ForbiddenOperationException Mensagem: O bot não está instalado no âmbito pessoal do utilizador |
A mensagem proativa é enviada por um bot, que não está instalado num âmbito pessoal. | Não | Antes de tentar enviar outro pedido de conversação, instale a aplicação no âmbito pessoal. |
403 |
Código: InvalidBotApiHost Mensagem: Anfitrião de API de bot inválido. Para inquilinos GCC, chame https://smba.infra.gcc.teams.microsoft.com . |
O bot chamou o ponto final da API pública para uma conversação que pertence a um inquilino GCC. | Não | Atualize o URL do serviço para a conversação e https://smba.infra.gcc.teams.microsoft.com repita o pedido. |
403 |
Código: NotEnoughPermissions Mensagem: *cenário específico |
O bot não tem as permissões necessárias para efetuar a ação pedida. | Não | Determine a ação necessária da mensagem de erro. |
404 |
Código: ActivityNotFoundInConversation Mensagem: Conversação não encontrada. |
Não foi possível localizar o ID da mensagem fornecida na conversação. A mensagem não existe ou é eliminada. | Não | Verifique se o ID da mensagem enviada é um valor esperado. Remova o ID se tiver sido colocado em cache. |
404 |
Código: ConversationNotFound Mensagem: Conversação não encontrada. |
A conversação não foi encontrada porque não existe ou é eliminada. | Não | Verifique se o ID de conversação enviado é um valor esperado. Remova o ID se tiver sido colocado em cache. |
412 |
Código: PreconditionFailed Mensagem: Falha na pré-condição. Tente novamente. |
Uma condição prévia falhou numa das nossas dependências devido a várias operações simultâneas na mesma conversação. | Sim | Repita com um recuo exponencial. |
413 |
Código: MessageSizeTooBig Mensagem: Tamanho da mensagem demasiado grande. |
O tamanho do pedido recebido era demasiado grande. Para obter mais informações, consulte Formatar as mensagens do bot. | Não | Reduza o tamanho do payload. |
429 |
Código: Throttled Mensagem: Demasiados pedidos. Também devolve quando tentar novamente depois. |
Demasiados pedidos enviados pelo bot. Para obter mais informações, veja Limite de taxa. | Sim | Repita a utilização do cabeçalho Retry-After para determinar o tempo de trás. |
500 |
Código: ServiceError Mensagem: *vários |
Erro de servidor interno. | Não | Comunicar o problema na comunidade de programadores. |
502 |
Código: ServiceError Mensagem: *vários |
Problema de dependência do serviço. | Sim | Repita com um recuo exponencial. Se o problema persistir, comunique o problema na comunidade de programadores. |
503 | O serviço não está disponível. | Sim | Repita com um recuo exponencial. Se o problema persistir, comunique o problema na comunidade de programadores. | |
504 | Tempo Limite do Gateway. | Sim | Repita com um recuo exponencial. Se o problema persistir, comunique o problema na comunidade de programadores. |
Documentação de orientação de repetição dos códigos de estado
As orientações gerais de repetição para cada código de status estão listadas na tabela seguinte. O bot tem de evitar repetir status códigos que não estão especificados:
Código de status | Estratégia de repetição |
---|---|
403 | Repita ao chamar a API https://smba.infra.gcc.teams.microsoft.com GCC para InvalidBotApiHost . |
412 | Repita com o recuo exponencial. |
429 | Repita a utilização do cabeçalho Retry-After para determinar o tempo de espera em segundos e entre os pedidos, se disponível. Caso contrário, repita a utilização de um backoff exponencial com o ID do thread, se possível. |
502 | Repita com o recuo exponencial. |
503 | Repita com o recuo exponencial. |
504 | Repita com o recuo exponencial. |
Solicite cabeçalhos do bot
Os pedidos de saída atuais para o bot não contêm no cabeçalho ou URL quaisquer informações que ajudem os bots a encaminhar o tráfego sem desempacotar todo o payload. As atividades são enviadas para o bot através de um URL semelhante a https://< your_domain>/api/messages. As solicitações são recebidas para mostrar o ID da conversa e o ID do locatário nos cabeçalhos.
Campos de cabeçalho de solicitação
Dois campos de cabeçalho de solicitação não padrão são adicionados a todas as solicitações enviadas aos bots, tanto para fluxo assíncrono quanto para fluxo síncrono. A tabela a seguir fornece os campos de cabeçalho de solicitação e seus valores:
Chave de campo | Valor |
---|---|
x-ms-conversation-id | O ID da conversa correspondente à atividade de solicitação, se aplicável e confirmado ou verificado. |
x-ms-tenant-id | O ID do locatário correspondente à conversa na atividade de solicitação. |
Se o ID do inquilino ou da conversação não estiver presente na atividade ou não tiver sido validado no lado do serviço, o valor estará vazio.
Receber apenas mensagens mencionadas
Para permitir que os bots obtenham apenas as mensagens de canal ou chat em que o bot está @mentioned, tem de filtrar as mensagens. Utilize o seguinte fragmento de código para permitir que o bot receba apenas as mensagens em que está @mentioned:
// When ChannelMessage.Read.Group or ChatMessage.Read.Chat RSC is in the app manifest, this method is called even when bot is not @mentioned.
// This code snippet allows the bot to ignore all messages that do not @mention the bot.
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
// Ignore the message if bot was not mentioned.
// Remove this if block to process all messages received by the bot.
if (!turnContext.Activity.GetMentions().Any(mention => mention.Mentioned.Id.Equals(turnContext.Activity.Recipient.Id, StringComparison.OrdinalIgnoreCase)))
{
return;
}
// Sends an activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(MessageFactory.Text("Using RSC the bot can receive messages across channels or chats in team without being @mentioned."));
}
Se quiser que o bot receba todas as mensagens, não precisa de filtrar as @mention mensagens.
Guias passo a passo
Siga o guia passo a passo para criar um bot de conversação do Teams.
Próxima etapa
Canais e conversas de chat em grupo com um bot do Microsoft Teams