IBM Cloud Docs
データベース駆動型の Slackbot の作成

データベース駆動型の Slackbot の作成

このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。

このチュートリアルでは、バックエンド Db2 on Cloud データベースでのエントリーの検索と作成を可能にする Slackbot を作成します。 Slackbot は IBM® watsonx™ Assistant サービスに基づいています。 アシスタント統合を使用して Slack と IBM® watsonx™ Assistant を統合します。Db2 on Cloud は、カスタム拡張として watsonx Assistant で使用可能になります。

Slack 統合は、Slack と watsonx Assistantの間でメッセージを送信します。 Python で作成され、サーバーレス Code Engine アプリとしてデプロイされたカスタム拡張は、データベース・バックエンドに対して REST API を公開します。

目標

  • データベース・バックエンドと対話する watsonx Assistant を使用してチャットボットを作成する
  • 統合を使用して watsonx Assistant を Slack に接続する
  • Python データベース・アプリを作成して Code Engine にデプロイします。
  • watsonx Assistant カスタム拡張を介して Db2 on Cloud データベースにアクセスします。

アーキテクチャー
図 1. チュートリアルのアーキテクチャー・ダイアグラム

  1. ユーザーは、Slack を介して、または Web チャット・クライアントを使用して、IBM® watsonx™ Assistantと対話します。
  2. チャットボットは、Code Engine 上の Python アプリとしてデプロイされた REST API を使用するカスタム拡張機能を使用します。
  3. カスタム拡張アプリケーションは、Db2 on Cloud データベースからデータを取得し、そこにデータを挿入します。

開始前に

このチュートリアルでは、以下が必要です。

  • IBM Cloud CLI
    • Code Engine プラグイン、
  • git: ソース・コード・リポジトリーを複製します。
  • jq : JSON データを照会します。

これらのツールがインストールされないようにするには、 IBM Cloud コンソールから Cloud Shell を使用できます。

ご使用のオペレーティング環境でこれらのツールをダウンロードおよびインストールするための手順は、チュートリアルの概説ガイドに記載されています。

サービスのセットアップとバックエンドのデプロイ

