Slackボットの作り方 Mendix | Mendix

メインコンテンツへスキップ

Slackボットの作り方 Mendix

Slackボットの作り方 Mendix

みなさんこんにちは。ようこそ。 Mendixここでの私の役割の大部分は、 Mendix コミュニティSlackチャンネル(ここをクリック!).

当然のことながら、私たちのワークスペースには素晴らしいツールがいくつかインストールされています。それで私は考えました。Slackボットを作るには具体的に何が必要で、それを Mendix XNUMX人?

オンラインで調べたところ、見つけた例はすべて非常に複雑で、Java、Python、Javascriptのいずれかの高度なコーディングスキルが必要でした。その方法で進めることもできましたが、私はローコードでこれを実行することに決めました。しかし、私は粘り強く取り組んでよかったと思っています。今では、これが実際にどれほど簡単であるか、そして皆さんもSlackボットを次のように作成できることを皆さんに伝えることができます。 Mendix 他には何もありません!

今日は何を作りますか?

このチュートリアルでは、RESTful API を使用してメッセージを送信できる Slack ボットを作成します。また、チャンネル内のイベントにも登録されるため、ボットはチャンネル内で送信されたメンションや特定のキーワードに返信できるようになります。

始める

始める前に、SlackにサインアップしてSlackワークスペースを設定し、ボットを追加できるチャンネルがあることを確認してください。さらに、Slackはアプリの公開されたRESTサービスにメッセージを投稿するため、開発中にアプリをローカルでテストするには、ローカルホストをWebに公開するトンネリングツールを使用することをお勧めします(私は ングロック このため)。

Slack でボットを設定する

始めるには、 https://api.slack.com/apps?new_classic_app=1 クリックして "新しいアプリを作成する"。

選択 "ゼロから” をクリックしてボットに名前を付けます。ここでは新しいボットを作成し、メッセージボットと名付けます。アプリを開発するために作成した Slack ワークスペースを選択し、「アプリを作成する"。

アプリが作成されたら、「OAuth と権限ここで必要なのはボットのトークンなので、「ワークスペース用の OAuth トークン クリック 「職場に設置する」。 ここで、ボットのスコープを追加する必要があると表示されます。ページを下に進むと、「ボットトークンスコープ」をクリックします。OAuthスコープを追加する”私たちが欲しいのは チャット:書き込み、 または用 パブリックチャネル あなたは付け加えられます チャット:write.public.

これにより、ボットが実際にチャットにメッセージを投稿する権限が与えられます。実行しようとしている内容に応じて、他のスコープを追加する必要がある場合があります。エラーが発生した場合は、これらを確認してください。ボットに実行させたいアクションに必要なスコープがわかるはずです。

OAuthに戻ってクリックします 「職場に設置」 もう一度。次に「許可」をクリックすると、ボット トークンが生成されます。

ボットトークンは「 キスブ「-Your_Token_Vaue」。

これを入手したら、チャンネルIDと一緒に使用して、ボットとしてチャンネルにメッセージを送信できます。これを行うには、簡単なアプリを用意しました。ここで構築するのは、SlackのAPIを使用してボットとしてメッセージを送信するためのメソッドを追加することです。

ボットとしてメッセージを送信する

このビルドは、HTTPメソッドまたはREST呼び出し(Java、JavaScript、Pythonなど)を使用できるほとんどの従来のプログラミングスタックで動作します。 Postman アプリの開発を始める前に、Slackでアプリの認証システムを作成し、メッセージを投稿するためのAPIを統合し、Slackがチャンネル内のイベントにメッセージを投稿できるRESTエンドポイントを公開する必要があります。

イベントにはメッセージ、反応、チャンネル内のメンションなどがあり、SlackイベントはWebフックに似ていると考えてください。

サービスにメッセージを送信するには、サービスのエンドポイントを指定する必要があります。この場合、 https://slack.com/api/chat.postMessage

