Quantcast
Viewing all articles
Browse latest Browse all 8691

💬 Microsoft Teams 開発の初心者向けガイド その3: メッセージ・エクステンション

みなさんこんにちは〜。この記事は、Microsoft Teams 開発の初心者向けガイド第3弾になります。前回の2つのチュートリアル ( タブの開発Bot 開発)も楽しんでもらえていたらうれしいです。

今回は、Teams UI からのユーザからのアクションで検索結果やメッセージを書き出す方法について説明します。
Image may be NSFW.
Clik here to view.
3-ext1-cover-1000x420.png

Teams アプリの作成にはいくつもの方法やツールがあるのですが、このチュートリアルでは、コンセプトを学んでもらうことを重視したいので、最低限のコードと最小限のツールセットを使用しています。また、マイクロソフト Azure から 環境をセットアップすることもできますが、今回はそのプロセスを使わず、気軽に学んでもらえるようにブラウザ上でコードを実行していきます。


このチュートリアルでは、メッセージング・エクステンション (Messaging Extensions / メッセージング拡張機能)という機能をつかった開発について紹介します。

メッセージング拡張機能には、アクションと検索という 2 種類があるのですが、今回は「アクション・コマンド」(操作コマンド)について紹介します。

チームの機能: 「アクション・コマンド」

アクション・コマンドを使用すると、情報を収集または表示するためのモーダル ポップアップをユーザーに表示できます。フォームを送信すると、アプリ、つまり Web サービスは、メッセージを会話に直接挿入したり、メッセージ作成ボックスに挿入してユーザーの選択でグループにメッセージを送信できるようにしたりできます。

Image may be NSFW.
Clik here to view.
Teams action command

メッセージ・アクションをつかって、メッセージ内容をモールス コードに変換するサービスを作る!

いまから作成していくアプリは、ユーザーが選んだ任意のメッセージに含まれるテキストを抽出してモールスコードに変換する、というものです。

アプリの動作は次のとおりです。

  1. ユーザーがメッセージをマウスオーバーしてメッセージメニューを開き、「そのほかの操作」(More actions) メニューからモールス bot を選択
  2. ユーザーからの操作がトリガーされると、ペイロードがメッセージングエンドポイントに送信。 (/api/messages)
  3. fetchTask の呼び出し。ここでメッセージ テキスト データが抽出されます。
  4. ポップアップ ダイアログが表示されます。ユーザーは必要に応じてテキストコンテンツを編集し、送信
  5. アプリは、テキストをモールスコードに変換し、コンテンツを返信として表示
  6. ユーザーは結果をクライアントに新規メッセージとして送信

結果は次のようになります。
Image may be NSFW.
Clik here to view.
morsebot-final.gif

📓 必須科目

Teams にアプリをインストールできるようにするには、組織の管理者がアクセス許可を付与する必要があります。
それ以外の場合は、無料のMicrosoft 365 開発者プログラムに登録しましょう。このプログラムでは、開発者テナントのサンドボックス、サンプル データ パックに付属しているモック ユーザーデータなどが使え、サブスクリプションはなどでもリニューアルできます。

  • 開発の許可がある Teams テナント、または開発専用テナント (M365 開発者プログラムにサインアップしよう)
  • App Studio - チームクライアントのアプリメニューからアプリを探し、テナントのワークスペースにインストールしてね
  • JavaScript の基礎知識

👾 このチュートリアルで使用する技術

アクションの構築

🎏 コード サンプルの取得

このチュートリアル シリーズでは、プロジェクトのコードのホスティングと実行を簡略化するために、サードパーティのツール、Glitchを使用しています。

Glitch は、node.jsコードを記述して実行できるWebベースのIDEなので、少なくとも今のところ、localhostのトンネル、デプロイを気にすることなく、Teamsアプリ開発の概念と基本を学ぶことに集中できます。

まず、この Glitch プロジェクトの remixができるリンク、または下のボタンをクリックしてください。リミックスとは GitHub で言うところのリポジトのをフォークのようなようなもので、自分用のプロジェクトのコピーが生成されるため、元のコードに影響なく自分用に好きなように変更できます。
Image may be NSFW.
Clik here to view.
Remix on Glitch

さて、自分専用プロジェクトのリポを取得すると、自動的に独自のWebサーバーURLを取得します。たとえば、生成されたプロジェクトは、3単語ほどでできたランダムな語で構成されています。たとえばそのプロジェクト名がachieved-diligent-bellだったら、ウェブサーバーのURLは https://achieved-diligent-bell.glitch.meになります。必要に応じて名前をカスタマイズすることもできます。