このセクションでは、必要なサービスをセットアップし、バックエンド・アプリをデプロイします。 これらはすべて、端末のコマンド・ライン・インターフェース (CLI) から実行できます。

  1. GitHub リポジトリー を複製し、複製したディレクトリーにナビゲートします。

    git clone https://github.com/IBM-Cloud/slack-chatbot-database-watson
    cd slack-chatbot-database-watson
    
  2. ログインしていない場合は、 ibmcloud login または ibmcloud login --sso を使用して対話式にログインします。 処理するリージョンとリソース・グループをターゲットにしてください。 このリソース・グループがサービスとアクションの作成に使用されます。 ibmcloud resource groups を使用すると、使用可能なリソース・グループをリストできます。

    ibmcloud target -r <region> -g <resource group>
    

    ibmcloud target -g default を使用すると、デフォルトのリソース・グループに切り替わります。

  3. Db2 on Cloud インスタンスを作成し、イベント DB という名前を付けます。 自分のリージョン ( eu-de など) にリージョン us-south を適応させます。

    ibmcloud resource service-instance-create eventDB dashdb-for-transactions free us-south
    

    free (ライト) 以外のプランを使用することもできます。 free プランは、すべての場所で使用できるわけではありません。 サービスがプロビジョンされるまで待機します。 手順については、上記のコマンドの出力を参照してください。 次のコマンドを実行して状況を確認することもできます。

    ibmcloud resource service-instance eventDB
    
  4. 後で Code Engine アプリからデータベース・サービスにアクセスするには、適切な権限が必要です。 このため、サービス資格情報を作成し、slackbotkey というラベルを付けます。

    ibmcloud resource service-key-create slackbotkey Manager --instance-name eventDB --output json > slackbotkey.json
    

    slackbotkey.json ファイルには、 service credentials とも呼ばれる service key が含まれています。 この平文ファイルには、 eventDB サービス・インスタンスの管理パスワードと接続ストリングが含まれています。

    出力はファイル slackbotkey.json に保管され、このステップで必要になります。 以下のコマンドを実行して、データベース接続 URL を抽出します。

    jq -r '.credentials.connection.db2 | "ibm_db_sa://" + (.authentication.username + ":" + .authentication.password + "@" + .hosts[0].hostname + ":" + (.hosts[0].port | tostring) + "/" + .database + "?Security=SSL;")' slackbotkey.json
    

    これは $DB2_URI として参照され、ご使用のワークステーションまたはクラウド・シェルでサポートされている場合はシェル変数に保管でき、アプリケーションをローカルで実行している場合はエクスポートできます。

     export DB2_URI=$(jq -r '.credentials.connection.db2 | "ibm_db_sa://" + (.authentication.username + ":" + .authentication.password + "@" + .hosts[0].hostname + ":" + (.hosts[0].port | tostring) + "/" + .database + "?Security=SSL;")' slackbotkey.json)
     echo $DB2_URI
    

    出力は ibm_db_sa://username:password@database-hostname:port/bludb?Security=SSL; という形式にする必要があり、シェル変数 DB2_URIに格納されます。

  5. watsonx Assistant サービスのインスタンスを作成します。 名前として イベント・アシスタント を使用し、無料のライト・プランを使用します。 場所には us-south を使用します。

    ibmcloud resource service-instance-create eventAssistant conversation free us-south
    
  6. カスタム拡張を使用して、事前作成されたコンテナー・イメージを Code Engine アプリとしてデプロイします。 まず、プロジェクトを作成します。

    ibmcloud ce project create --name slackbot
    

    次に、プロジェクトをアクティブなプロジェクトとして選択します。

    ibmcloud ce project select --name slackbot
    

    次に、Slackbot バックエンド という名前のアプリをデプロイします。 API_TOKEN ( MY_SECRET ) の値を置き換えます。 必要に応じて MY_SECRET に独自のテキストを使用し、今後のすべてのステップで置換を行います。 これは、REST API への呼び出しを保護するために使用されます。

    ibmcloud ce app create --name slackbot-backend --image icr.io/solution-tutorials/tutorial-slack-chatbot-database:latest --min-scale 1 -e API_TOKEN=MY_SECRET -e DB2_URI="$DB2_URI"
    

    報告されたアプリの URI をメモします。 これは、次のステップで $APP_URL として参照されます。 シェル変数を使用できます。

    APP_URL=$(ibmcloud ce app get -n slackbot-backend --output json | jq -r .status.url)
    echo $APP_URL
    

    事前作成されたコンテナー・イメージをデプロイする代わりに、提供されたコードから独自のイメージをビルドしてデプロイすることもできます。 リポジトリーにある Dockerfile を使用して、create コマンドをソース ibmcloud ce app create --name slackbot-backend --build-source . --min-scale 1 -e API_TOKEN=MY_SECRET -e DB2_URI="$DB2_URI" からビルドするように変更できます。 詳しくは、 ローカル・ソース・コードからのアプリのデプロイ に関する Code Engine の資料を参照してください。 パブリック・コンテナー・イメージではなく独自のイメージを使用するため、 レジストリー・シークレット もセットアップする必要があります。

  7. アプリケーションによって提供される REST API を呼び出してデータベース・スキーマを (再) 作成し、挿入するサンプル・レコードをいくつか挿入することにより、デプロイメントをテストします。

    curl -X 'POST' "$APP_URL/database/recreate" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
    

    上記の要求は、確認が欠落していることを示すエラー・メッセージを返します。 次に、照会パラメーターを使用して再試行してください。

    curl -X 'POST' "$APP_URL/database/recreate?confirmation=True" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
    

    要求は成功し、データベースが再作成されたことを示します。 別のテストの時間:

    curl -X 'GET' "$APP_URL/events" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
    
  8. 将来のステップで必要になるプロジェクト ID をメモします。

    ibmcloud ce app get -n slackbot-backend --output json |  jq -r .metadata.namespace
    

アシスタントの作成

チュートリアルのこの部分では、 watsonx Assistant サービスを使用して作業します。 最初に、新しいアシスタントを作成します。 次に、カスタム拡張を作成し、それをアシスタントに追加します。 その後、Web プレビューを使用してアクションを作成し、テストします。 最後に、チャットボットを Slack と統合して、より多くのテストを実行します。

  1. IBM Cloud リソース・リストで、サービスの概要を開きます。 AI/ Machine Learning セクションの下で watsonx Assistant サービスのインスタンスを見つけます。 そのエントリーをクリックして、サービスの詳細を開きます。

  2. 「Watson Assistant の起動 (Launch Watson Assistant)」 をクリックして、watsonx Assistant ツールを表示します。

  3. ウェルカム・ダイアログで、 「アシスタント名 (Assistant name)」 として slackbot を使用して新規アシスタントを作成し、 「次へ」 をクリックしてパーソナライズを開始します。

  4. デプロイメントに関する最初の質問には、 「Web」 を選択します。

  5. 自分の役割に関するその他の質問への回答については、 「その他」 / 「現時点では確認できません」 を使用してください。

  6. 必要に応じてチャット UI をカスタマイズするには、 「次へ」 をクリックします。

  7. 「次へ」 をクリックし、 「作成」 をクリックして確定します。

    この新規ページにはガイド・ツアーが含まれています。watsonx Assistantを初めて使用する場合は、ガイド・ツアーを実行することをお勧めします。

カスタム拡張の追加および構成

