目的
株式会社primeNumberでテクニカルサポートエンジニアとして働いている@kimura34です。
弊社が提供しているサービスTROCCO®︎ではEssentialプラン以上のお客様にはslackを利用したサポートを提供しており、
エラーなどのトラブル発生時や、利用方法などに関する相談があるときはslack上でコミュニケーションを取っています。
入社したばかりの頃はTROCCO®︎のことを知るための教科書として、過去の問い合わせ履歴から学んでいました。
今でも問い合わせを受けた時はSlackやSalesforceで検索をかけて、過去に同じような事例がないか確認しています。
しかし自分が参加していないSlackチャンネルの履歴までは確認できないので過去の事例に辿り着かないこともよくありました。
チャンネルへの参加有無関係なく、過去のチャット履歴を検索することができたらハッピー!なのに、と何度思ったことか。。。
ナレッジをCS内で共有するために
Slackのチャンネルからチャット情報(お客様からの問い合わせ履歴)を取得して、
過去の問い合わせを資産として扱い、今後の問い合わせ対応の効率化に結びつけていくことが今回の施策の目的です。
3部作でお送りします〜!
第一弾 TROCCO®︎を使ってSlackからチャット情報を抽出しBigQueryに集約する
第二弾 (仮)TROCCO®のワークフローからDataformを動かす
第三弾 (仮)TROCCO®とBigqueryで作る簡単LLM
第一弾 TROCCO®︎を使ってslackからチャット情報を抽出しBigQueryに集約する
SlackAPIを利用してチャット情報を取得し、BigQueryに転送
を行なっていきます!
事前準備
Slack APIを利用するための準備をしておきます。
Botアプリを指定のワークスペースに作成、追加
ここからアクセスします。
適切なスコープを付与
"Scopes"の"Add an OAuth Scope"にて、必要なScopeを付与します。
- 今回利用するAPIに必要なスコープは
channels:history
とgroups:history
Botを取得対象のチャンネルに追加
"インテグレーション"タブの"アプリを追加する"にて、作成したアプリを追加します。
Bot User OAuth Access Tokenを取得
"OAuth & Permissions"を開きます。
"Scopes"の"Add an OAuth Scope"にて、必要なScopeを付与します。
※ SlackAPI上で適切なScopeの付与が先に行われている必要があります
"Install to Workspace"をクリックします。
※ Scopeを上記手順の後新たに追加した場合、Bot User OAuth TokenをReinstallする必要があります。上記3、4の手順を再度行っていただくだけ問題ございませんが、Reinstall忘れにご注意ください。
転送設定を作成
ここからTROCCO®︎を利用してslack -> BigQueryにデータを転送していきます。
TROCCO®︎の転送元コネクタにslackはあるのですが、取得可能なデータがusers.list
のみなので、今回取得予定のconversations.history
とconversations.replies
は転送元slackでは利用できません。
TROCCO®︎で提供しているコネクタ以外も転送元として利用したい・・・。そんな時に試して欲しいのが転送元コネクタHTTP・HTTPSです!!
転送元HTTP・HTTPSはAPIの提供がある外部サービスだと利用が可能となります。
※ 利用実績や検証の相談のれますのでいつでもご連絡ください〜
Slack APIは転送元HTTP・HTTPSでデータ取得ができたので、HowToを説明していきます。
STEP1
まず転送元HTTP・HTTPS → 転送先BigQueryの転送設定を作成します。
カスタム変数を使って動的にパラメータの値を変更できるようにしたいので、まずカスタム変数を作成します。
今回動的に変化させたいのがチャンネルIDと取得する期間の始まりと終わりです。
SlackAPIでは取得する期間を絞ることができるのですが、Unix timestampでの指定が必須なのでデータ型は文字列で作成します。
URLにエンドポイントを入力します。今回はチャットの情報を取得するconversations.history
のAPIを利用するので、https://slack.com/api/conversations.history
を入力しました。
HTTPメソッドはPOSTなのでPOST
と入力します。
入力ファイル形式にはJSONPath
を指定します。
JSONPath には$.messages
を入力します。
パラメータにはSlack APIの仕様書に載っているパラメータを設定することができます。
ここで先ほど作成したカスタム変数を埋め込むことで、実行時に動的に展開することができます。
パラメータの名前はAPIの仕様書に載っているキー名を入力してください。
HTTPヘッダに認証情報を定義します。
SlackAPIの場合は事前準備で取得したトークンをBearer 発行したトークン
の形式で入力します。マスキングにチェックをつけると画面上では***で表示されるので安全です。
転送先BigQueryの設定に関しては割愛します。
STEP2
設定に問題がない場合、STEP2のデータ設定タブ内「カラム定義」がこんな感じで自動作成されます。
必要なデータだけ取得するための絞り込みを行います。
今回はts(チャットのタイムスタンプ)のデータだけ取得、後続でconversations.replies
を使ってチャットに紐づくスレッド情報を取得しようと思います。
そのためにchannel_idも併せてtsと管理しておきたいので、取得したデータ内にはないですが、STEP1で作成したカスタム変数を埋め込みchannel_idも転送します。
プレビューを実行すると必要なデータのみを抽出することができました。
ワークフローを作成
転送設定作成時にカスタム変数をリクエストのパラメータに埋め込んでいたのですが、ここで動的に展開することができます。該当の転送設定をクリックして編集します。
カスタム変数でループ実行にチェックをつけると、ループの種類を選択することができます。
今回はBigQuery上に用意しておいたチャンネルIDのリストからチャンネルIDを取得してループ実行したかったので、「Google BigQueryのクエリ結果でループ」を選択しました。
対象のカスタム変数に展開したいカスタム変数を選択します。
2ヶ月分のチャット情報を取得したいと考えたので以下のようなクエリを書きました。
対象カスタム変数で選択した順番に合わせて展開したいのでSELECT文の順番に注意が必要です。
WITH tmp AS (
SELECT
channel_id,
channel_name
FROM
dl_slack_rawdata.dwh_slack_id_add
)
SELECT
channel_id,
UNIX_SECONDS(TIMESTAMP(DATE("2024-08-01"), "Asia/Tokyo")) AS oldest,
UNIX_SECONDS(TIMESTAMP_SUB(TIMESTAMP(DATE("2024-10-01"), "Asia/Tokyo"), INTERVAL 1 SECOND)) AS oldest,
channel_name
FROM
tmp
最後に
今回紹介したのはチャットのタイムスタンプを取得するところまでですが、チャンネルIDとtsを使ってチャットに紐づいているスレッド情報を取得する転送設定を作成し、それらをワークフローで繋げることでスレッドの情報取得が可能になります。
これにて第一弾は終了です〜〜!
TROCCO®︎を使った良いところは、一回設定してしまえば定期実行でデータを貯めていけるので、とても楽にデータを抽出、管理することができるところですね。