はじめに
WorkatoでSlackに関する何らかの処理を行う際に、Slackのチャンネル名に対応するチャンネルIDが必要となる場合があります。
Workatoではこのような処理をノーコードで実装することは出来ますが、実装の複雑化や実行タスク数の増加が生じるため、Rubyコネクターを利用するのが効果的です。
ここでは、Rubyコネクターによるチャンネル名からチャンネルIDを取得する手順についてご説明します。
前提条件
https://api.slack.com/ で以下の対応が事前に行われていること
- Rubyコネクターで利用するSlackアプリのOAuthトークン(Bot User Token)が取得済みである
- 上記OAuthトークンにおいては、Bot token scopesとして
channels:read
groups:read
im:read
mpim:read
が有効になっている(許可されている)
手順
1.Rubyコネクターを追加します。
2.Inputに以下の変数を定義します。必要に応じて値をセットします。
変数 | 値 |
---|---|
token | SlackのOAuth(Bearer)トークン |
channel | チャンネルIDを取得したいSlackチャンネル名 |
3.Output schemaを以下のとおり定義します。
4.Codeへ以下のコードをセットします。
url = 'https://slack.com/api/conversations.list'
cursor = ''
is_last = false
is_exist = false
result = {
id: '',
channel: input['channel']
}
while ! is_last do
res = get(url)
.params(
cursor: cursor,
exclude_archived: 'true',
limit: '100',
types: 'public_channel, private_channel'
)
.headers(Authorization: 'Bearer ' + input['token'])
.response_format_json
res["channels"].each do | channel |
if input['channel'] == channel['name']
result['id'] = channel['id']
is_last = true
is_exist = true
end
end
if res["response_metadata"]["next_cursor"].blank?
is_last = true
else
cursor = res["response_metadata"]["next_cursor"]
end
end
{
id: result['id'],
channel: input['channel'],
exists: is_exist
}