傳送及接收文字訊息
適用於: SDK v4
Bot 與用戶通訊的主要方式,同樣地會透過 訊息 活動來接收通訊。 有些郵件可能只包含純文本,有些郵件可能包含更豐富的內容,例如卡片或附件。 Bot 的回合處理程式會接收來自使用者的訊息,而且您可以從該處傳送回應給使用者。 回合內容物件提供將訊息傳回給使用者的方法。 本文說明如何傳送純文本訊息。
大部分文字欄位都支援 Markdown,但支援可能會因通道而異。
針對執行中的 Bot 傳送和接收訊息,請遵循目錄頂端的快速入門,或查看 Bot 的運作方式一文,其中也會連結到可供您自行執行的範例。
傳送簡訊
若要傳送簡訊,請指定您想要以活動的形式傳送的字串:
在 Bot 的活動處理常式中,使用轉向內容物件的 SendActivityAsync
方法即可傳送單一訊息回應。 您也可以使用 物件的 SendActivitiesAsync
方法一次傳送多個回應。
await turnContext.SendActivityAsync($"Welcome!");
在 Bot 的活動處理常式中,使用轉向內容物件的 sendActivity
方法即可傳送單一訊息回應。 您也可以使用 物件的 sendActivities
方法一次傳送多個回應。
await context.sendActivity("Welcome!");
在 Bot 的活動處理常式中,使用轉向內容物件的 sendActivity
方法即可傳送單一訊息回應。 您也可以使用 物件的 sendActivities
方法一次傳送多個回應。
turnContext.sendActivity("Welcome!");
在 Bot 的活動處理常式中,使用轉向內容物件的 send_activity
方法即可傳送單一訊息回應。
await turn_context.send_activity("Welcome!")
語言產生 (LG) 提供範本,其中包含用於組合和擴充的一或多個文字變化。
LG 系統會隨機挑選其中一個變化。
下列範例顯示包含兩種變化的 Bot 回應範本。
# GreetingPrefix
- Hi
- Hello
接收簡訊
若要處理文字訊息,請使用活動物件的 text 屬性。
在 Bot 的活動處理程式中,使用下列程式代碼來接收訊息。
var responseMessage = turnContext.Activity.Text;
在 Bot 的活動處理程式中,使用下列程式代碼來接收訊息。
let text = turnContext.activity.text;
在 Bot 的活動處理程式中,使用下列程式代碼來接收訊息。
String responseMessage = turnContext.getActivity().getText();
在 Bot 的活動處理程式中,使用下列程式代碼來接收訊息。
response = context.activity.text
將下列 LG 範本新增至 .lg 檔案,以接收訊息。
# EchoMessage
You said '${turn.activity.text}'
傳送輸入指標
用戶預期會及時回應其訊息。 如果您的 Bot 會執行一些長時間執行的工作,例如呼叫伺服器或執行查詢,而不需讓使用者知道 Bot 聽到這些訊息,使用者可能會變得不耐煩,並傳送其他訊息,或只是假設 Bot 已中斷。
網路聊天 和 Direct Line 通道 Bot 可以支援傳送輸入指示,向用戶顯示已接收和正在處理訊息。 不過,您的 Bot 必須在 15 秒內讓回合結束,否則連接器服務將會逾時。如需較長的程式,請深入瞭解如何傳送 主動式訊息。
下列範例示範如何傳送輸入指示。
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
]
其他資源
下一步