エンジニアリング

Slack、Zapier、およびElastic App Searchを使用して検索ボットを構築

Slackからクエリを実行できる自分独自の検索ボットを構築できるとしたら、便利だと思いませんか?何千もの顧客レコード、記事、サーバーログ、ヘルプデスクのチケットなどを、Slackチャネル内から調べることを想像してみてください。そのような場合に役立つ検索ボットを、Zapierを使用してElastic App SearchとSlackを組み合わせることで構築できます。

コーディングは不要です。

検索ボット:構築に必要なもの

次のものが必要です。

  • Elastic App Searchアカウントまたは14日間無料トライアル。Elastic App Searchは、ワールドクラスの検索エクスペリエンスを構築するためのツールボックスです。Weights(ウェイト)とBoosts(ブースト)Curations(キュレーション)、およびSynonyms(同義語)を使用することで関連性を微調整でき、また詳細な検索分析を確認することができます。最大の利点は、Elastic Stack上に構築できることです。
  • Elastic App Searchドキュメント。新しいアカウントにはそれぞれ、米国の国立公園のデータを含むサンプルの検索エンジンフィールドが付属しています。それを使用することも、または自分のドキュメントをインデックスし、チュートリアルを適応させることもできます。
  • Zapierアカウントまたはトライアル。Zapierは自動化サービスであり、Zapを作成できます。Zapとは、自動化のパイプラインです。自動化チェーンの各ステップで、アクションとデータの変換が実行できます。
  • 約30分。

完了後、指定されたSlackチャネル内で「search for query」と入力すると、queryがAPIコールとしてElastic App Searchに送信されます。

A slack message that says search for mountains and results containing mountains

Slackのピックアップ

Zapierにログインし、[Make a Zap!]をクリックします。

まず、トリガーを作成する必要があります。

トリガーにより、ZapierはSlackワークスペースに接続します。

Slackを検索し、選択します。

一連のSlackトリガーから選択できます。

ここでは「New Public Message Posted Anywhere」を選択します。

Selecting message from the Zapier Slack App

Continue]をクリックします。ZapierがSlackによる認証を要求します。

認証されたら、アカウントインスタンスをZapに関連付けます。

ボットフィルターに応答するかどうかについて、「no」と入力します。応答する必要はありません。

_この後で_必要になるのは、Slackからの少量のサンプルデータです。関連付けられたSlackワークスペースのテストチャネル内で、「search for old growth」と入力します。これにより、このメッセージはTest This Stepフェーズ時にZapierで使用することが可能になります。

An imported Slack message

メッセージを選択し、[Continue]をクリックします。

これが、自動化チェーンの最初のリンクになります。

スムーズなフィルタリング

次のステップは、独自のZapフィルターを設定することです。

ADD A HELPER STEP]のヘッダーの下で[Filter]をクリックします。

次の唯一のオプションで作業を進めます:Only continue if…

次のように選択します。

Building a zap filter:Text (Contains) "search for"

[Text]、[Contains]、[search for]

これにより、Slack内で誰かが「search for」と入力するとZapが有効化されます。

そして… アクション!

次に、「search for」の後に続くものがすべてクエリとして追加され、App Searchから適切な形式の結果が返されるように、4つのアクションを作成する必要があります。

最初のアクションは、App Searchに渡す検索クエリから「search for」のテキストを削除することです。

Add a step]をクリックし、[Action/Search]を選択します。

Formatter]を選択します。[BUILT-IN APPS]の下の最初のオプションです。

そこから[Text]を選択します。

Transform]ドロップダウンメニューが表示されます。そのメニュー内をクリックして「Replace」と入力し、それを選択します。

最下部の2つのフィールドが「Find」フィールドと「Replace」フィールドになります。

Find」フィールドで「“search for”」と入力します。

Replace」フィールドは空のままにして、[Continue]をクリックします。

The Zapier formatter

これで完了です。再度、[Add a Step]をクリックします。

キャプテンウェブフック

2つ目のアクションはAPIコールです。ここで、App Searchに送信するクエリを作成します。「search for…」の後に続くものはすべてクエリパラメーターになります。

ウェブフックを使用してAPIコールを生成します。

Choose an Action App]ドロップダウン内で、「Webhooks by Zapier」と入力し、それを選択します。

CREATE]ヘッダーの下で[POST]を選択し、[Continue]をクリックします。

APIコールを作成するには4つのフィールドが必要です。

1.URL

