BotKitでのメッセージ送信には以下の2種類があります。
- ユーザーメッセージに反応
- タイマーや外部からのwebhookなどに対応
前者はユーザーメッセージに対して返信する形になりますが、
後者は返信ではないので、送信先のチャンネルを指定してあげなければなりません。
その際、チャンネル名ではなく、チャンネルIDが必要になります。
bot.say(
{
text: 'my message text',
channel: 'C0H338YH4' // a valid slack channel, group, mpim, or im ID
}
);
- チャンネル名
#random
これでは送れない 🙅 - チャンネルID
C0H338YH4
これが必要 🙆
チャンネルIDは普通には取得できないので、BotKitに組み込まれたslackAPIの機能を使い、
チャンネル名からチャンネルIDを取得してみます。
チャンネル一覧取得
getChannelFromName = (name) => {
return new Promise((resolve, reject) => {
_bot.api.channels.list({}, function (err, response) {
for (let channel of response.channels) {
if (channel.name === name) {
resolve(channel);
break;
}
}
});
});
};
使い方は以下の通りです。
getChannelFromName('random').then((channel) => {
_bot.say({
text: 'こんにちは!',
channel: channel.id,
});
});
ユーザーIDも同じような方法で取得できます。
getUserFromName = (name) => {
return new Promise((resolve, reject) => {
_bot.api.users.list({}, function (err, response) {
for (let user of response.members) {
if (user.name === name) {
resolve(user);
break;
}
}
});
});
};