テキストメッセージの送受信
calendar_today
(最終更新:)
メッセージの受信
ユーザーが送ってきたメッセージは、以下のようにして受け取る。
var responseMessage = turnContext.Activity.Text;
メッセージの送信
ボットからシンプルなテキストを送るには、以下のようにする。
await turnContext.SendActivityAsync("Welcome!");
または、以下のようにする。
var text = "Welcome!";
var msg = MessageFactory.Text(text, text);
await turnContext.SendActivityAsync(msg);
MessageFactoryは、ボットから送るメッセージを作るためのユーティリティクラス。
添付ファイルとかボタンとか色々追加できるので、たくさん使うことになる。
「入力しています」のメッセージの送信
もし即座に返事を返せない場合、Teamsで出てくるような「○○が入力しています」のようなメッセージを返すことができる。 以下のサンプルは、ユーザーが「wait」と送ってきたときに、まず「入力しています」を送り、3秒後にメッセージを送信する。
※ Bot Framework Emulatorは非対応のためテストできない
private async Task SendTypingAsync(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);
    }
}
いろいろなメッセージ
候補を提示する

MessageFactory で作成したメッセージに SuggestedActions を追加すると、ボットのメッセージの下にユーザーが押せるボタンが出てくる。
ユーザーがボタンを押すと、ボタンに設定した値がそのままユーザーの発言として返ってくる。
var reply = MessageFactory.Text("実行したい処理を選んでください。");
reply.SuggestedActions = new SuggestedActions()
{
    Actions = new List<CardAction>()
    {
        new CardAction() { Title = "処理1", Type = ActionTypes.ImBack, Value = "処理1" },
        new CardAction() { Title = "処理2", Type = ActionTypes.ImBack, Value = "処理2" },
        new CardAction() { Title = "処理3", Type = ActionTypes.ImBack, Value = "処理3" },
    }
};
await stepContext.Context.SendActivityAsync(reply, cancellationToken);
厳密にいうと、CardAction のプロパティ Type によりボタンが押された時の動作が変わる。
参考:Add media to messages - Bot Service | Microsoft Docs
※ Teams だと候補が出てこない。Adaptive Card を作る方がよさそう。