发送和接收文本消息
适用于:SDK v4
机器人与用户通信以及接收通信等的主要方法是通过消息活动。 某些消息可能会只包含纯文本,而其他消息可能包含更丰富的内容,如卡或附件。 机器人的轮次处理程序从用户那里接收消息,然后你可以向用户发送响应。 轮次上下文对象提供用于将消息发送回用户的方法。 本文介绍了如何发送纯文本消息。
大多数文本字段支持 Markdown,但支持可能因通道而异。
有关正在运行的机器人如何发送和接收消息,请遵循目录顶部的快速入门,或查看机器人工作原理一文,该文章所提供的示例链接,可帮助你自行运行。
发送短信
若要发送短信,请指定你想要作为活动发送的字符串:
在机器人的活动处理程序中,使用轮次上下文对象的 SendActivityAsync
方法发送单个消息响应。 还可以使用该对象的 SendActivitiesAsync
方法一次性发送多个响应。
await turnContext.SendActivityAsync($"Welcome!");
在机器人的活动处理程序中,使用轮次上下文对象的 sendActivity
方法发送单个消息响应。 还可以使用该对象的 sendActivities
方法一次性发送多个响应。
await context.sendActivity("Welcome!");
在机器人的活动处理程序中,使用轮次上下文对象的 sendActivity
方法发送单个消息响应。 还可以使用该对象的 sendActivities
方法一次性发送多个响应。
turnContext.sendActivity("Welcome!");
在机器人的活动处理程序中,使用轮次上下文对象的 send_activity
方法发送单个消息响应。
await turn_context.send_activity("Welcome!")
语言生成 (LG) 提供模板,其中包括用于撰写和扩展的文本的一个或多个变体。
提供的变体之一将由 LG 系统随机选择。
以下示例显示了机器人回复模板,其中包含两个变体。
# GreetingPrefix
- Hi
- Hello
接收短信
若要处理文本消息,请使用 activity 对象的 text 属性。
在机器人的活动处理程序中,使用以下代码来接收消息。
var responseMessage = turnContext.Activity.Text;
在机器人的活动处理程序中,使用以下代码来接收消息。
let text = turnContext.activity.text;
在机器人的活动处理程序中,使用以下代码来接收消息。
String responseMessage = turnContext.getActivity().getText();
在机器人的活动处理程序中,使用以下代码来接收消息。
response = context.activity.text
将以下 LG 模板添加到 .lg 文件以接收消息。
# EchoMessage
You said '${turn.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);
}
}
this.onMessage(async (context, next) => {
if (context.activity.text === 'wait') {
await context.sendActivities([
{ type: ActivityTypes.Typing },
{ type: 'delay', value: 3000 },
{ type: ActivityTypes.Message, text: 'Finished typing' }
]);
} else {
await context.sendActivity(`You said '${ context.activity.text }'. Say "wait" to watch me type.`);
}
await next();
});
@Override
protected CompletableFuture<Void> onMessageActivity(TurnContext turnContext) {
if (turnContext.getActivity().getText().toLowerCase().equals("wait")) {
List<Activity> activities = new ArrayList<Activity>();
activities.add(new Activity(ActivityTypes.TYPING));
activities.add(new Activity(ActivityTypes.DELAY) {{setValue(3000);}});
activities.add(MessageFactory.text("Finished typing", "Finished typing", null));
return turnContext.sendActivities(activities).thenApply(result -> null);
} else {
return turnContext.sendActivity(MessageFactory.text("Echo: " + turnContext.getActivity().getText()))
.thenApply(sendResult -> null);
}
}
async def on_message_activity(self, turn_context: TurnContext):
if turn_context.activity.text == "wait":
return await turn_context.send_activities([
Activity(
type=ActivityTypes.typing
),
Activity(
type="delay",
value=3000
),
Activity(
type=ActivityTypes.message,
text="Finished Typing"
)
])
else:
return await turn_context.send_activity(
f"You said {turn_context.activity.text}. Say 'wait' to watch me type."
)
# TypingIndicator
[Activity
Type = typing
]
其他资源
后续步骤