概要
かなり昔に使い方を紹介したのですがその際はリアルタイムメッセージAPIの使い方を紹介しました
今回はファイルを添付したメッセージの送信方法を紹介します
環境
- macOS 15.5
- Ruby 3.4.4
- slack-ruby-client 2.6.0
サンプルコード
# frozen_string_literal: true
require 'slack-ruby-client'
# MySlack クラスは Slack へのメッセージ送信とファイルアップロードを行います。
class MySlack
USER_ID = 'U1234567890' # ユーザーIDを定義
TOKEN = 'xoxb-xxx-xxx-xxx' # Slack API トークンを定義
def initialize
# Slack クライアントの初期化
Slack.configure do |config|
config.token = TOKEN
end
@client = Slack::Web::Client.new
end
def channel_id_for_sending_file
# ボットと指定のユーザーとの会話を開始し、チャンネルIDを取得
response = @client.conversations_open(users: USER_ID)
response.channel.id
end
def send_message(message_text, channel_id)
# メッセージを送信
@client.chat_postMessage(
channel: channel_id,
text: message_text
)
end
def upload_file(file_path, message_text, channel_id)
# ファイルをアップロード
@client.files_upload_v2(
filename: File.basename(file_path),
content: File.read(file_path),
channels: [channel_id],
initial_comment: message_text,
snippet_type: 'text',
title: '添付されたテキストファイル'
)
end
end
ポイント
Slack のファイルアップロード API は v1 から v2 になり大きく変更されています
チャネル名が指定不可になった他ボットからファイルを送信するためにはチャネルにボットが参加しているなどの条件があります
一番確実な方法として特定のユーザとの会話チャネルに送信する方法があるので今回はその方法を採用しています (参考)
トラブルシューティング
invalid_arguments (Slack::Web::Api::Errors::InvalidArguments)
ファイルが空の場合に発生します
どうやら空ファイルは送信できないようです
最後に
slack-ruby-client で file uplaod API v2 を使ってファイルのアップロードを行ってみました
v2 からかなり厳格なチェックが入っておりかつ v1 との互換性はないので注意が必要です
0 件のコメント:
コメントを投稿