Skip to content

MS_BotFramework

nishi_74322014 edited this page Aug 19, 2026 · 1 revision

Microsoft Bot Framework

概要

以下から構成される Bot を作成するためのフレームワーク。

Microsoft Bot Framework

補足(最新化 / 全体像の変化): 本ページは Bot Framework v3 時代
記録である。現在は次のように再編されている。

原文 現在
Bot Framework Portal(dev.botframework.com) Azure Bot Service(Azure リソースとして作成)
Bot Builder SDK v3 Bot Framework SDK v4(.NET / JavaScript / Python)
Bot Directory 廃止(公開ディレクトリの仕組みは無くなった)
Bot State Service 廃止(状態は自前のストレージに保存する方式へ)
Cortana / Skype 等のチャネル 一部提供終了。Teams が中心

さらに、ノーコードで作る Microsoft Copilot Studio(旧 Power Virtual Agents)が
加わり、「コードを書いてまで Bot を作るか」という選択が先に来るようになった。

Bot Server

  • Bot Builder SDK(C#・Node.js)を使って開発する。
  • Bot Server はチャット・サービスと連携し入出力を処理する部分。

Bot Builder SDK

  • Bot State Service、Bot Connector、Cognitive Service と連携するインタフェースを提供

  • ユーザ入力を理解して応答するのにインテリジェンスが必要な場合、
    別のプロダクトを使用する必要がある。

  • Bot Builder SDK は、.NET Core には対応していないが、REST API で利用可能。

補足(最新化): v4 SDK は .NET Core / .NET 対応であり、
原文の制約は解消されている。

Bot State Service

ユーザの状態を管理する。

補足(最新化): Bot State Service(v3 の状態保存 API)は廃止された。
v4 では Storage / UserState / ConversationState という抽象を通して、
Blob StorageCosmos DB
自前で保存する方式になっている。

「フレームワークが状態を持ってくれる」のをやめ、
保存先を利用者が選ぶ形に変わった、と理解するとよい。

Bot Connector

Facebook Messenger や Skype などの各チャネルから

  • 仕様に合わせて適切にデータを変換
  • 誰がどの Bot に話しかけているかを渡す

補足(Bot Connector がこの製品の本体): Bot Framework の価値は、
チャネルごとの差異を吸収するこの層にある。

Teams      ┐
LINE       │
Slack      ├──▶ [ Bot Connector ]──▶ Bot Server(1 つ作ればよい)
Web Chat   │      (共通の Activity 形式に変換)
…          ┘

各チャネルの API を個別に実装する代わりに、
共通の「Activity」というメッセージ形式でやり取りできる。
原文が後半で LINE 対応に苦労しているのは、
当時 LINE が公式チャネルに無かったためである。

Bot Directory

  • Bing や Cortana などから利用できるディレクトリに登録する。
  • Bot Directory で公開することが前提(プライベート Bot 不可)

移行メモ(最新化): Bot Directory は廃止されており、
「公開が前提」という制約は現在は存在しない
Azure Bot Service では、社内 Teams だけに公開するといった
プライベートな Bot が普通に作れる

Direct Line API(LINE と関係無いので注意)

補足: Direct Line は
**「公式チャネルが無い相手から Bot を呼ぶための汎用チャネル」**である。
自社の Web サイトやモバイルアプリに Bot を組み込む場合も、これを使う。
原文の LINE 対応も、この汎用性を利用した回避策になっている。

開発手順

  • Bot Server を実装・公開
  • Bot Directory へ登録

参考

LINE 対応

  • LINE 対応はしていないが、日本語リソースは圧倒的に LINE に関する記事が多い。
  • Direct Line API(LINE と関係無いので注意)を使用すれば、LINE などからも接続可能。
  • 以下手順、同時に、非同期化も行っている。

アカウントを用意

  • Line API のアカウント
  • Microsoft Azure のアカウント

Bot Server を実装

Bot Builder SDK を使用して Bot Server を実装

Bot Server を公開

Azure App Service として公開

Bot Directory へ登録

登録

My Bots から

  • Bot Profile を入力

    • Name
    • Bot handle
    • Description
  • Configuration で設定

    • Messaging endpoint(Azure App Service の endpoint)
    • App ID とパスワードを生成してメモに控えておく。

公開

My Bots から

  • 登録した BOT を選択
  • Direct Line を追加
  • Secret keys をメモに控えておく。

キー設定

App ID とパスワードを Bot Server に設定し Azure App Service として再公開

補足(最新化): App ID とパスワード(シークレット)を扱うこの手順は、
現在は マネージド IDAzure Managed ID)や
シングルテナント アプリでの構成が推奨されている。
秘密をメモに控えて設定に貼る、という運用は避けられるようになった。

Function App を作成する

Gateway を実装

  • Function App を使用して実装。
  • HttpTrigger-CSharp を選択。
  • LINE ---(HTTP)---> 処理 ---> Storage

Dispatcher を実装

  • Function App を使用して実装。

  • QueueTrigger-CSharp を選択。

  • Storage ---> 処理 ---(HTTP)---> Bot Connector(Direct Line) ---> Bot Server

  • Dispatcher は、

    • Bot Connector(Direct Line) への(POST リクエストでの)アクセスに、Secret keys を使用する。
    • Bot Server からのレスポンスも Bot Connector(Direct Line) 経由で
      (GET リクエストで)受け取るので、ここで LINE へのレスポンスも処理する。

補足(この構成の狙い): 原文が「同時に、非同期化も行っている」と
述べているとおり、キューを挟むことに意味がある。

LINE ──▶ Gateway(HTTP)──▶ [ Queue ] ──▶ Dispatcher ──▶ Bot Server
           ↑ 即座に 200 を返す        ↑ ここで時間のかかる処理を行う

チャット系の Webhook には短いタイムアウトがあるため、
受け口では即座に応答を返し、実処理はキュー経由で非同期に行う、
というのが定石である。
Azure Functions
HttpTrigger + QueueTrigger はこの構成に素直に対応する。

LineAPI の WebHook を設定

Gateway のエンドポイントに設定する。

参考

参考

Qiita

MSDN magazine

github

Microsoft Learn


Tags: 移行, クラウド, Azure

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally