SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
BotKitで作る
イベント駆動Bot
@hico_horiuchi
自己紹介
堀内 晨彦 (Akihiko Horiuchi)
Emacs, Ruby, Golang
Hubot, Sensu, Ansible, Itamae
@hico_horiuchi
http://bit.ly/hiconyan
NTT Comの ベアメタルクラウドチーム で
サービス開発やデプロイ自動化などをやってます
2
Hubot×ChatOps勉強会
第1回 2014/11/22
場 所:大阪大学 中之島センター
参加者:34人
第2回 2015/08/22
場 所:兵庫勤労市民センター
参加者:6人
第3回 ついに東京で開催できました
3
これまで作ったBot
hico-horiuchi/huboco
あなたの研究生活をサポートするHubot
Hubotでボット開発はじめてみた
hico-horiuchi/kaobashi
工学部祭実行委員会をサポートするHubot
HubotでSlackのChannelとTrelloのBoardを連携
hico-horiuchi/emojiner
I am a slack custom emoji craftsman.
新しく追加されたEmojiを教えてくれるボットを作った
4
Botkitとは?
-
Botkitの紹介
howdyai/botkit
2015年12月に発表された Botフレームワーク
スタートアップのHowdy社が開発
Slack、Messanger、Twilioなどに対応
Botkit will also provide a simplified way for new
developers to get into programming for Slack by
building off the impressive collection of tools
available in it.
— The Slack Platform launch
“
“
6
HubotとBotkitの比較
hello、hiに挨拶を返すサンプル
# Hubot
robot.respond /hello|hi/i, (message) ->
message.reply 'Hello.'
// Botkit
controller.hears(['hello', 'hi'], ['direct_message', 'direct_mention', 'mention'],
function(bot, message) {
bot.reply(message, 'Hello.');
}
);
CoffeeScriptで書けないし
コードの量も増えてる気がする…
でも、便利な機能がたくさんあるんです
7
対話(Conversation)
controller.hears(['pizzatime'], 'message_received',
function(bot, message) {
var askFlavor = function(err, convo) {
convo.ask('What flavor of pizza do you want?',
function(response, convo) {
convo.say('Awesome.');
askSize(response, convo);
convo.next();
}
);
};
var askSize = function(response, convo) {
convo.ask('What size do you want?',
function(response, convo) {
convo.say('Ok.')
askWhereDeliver(response, convo);
convo.next();
}
);
};
var askWhereDeliver = function(response, convo) {
convo.ask('So where do you want it delivered?',
function(response, convo) {
convo.say('Ok! Good bye.');
convo.next();
}
);
};
bot.startConversation(message, askFlavor);
});
8
Slack Web APIをたたく
GJにAdd Reactionするサンプル
controller.hears(['gj', 'GJ'], ['ambient'],
function(bot, message) {
bot.api.reactions.add({
timestamp: message.ts,
channel: message.channel,
name: '+1',
}
}
);
bot.api で簡単にSlackのAPIをたたける
Using the Slack Web API
HubotでSlackのEmoji Reactionを付ける
9
イベント駆動Botとは?
-
これまでのBot
ユーザーの発言に反応してアクションする
「プルリクが出たよ〜」
「テスト通ったよ〜」
「プルリク、マージしとく?」
「LGTMだね、マージよろ〜」
「おけ、ついでにデプロイしとく?」
「いいね、デプロイよろ〜」
「おけ、デプロイしといた!」
みなさんの ChatOps はどんな感じですか?
11
イベント駆動Bot
Slackの API Event に反応してアクションする
API Events | Slack
Real Time Messaging API | Slack
イベント 説明
channel_created 新しいチャンネルが作られた
channel_joined ユーザーがチャンネルに参加した
emoji_changed 新しい絵文字が登録された
file_created 新しいファイルがアップロードされた
pin_added メッセージがピンされた
team_join 新しいユーザーが参加した
12
RTMでEventを受け取る
HubotでもBotkitで簡単に実装できるよ
# Hubot
robot.adapter.client?.on? 'raw_message', (message) ->
if message.type is 'channel_joined'
# message contains data sent by slack
# in this case:
# https://api.slack.com/events/channel_joined
// Botkit
controller.on('channel_joined', function(bot, message) {
// message contains data sent by slack
// in this case:
// https://api.slack.com/events/channel_joined
});
notify "reaction_added" event for slack.com
Slack-Specific Events
13
イベント駆動のサンプル
新しいチャンネルが作られたら参加する
(全てのチャンネルにBotが居て欲しいとき)
controller.on('channel_created', function(bot, message) {
bot.api.channels.join({
name: message.channel
});
});
ユーザーがチャンネルに参加したらメッセージを送る
(ウェルカムメッセージなどを送りたいとき)
controller.on('channel_joined', function(bot, message) {
bot.say('Welcome!');
});
14
イベント駆動のサンプル
新しい絵文字が登録されたら教えてくれる
(新しい絵文字はどんどん使いたいですよね)
controller.on('emoji_changed', function(bot, message) {
if (message.subtype == 'added') {
bot.say('New emoji ' + message.names[0] + 'is added!');
}
});
新しいユーザーが参加したら案内を出す
(アイコンやプロフィールを設定して貰いたいですよね)
controller.on('team_join', function(bot, message) {
bot.say(message.user.name + 'Please set your icon and profile.')
});
15
イベント駆動どうですか?
ChatOpsの幅が広がると思うので
ぜひ試してみて下さい!
-
ありがとうございました
-

Contenu connexe

Similaire à BotKitで作るイベント駆動Bot

12月4日伝え方セミナー資料
12月4日伝え方セミナー資料12月4日伝え方セミナー資料
12月4日伝え方セミナー資料
Kaoru Nakagawa
 

Similaire à BotKitで作るイベント駆動Bot (13)

JavaScript初心者が試せるIoT【voiceflowの話】( IoTLT vol.52 @メルカリ )
JavaScript初心者が試せるIoT【voiceflowの話】( IoTLT vol.52 @メルカリ )JavaScript初心者が試せるIoT【voiceflowの話】( IoTLT vol.52 @メルカリ )
JavaScript初心者が試せるIoT【voiceflowの話】( IoTLT vol.52 @メルカリ )
 
GitHubのissue管理をいい感じにしたい TakeshiKoenuma @clover0 2020/08/21
GitHubのissue管理をいい感じにしたい TakeshiKoenuma @clover0 2020/08/21GitHubのissue管理をいい感じにしたい TakeshiKoenuma @clover0 2020/08/21
GitHubのissue管理をいい感じにしたい TakeshiKoenuma @clover0 2020/08/21
 
ChatOps with Hubot
ChatOps with HubotChatOps with Hubot
ChatOps with Hubot
 
Lightning talk. rpalt 8.10
Lightning talk. rpalt 8.10Lightning talk. rpalt 8.10
Lightning talk. rpalt 8.10
 
12月4日伝え方セミナー資料
12月4日伝え方セミナー資料12月4日伝え方セミナー資料
12月4日伝え方セミナー資料
 
熊本 HoloLens Meetup vol.0.1 前哨戦 「MTuberツール作った」
熊本 HoloLens Meetup vol.0.1 前哨戦 「MTuberツール作った」熊本 HoloLens Meetup vol.0.1 前哨戦 「MTuberツール作った」
熊本 HoloLens Meetup vol.0.1 前哨戦 「MTuberツール作った」
 
Sensu with golang
Sensu with golangSensu with golang
Sensu with golang
 
Unityで始めるHoloLensアプリ開発
Unityで始めるHoloLensアプリ開発Unityで始めるHoloLensアプリ開発
Unityで始めるHoloLensアプリ開発
 
C# Tokyo ガイド 2020/02
C# Tokyo ガイド 2020/02C# Tokyo ガイド 2020/02
C# Tokyo ガイド 2020/02
 
Unityでロボットの教師データは作れる!
Unityでロボットの教師データは作れる!Unityでロボットの教師データは作れる!
Unityでロボットの教師データは作れる!
 
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
 
HoloLensでSharingする方法(Bluetooth編)@TokyoHoloLensMeetup vol.6
HoloLensでSharingする方法(Bluetooth編)@TokyoHoloLensMeetup vol.6HoloLensでSharingする方法(Bluetooth編)@TokyoHoloLensMeetup vol.6
HoloLensでSharingする方法(Bluetooth編)@TokyoHoloLensMeetup vol.6
 
Salon Bot 〜ヘアサロンLINEアシスタントの対話を Repl-AIを使ってプロトタイピング〜
Salon Bot 〜ヘアサロンLINEアシスタントの対話を Repl-AIを使ってプロトタイピング〜Salon Bot 〜ヘアサロンLINEアシスタントの対話を Repl-AIを使ってプロトタイピング〜
Salon Bot 〜ヘアサロンLINEアシスタントの対話を Repl-AIを使ってプロトタイピング〜
 

Plus de Akihiko Horiuchi

Sensuで始めるクラウド時代のシステム監視
Sensuで始めるクラウド時代のシステム監視Sensuで始めるクラウド時代のシステム監視
Sensuで始めるクラウド時代のシステム監視
Akihiko Horiuchi
 

Plus de Akihiko Horiuchi (20)

オープンソースBotフレームワークではじめるChatOps
オープンソースBotフレームワークではじめるChatOpsオープンソースBotフレームワークではじめるChatOps
オープンソースBotフレームワークではじめるChatOps
 
Sensuで始めるクラウド時代のシステム監視
Sensuで始めるクラウド時代のシステム監視Sensuで始めるクラウド時代のシステム監視
Sensuで始めるクラウド時代のシステム監視
 
Jenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue OceanJenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue Ocean
 
Ansibleで一発!! VPSにDokkuを構築してみた
Ansibleで一発!! VPSにDokkuを構築してみたAnsibleで一発!! VPSにDokkuを構築してみた
Ansibleで一発!! VPSにDokkuを構築してみた
 
InfluxDataのTICK Stack on DockerでNW監視
InfluxDataのTICK Stack on DockerでNW監視 InfluxDataのTICK Stack on DockerでNW監視
InfluxDataのTICK Stack on DockerでNW監視
 
クラウドでGolangのテスト&デプロイ!
クラウドでGolangのテスト&デプロイ!クラウドでGolangのテスト&デプロイ!
クラウドでGolangのテスト&デプロイ!
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
Ginとbindataで作るシングルバイナリWebApp
Ginとbindataで作るシングルバイナリWebAppGinとbindataで作るシングルバイナリWebApp
Ginとbindataで作るシングルバイナリWebApp
 
ポスト・フラットデザイン 〜フラットデザイン2.0とCSSフレームワーク〜
ポスト・フラットデザイン 〜フラットデザイン2.0とCSSフレームワーク〜ポスト・フラットデザイン 〜フラットデザイン2.0とCSSフレームワーク〜
ポスト・フラットデザイン 〜フラットデザイン2.0とCSSフレームワーク〜
 
OSS監視ツールSensuの紹介
OSS監視ツールSensuの紹介OSS監視ツールSensuの紹介
OSS監視ツールSensuの紹介
 
Go言語でBot開発やってみた
Go言語でBot開発やってみたGo言語でBot開発やってみた
Go言語でBot開発やってみた
 
Sensuでネットワーク監視やってみた
Sensuでネットワーク監視やってみたSensuでネットワーク監視やってみた
Sensuでネットワーク監視やってみた
 
学生がJANOGに行くべき3つの理由
学生がJANOGに行くべき3つの理由学生がJANOGに行くべき3つの理由
学生がJANOGに行くべき3つの理由
 
HubotとChatOpsについて語るBoF
HubotとChatOpsについて語るBoFHubotとChatOpsについて語るBoF
HubotとChatOpsについて語るBoF
 
Sensu Introduction
Sensu IntroductionSensu Introduction
Sensu Introduction
 
サーバ監視ことはじめ
サーバ監視ことはじめサーバ監視ことはじめ
サーバ監視ことはじめ
 
ChatOps@研究室
ChatOps@研究室ChatOps@研究室
ChatOps@研究室
 
SKK
SKKSKK
SKK
 
Self Introduction
Self IntroductionSelf Introduction
Self Introduction
 
エディタじゃない"Emacsの使い方
エディタじゃない"Emacsの使い方エディタじゃない"Emacsの使い方
エディタじゃない"Emacsの使い方
 

Dernier

Dernier (10)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

BotKitで作るイベント駆動Bot