botkitで作るイベント駆動bot

17
BotKitで作る イベント駆動Bot @hico_horiuchi

Upload: akihiko-horiuchi

Post on 03-Mar-2017

108 views

Category:

Technology


0 download

TRANSCRIPT

BotKitで作る

イベント駆動Bot

@hico_horiuchi

自己紹介

堀内 晨彦 (Akihiko Horiuchi)

Emacs, Ruby, GolangHubot, 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

これまで作ったBothico-horiuchi/huboco

あなたの研究生活をサポートするHubot Hubotでボット開発はじめてみた

hico-horiuchi/kaobashi工学部祭実行委員会をサポートするHubotHubotでSlackのChannelとTrelloのBoardを連携

hico-horiuchi/emojinerI 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 newdevelopers to get into programming for Slack bybuilding off the impressive collection of toolsavailable in it.— The Slack Platform launch

6

HubotとBotkitの比較 hello、hiに挨拶を返すサンプル

# Hubotrobot.respond /hello|hi/i, (message) -> message.reply 'Hello.'

// Botkitcontroller.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

イベント駆動BotSlackの 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で簡単に実装できるよ

# Hubotrobot.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

// Botkitcontroller.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の幅が広がると思うので

ぜひ試してみて下さい!-

ありがとうございました-