テキスト メッセージを送受信する

対応対象: SDK v4

ボットでユーザーと通信し、同様にボットで通信を受け取る主要な方法は、メッセージ アクティビティを利用することです。 メッセージにはプレーンテキストのみで構成されているものもあれば、カードや添付ファイルなど、よりリッチなコンテンツが含まれるものもあります。 ボットのターン ハンドラーでは、ユーザーからメッセージを受け取ります。そこからユーザーに応答を送信できます。 ターン コンテキスト オブジェクトによって、ユーザーにメッセージを戻すためのメソッドが与えられます。 この記事では、プレーンテキスト メッセージを送信する方法について説明します。

Markdown はほとんどのテキスト フィールドでサポートされていますが、サポート状況はチャネルごとに異なる場合があります。

メッセージを送受信する実行中のボットについては、目次の一番上にあるクイックスタートを実行するか、ボットの動作方法に関するの記事を確認してください。これは、ご自身で実行する場合にご利用いただけるサンプルへもリンクされています。

Important

Bot Framework SDK と Bot Framework Emulator は GitHub にアーカイブされています。 プロジェクトが更新または保守されなくなりました。 Bot Framework SDK のサポート チケットは、2025 年 12 月 31 日の時点で提供されなくなります。

AI サービス、オーケストレーション、知識を選択してエージェントを構築するには、Microsoft 365 Agents SDK の使用を検討してください。 Agents SDK には、C#、JavaScript、または Python の言語サポートがあります。 Agents SDK の詳細については、 aka.ms/agents を参照してください。 Bot Framework SDK を使用して構築された既存のボットがある場合は、ボットを Agents SDK に更新できます。 Bot Framework SDK から Agents SDK への移行ガイダンスで、主要な変更と更新を確認します。

Microsoft Teams内で動作するように設計されたコラボレーション エージェントを構築する場合は、Teams SDK の使用を検討してください。 Teams 環境で実行されるエージェントに対して、Teams 固有の API、アダプティブ カードのサポート、組み込みの AI オーケストレーションが提供されます。 詳細については、 Teams SDK (Teams AI ライブラリ) を参照してください。

SaaS ベースのエージェント プラットフォームをお探しの場合は、 Microsoft Copilot Studio を検討してください。

テキストメッセージを送信

テキスト メッセージを送信するには、送信する文字列をアクティビティとして指定します。

ボットのアクティビティ ハンドラーで、ターン コンテキスト オブジェクトの 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);
    }
}

その他のリソース

次のステップ