0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Denodo AI SDK を Slack から使用する

Last updated at Posted at 2025-01-21

こんにちは!インサイトテクノロジーの松尾です。

本記事では、Denodo Platform 9.1 の新機能「Denodo AI SDK」を Slack から利用する手順をご紹介します。

先日の記事では、Denodo AI SDK のチャットボットサンプルを動かす方法をご紹介しました。

しかし、専用アプリではなく、普段使いのツール(例: Slack)から使いたい方も多いのではないでしょうか?

そこで、Denodo 公式ドキュメントを参考に、Slack との連携を試してみました。この記事では、その手順を詳しく説明します。

私の実行環境

  • Windows 11 24H2
  • WSL2 Ubuntu 22.04.5 LTS
  • Slack フリープラン

アーキテクチャ概要

動作確認のため、以下のアーキテクチャで構築しました。

image.png

動作は以下の通りです。

  • Slackからのメッセージは、ローカル PC 上で動作する Python プログラム("Slack IF")で処理します
  • "Slack IF"が Denodo AI SDK にリクエストを送信します
  • Denodo AI SDKは、Denodo Platform および生成 AI から回答を生成します
  • 最終的に "Slack IF" が Slack に応答を返します

ではさっそく進めていきましょう。

Slack と Python プログラム( "Slack IF" )のやり取り

まず、Slack と Python プログラムがメッセージをやり取りできるよう設定します。この部分は Denodo とは直接関係なく、Slack 社の公式ドキュメントに基づいて進めます。ローカル PC と Slack のやり取りの方法として Denodo 社の記事では localtunnel を使って Flask とやり取りするような手順となっていますが、本投稿では Slack 社のドキュメントに従い Socket Mode を使って行います。まずは、以下のドキュメントに従い、ローカルの Python コードが Slack とやり取りできるようにしてみましょう。

Slack アプリの作成

まず、「Create New App」からアプリを追加します。

image.png

「From scratch」を選択します。

image.png

アプリ名を入力し、ワークスペース名を選択し、「Create App」を選択します。

image.png

トークンの作成

必要なトークン(ボットトークンとアプリレベルトークン)を作成します。

左から「OAuth & Permissions」を選択し、「Bot Token Scopes」で「Add an OAuth Scope」を選択します。

image.png

image.png

chat:write というのを探して追加します。

image.png

一番上の「Install App to Workspace」を選択します。表示される画面で指定したワークスペースへのアプリのインストールを実行します。

image.png

image.png

「Bot User OAuth Access Token」が確認できます。

image.png

この xoxb-xxxxxxxxxxxxxxxxxxx がボットトークンです。

続いて、「Basic Informationのページ」で、アプリレベルトークンの「Generate Token and Scopes」を選択し、アプリレベルトークンを作成します。このトークンに connections:write のスコープを付与します。

image.png

image.png

アプリレベルトークン xapp-xxxxxxxxxxxxxxxxxxxxxx が生成されました。

Socket Mode の有効化とイベントサブスクリプションの設定

左のメニューから Socket Mode を選択し、「Enable Socket Mode」から Socket Mode を有効にします。

image.png

参照するイベントを設定します。「Event Subscriptions」を選択します。
以下のように、Scope を選択し、下部にある「Save Changes」を選択して保存します。

image.png

これで準備は整いました。

念のため、以下からアプリを再起動します。

image.png

上記再インストールの手順はドキュメントへの記載はありませんが、私が実施したときは再インストールしないと動作しなかったので、念のため、、

Python プログラムの実行

参考ページ に記載されている以下のサンプルを実行してみましょう。

import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

# ボットトークンを渡してアプリを初期化します
app = App(token=os.environ.get("SLACK_BOT_TOKEN"))

# 'こんにちは' を含むメッセージをリッスンします
# 指定可能なリスナーのメソッド引数の一覧は以下のモジュールドキュメントを参考にしてください:
# https://tools.slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html
@app.message("こんにちは")
def message_hello(message, say):
    # イベントがトリガーされたチャンネルへ say() でメッセージを送信します
    say(f"こんにちは、<@{message['user']}> さん!")

if __name__ == "__main__":
    # アプリを起動して、ソケットモードで Slack に接続します
    SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()

以下のようにトークンを環境変数セットしてから実行します。

(venv) $ export SLACK_APP_TOKEN=xapp-xxxxxxxxxxxxxxxxxxx
(venv) $ export SLACK_BOT_TOKEN=xoxb-xxxxxxxxxxxxxxxxxxx
(venv) $ python3 app.py
⚡️ Bolt app is running!

そして、Slack から以下のように「こんにちは」と呼び掛けると、応答が返ってきます。

image.png

このサンプルは「こんにちは」という文字列が入っているメッセージに反応するようになっています。
毎回「こんにちは」と入力するのも面倒なので、すべてのメッセージに反応するよう、以下のように作り替えておきましょう。

11c11
< @app.message("こんにちは")
---
> @app.event("message")

すると、すべてのメッセージに反応するようになります。

image.png

Denodo AI SDK への問い合わせと返信処理の追加

Denodo AI SDK の起動

もちろん、事前に Denodo AI SDK を起動しておく必要があります。起動は以下の記事を参考に Docker で起動するのが手っ取り早いです。

$ docker compose -f docker-compose-sample-chatbot.yml up

で起動します。

Denodo AI SDK への問い合わせ処理と返信処理の実装

Python プログラムに Denodo AI SDK への問い合わせ処理を Denodo 社のサンプルに従って組み込みます。
以下は、質問を Denodo AI SDK に送信し、その結果を取得する例です。

import os
import requests;
from requests.auth import HTTPBasicAuth
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

# ボットトークンを渡してアプリを初期化
app = App(token=os.environ.get("SLACK_BOT_TOKEN"))

# 質問を Denodo AI SDK へ投げて応答を返却
def call_answer_question_api(question):
    url = "http://localhost:8008/answerQuestion"
    params = {
        "question": question,
    }

    response = requests.get(url, params=params, auth=HTTPBasicAuth('admin', 'admin'))
    if response.status_code == 200:
        data = response.json()
        print(data)
        return f"{data['answer']}\n{data['sql_query']}"
    else:
        response.raise_for_status()

# Error events
@app.error
def error_handler(error, body, logger):
    logger.error(f"Error: {error}")

# メッセージに対する処理
@app.event("message")
def handle_message_events(body, say):
    event = body['event']
    user_input = event.get('text')
    response = call_answer_question_api(user_input)
    say(response)

if __name__ == "__main__":
    # アプリを起動して、ソケットモードで Slack に接続
    SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()

すると以下のように、Slack から Denodo AI SDK とやり取りできるようになりました!

image.png

おわりに

本記事では、Denodo AI SDK を Slack から操作する手順を、Denodo 社のドキュメントを参考に紹介しました。専用の UI を使用せず、普段使いのツールから操作できることで、利用の敷居が大きく下がると感じています。
今回は動作確認のサンプル構築にとどまりましたが、Slack を介して Denodo のデータを直接クエリーできる未来を想像すると、とてもワクワクしますね!

もう少し詳しく知りたい方へ

弊社インサイトテクノロジーは、Denodo 社の公式パートナーとして、Denodo Platform の紹介、販売、導入支援を行っています。ご興味のある方は、ぜひ以下のリンクからお問い合わせください。

また、「これからデータ統合基盤を整備したい」「どのようにデータを統合すればよいか迷っている」といった初期段階のお悩みや、「現在進行中のプロジェクトで特定の課題がある(例: Snowflake に SAP からリアルタイムデータを取り込みたい)」といった具体的なご相談も、ぜひお気軽にお問い合わせください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?