Slackは、チームメンバー間のより良いコミュニケーションを促進するための人気のあるツールです。サードパーティの統合やWebhookサポートなど、多くの役立つ機能とサービスが付属しています。 Slack Webhookは楽しくて便利で、セットアップが簡単です。このチュートリアルでは、node.jsとherokuを使用してSlackからのメッセージに「ボット」として応答する簡単なサーバーを設定します。 JavaScriptとGitに精通していることが役立ちます。以前にGitを使用したことがない場合は、初心者向けのGitをご覧ください。 Slackアカウントへのアクセスも想定されていますが、心配しないでください。無料です!キーテイクアウト
node.jsでExpress 4を使用して、シンプルなWebサーバーを構築します。
アプリの新しいディレクトリを作成し、npm initを実行してpackage.jsonファイルを生成します。 Package.json依存関係には、「Express」:「^4.x.x」と「Body-Parser」: "^1.x.x"を含めます。 Body-Parserパッケージは、Slackから送信されたペイロードを解析するために使用されます。 app.jsという名前のサーバーファイルを作成しますここでは、必要なモジュールが必要になり、ボディパーサーミドルウェア、エラーハンドラー、テストルートを追加します。次に、サーバーにリスニングを開始するように指示します
<span>var express = require('express'); </span><span>var bodyParser = require('body-parser'); </span> <span>var app = express(); </span><span>var port = process.env.PORT || 3000; </span> <span>// body parser middleware </span>app<span>.use(bodyParser.urlencoded({ extended: true })); </span> <span>// test route </span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') }); </span> <span>// error handler </span>app<span>.use(function (err<span>, req, res, next</span>) { </span> <span>console.error(err.stack); </span> res<span>.status(400).send(err.message); </span><span>}); </span> app<span>.listen(port, function () { </span> <span>console.log('Slack bot listening on port ' + port); </span><span>});</span>
ボットロジックの書き込み
このモジュールは、ボットロジックが住んでいる場所になります。 Status Code 200でSlackにメッセージを返す1つのエクスポートされた関数が含まれます。Slackがサーバーに送信するデータを解析することから始めます。その後、独自のフォーマットされた適切なペイロードで応答します。これを行うには、構成された統合の下で送信Webhookを再訪しましょう。発信データの例は、スラックがスラックが送信するすべての情報を示しています。
データの一部は認証やルーティングに役立つことがわかりますが、今のところはuser_nameプロパティに焦点を当てるだけです。この値を使用して、パーソナライズされた挨拶をユーザーに送り返すことができます。
app.jsに戻ると、上部にボットモジュールが必要です。
module<span>.exports = function (req<span>, res, next</span>) { </span> <span>var userName = req.body.user_name; </span> <span>var botPayload = { </span> <span>text : 'Hello, ' + userName + '!' </span> <span>}; </span> <span>// avoid infinite loop </span> <span>if (userName !== 'slackbot') { </span> <span>return res.status(200).json(botPayload); </span> <span>} else { </span> <span>return res.status(200).end(); </span> <span>} </span><span>}</span>
次に、 /helloへの投稿を聴くルートを追加します。
簡単なテストをしましょう。ノードアプリを使用してアプリを再度実行し、別の端末ウィンドウでCurlを使用して、アプリが予想どおりに応答することを確認します。 (注:ボットはここでは1つの値のみを検索するため、テストにスラックペイロード全体を含める必要はありません)。
<span>var hellobot = require('./hellobot');</span>
アプリが機能する場合は、次のような応答が表示されます。
app<span>.post('/hello', hellobot);</span>
Heroku
curl -X POST --data "user_name=foobar" http://localhost:3000/hello
Herokuは、ほとんど時間がかからずにWebサーバーをオンラインで取得するのに役立つ便利なサービスです。展開は、コードを自動的に展開して実行するGitサーバーにプッシュすることにより行われます。既にアカウントをお持ちの場合は、Herokuでアカウントを作成するか、ログインしてください。
ログインすると、Herokuダッシュボードが表示されます。右上のクリックして、新しいアプリを作成します。コンピューターでHerokuにログインするために提供された指示に従ってください。展開は簡単ですが、アプリを初めて展開するときは多くのことがあります。アプリをセットアップするときは、このガイドに従ってください。途中でいくつかの二重チェックを行いますが、この記事の範囲外にある多くの良い情報があります。
ボットを展開する前に、Herokuにアプリの実行方法を伝える必要があります。これは、procfileを作成することによって行われます。 Procfileには単一の行のみが必要です:
<span>var express = require('express'); </span><span>var bodyParser = require('body-parser'); </span> <span>var app = express(); </span><span>var port = process.env.PORT || 3000; </span> <span>// body parser middleware </span>app<span>.use(bodyParser.urlencoded({ extended: true })); </span> <span>// test route </span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') }); </span> <span>// error handler </span>app<span>.use(function (err<span>, req, res, next</span>) { </span> <span>console.error(err.stack); </span> res<span>.status(400).send(err.message); </span><span>}); </span> app<span>.listen(port, function () { </span> <span>console.log('Slack bot listening on port ' + port); </span><span>});</span>
ボットをオンラインで取得するためのもう1つのステップがあります。ダイノを与える必要があります。ターミナルに、
これは、Herokuにアプリに1人のWebワーカーに与えるように指示します。注意深い;アプリは1か月に1つの無料Dynoのみを取得します!
module<span>.exports = function (req<span>, res, next</span>) { </span> <span>var userName = req.body.user_name; </span> <span>var botPayload = { </span> <span>text : 'Hello, ' + userName + '!' </span> <span>}; </span> <span>// avoid infinite loop </span> <span>if (userName !== 'slackbot') { </span> <span>return res.status(200).json(botPayload); </span> <span>} else { </span> <span>return res.status(200).end(); </span> <span>} </span><span>}</span>
ボットは今オンラインである必要があるので、スラックに戻ってテストしてください!
応答が得られなかった場合は、戻ってコードを確認してください。ターミナルコマンドHerokuログを使用して、リクエストの詳細と、追加したconsole.log()ステートメントを表示できます。
最後のセクションでは、トリガーワードのチャットを聞いている発信Webhookを使用し、サーバーにメッセージを送信して応答を表示しました。このセクションでは、カスタム統合を作成するために他の2つのツールを使用します:スラッシュコマンドと着信Webhooks。 [統合の構成]ページにアクセスし、DIY統合とカスタマイズの下の他のオプションをご覧ください。スラッシュコマンド統合を追加することから始めましょう。短い説明を読み、コマンドを「/roll」に設定し、統合を追加します。次のページには、構成が表示されます。発信データは、以前に構成した発信Webhookに似ていることがわかります。このセクションの最後のセクションで作成したアプリを使用して、同じURLを使用できますが、今回はルート /ロールに投稿します。
スラッシュコマンド統合はユーザーに応答できるが、プライベートでのみ応答できることに注意してください。サイコロを見ることができる場合、サイコロロールはどのような用途ですか? Slackは、Chatにメッセージを送信するために、Slashコマンドを使用して、着信Webhookをタンデムで使用することを提案します。 [統合の構成]ページに戻り、着信Webhookを追加します。説明を読み、チャンネルを選択し、フックを追加します。どのチャンネルを選んだか心配しないでください。ボットの応答でチャネルを指定できます。アプリでチャネルを選択できるため、作成した他のボットにこの統合を使用することもできます。着信Webhookは構成の方法ではあまりありませんが、ボットの応答ペイロードを構築するための多くの重要な情報があります。最も重要な部分は、WebHook URLです。 Slackにメッセージを送信するために、アプリからこれに投稿します。 サーバーからのスラッシュコマンドに応答する
dicebot.jsを追加します。 DiceBotは1つの機能をエクスポートしますが、2つの追加機能が必要になります。1つは着信Webhookに投稿し、1つはサイコロを転がすためです。
<span>var express = require('express'); </span><span>var bodyParser = require('body-parser'); </span> <span>var app = express(); </span><span>var port = process.env.PORT || 3000; </span> <span>// body parser middleware </span>app<span>.use(bodyParser.urlencoded({ extended: true })); </span> <span>// test route </span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') }); </span> <span>// error handler </span>app<span>.use(function (err<span>, req, res, next</span>) { </span> <span>console.error(err.stack); </span> res<span>.status(400).send(err.message); </span><span>}); </span> app<span>.listen(port, function () { </span> <span>console.log('Slack bot listening on port ' + port); </span><span>});</span>
いくつかの変数を初期化し、入力を解析することから始めましょう。ユーザーが入力を省略したい場合に備えて、いくつかのデフォルト値を設定します。
<span>var express = require('express'); </span><span>var bodyParser = require('body-parser'); </span> <span>var app = express(); </span><span>var port = process.env.PORT || 3000; </span> <span>// body parser middleware </span>app<span>.use(bodyParser.urlencoded({ extended: true })); </span> <span>// test route </span>app<span>.get('/', function (req<span>, res</span>) { res.status(200).send('Hello world!') }); </span> <span>// error handler </span>app<span>.use(function (err<span>, req, res, next</span>) { </span> <span>console.error(err.stack); </span> res<span>.status(400).send(err.message); </span><span>}); </span> app<span>.listen(port, function () { </span> <span>console.log('Slack bot listening on port ' + port); </span><span>});</span>
ユーザーの入力でサイコロを転がすのは簡単です。ランダムロールの仕組みの説明については、このスレッドを参照してください。真にランダムなロールの場合、random.org APIに連絡できます。ロール関数を書きましょう。
次に、メイン機能では、いくつかのロールを作成し、応答するメッセージを作成します。ローラーの名前を含めて、他のユーザーが /rollコマンドを使用した人を確認できるようにしましょう。
module<span>.exports = function (req<span>, res, next</span>) { </span> <span>var userName = req.body.user_name; </span> <span>var botPayload = { </span> <span>text : 'Hello, ' + userName + '!' </span> <span>}; </span> <span>// avoid infinite loop </span> <span>if (userName !== 'slackbot') { </span> <span>return res.status(200).json(botPayload); </span> <span>} else { </span> <span>return res.status(200).end(); </span> <span>} </span><span>}</span>
botpayload.textプロパティにメッセージを追加して、Totalの周りにスラックフォーマットを付けて太字にしました。応答ペイロードを使用して、名前、アイコン、およびチャネルを構成することもできます。ユーザーがロールコマンドを発行するチャネルに基づいてチャネルを設定します。 Slackは、ペイロードでチャネルの名前を使用することを提案しますが、それは「#」でそれをプレイする必要があることを意味します。代わりに、チャンネルIDを使用できます。これにより、パブリックチャネルやプライベートグループに投稿できるようになります。アイコンには、便利なダイ絵文字が存在しますが、icon_urlを使用してより良い画像を提供できます。
<span>var hellobot = require('./hellobot');</span>
app<span>.post('/hello', hellobot);</span>
サーバーを実行して、もう一度カールしましょう。今回は、channel_idを含める必要があります。 Slack APIテスターを使用して、正しいChannel_idを見つけることができます。着信Webhookはすでにセットアップされているため、サーバーがそれを呼び出すのを聞くはずです。アプリはまだHerokuにはないので、環境に着信するWebhookパスを含める必要があります。
curl -X POST --data "user_name=foobar" http://localhost:3000/hello
<span>{"text":"Hello, foobar!"}</span>
よさそうだ!展開しましょう。
web: node app
heroku ps:scale web=1
に再配置します
HerokuのConfig varsを使用してWebhookのトークンを保存するため、アプリの設定メニューに設定することを忘れないでください。
フックがすべてセットアップされていると、ロールコマンドが準備ができているはずです。いくつかのロールを試してみてください!何かが機能しなかった場合は、Herokuログを使用してデバッグできます。完成したアプリ全体を見るには、このgithubリポジトリをご覧ください。
継続的な開発ボットの他のいくつかのアイデア:
github APIを使用して開いているプルリクエストを表示するボット
スラックボットを作成するにはどうすればよいですか?
スラックボットのパフォーマンスを改善する方法はいくつかあります。 1つの方法は、不必要なAPI呼び出しまたは処理を減らすことにより、コードを最適化することです。キャッシュを使用して、ボットが頻繁に使用するデータを保存して、繰り返しAPI呼び出しの必要性を減らすこともできます。さらに、非同期プログラミング技術を使用して、ボットが複数のタスクを同時に実行できるようにすることができます。メッセージまたはコマンドに応答するようにプログラミングしてユーザーと対話します。メッセージイベントを使用して、着信メッセージを聞くことができます。また、chat.postmessageメソッドを送信してメッセージを送信できます。ボットのメッセージにボタンなどのインタラクティブな要素を追加することもできます。ユーザーはクリックしてアクションをトリガーできます。他のサービスとのボット。 Slackは、外部サービスと統合できるさまざまなAPIと機能を提供します。たとえば、着信Webhooksを使用して他のサービスからデータを受信したり、発信webhooksを受け取って他のサービスにデータを送信できます。プログラミング言語でエラー処理手法を使用して、スラックボットのエラー。たとえば、JavaScriptでは、Try ... Catchステートメントを使用してエラーをキャッチおよび処理することができます。エラーイベントを使用して、ボットの実行中に発生するエラーを聞くこともできます。あなたのスラックボット。作成時にボットのカスタムアイコンと名前を設定できます。また、添付ファイルまたはブロックを使用してボットのメッセージの外観をカスタマイズすることもできます。これにより、色、画像、その他のフォーマットを追加できます。 🎜>ボット開発のベストプラクティスに従うことにより、スラックボットのセキュリティを確保できます。これには、ボットユーザーOauth Access Token Secretを維持し、誰とも共有しないことが含まれます。また、ボットが受け取ったデータを検証して、信頼できるソースからのものであることを確認する必要があります。さらに、セキュリティの脆弱性を修正するには、ボットのコードを定期的に更新する必要があります。
以上がスラックボットを始めますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。