⚙️ App Configuration: App Studioを使ってアプリ マニフェストを作成

Teams アプリパッケージの基本については前のチュートリアルを参照してください。

🎛 App Studio を使う

App Studio 上部の Manifest Editor(マニフェスト エディター) タブをクリックし、Create a new app(新しいアプリの作成])を選択します。必要事項を入力してください。

そして App ID を生成してください。
Image may be NSFW.
Clik here to view.
exts00-app-studio-ext.png

🔖 メッセージ・エクステンションの設定

左側のメニューから、 Capabilities > Massaging Extensionsを選択
Image may be NSFW.
Clik here to view.
exts01-app-studio-ext.png

先に進み、設定するボタンをクリック。
Image may be NSFW.
Clik here to view.
exts02-app-studio-ext1.png

名前を付けます。

🔐 App credentials

ボット名の横にある ID ('2cd53e8a-e698-4exx-...' のように見える) をコピーし、隠しファイルである.envファイルに環境変数として貼り付けます ('.env-sample' の名前を '.env' に変更します)。

App Passwordsの下で新規パスワードを生成し、それをコピーし、これも .envファイルに貼り付けます。

これらの情報は、bot アダプターを初期化するために使用されます。(index.js を参照してください。
Image may be NSFW.
Clik here to view.
exts03-app-studio-ext2.png

(上記の画面画像のステップ3は、このすぐ後に説明します。)

🎬 アクションの設定

Messaging Endpointで、サーバーを入力します。今回は、Glitch サーバ上でコードを動かしているので、 https://[your project].glitch.me/api/messagesのように自分のプロジェクト名が入った URL がサーバとなります。

 Command までスクロールし [Add] をクリック

ダイアログ ボックスで
1. Allow users to trigger actions in external service...を選択
2. Fetch a dynamic set of parameters from your botを選択
3. command IDtitle textを入力。 Massageチェックボックスを選択 (他のチェックボックスが事前に選択されている場合は、そのチェックボックスをオフにします。) 残りは空白のままにして保存します。
Image may be NSFW.
Clik here to view.
exts04a-app-studio-ext3.png

Image may be NSFW.
Clik here to view.
exts04b-app-studio-ext4.png

Image may be NSFW.
Clik here to view.
exts04c-app-studio-ext5.png

📦 App manifest パッケージをインストール

Finish > Test and distributeへ行きます。

エラーが発生した場合は、それを修正してください、そうでなければ、Installをクリックしてください。
Image may be NSFW.
Clik here to view.
exts05-app-studio-install.png

また、'manifest.json' を含む zip ファイルと、後でインストールまたは配布する 2 つのアイコン イメージをダウンロードすることもできます。

コード サンプルをそのままリミックスしている限り、この bot は既に動作するはずでが、試してみる前に、これがどのようにコーディングされているかを簡単に説明してみます。

🤖 Microsoft Bot Framework

マイクロソフトボットフレームワークは、インテリジェントなエンタープライズグレードのボットを構築できるオープンソースSDKです。

この SDK は、Teams だけでなく、Web やモバイル チャット、Skype、Facebook、Amazon Alexa、Slack、Twilio など、幅広い種類のチャット ボットで動作するように設計された強力なプラットフォームです。

🔧 Initiating the bot service

まず、Glitch コード サンプル Repo に 2 つの JS ファイルがあります。 index.js and bots.jsです。

ここでは、Express を使用して HTTP サーバーを設定し、HTTP リクエストをルーティングしています。サービスを開始する方法は、前の Bots チュートリアルと同じですが、これは初期化とボット アダプタの作成について、もう一度要約したコードが下のようになります。

// Import bot servicesconst{BotFrameworkAdapter}=require('botbuilder');// Bot's main dialogconst{ReverseBot}=require('./bot');// App credentials from .envconstadapter=newBotFrameworkAdapter({appId:process.env.MicrosoftAppId,appPassword:process.env.MicrosoftAppPassword});// Create the main dialogconstmyBot=newMorseBot();

注:この例では、私はボットビルダーのバージョン4.10.0を使用しています。コードが期待どおりに動作しない場合は、使用しているバージョンを確認してください!

🦉 Bot ロジックへの要求の転送

Express を使用して、着信リクエストをリッスンするルーティングを処理します。

app.post('/api/messages',(req,res)=>{adapter.processActivity(req,res,asynccontext=>{awaitmyBot.run(context);});});

前の手順で、 App Studio で URL を設定しました。/api/messagesは、クライアント要求に応答するアプリケーションのエンドポイント URL です。

🙋‍♀️ リクエストの処理

エンドポイントで要求を受信し、ボット ロジックに転送すると、アプリは要求のコンテクストを受け取り、bots.jsでカスタム応答を作成します。

要求に対する適切なハンドラーを作成するために拡張された TeamsActivityHandlerを参照してください。

classReverseBotextendsTeamsActivityHandler{// ユーザからのアクションによってトリガーhandleTeamsMessagingExtensionFetchTask(context,action){/*
         ここで表示するダイアログのコンテンツを adaptive card UI (modal dialog)を作成。
         ユーザがダイアログを確認して送信。
    */}// FetchTask からユーザによって送信されたらトリガーhandleTeamsMessagingExtensionSubmitAction(context,action){// display the result }

TeamsActivityHandlerは、メッセージ イベント (*例えば onMembersAddedメソッドが会話にメンバーが追加されるたびに呼び出される) などのメッセージを処理し、返信を送信するチーム固有のクラスです。

ここでは、ユーザがメッセージに対しアクションを起こすと、handleTeamsMessagingExtensionFetchTaskがトリガーされ、ボットが元のメッセージに関する情報を受け取ります。

これらについてはドキュメント「タスクモジュールを作成して送信する」でもっと詳しく学ぶことができます。

📇 アダプティブ カードを使用したモーダル ダイアログの表示

ダイアログ UI は、 Microsoft のオープン ソースである アダプティブ カードを使って JSON で UI を構築することができます。アダプティブ カードは、Teams の他、Outlook のアクション可能なメッセージ、Cortana スキルなどさまざまな Microsoft ファミリーのサービスの開発で使うことができます。

handleTeamsMessagingExtensionFetchTaskが呼び出されると、メッセージ コンテンツ テキストを取得し、応答としてダイアログとしてアダプティブ カードに表示します。
Image may be NSFW.
Clik here to view.
adaptive-card-message-action.png

アダプティブ カードとコンテンツを定義するには:

constcard={type:'AdaptiveCard',version:'1.0'};card.body=[{type:'TextBlock',text:'The message to be encoded to Morse code:',weight:'bolder'},{id:'editedMessage',type:'Input.Text',value:content},];card.actions=[{data:{submitLocation:'messagingExtensionFetchTask'},title:'Encode to Morse!',type:'Action.Submit'}];constadaptiveCard=CardFactory.adaptiveCard(card);return{task:{type:'continue',value:{card:adaptiveCard}}};

抽出されたメッセージテキストを type: 'Input.Text'で表示し、ユーザーがモールスコード化するテキストを編集できるようにします。

完全なコードを表示するには、グリッチのコード サンプルの bot.jsファイルを参照してください。

📮 ユーザーの送信を処理する

ユーザーがタスク モジュールを送信すると、handleTeamsMessagingExtensionSubmitActionがトリガーされ、Web サービスはコマンド ID とパラメーター値が設定されたオブジェクトを受け取ります。

このサンプル コードでは、カスタム データ editedMessageが存在するかどうかだけを確認します。その場合は、値(ここでは文字列) を取得し、それをモールスに変換して、新しいメッセージとして作成するコンテンツを表示します。

asynchandleTeamsMessagingExtensionSubmitAction(context,action){if(action.data.editedMessage){consttext=action.data.editedMessage;constmorseText=awaitencodeToMorse(text);return{composeExtension:{type:'result',attachmentLayout:'list',attachments:[// the message UI component here]}}}

bots.jsに示されているコードサンプルでは、結果メッセージを作成するために Bot Framework に付属のサムネイルカードと呼ばれるシンプルなUI カードを使用していますが、もちろん前述のアダプティブカードも使用できます。

🤖💬 メッセージアクションを試してみる

それでは、アクションを試してみましょう!
Teams クライアントに移動し、リッチ フォーマットや画像ではない、シンプルテキストで構成されたメッセージのいずれかをクリックしてみてください。

すべてが期待どおりに動作する場合は、任意のテキスト メッセージをモールス コードに変換できるはずです。

Image may be NSFW.
Clik here to view.
more-actions-ja.png

🎉

チュートリアルを楽しんでいただけましたか?モールス・コードへの変換は正直、あまり普段役に立つものではないでしょうけれど、みなさんはもっと良いユースケースを見つけて素晴らしいアプリを作成することを願っています!

次のチュートリアルでは、検索コマンドである別の種類のメッセージング拡張機能を構築する方法について説明します。次回お会いしましょう 👋

🇺🇸 この記事を英語で読みたいという方は dev.toのリンクからどうぞ!

📚 Learn more


Viewing all articles
Browse latest Browse all 8691

Trending Articles