スラックボットを始めます

Lisa Kudrow
リリース: 2025-02-20 12:30:12
オリジナル
979 人が閲覧しました

スラックボットを始めます

Slackは、チームメンバー間のより良いコミュニケーションを促進するための人気のあるツールです。サードパーティの統合やWebhookサポートなど、多くの役立つ機能とサービスが付属しています。 Slack Webhookは楽しくて便利で、セットアップが簡単です。このチュートリアルでは、node.jsとherokuを使用してSlackからのメッセージに「ボット」として応答する簡単なサーバーを設定します。 JavaScriptとGitに精通していることが役立ちます。以前にGitを使用したことがない場合は、初心者向けのGitをご覧ください。 Slackアカウントへのアクセスも想定されていますが、心配しないでください。無料です!キーテイクアウト

    Slack Bots Simplified:Slack Botのセットアップには、SlackのWebインターフェイスを介して統合を作成し、Webhooksを構成し、node.jsとExpressを使用してSlackメッセージと対話するサーバーを作成することが含まれます。
  • node.jsおよびheroku deployment:サーバーのセットアップには、ボットを展開するためにHerokuにExpressフレームワークを利用して、ボットにオンラインでアクセスできるようにします。
  • ボットインタラクションロジック:ボットのロジックを開発して、grehtingユーザーやディースロールなどの処理コマンドなど、SLACKの特定のコマンドに応答します。
  • ボット機能の拡大:スラッシュコマンドや着信Webhookなどのさらなる統合を調べて、ボット機能を強化し、スラックチャネル内でよりインタラクティブで動的な応答を可能にします。
  • 継続的な開発と統合:さまざまなAPI(GitHub、Yelpなど)と統合してBOTのユーティリティを拡大することにより、継続的な開発を奨励し、チームのコラボレーションと生産性のための汎用性の高いツールになります。
  • 新しいSlack統合の作成
  • Slack Webインターフェイスから、チームの名前の横にある左上隅にメニューを開き、統合の構成を選択します。ここでは、利用可能なすべての統合を備えたダッシュボードを見ることができます。 DIYの統合とカスタマイズの下で底までスクロールし、発信Webhookを追加します。短い説明を読んでから、[webhooksの統合を追加]をクリックします。

発信されるWebhook構成と、リクエストと応答のペイロードがどのように見えるかの例が表示されます。最初のボットは、電話をかけたときにユーザーに挨拶するだけです。これを行うには、フックがチャンネルでトリガーワード「ハロー」を聞くことを許可します。 まだ投稿されるURLがわからないので、後でこのページに戻ります。

Webサーバーの作成

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>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ノードアプリでサーバーを実行し、http:// localhost:3000にアクセスすることを確認してください。

ボットロジックの書き込み

hellobot.js

という名前のファイルを作成します

このモジュールは、ボットロジックが住んでいる場所になります。 Status Code 200でSlackにメッセージを返す1つのエクスポートされた関数が含まれます。Slackがサーバーに送信するデータを解析することから始めます。その後、独自のフォーマットされた適切なペイロードで応答します。これを行うには、構成された統合の下で送信Webhookを再訪しましょう。発信データの例は、スラックがスラックが送信するすべての情報を示しています。

データの一部は認証やルーティングに役立つことがわかりますが、今のところはuser_nameプロパティに焦点を当てるだけです。この値を使用して、パーソナライズされた挨拶をユーザーに送り返すことができます。 スラックボットを始めます

ここでは、BotPayloadオブジェクトを作成します。必要な唯一のプロパティは、botpayload.textです。これは、応答時にボットが表示するものを定義します。ユーザーに挨拶をしてテキストプロパティを追加し、JSONと200のステータスコードで応答します。ボットの応答が発信されるWebhookのトリガーワードであることに注意してください。無限のループを避けるために、ボディのuser_nameを確認できます。チャットで名前が異なって表示されていても、すべてのフックは「Slackbot」として投稿します。この事実を使用して、フックがそれ自体に応答しないようにすることができます。

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>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
これを行ったら、変更を犯してHerokuにプッシュすることができます。 Herokuはノードモジュールを自動的にインストールすると、展開の結果が表示されます。すべてがスムーズに進んだ場合、下部のアプリへのリンクが表示されます。そのURLをコピーしてから、発信webhookの構成ページにもう一度アクセスしてください。 /helloルートを追加してURL(s)入力フィールドにコピーしたURLを追加し、必要に応じてフックの名前とアイコンを変更します。

スラックボットを始めますボットをオンラインで取得するためのもう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()ステートメントを表示できます。

