テキスト メッセージを送受信する
この記事の対象: SDK v4
ボットでユーザーと通信し、同様にボットで通信を受け取る主要な方法は、メッセージ アクティビティを利用することです。 メッセージにはプレーンテキストのみで構成されているものもあれば、カードや添付ファイルなど、よりリッチなコンテンツが含まれるものもあります。 ボットのターン ハンドラーでは、ユーザーからメッセージを受け取ります。そこからユーザーに応答を送信できます。 ターン コンテキスト オブジェクトによって、ユーザーにメッセージを戻すためのメソッドが与えられます。 この記事では、プレーンテキスト メッセージを送信する方法について説明します。
Markdown はほとんどのテキスト フィールドでサポートされていますが、サポート状況はチャネルごとに異なる場合があります。
メッセージを送受信する実行中のボットについては、目次の一番上にあるクイックスタートを実行するか、ボットの動作方法に関するの記事を確認してください。これは、ご自身で実行する場合にご利用いただけるサンプルへもリンクされています。
Note
Bot Framework JavaScript SDK、C#、Python SDK は引き続きサポートされますが、Java SDK については、最終的な長期サポートは 2023 年 11 月に終了する予定です。
Java SDK を使用して構築された既存のボットは引き続き機能します。
新しいボットを構築する場合は、Microsoft Copilot Studio の使用をご検討ください。また、適切なコパイロット ソリューションの選択に関する記事もお読みください。
詳細については、「The future of bot building」をご覧ください。
テスト メッセージを送信
テキスト メッセージを送信するには、送信する文字列をアクティビティとして指定します。
ボットのアクティビティ ハンドラーで、ターン コンテキスト オブジェクトの SendActivityAsync
メソッドを使用して、1 つのメッセージ応答を送信します。 オブジェクトの SendActivitiesAsync
メソッドを使用して一度に複数の応答を送信することもできます。
await turnContext.SendActivityAsync($"Welcome!");
テキスト メッセージの受信
テキスト メッセージを処理するには、アクティビティ オブジェクトの テキスト プロパティを使用します。
ボットのアクティビティ ハンドラーで、次のコードを使用してメッセージを受信します。
var responseMessage = turnContext.Activity.Text;
入力インジケーターの送信
ユーザーはメッセージに対するタイムリーな応答を期待しています。 ボットがユーザーからの指示を受け取ったということをユーザーに表示することなく、サーバーの呼び出しやクエリの実行などの実行時間の長いタスクを実行すると、ユーザーはしびれを切らして追加のメッセージを送信したり、単にボットが壊れていると推測する可能性があります。
Web チャットおよび Direct Line チャネルのボットは、メッセージが受信され、処理中であることをユーザに示す入力表示の送信をサポートできます。 ただし、ボットはターンを 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);
}
}