Activity オブジェクトと MessageFactory
Bot Builder SDK によるボット実装において、ユーザーにメッセージを送るには TurnContext クラス の sendActivity() メソッドを使用します。
下記は、単純なテキストメッセージを送る例です。
await context.sendActivity('Hello!');
sendActivity() の第一引数には、このように文字列を渡すことができますが、その名の通り Activity オブジェクトを渡すこともできるようになっています。
Activity オブジェクトを使うと、単純なテキストよりもリッチな形式で表示を行うことができます(どう表示されるかは各チャンネルの実装によりますが)。
Activity インタフェースは botframework-schema モジュール で定義されていますが、このインタフェースを意識してオブジェクトを作成することはあまりありません。
というのも、いろいろな用途の Activity オブジェクトを生成するためのファクトリーである MessageFactory クラス が用意されているからです。
例えば、MessageFactory#text() は単純なテキストメッセージを送るための Activity オブジェクトを生成します。
// const { MessageFactory } = require('botbuilder');
const msg = MessageFactory.text('Hello!');
await context.sendActivity(msg);これは実は下記のようにするのと同じです。
await context.sendActivity('Hello!');TurnContext#sendActivity() に直接文字列を渡した場合は、内部で前者のような MessageFactory.text() による Activity 生成が行われています。
単純なテキストを送るだけであれば、sendActivity('Hello') としてしまうのが早いでしょう。
MessageFactory でリッチなメッセージを作成する
MessageFactory が提供するファクトリメソッドを使って、リッチなメッセージを送る例をいくつか紹介します。
ここでは、Bot Framework Emulator の表示例を載せておきます。
画像・動画を表示する -- contentUrl()

const msg = MessageFactory.contentUrl(
'https://maku.blog/assets/img/site-logo.png', // 画像や動画のURL
'image/png', // 画像や動画のMIMEタイプ
'タイトル', // タイトル(画像が見つからないときの代替テキスト)
'説明文' // 説明文(オプション)
);
await context.sendActivity(msg);上記の例では png 画像を表示していますが、mp4 などの動画を指定することもできます。 Youtube のアドレスをそのまま記述してもいいみたいです。

const msg = MessageFactory.contentUrl(
'https://youtu.be/Tu_c1PfJ0nE',
'video/mp4',
'上野さんは不器用'
);
await context.sendActivity(msg);Bot Framework Emulator では埋め込みで動画再生できましたが、Slack ではテキストリンクになりました(上記の例では“上野さんは不器用”というテキスト)。
選択肢を表示する -- suggestedActions()

const msg = MessageFactory.suggestedActions(
['Red', 'Blue', 'Yellow'],
'好きな色を選んでください'
);
await context.sendActivity(msg);選択肢のボタンをクリック(あるいはタップ)すると、ユーザーがその文字列をタイプしたのと同様にメッセージが送られます。 ボットが想定する入力が限定されているシーンでは、このように選択肢を表示してあげるのがよいです。
関連記事
- チャットボット: Bot Builder SDK の Dialog で会話の流れをデザインする (1) ダイアログの基本
- チャットボット: Bot Builder SDK で会話の状態を保存する (BotState)
- チャットボット: ユーザーの参加/離脱のイベントをハンドルする
- チャットボット: Bot Builder SDK で会話の状態を保存する (Storage)
- チャットボット: ActivityHandler でボットのイベントハンドラ実装を簡略化する
- LUIS (4) botbuilder-ai ライブラリを使って LUIS の API を利用する
- チャットボット: 作成したチャットボットを Slack に接続する