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.
Usando o SDK do Agent 365, seu agente pode lidar com eventos de atividade de plataforma, como instalar e desinstalar, e enviar várias mensagens discretas em um único turno. Este artigo aborda os principais padrões para responder aos usuários e mantê-los informados enquanto o agente processa solicitações.
Manipular eventos de instalação e desinstalação do agente
Quando um usuário instala ou desinstala seu agente no Teams ou em outros canais hospedados pelo Agente 365, a plataforma envia uma InstallationUpdate atividade (também conhecida como evento agentInstanceCreated ). Seu agente pode lidar com esses eventos para enviar uma mensagem de boas-vindas quando instalado e uma mensagem de despedida quando desinstalado.
| Ação | Description |
|---|---|
add |
O usuário instala o agente |
remove |
O usuário desinstala o agente |
Ao contrário dos manipuladores de notificação, o InstallationUpdate manipulador não requer autenticação porque o evento de instalação ou desinstalação é acionado antes ou depois que o usuário tem uma sessão ativa.
Registrar o manipulador de instalação e desinstalação
Registre um manipulador de atividades para o InstallationUpdate tipo de atividade na inicialização do agente:
@agent_app.activity("installationUpdate")
async def on_installation_update(context: TurnContext, state: TurnState):
action = context.activity.action
from_prop = context.activity.from_property
logger.info(
"InstallationUpdate received — Action: '%s', DisplayName: '%s', UserId: '%s'",
action or "(none)",
getattr(from_prop, "name", "(unknown)") if from_prop else "(unknown)",
getattr(from_prop, "id", "(unknown)") if from_prop else "(unknown)",
)
if action == "add":
await context.send_activity("Thank you for hiring me! Looking forward to assisting you in your professional journey!")
elif action == "remove":
await context.send_activity("Thank you for your time, I enjoyed working with you.")
Activity.action é uma string definida quando você instala o agente "add" ou quando o desinstala "remove".
Activity.from_property é uma instância channelaccount que contém a identidade do usuário.
Enviar várias mensagens
Agentes do Agente 365 podem enviar várias mensagens discretas em resposta a um único prompt de usuário. Para fazer isso, chame SendActivityAsync (.NET), send_activity (Python) ou sendActivity (JavaScript) várias vezes em um único turno.
Importante
O Teams não oferece suporte a respostas de streaming para identidades agêncicas. SDK detecta a identidade agencial e bufferiza o fluxo em uma única mensagem. Use SendActivityAsync, send_activityou sendActivity diretamente para enviar mensagens imediatas e discretas para o usuário.
Os exemplos a seguir demonstram o padrão enviando uma confirmação imediata antes da resposta LLM:
@agent_app.activity("message")
async def on_message(context: TurnContext, state: TurnState):
# Message 1: immediate ack — reaches the user right away
await context.send_activity("Got it — working on it…")
# ... LLM processing ...
# Message 2: the LLM response
await context.send_activity(response)
O exemplo demonstra esse padrão em on_message (host_agent_server.py) ao enviar uma confirmação imediata antes da resposta LLM.
Cada chamada para sendActivity, send_activityou SendActivityAsync cria uma mensagem separada. Você pode chamá-lo quantas vezes forem necessárias para enviar atualizações de progresso, resultados parciais ou uma resposta final.
Indicadores de digitação
Indicadores de digitação exibem uma ... animação de progresso no Teams:
- Eles têm um tempo de espera visual embutido de cerca de 5 segundos e que deve ser renovado em um loop a cada quatro segundos.
- Eles são visíveis apenas em conversas individuais e pequenos grupos de conversa, não em canais.
O agente envia indicadores de digitação em um loop a cada quatro segundos para manter a ... animação ativa enquanto a LLM processa a solicitação:
# Message 1: immediate ack — reaches the user right away
await context.send_activity("Got it — working on it…")
# Send typing indicator immediately (awaited so it arrives before the LLM call starts).
await context.send_activity(Activity(type="typing"))
# Background loop refreshes the "..." animation every ~4s (it times out after ~5s).
async def _typing_loop():
try:
while True:
await asyncio.sleep(4)
await context.send_activity(Activity(type="typing"))
except asyncio.CancelledError:
pass # Expected on cancel.
typing_task = asyncio.create_task(_typing_loop())
try:
response = await agent.process_user_message(...)
await context.send_activity(response)
finally:
typing_task.cancel()
try:
await typing_task
except asyncio.CancelledError:
pass