それほど難しくありませんか? SlackでWebhookを正常にセットアップし、アプリをHerokuに展開し、2つをお互いに話しかけました!単純な「Hello World」プログラムよりも少し多くの仕事ですが、はるかにやりがいがあります。サーバーが実行されているため、フックや応答を追加することができます。 Hellobotはとてもフレンドリーですが、それほど便利ではありません。次のセクションでは、Slackの他のWebhookタイプを使用して、サイコロロールチャットコマンドを作成します。

DICEBOT - SLACKコマンドと着信Webhooksを使用

最後のセクションでは、トリガーワードのチャットを聞いている発信Webhookを使用し、サーバーにメッセージを送信して応答を表示しました。このセクションでは、カスタム統合を作成するために他の2つのツールを使用します:スラッシュコマンドと着信Webhooks。 [統合の構成]ページにアクセスし、DIY統合とカスタマイズの下の他のオプションをご覧ください。スラッシュコマンド統合を追加することから始めましょう。短い説明を読み、コマンドを「/roll」に設定し、統合を追加します。次のページには、構成が表示されます。発信データは、以前に構成した発信Webhookに似ていることがわかります。このセクションの最後のセクションで作成したアプリを使用して、同じURLを使用できますが、今回はルート /ロールに投稿します。

スラッシュコマンド統合はユーザーに応答できるが、プライベートでのみ応答できることに注意してください。サイコロを見ることができる場合、サイコロロールはどのような用途ですか? Slackは、Chatにメッセージを送信するために、Slashコマンドを使用して、着信Webhookをタンデムで使用することを提案します。 [統合の構成]ページに戻り、着信Webhookを追加します。説明を読み、チャンネルを選択し、フックを追加します。どのチャンネルを選んだか心配しないでください。ボットの応答でチャネルを指定できます。アプリでチャネルを選択できるため、作成した他のボットにこの統合を使用することもできます。着信Webhookは構成の方法ではあまりありませんが、ボットの応答ペイロードを構築するための多くの重要な情報があります。最も重要な部分は、WebHook URLです。 Slackにメッセージを送信するために、アプリからこれに投稿します。 サーバーからのスラッシュコマンドに応答する

ルート /ロールでスラッシュコマンドを指しているので、そのルートをヘロボットと一緒にサーバーに追加できます。着信フックにシークレットURLを使用するので、コードを公開したい場合に備えて、隠しておくことをお勧めします。これを行う良い方法は、Herokuの構成varを使用することです。

また、パッケージにリクエストを追加して、着信フックで使用しましょう:

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>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
多くの卓上ゲーマーが知っているように、6面のサイコロよりも多くの種類のサイコロがあります。他のサイコロには、4つの側面、8つの側面、10面、20面などがあります!これらのサイコロを転がすときに特別な表記法が使用されます: d 。したがって、2つの6面のサイコロを転がすことは、「2D6」として記録されます。この表記法を使用してユーザーが複数のサイコロをロールすることはできますが、ユーザーからの正しい入力を確認する必要があります。

いくつかの変数を初期化し、入力を解析することから始めましょう。ユーザーが入力を省略したい場合に備えて、いくつかのデフォルト値を設定します。

<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>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
上記の正規表現は、サイコロのロールを解析するためにかなり信頼でき、ユーザーが夢中にならないように値を2桁の数値に制限します。ユーザーが構文を台無しにした場合、ヒントを返送します。

ユーザーの入力でサイコロを転がすのは簡単です。ランダムロールの仕組みの説明については、このスレッドを参照してください。真にランダムなロールの場合、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>
ログイン後にコピー
ログイン後にコピー
ペイロードはよさそうだ。送信関数を書きましょう。 HerokuのConfig Varsにパストークンのみを保存することを選択しました。 jsonの文字列として体を送るようにしてください。

app<span>.post('/hello', hellobot);</span>
ログイン後にコピー
ログイン後にコピー
メイン関数では、送信リクエストを開始します。それが機能する場合は、空の200でスラッシュコマンドに応答できます。そうでない場合は、send()コールバックの値を使用してエラーを作成できます。これにより、app.jsのエラーハンドラーがトリガーされ、400を返送します。これにより、ユーザーにエラーが通知されます。

サーバーを実行して、もう一度カールしましょう。今回は、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

に再配置します スラックボットを始めます HerokuのConfig varsを使用してWebhookのトークンを保存するため、アプリの設定メニューに設定することを忘れないでください。

その後、Gitを使用して新しいファイルを追加し、変更をコミットし、Herokuリモートにプッシュします。 Herokuはノードモジュールをインストールし、サーバーを起動します。テストする前に、ログをリアルタイムで視聴し始めましょう。 heroku logs -t