次に、watsonx Assistant および新しく作成したアシスタントにカスタム拡張機能を追加してから構成します。

  1. 左下のダッシュボードで、統合 をクリックし、次に 拡張機能 の下の カスタム拡張の作成 をクリックします。
  2. マルチステップ・ダイアログで、次へ をクリックし、拡張機能名 として イベント を入力し、拡張の説明 としてイベント・データベースの API を入力します。 「次へ」 をクリックします。
  3. ローカル・ファイル slackbot-openapi-spec.json 氏 を選択してアップロードし、次へ をクリックします。
  4. 最後のステップでは、組み込まれているサーバーと操作を使用して拡張機能を確認できます。 完了したら、 「終了」 をクリックします。
  5. 統合 ページに戻ります。拡張機能 セクションの新しい イベント タイルに注目してください。 そのタイルで 追加 をクリックして、アシスタントの拡張機能を構成します。
  6. 新しいダイアログは、簡単な概要から始まります。 次へ をクリックして、実際の構成を表示します。 認証タイプ のドロップダウンで、API キー認証 を選択し、選択した API キー ( マイ・シークレット 置換) を入力します。
  7. サーバー変数 には、デプロイメント 地域アプリ名 として Slackbot バックエンド 、およびアプリの Code Engine プロジェクト ID を使用します。 その後、生成済み URL は Code Engine アプリのものと一致する必要があります。 完了したら、次へ をクリックしてレビュー・ページに移動し、終了閉じる をクリックして統合 ページに戻ります。

最初のアクションの作成

最初に、名前で識別される単一イベントに関する情報を取得するアクションを作成します。

  1. 左上で 「アクション」 をクリックし、ウェルカム・ページで 「アクションの作成」 をクリックします。

  2. 「最初から開始」 タイルをクリックします。

  3. 新規アクション ダイアログで、例として イベントの詳細を表示 と入力し、保存 をクリックします。

  4. 次の画面は、ステップ 1 を開いたアクションのステップ・エディターを示しています。 「アシスタントによると」 で、「イベント名は何ですか?」 と入力します。 次に、オプションとして 顧客応答の定義 pick フリー・テキスト を選択します。 それから次のステップに進む のままにします。

  5. 左下の 新規ステップ をクリックして、ステップ 2 を追加します。 最初の部分 ( 「アシスタントによると」顧客応答の定義 ) はそのままにしておきますが、それから の下で 拡張機能の使用 を選択します。 ドロップダウンで、イベント 拡張とその 名前によるイベント・レコード 操作を選択します。 その後、パラメーター は可能な入力を表示します。 ドロップダウンを使用して、 「short_name の設定」 に値 **アクション・ステップ変数 > 1 を割り当てます。 イベント名は何ですか? これは、前のステップからの顧客入力を参照します。 「適用」 をクリックして、このステップを終了します。

  6. 新規ステップ を追加します。 上部で選択を変更して、ステップ 3 が条件付きで実行される ようにします。 条件 および 以下の場合 の下で、「2 正常に実行されました」 を選択します。 これは、ステップ 2 で拡張機能を使用した結果を参照します。

  7. アシスタントによると の下で、デプロイされたアプリケーションに対する API 呼び出しの出力フィールドを参照することにより、イベントの詳細を使用して回答を作成できます。 イベントの詳細を確認しました。 の後に Enter キーを使用して、次の行に進みます。 エディターはマークダウン形式をサポートします。 したがって、- キーを使用して黒丸付きリストを作成します。 名前: を使用してリスト項目を追加し、変数の挿入 アイコンをクリックします。 ドロップダウンから 2 body.shortname を選択します。 Enter キーをもう一度使用すると、リスト項目を含む新しい行に移動します。 変数ドロップダウンから 2 body.location を指定して場所: を追加します。 開始終了 、および 連絡先 について繰り返します。 完了したら、それからアクションの終了 に設定します。

  8. 拡張のエラーを処理するには、条件を指定して別のステップを作成します。 ここで、ステップが 「2 正常に実行されました」 である ことに反応します。 アシスタントに 「問題が発生しました」 を指定して、アクションを再度終了します。

    単純化するために、すべてのエラーおよび条件 (空の結果など) が処理されるわけではありません。

  9. 右上にある 保存 アイコンをクリックしてから、その横にある X をクリックして、ステップ・エディターを閉じます。

  10. 右下の 「プレビュー」 を選択して、ダイアログをテストします。

  11. チャットで、 show me event details と入力して送信します。 ボットは What is the event name? と応答する必要があります。 Think と入力して送信します。 バックエンド・アプリはワイルドカード検索を使用するため、 Think 2022 という名前のサンプル・イベントを見つけて、詳細を返す必要があります (以下の画面キャプチャーを参照)。

イベントの詳細を示すチャット・プレビュー
イベントの詳細を示すプレビュー

