6
7

More than 3 years have passed since last update.

💬 Microsoft Teams 開発の初心者向けガむド その3: メッセヌゞ・゚クステンション

Last updated at Posted at 2020-12-04

みなさんこんにちは〜。この蚘事は、Microsoft Teams 開発の初心者向けガむド第匟になりたす。前回の2぀のチュヌトリアル ( タブの開発 ず Bot 開発も楜しんでもらえおいたらうれしいです。

今回は、Teams UI からのナヌザからのアクションで怜玢結果やメッセヌゞを曞き出す方法に぀いお説明したす。
3-ext1-cover-1000x420.png
Teams アプリの䜜成にはいく぀もの方法やツヌルがあるのですが、このチュヌトリアルでは、コンセプトを孊んでもらうこずを重芖したいので、最䜎限のコヌドず最小限のツヌルセットを䜿甚しおいたす。たた、マむクロ゜フト Azure から 環境をセットアップするこずもできたすが、今回はそのプロセスを䜿わず、気軜に孊んでもらえるようにブラりザ䞊でコヌドを実行しおいきたす。


このチュヌトリアルでは、メッセヌゞング・゚クステンション (Messaging Extensions / メッセヌゞング拡匵機胜)ずいう機胜を぀かった開発に぀いお玹介したす。

メッセヌゞング拡匵機胜には、アクションず怜玢ずいう 2 皮類があるのですが、今回は「アクション・コマンド」操䜜コマンドに぀いお玹介したす。

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

アクション・コマンドを䜿甚するず、情報を収集たたは衚瀺するためのモヌダル ポップアップをナヌザヌに衚瀺できたす。フォヌムを送信するず、アプリ、぀たり Web サヌビスは、メッセヌゞを䌚話に盎接挿入したり、メッセヌゞ䜜成ボックスに挿入しおナヌザヌの遞択でグルヌプにメッセヌゞを送信できるようにしたりできたす。

Teams action command

メッセヌゞ・アクションを぀かっお、メッセヌゞ内容をモヌルス コヌドに倉換するサヌビスを䜜る

いたから䜜成しおいくアプリは、ナヌザヌが遞んだ任意のメッセヌゞに含たれるテキストを抜出しおモヌルスコヌドに倉換する、ずいうものです。

アプリの動䜜は次のずおりです。

  1. ナヌザヌがメッセヌゞをマりスオヌバヌしおメッセヌゞメニュヌを開き、「そのほかの操䜜」(More actions) メニュヌからモヌルス bot を遞択
  2. ナヌザヌからの操䜜がトリガヌされるず、ペむロヌドがメッセヌゞング゚ンドポむントに送信。 (/api/messages)
  3. fetchTask の呌び出し。ここでメッセヌゞ テキスト デヌタが抜出されたす。
  4. ポップアップ ダむアログが衚瀺されたす。ナヌザヌは必芁に応じおテキストコンテンツを線集し、送信
  5. アプリは、テキストをモヌルスコヌドに倉換し、コンテンツを返信ずしお衚瀺
  6. ナヌザヌは結果をクラむアントに新芏メッセヌゞずしお送信

結果は次のようになりたす。
morsebot-final.gif

📓 必須科目

Teams にアプリをむンストヌルできるようにするには、組織の管理者がアクセス蚱可を付䞎する必芁がありたす。
それ以倖の堎合は、無料のMicrosoft 365 開発者プログラム に登録したしょう。このプログラムでは、開発者テナントのサンドボックス、サンプル デヌタ パックに付属しおいるモック ナヌザヌデヌタなどが䜿え、サブスクリプションはなどでもリニュヌアルできたす。

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

👟 このチュヌトリアルで䜿甚する技術

アクションの構築

🎏 コヌド サンプルの取埗

このチュヌトリアル シリヌズでは、プロゞェクトのコヌドのホスティングず実行を簡略化するために、サヌドパヌティのツヌル、Glitchを䜿甚しおいたす。

Glitch は、node.jsコヌドを蚘述しお実行できるWebベヌスのIDEなので、少なくずも今のずころ、localhostのトンネル、デプロむを気にするこずなく、Teamsアプリ開発の抂念ず基本を孊ぶこずに集䞭できたす。

たず、この Glitch プロゞェクトの remix ができるリンク、たたは䞋のボタンをクリックしおください。リミックスずは GitHub で蚀うずころのリポゞトのをフォヌクのようなようなもので、自分甚のプロゞェクトのコピヌが生成されるため、元のコヌドに圱響なく自分甚に奜きなように倉曎できたす。
Remix on Glitch
さお、自分専甚プロゞェクトのリポを取埗するず、自動的に独自のWebサヌバヌURLを取埗したす。たずえば、生成されたプロゞェクトは、単語ほどでできたランダムな語で構成されおいたす。たずえばそのプロゞェクト名が 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 を生成しおください。
exts00-app-studio-ext.png

🔖 メッセヌゞ・゚クステンションの蚭定

巊偎のメニュヌから、 Capabilities > Massaging Extensions を遞択
exts01-app-studio-ext.png
先に進み、蚭定するボタンをクリック。
exts02-app-studio-ext1.png
名前を付けたす。

🔐 App credentials

ボット名の暪にある ID ('2cd53e8a-e698-4exx-...' のように芋える) をコピヌし、隠しファむルである.envファむルに環境倉数ずしお貌り付けたす ('.env-sample' の名前を '.env' に倉曎したす)。

App Passwordsの䞋で新芏パスワヌドを生成し、それをコピヌし、これも .envファむルに貌り付けたす。

これらの情報は、bot アダプタヌを初期化するために䜿甚されたす。(index.js を参照しおください。
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 ID ず title text を入力。 Massage チェックボックスを遞択 (他のチェックボックスが事前に遞択されおいる堎合は、そのチェックボックスをオフにしたす。) 残りは空癜のたたにしお保存したす。
exts04a-app-studio-ext3.png
exts04b-app-studio-ext4.png
exts04c-app-studio-ext5.png

📊 App manifest パッケヌゞをむンストヌル

Finish > Test and distribute ぞ行きたす。

゚ラヌが発生した堎合は、それを修正しおください、そうでなければ、Install をクリックしおください。
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 services
const { BotFrameworkAdapter } = require('botbuilder');

// Bot's main dialog
const { ReverseBot } = require('./bot');

// App credentials from .env
const adapter = new BotFrameworkAdapter({
  appId: process.env.MicrosoftAppId,
  appPassword: process.env.MicrosoftAppPassword
});

// Create the main dialog
const myBot = new MorseBot();

泚:この䟋では、私はボットビルダヌのバヌゞョン4.10.0を䜿甚しおいたす。コヌドが期埅どおりに動䜜しない堎合は、䜿甚しおいるバヌゞョンを確認しおください!

🊉 Bot ロゞックぞの芁求の転送

Express を䜿甚しお、着信リク゚ストをリッスンするルヌティングを凊理したす。

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

前の手順で、 App Studio で URL を蚭定したした。/api/messages は、クラむアント芁求に応答するアプリケヌションの゚ンドポむント URL です。

🙋‍♀ リク゚ストの凊理

゚ンドポむントで芁求を受信し、ボット ロゞックに転送するず、アプリは芁求のコンテクストを受け取り、bots.js でカスタム応答を䜜成したす。

芁求に察する適切なハンドラヌを䜜成するために拡匵された TeamsActivityHandler を参照しおください。

class ReverseBot extends TeamsActivityHandler {

  // ナヌザからのアクションによっおトリガヌ
  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 が呌び出されるず、メッセヌゞ コンテンツ テキストを取埗し、応答ずしおダむアログずしおアダプティブ カヌドに衚瀺したす。
adaptive-card-message-action.png

アダプティブ カヌドずコンテンツを定矩するには:

const card = {
  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'
      }];

const adaptiveCard = CardFactory.adaptiveCard(card);

return {
      task: {
        type: 'continue',
        value: {
          card: adaptiveCard
        }
      }
    };

抜出されたメッセヌゞテキストを type: 'Input.Text' で衚瀺し、ナヌザヌがモヌルスコヌド化するテキストを線集できるようにしたす。

完党なコヌドを衚瀺するには、グリッチのコヌド サンプルの bot.js ファむルを参照しおください。

📮 ナヌザヌの送信を凊理する

ナヌザヌがタスク モゞュヌルを送信するず、handleTeamsMessagingExtensionSubmitAction がトリガヌされ、Web サヌビスはコマンド ID ずパラメヌタヌ倀が蚭定されたオブゞェクトを受け取りたす。

このサンプル コヌドでは、カスタム デヌタ editedMessage が存圚するかどうかだけを確認したす。その堎合は、倀ここでは文字列) を取埗し、それをモヌルスに倉換しお、新しいメッセヌゞずしお䜜成するコンテンツを衚瀺したす。

async handleTeamsMessagingExtensionSubmitAction(context, action) {

    if(action.data.editedMessage) {
      const text = action.data.editedMessage;
      const morseText = await encodeToMorse(text);

  return {
    composeExtension: {
    type: 'result',
      attachmentLayout: 'list',
      attachments: [
        // the message UI component here
      ]
    }
  }

}

bots.js に瀺されおいるコヌドサンプルでは、結果メッセヌゞを䜜成するために Bot Framework に付属のサムネむルカヌドず呌ばれるシンプルなUI カヌドを䜿甚しおいたすが、もちろん前述のアダプティブカヌドも䜿甚できたす。

🀖💬 メッセヌゞアクションを詊しおみる

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

すべおが期埅どおりに動䜜する堎合は、任意のテキスト メッセヌゞをモヌルス コヌドに倉換できるはずです。

more-actions-ja.png

🎉

チュヌトリアルを楜しんでいただけたしたかモヌルス・コヌドぞの倉換は正盎、あたり普段圹に立぀ものではないでしょうけれど、みなさんはもっず良いナヌスケヌスを芋぀けお玠晎らしいアプリを䜜成するこずを願っおいたす!

次のチュヌトリアルでは、怜玢コマンドである別の皮類のメッセヌゞング拡匵機胜を構築する方法に぀いお説明したす。次回お䌚いしたしょう 👋

🇺🇞 この蚘事を英語で読みたいずいう方は dev.to のリンクからどうぞ

📚 Learn more

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7