フックがすべてセットアップされていると、ロールコマンドが準備ができているはずです。いくつかのロールを試してみてください!何かが機能しなかった場合は、Herokuログを使用してデバッグできます。完成したアプリ全体を見るには、このgithubリポジトリをご覧ください。

継続的な開発

これらの2つのボットは、独自のチャットボットと統合の作成を開始するために必要なすべてのツールを示しています。多くのサービスをボットに統合することも、説得力のある会話パートナーを作成することもできます。これらの目標の両方を達成するために、APIとノードモジュールが存在します。

ボットの他のいくつかのアイデア:

github APIを使用して開いているプルリクエストを表示するボット
  • Yelp APIを使用してチームが昼食を決定できるようにするボット
  • Googleを検索するボット
  • 流行語と専門用語でのみあなたに話しかけるボット
  • 良いアイデアを思いついたら、コードを共有してください!ボットは作るのが楽しいです、そして、彼らはかつてないほど簡単に作成しました。 スラックボットに関するよくある質問(FAQ)

スラックボットを作成するにはどうすればよいですか?

スラックボットを作成するには、いくつかのステップが含まれます。まず、Slack API Webサイトにアクセスして、新しいボットユーザーを作成する必要があります。ボットに名前を付けて、動作するワークスペースを選択する必要があります。ボットを作成すると、ボットユーザーOAuth Accessトークンが届きます。これを使用して、コードでボットを認証するために使用します。次に、JavaScriptやPythonなどのプログラミング言語を使用してボットのコードの書き込みを開始できます。 Slack APIを使用してメッセージを送信および受信します。あなたがそれをしたいことについて。たとえば、特定のコマンドまたはキーワードに応答するようにボットをプログラムしたり、スケジュールされたメッセージを送信したり、他のAPIと統合して外部ソースからデータを引き込むこともできます。また、ボットのメッセージにボタンやドロップダウンメニューなどのインタラクティブな要素を追加することもできます。ワークスペースとそれとの対話。メッセージをボットに送信して、正しく応答するかどうかを確認できます。また、API.Testやauth.testメソッドなど、テストにSlack APIのメソッドを使用することもできます。複数のワークスペースにあるスラックボット。操作したい場所に各ワークスペースにボットをインストールする必要があります。各ワークスペースには、独自のボットユーザーOAuthアクセストークンがあります。これは、そのワークスペースでボットを認証するために使用します。

スラックボットのパフォーマンスを改善するにはどうすればよいですか?

スラックボットのパフォーマンスを改善する方法はいくつかあります。 1つの方法は、不必要なAPI呼び出しまたは処理を減らすことにより、コードを最適化することです。キャッシュを使用して、ボットが頻繁に使用するデータを保存して、繰り返しAPI呼び出しの必要性を減らすこともできます。さらに、非同期プログラミング技術を使用して、ボットが複数のタスクを同時に実行できるようにすることができます。メッセージまたはコマンドに応答するようにプログラミングしてユーザーと対話します。メッセージイベントを使用して、着信メッセージを聞くことができます。また、chat.postmessageメソッドを送信してメッセージを送信できます。ボットのメッセージにボタンなどのインタラクティブな要素を追加することもできます。ユーザーはクリックしてアクションをトリガーできます。他のサービスとのボット。 Slackは、外部サービスと統合できるさまざまなAPIと機能を提供します。たとえば、着信Webhooksを使用して他のサービスからデータを受信したり、発信webhooksを受け取って他のサービスにデータを送信できます。プログラミング言語でエラー処理手法を使用して、スラックボットのエラー。たとえば、JavaScriptでは、Try ... Catchステートメントを使用してエラーをキャッチおよび処理することができます。エラーイベントを使用して、ボットの実行中に発生するエラーを聞くこともできます。あなたのスラックボット。作成時にボットのカスタムアイコンと名前を設定できます。また、添付ファイルまたはブロックを使用してボットのメッセージの外観をカスタマイズすることもできます。これにより、色、画像、その他のフォーマットを追加できます。 🎜>ボット開発のベストプラクティスに従うことにより、スラックボットのセキュリティを確保できます。これには、ボットユーザーOauth Access Token Secretを維持し、誰とも共有しないことが含まれます。また、ボットが受け取ったデータを検証して、信頼できるソースからのものであることを確認する必要があります。さらに、セキュリティの脆弱性を修正するには、ボットのコードを定期的に更新する必要があります。

以上がスラックボットを始めますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート