发送和接收文本消息

适用于:SDK v4

机器人与用户通信以及接收通信等的主要方法是通过消息活动。 某些消息可能会只包含纯文本,而其他消息可能包含更丰富的内容,如卡或附件。 机器人的轮次处理程序从用户那里接收消息,然后你可以向用户发送响应。 轮次上下文对象提供用于将消息发送回用户的方法。 本文介绍了如何发送纯文本消息。

大多数文本字段支持 Markdown,但支持可能因通道而异。

有关正在运行的机器人如何发送和接收消息,请遵循目录顶部的快速入门,或查看机器人工作原理一文,该文章所提供的示例链接,可帮助你自行运行。

注意

Bot Framework JavaScript、C# 和 Python SDK 将继续受支持,但 Java SDK 即将停用,最终长期支持将于 2023 年 11 月结束。

使用 Java SDK 构建的现有机器人将继续正常运行。

要生成新的机器人,请考虑使用 Microsoft Copilot Studio 并阅读选择正确的助理解决方案

有关详细信息,请参阅机器人构建的未来

发送短信

若要发送短信,请指定你想要作为活动发送的字符串:

在机器人的活动处理程序中,使用轮次上下文对象的 SendActivityAsync 方法发送单个消息响应。 还可以使用该对象的 SendActivitiesAsync 方法一次性发送多个响应。

await turnContext.SendActivityAsync($"Welcome!");

接收短信

若要处理文本消息,请使用 activity 对象的 text 属性。

在机器人的活动处理程序中,使用以下代码来接收消息。

var responseMessage = turnContext.Activity.Text;

发送键入指示符

用户希望发出的消息得到及时响应。 如果机器人执行一些长时间运行的任务(如调用服务器或执行查询),而不向用户指明机器人已听到其消息,用户可能会失去耐性,并发送其他消息或就此假设机器人出现故障。

Web Chat 和 Direct Line 通道机器人可以支持发送键入指示,向用户显示已接收并且正在处理消息。 但是,机器人需要让轮次在 15 秒内结束,否则 Connector 服务将超时。对于较长的进程,请阅读有关发送主动消息的详细信息。

以下示例演示了如何发送键入指示。

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    if (string.Equals(turnContext.Activity.Text, "wait", System.StringComparison.InvariantCultureIgnoreCase))
    {
        await turnContext.SendActivitiesAsync(
            new Activity[] {
                new Activity { Type = ActivityTypes.Typing },
                new Activity { Type = "delay", Value= 3000 },
                MessageFactory.Text("Finished typing", "Finished typing"),
            },
            cancellationToken);
    }
    else
    {
        var replyText = $"Echo: {turnContext.Activity.Text}. Say 'wait' to watch me type.";
        await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
    }
}

其他资源

后续步骤