APIエンドポイントURLが、App Searchダッシュボード内で提供されます。そこには自分のホスト識別子(たとえば https://host-2376rb.api.swiftype.com/api/as/v1/engines/sample-engine/searchなど)が含まれています。このURLはパブリックなため、自由に使用して例を作成してください。

The App Search credentials dashboard

2.ペイロードのタイプ

デフォルトはFormです。[Json]を選択します。

3.データ

最初のボックス内に「query」と入力します。これは、POST内に含めるパラメーターになります。値の入力バーの横にあるアイコンをクリックします。そこで、ステップ1のテストデータの「search for old growth」を選択します。

Using the Slack message sample data from step 1

Slackメッセージの例の文字列が含まれている[Text]フィールドを選択します。

4.ヘッダー

フォームの最下部に「Headers」セクションがあります。その最初のボックスに「Authorization」と入力します。そのボックスの横に「Bearer」と入力し、その後に続けて、App Searchダッシュボードの[Credentials]メニュー内にある自分のパブリック検索キーを入力します。

Adding the Public Search Key as an Authorization header

自分のキーを持っていない場合は、こちらのパブリックデモキーを使用できます:search-7eud55t7ecdmqzcanjsc9cqu

Continue]をクリックし、テストを実行します。App Search Engineにより、公園データを含む応答例が表示されるはずです。

これで、APIリクエストを作成できます。ただし、ここでは応答をフォーマットする必要があります。

魔法のごとく自動的に

Add a Step]をクリックします。

Action/Search]を選択し、[Formatter]を見つけて選択します。

CREATE]ヘッダーの下で[Utilities]オプションを選択し、[Continue]をクリックします。

Transform]セクションで「Line Itemizer」と入力します。

ステップ4でのAPIコールによる出力に基づいて、「Line-item(s)」ヘッダーの下に2つの項目を作成します。

1.Title:「Results Title Raw」 2.Link:「Results NPS Link Raw」

米国の国立公園の名前と、追加の情報を含むリンクのみが結果として表示されるようにします。

Creating two line items off of the API call

テストして、この手順は完了です。では、3つ目のアクションに進みます。

ステップ、フォーマット、ステップ

Add a Step]をクリックします。

前の手順と同様に、[Formatter]を選択し、[Utilities*]を選択します。

ただし、ここでは「Line-Item to Text」を探します。

Values」というタイトルのボックス内に、「Input」ヘッダーがあります。バー内をクリックし、ステップ5[Utilities]を選択し、先ほど作成した行項目の両方を取得します。

入力ボックスの構造は、Slackメッセージのフォーマットが反映されることに注意してください。タイトル、スペース、括弧内にURLの順番になるようにします。

[TITLE] ([LINK])

また、結果が個別の行に表示されるようにします。そのためには、「Separator」ヘッダーの下のほうにあるボックスに次の特別な文字を追加します:[:newline:]:

[TITLE] ([LINK])
[TITLE] ([LINK])
[TITLE] ([LINK])
[TITLE] ([LINK]) 

Zap内では次のように表示されます。

Formatting the new lines properly, which changes how the API responses appear.

次は最後のステップです。フォーマットされた検索結果がSlackの特定のチャットに送信されるようにします。

最終送信

Add a step]をクリックし、[Action/Search]と入力します。

Slack]を選択します。

Create]の下で:[Send Channel Message]を選択し、[save + continue]を選択します。

自分のSlackアカウントを選択し、[Continue]をクリックします。

Zapが機能するチャネルを選択します。テストには#randomが適しています。

ヘッダー「Message Text」の下で、ボックスをクリックし、ステップ6の出力を選択します。

Selecting which Slack channel to post within, and the message contents which is the output of all of the filter chain

さらに、ボットの名前をSearchbotにして、洗練されたアバターを表示することもできます。

name:Slackbot picture:APP SEARCH!

希望する場合は、下記の画像を右クリックして、このブログページからElastic App Search画像リンクをコピーします。

The beautiful Elastic App Search logo

検索ボットの起動

すべての設定作業を終えたら、Zapを有効化します。

ENABLE THE ZAP!

Slackから、「search for something」と入力してクエリを何度か試します。

A GIF showing Slack responding to queries

お疲れさまでした!これでSlack内にインテリジェントな検索ボットが作成されました。

##まとめ

検索ボットは役に立つ可能性があります。社内のナレッジベースを検索したり、大量のサーバーログのプールから1つのエラーを探し出すことができます。どのようなケースであっても、Elastic App Search上に検索ボットを構築し、ほぼストレスなくSlackと連携させることができます。

マネージドバージョンの14日間無料トライアルを使用して、またはセルフマネージドのベータ版をダウンロードして、今すぐApp Searchを開始することができます。新しい各トライアルにはサンプルデータが事前にロードされているため、自身のデータを使用する前に試すことができます。