Actualización y eliminación de mensajes enviados desde el bot
Artículo
Importante
Los ejemplos de código de esta sección se basan en la versión 4.6 y versiones posteriores del SDK de Bot Framework. Si busca documentación para versiones anteriores, consulte la sección bots - v3 SDK en la carpeta SDK heredados de la documentación.
Su bot puede actualizar dinámicamente los mensajes después de enviarlos en lugar de tenerlos como instantáneas estáticas de datos. Los mensajes también se pueden eliminar mediante el método DeleteActivity de Bot Framework.
Nota:
Un bot no puede actualizar ni eliminar mensajes enviados por el usuario en Microsoft Teams.
Actualizar mensajes
Puede usar actualizaciones de mensajes dinámicos para escenarios como las actualizaciones de sondeo, la modificación de las acciones disponibles después de presionar un botón o cualquier otro cambio de estado asincrónico.
No es necesario que el nuevo mensaje coincida con el tipo original. Por ejemplo, si el mensaje original contenía datos adjuntos, el nuevo mensaje puede ser un mensaje de texto simple.
Para actualizar un mensaje existente, pase un nuevo objeto Activity con el identificador de actividad existente al método UpdateActivityAsync de la clase 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);
Para actualizar un mensaje existente, pase un nuevo objeto Activity con el identificador de actividad existente al método updateActivity del objeto TurnContext.
// Send initial message
var message = await context.sendActivity("<Your Message>");
var activityId = message.id; // Fetch activity id.
// MessageFactory.Text(): Specifies the type of text data in a message attachment.
const newActivity = MessageFactory.text('The new text for the activity');
newActivity.id = activityId;
// A method that can participate in update activity events for the current turn.
await turnContext.updateActivity(newActivity);
Para actualizar un mensaje existente, pase un nuevo objeto Activity con el identificador de actividad existente al método update_activity de la clase TurnContext.
# Send initial message
message = await turn_context.send_activity("<Your Message>")
activityId = message.id # Fetch activity id.
# MessageFactory.Text(): Specifies the type of text data in a message attachment.
new_activity = MessageFactory.text("The new text for the activity")
new_activity.id = activity_id
# A method that can participate in update activity events for the current turn.
update_result = await context.update_activity(new_activity)
Nota:
Puede desarrollar aplicaciones de Teams en cualquier tecnología de programación web y llamar directamente a las API de REST del servicio Bot Connector. Para ello, debe implementar la Autenticación de procedimientos seguridad con sus solicitudes de API.
Para actualizar una actividad existente en una conversación, incluya el conversationId y activityId en el punto de conexión de solicitud. Para completar este escenario, debe almacenar en caché el identificador de actividad devuelto por la llamada post original.
PUT /v3/conversations/{conversationId}/activities/{activityId}
Para actualizar la tarjeta existente en una selección de botón, pase un nuevo objeto Activity con tarjeta actualizada y ReplyToId como identificador de actividad al método UpdateActivityAsync de la clase 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);
Para actualizar la tarjeta existente en una selección de botón, pase un nuevo objeto Activity con tarjeta actualizada y replyToId como identificador de actividad al método updateActivity del objeto TurnContext.
// MessageFactory.attachment(): Returns a message activity that contains an attachment.
const message = MessageFactory.attachment(card);
message.id = context.activity.replyToId;
// updateActivity(): A method that can participate in update activity events for the current turn.
await context.updateActivity(message);
Para actualizar la tarjeta existente al hacer clic en un botón, pase un nuevo objeto Activity con tarjeta actualizada y reply_to_id como identificador de actividad al método update_activity de la clase TurnContext.
# MessageFactory.attachment(): Returns a message activity that contains an attachment.
updated_activity = MessageFactory.attachment(CardFactory.hero_card(card))
updated_activity.id = turn_context.activity.reply_to_id
# update_activity(): A method that can participate in update activity events for the current turn.
await turn_context.update_activity(updated_activity)
Nota:
Puede desarrollar aplicaciones de Teams en cualquier tecnología de programación web y llamar directamente a las API de REST del servicio Bot Connector. Para ello, debe implementar la autenticación de procedimientos de seguridad con las solicitudes de API.
Para actualizar una actividad existente en una conversación, incluya el conversationId y activityId en el punto de conexión de solicitud. Para completar este escenario, debe almacenar en caché el identificador de actividad devuelto por la llamada post original.
PUT /v3/conversations/{conversationId}/activities/{activityId}
Ahora que ha actualizado las tarjetas, puede eliminar mensajes mediante Bot Framework.
Eliminar mensajes
En Bot Framework, cada mensaje tiene su identificador de actividad único. Los mensajes se pueden eliminar mediante el método DeleteActivity de Bot Framework.
Para eliminar un mensaje, pase el identificador de esa actividad al método DeleteActivityAsync de la clase TurnContext.
foreach (var activityId in _list)
{
// When overridden in a derived class, deletes an existing activity in the conversation.
await turnContext.DeleteActivityAsync(activityId, cancellationToken);
}
Para eliminar un mensaje, pase el identificador de esa actividad al método deleteActivity del objeto TurnContext.
for (let i = 0; i < activityIds.length; i++) {
// deleteActivity(): deletes an existing activity in the conversation.
await turnContext.deleteActivity(activityIds[i]);
}
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.