エンドポイントでは HTTP メソッドのタイプが POST として記述されているため、ここでも必ず POST を使用する必要があります。

ヘッダーも必要になります。ヘッダーを追加したいのは コンテンツタイプ そしてこれは「アプリケーション/json'次に、別のヘッダーが必要です。 Authorization、ここで先ほど取得したボットのトークンを使用できます。このヘッダーの値は「持ち主、次にa 空間 ' '、そしてあなたの トークン値.

メッセージを送信するには、POST HTTPメソッドなので、これにJSONボディを提供する必要があります。以下は使用する簡略化された構造です。完全なAPIドキュメントページを確認してください。 こちら.

{
  “channel”:”{1}”,
  “text”:”{2}”
}

Studio Proでは、 追加の中括弧{ リクエストの前に。

このリクエストは必要最低限​​の要素にまで削ぎ落とされています。文字列であるチャネルと、同じく文字列であるテキストだけです。他にも、添付ファイルやアイコンなど、使えるオプションはたくさんあります。ドキュメントのページをチェックしていろいろ試してみてください。ここではプレースホルダーを使っていますが、これはマイクロフローからリクエストに標準の値を渡すためです。 Mendix REST アクション。

応答が返されますが、ここではそれを処理しません。代わりに、アプリを実行してテストすることができます。成功した場合は、このマイクロフローを呼び出すと、チャネルにメッセージが表示されます。

メッセージの送信をテストするには、Slack チャンネルの URL (チャンネルの URL の最後の「/」の後の最後の値) から取得できるチャンネル ID が必要です。その後、ボットとして最初のメッセージを送信できます。最初にボットがチャンネルに追加されていることを確認する必要があることに注意してください。これを行うには、チャンネルでボットの @ メンションを使用して追加するだけです。

メッセージはあなたの Mendix このマイクロフローを実行するたびに、アプリが Slack に追加され、ボットが送信したかのようにチャンネルに表示されます。

チャンネル内のイベントにアプリを登録する

Slackがメッセージを投稿するには Mendix アプリでイベントを有効にするには、Slack ボットの設定でイベントを有効にする必要があります。この機能を有効にすると、Slack はアプリの公開 REST サービスに更新を投稿します。これを使用して、ユーザーがチャンネルを使用するときにトリガーする可能性のあるさまざまな種類のイベントを処理するロジックを実装できます。特定のイベントをサブスクライブして特定のエンドポイントを設定するか、すべての更新を同じエンドポイントに投稿して、各イベントを処理するための独自のロジックを組み込むことができます。たとえば、誰かがメッセージに反応したときや新しいユーザーがチャンネルに参加したときにボットに何かを実行させるのに適しています。私のビルドでは、イベントエンドポイントを 1 つだけ追加し、公開 REST サービスによって呼び出されるマイクロフローですべてのロジックを処理しました。 Mendix アプリ

これを行うには、api.slack.com の「イベントサブスクリプション」に移動します。

「イベントの有効化」をオンにすると、リクエスト URL のフィールドが表示されます。ここで、先ほど説明したツールを使用してトンネルを開く必要があります。NGROK ツールは、ローカル ホストから安全な接続を開き、それを安全な方法で利用可能なエンドポイントとして Web に公開します。

ファイルエクスプローラーを開き、ダウンロードしたngrok.exeファイルを見つけます。次に、このexeファイルをターミナルまたはコマンドプロンプトで開きます。exeファイルの[開く]をクリックしてターミナルで開くこともできます。次に、「ngrok http {MENDIXアプリのポート番号}」、私は通常ポート8080をデフォルトとして使用します Mendix アプリの設定ですが、任意のポート番号を使用しても動作します。例:ングロク http 5000” は、あなたの Mendix アプリはポート 5000 でも実行されるように設定されています。

Enter キーを押すと、ngrok がエンドポイントを開き、次のような画面が表示されます。

これにより、HTTP エンドポイントと HTTPS エンドポイントの両方が開かれることに注意してください。Slack では HTTPS の使用が必須です。

イベントの処理 Mendix

これで、Slack で使用できるライブ エンドポイントができましたが、公開された REST サービスを設定した後で、これに戻ってくる必要があります。

Studio Pro に戻り、プロジェクト エクスプローラーを右クリックして、「その他」の下に公開された REST サービスを追加することを選択します。

サービスに名前を付けます。私の場合は「SlackBot」と名付けました。[OK]をクリックします。

次に、「SlackEvent」というリソースをサービスに追加し、「OK」をクリックします。

次に、サービスに操作を追加します。ここで、API メソッド (GET、POST、PUT、PATCH、DELETE) を定義し、独自の操作パスを構成し、エンドポイントのロジックを処理するマイクロフローを構成します。

操作パスを設定する必要はありません。デフォルトではエンドポイントは次のようになります。

https://{LocalHost}/rest/{Service_Name}/{Version_Number}/{Resource_Name}/{Operation_Path}

操作を設定する方法の例を次に示します。

これで、リクエストを受け入れることができる有効な URL ができましたが、すべてのイベント タイプ (認証) を処理できるようになるまでにはまだ作業が必要です。

認証

最初は少し戸惑いましたが、実際にはかなり簡単です。Slack にイベント エンドポイントを追加すると、次に示すように、API はリクエスト本文に「チャレンジ」値を含むチャレンジをエンドポイントに送信します。

{
  "token":"your_token",
  "challenge":"your_ChallangeValue",
  "type":"url_verification"
}

最初に呼び出されたときに、フローの開始時にこのチャレンジ文字列を相手に送り返すだけです。

Slack のイベントの RequestURL を設定する

すべてが正しければ、Slack イベント サブスクリプション ページに追加できる URL を作成できます。URL は NGROK https エンドポイントと、公開されたサービスのサービス エンドポイントを組み合わせたものである必要があります。

何かのようなもの: https://{NGROK_HTTPS_URL}/{Your_Published_Rest_Operation}

私の最終的な結果は次のようになります:

https://ff98-86-181-134-55.ngrok.io/rest/slackbot/v1/SlackEvent/Event

NGROK は開発専用であるため、2 時間ごとにタイムアウトします。タイムアウト後は、ローカルホストの新しい URL を生成する必要があります。本番環境では、この作業は不要になり、クラウド URL をそのまま使用できます。

この値をイベント ページのリクエスト URL として設定できます。成功した場合、Slack はエンドポイントを検証したことを通知します。

何か問題が発生した場合、マイクロフローを通常通りデバッグし、 REST消費 の三脚と REST 公開 ログ レベルは、コンソール経由で何が壊れているかをより詳しく把握するのに役立つ場合もあります。

ボットのアクションをカスタマイズする前に最後に行う必要があるのは、ボットが自身を認識するようにすることです。そうしないと、無限ループが発生する可能性があります。チャネル内でのボット自身のアクティビティをフィルター処理しないと、ボットがグループにメッセージを投稿するたびに、ボットが自身をトリガーする可能性があります。

これを行うには、Slack がアプリの REST サービスに提供するリクエスト ペイロードをインポートする必要があります。ペイロードは次のようになります。

{
 "token":"dKyT4vmA1NJLt6vq8o1WurMd",
 "team_id":"T02LUP42T19",
 "api_app_id":"A02MJE1059N",
 "event":{
   "bot_id":"B02NK4L1XHN",
   "type":"message",
   "text":"Hello from Mendix",
   "user":"U02MEPHFY2K",
   "ts":"1637273612.003700",
   "team":"T02LUP42T19",
   "bot_profile":{
    "id":"B02NK4L1XHN",
    "deleted":false,
    "name":"message bot",
    "updated":1637253238,
    "app_id":"A02MEP8D37Z",
    "icons":{
     "image_36":"https://a.slack-edge.com/80588/img/plugins/app/bot_36.png",
     "image_48":"https://a.slack-edge.com/80588/img/plugins/app/bot_48.png",
     "image_72":"https://a.slack-edge.com/80588/img/plugins/app/service_72.png"
       },
      "team_id":"T02LUP42T19"
     },
    "channel":"C02LRPR0XGD",
    "event_ts":"1637273612.003700",
    "channel_type":"channel"
   },
   "type":"event_callback",
   "event_id":"Ev02MGFCNHP1",
   "event_time":1637273612,
   "authorizations":[
    {
     "enterprise_id":null,
     "team_id":"T02LUP42T19",
     "user_id":"U02LUPJ8T4J",
     "is_bot":true,
     "is_enterprise_install":false
    }
  ],
  "is_ext_shared_channel":false,
  "event_context":"4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUMDJMVVA0MlQxOSIsImFpZCI6IkEwMk1KRTEwNTlOIiwiY2lkIjoiQzAyTFJQUjBYR0QifQ"
}

JSON構造を作成し、JSONを貼り付けてRをクリックします。新たに 構造セクションで、「OK」をクリックしてウィンドウを閉じることができます。

次に、インポート マッピングを作成し、スキーマ ソースで、作成した JSON 構造を選択します。必要な詳細をすべて取得するには、すべてのフィールドが選択されていることを確認するか、必要なものだけを選択します。

[OK] をクリックしてウィンドウを閉じ、マッピング エディターの左上で [自動的にマップする] を選択します。

次のように表示されます。

最後に、このマッピングを使用して HTTPRequest をインポートし、メッセージを投稿したユーザーがボットかどうかを確認するチェックを追加します。ボットの場合は何もせずに空を返します。

これで、どんなイベントでも好きなように処理できるようになりました。私がすぐに試したのは、 含まれています の三脚と もう完成させ、ワークスペースに掲示しましたか? キーワードを使用してメッセージの内容を確認します。この方法では、必要な数の排他的分割を追加できます。これにより、マイクロフロー内に会話ツリーを作成できます。これは簡単な方法です (ただし、これをさらに進めて、各応答をデータベースに保存し、この設定を実行時に構成可能にすることもできます)。この応答を送信するには、以前にテスト メッセージを送信するために使用した postMessage API を再利用します。

私の例は次のようになります

スラッシュコマンド

スラッシュ コマンドとは一体何でしょうか? 簡単に言うと、Web フックに似ています。ユーザーが特定のキーワード (Slack のセットアップ) をスラッシュ '/' を付けて入力すると、Slack は更新を一意のエンドポイントにプッシュします。

これがイベントとスラッシュ コマンドの最大の違いです。公開した REST サービスに新しいメソッドを追加するだけです。私の例ではシンプルにしています。ユーザーが /ping と入力すると、ボットは pong と応答します。少し「Hello world」っぽいですが、ここではほとんど遊んでいました。

新しいエンドポイントを追加し、操作パスに「Ping」と入力します。これも POST メソッドです。

次に、ロジックを処理するマイクロフローで、応答のコンテンツ属性を「Pong」に設定するだけです。

最後にSlackの左側のメニューのスラッシュコマンドに移動し、「新しいコマンドを作成」をクリックします。

エンドポイントは再び、 ングロックHTTP メソッドの URL.

すべて完了

おめでとうございます。ここまで来ました。これでアプリをテストして、ボットについて知ることができます。イベント エンドポイントに送信される更新を受け取るには、ボットを Slack チャネルに追加する必要があることを忘れないでください。Slack で @YourBotName を送信するだけで、ボットを追加するように求められます。Slack の API には他にも使用できる機能がたくさんありますので、より具体的な内容についての記事が必要な場合はお知らせください。

さあ、出発する前に、私のボットとの短い会話を紹介します。

ハッピーコーディング!

言語を選択してください