アルパカのメモ

テキストメッセージの送受信

メッセージの受信

ユーザーが送ってきたメッセージは、以下のようにして受け取る。

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 を作る方がよさそう。