「検査」 をクリックすると、カスタム拡張の使用方法の詳細を表示できます。 入力変数と出力変数、および拡張の API 関数の呼び出し方法を確認できます。

データを収集して新規レコードを挿入するアクション

レコードの取得と同様に、イベントに関する入力を収集し、カスタム拡張を介してそのデータを追加することができます。

  1. アクション および 作成者 に切り替えます。 「新規アクション (New action)」 をクリックします。

  2. 「最初から開始」 タイルをクリックします。

  3. 「新規アクション」 ダイアログで、 add new event および Save と入力します。

  4. Assistant に「」と表示される場合は、 「イベントにどのように名前を付けますか?」 を使用します。 お客様が再び 「フリー・テキスト」 で応答します。

  5. 新規ステップ を追加し、アシスタントが 「イベントはどこにありますか?」 となるようにします。 この場合も、お客様は フリー・テキスト で応答することができます。

  6. 別のステップを追加し、 「イベントはいつ開始しますか?」 と尋ねます。ただし、 「顧客応答の定義」 には 「日付」 を使用します。

  7. 同じことを繰り返しますが、 「イベントはいつ終了しますか?」 を使用します。

  8. 最後に、新しいステップで、 イベントの URL (Web アドレス) は何ですか? と尋ね、お客様に 「フリー・テキスト」 で応答させます。

  9. ここで、入力を確認するために、新規ステップを作成します。 「これは正しいですか?」 を黒丸付きリストとして使用すると、収集されたデータが表示されます。 「名前」「場所」「開始」「終了」 、および 「連絡先」 の項目を追加し、データの入力ステップに関連するアクション変数を使用します (以下の画面キャプチャーを参照)。 顧客応答タイプとして 確認 を使用します。

    確認ステップ
    確認ステップ

  10. 前の確認が いいえ である条件を指定して、新規ステップを追加します。 アシスタントは 「はい、やり直しましょう」 と言うことができます。 それから「前のステップを再確認する」 に設定し、前のすべてのステップを選択します。

  11. 新しいステップ (ステップ 8) で、確認が 「はい」 であることに反応します。 それから で、拡張機能の使用 を選択します。 新規イベント・レコードの挿入 を操作として使用して、イベント拡張を構成します。 パラメーターをステップのアクション変数に一致させます。例えば、 shortname1 にします。 イベントにどのように名前を付けますか?

  12. 条件 8 Ran successfully を true にして新規ステップを作成します。 アシスタントは 「ID VARIABLE の新規レコードが作成されました」 とします。 変数 の場合は、イベント (ステップ 8) から 8 body.eid を選択します。 それから の下でアクションを終了します。

  13. 「8 Ran successfully」 が false になっている状態で新規ステップを作成します。 「新規イベント・レコードの作成中に問題が発生した可能性があります」 などを使用して、アシスタントが 「次に」 の下でアクションを終了するようにします。 保存して、右上にアイコンを付けてアクションを閉じます。

  14. アクションを保存し、左側の 「プレビュー」 をクリックして Web チャットを使用することで、新規アクションをテストします。 add new event と入力して送信します。 ボットからプロンプトが出されたら、名前として 私の会議 、場所として 本社 を入力し、開始日と終了日を選択し、URL として http://localhost を使用します。 その後、データが正しいことを確認してください。

チャットボットを作成する際には、チャットボットの公開を行うことをお勧めします。 これは、変更をロールバックし、実際のお客様と対話するチャットボットに影響を与えることなく開発を続行できるバージョンの制御されたリリースです。

Slack との統合

次に、チャットボットを Slack に統合します。

  1. 左下にある 統合 をクリックします。
  2. 統合の概要の チャネル セクションで、Slack を見つけて 追加 をクリックします。
  3. ステップバイステップの手順に従って、チャットボットの ドラフト 環境を Slack に統合します。 詳しくは、Slack との統合のトピックを参照してください。
  4. 完了したら、Slack ワークスペースを開きます。 ボットと直接チャットを開始し、イベントの詳細を表示 と応答します。 次に、上記のように、イベント名の入力を求めるプロンプトが出されたら、 Think で応答します。

eventbot を使用した Slack
eventbot を使用した Slack

リソースを削除する

このチュートリアルのリソースをクリーンアップするには、IBM Cloud リソース・リストに移動します。 watsonx Assistant および Db2 on Cloud のサービス・インスタンスを見つけて削除します。 同様に、 Code Engine プロジェクトを見つけて削除します。

リソースによっては、即時に削除されずに保持される場合があります (デフォルトでは 7 日間)。 リソースを完全に削除して再利用することも、保存期間内に復元することもできます。 リソースの再利用を使用する方法については、この資料を参照してください。

関連コンテンツ

このチュートリアルで扱われているトピックに関する追加リソースを以下に示します。