Slide 1

Slide 1 text

golangͰ࡞Δslack bot @y_takky2014

Slide 2

Slide 2 text

• εϥΠυதͷGopher͸
 Renée FrenchʹΑͬͯσβΠϯ͞Ε·ͨ͠
 http://reneefrench.blogspot.com/ • εϥΠυ্ͷ GopherͷҰ෦ը૾͸ @tenten͞Μͷ gopher-stickersΛ࢖༻͍ͯ͠·͢ 
 (https://github.com/tenntenn/gopher-stickers)

Slide 3

Slide 3 text

ΞδΣϯμ • ͳͥ golang ͰBotΛ࡞Δͷ͔ • golangͰͷSlackBotͷ࣮૷ํ๏(Sample) • ※SampleϓϩάϥϜ͸طଘͷBotΛݩʹ
 ۀ຿࣌ؒ֎Ͱͬ͘͞ͱ࡞ͬͨ΋ͷ

Slide 4

Slide 4 text

SlackBotͷ࡞Γํ • hubot
 • Botkit • API (Rest / WebSocket)

Slide 5

Slide 5 text

hubot • botΛ࡞੒͢ΔͨΊͷϑϨʔϜϫʔΫ • Adapterͷ੾Γସ͑Ͱͦͷ··πʔϧͷҠߦ͕Մೳ • coffeescript

Slide 6

Slide 6 text

botkit • ಛఆͷαʔϏε(slack΍Facebook)ʹಛԽͨ͠
 Bot࡞੒ϑϨʔϜϫʔΫ • Interactive Button͕ѻ͍΍͍͢ • Node.js

Slide 7

Slide 7 text

API (Rest / WebSocket) • Slack͕ఏڙ͍ͯ͠ΔAPIͰϝοηʔδΛૹ৴͢Δ • API͕ఏڙ͞Ε͍ͯΕ͹ͳΜͰ΋Ͱ͖Δ • ͍ΘΏΔWebAPIϕʔεͷ΋ͷͱ
 WebSocketϕʔεͷ΋ͷͷ2छྨ • ࣮૷ݴޠ໰Θͣ • ࠓճ͸golang

Slide 8

Slide 8 text

ͳͥgolangͳͷ͔? • ίϯύΠϧ͠ͱ͚͹࣮ߦ؀ڥ໰Θͣ • ଞγεςϜͱ࿈ܞ͢Δ࣌ʹ࣮૷͠΍͍͢

Slide 9

Slide 9 text

४උ • https://api.slack.com/bot-users ͷ
 new bot user integration͔Βslack botΛ࡞੒͢Δ • API_TOKEN͸ϝϞ͓ͬͯ͘ • botͷը૾͸͓޷ΈͰ

Slide 10

Slide 10 text

४උ • ඞཁͳIDΛऔಘ͓ͯ͘͠ • channel IDͷऔಘ • https://api.slack.com/methods/channels.list/test • BotIDͷऔಘ • https://api.slack.com/methods/users.list/test

Slide 11

Slide 11 text

golangͰͲ͏࣮૷͢Δ͔ • https://github.com/nlopes/slack Λ࢖͏ • Installing • go get -u github.com/nlopes/slack

Slide 12

Slide 12 text

1. ఆظతʹϝοηʔδΛૹ৴͢Δ • github.com/robfig/cronΛ࢖͏ • golang্Ͱఆظ࣮ߦΛαϙʔτ͢ΔϥΠϒϥϦ

Slide 13

Slide 13 text

// slack ClientΛͭ͘Δ api : = slack.New(API_TOKEN)
 // slack Real Time Messaging APIΛ࢖͏ rtm := api.NewRTM()
 // webSocketΛฒྻͰ࣮ߦ͢Δ go rtm.ManageConnection() 
 // cronΛ࡞੒͢Δɻ 5෼ຖʹRTM APIͰϝοηʔδΛಛఆCHANNEL_IDʹૹΔ c := cron.New() c.AddFunc(“0 */5 * * * *”, func () {rtm.SendMessage(rtm.NewOutgoingMessage(“test”, CHANNEL_ID))}) c.Start() 


Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

2. ϝϯγϣϯʹ൓Ԡ͢Δ

Slide 16

Slide 16 text

• 1ͱಉ༷ʹSlack Client / RTMͷwebsocketΛฒྻ࣮ߦ • ແݶϧʔϓʹͯ͠ɺແݶϧʔϓ಺ͰSlackͰड͚औͬͨΠϕϯτ ຖʹॲཧΛ෼ذ • Message EventͩͬͨΒɺMessageͷ಺༰Λݟͯ
 @BotIDʹҰக͢Δ΋ͷͩͬͨΒॲཧΛଓߦ • botUserΛ࡞Δ • Message Event಺ͷൃݴऀͷID͔ΒNameΛऔಘͯ͠
 ड͚औͬͨϝοηʔδΛͦͷ··ฦ٫


Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

3. ఱؾ༧ใػೳΛ෇͚Δ • ϝϯγϣϯʹ൓Ԡͯ͠ఱؾΛڭ͑ͯ͘ΕΔΑ͏ʹ͢Δ • livedoorͷఏڙ͍ͯ͠ΔWeather Hacks APIΛ࢖༻͢Δ

Slide 19

Slide 19 text

APIୟ͍ͨ݁ՌΛ࢖͍΍͍͢ܗʹ੔ܗͯ͠ฦ٫͢Δ

Slide 20

Slide 20 text

• @bot ఱؾ ͷ৔߹ఱؾΛڭ͑ͯ͘ΕΔΑ͏ʹ͢Δ • ఱؾAPIΛୟ͍ͨ݁Ռͷmap(࿈૝഑ྻ)Λճͯ͠
 ݁ՌΛPost

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

·ͱΊ • golangͰͷbot࣮૷ྫΛ঺հ • golang͸ϥΠϒϥϦ͕ଟʑ͋ΔͷͰ
 ֎෦APIͱͷܨ͗ࠐ͕͔ͳΓָ • ֎෦ίϚϯυ࣮ߦ౳΋΍Γ΍͍͢

Slide 23

Slide 23 text

ࢀߟ • golang Ͱ࢝ΊΔ Slack bot ։ൃ • http://blog.kaneshin.co/entry/2016/12/03/162653 • GolangͰSlack Interactive MessageΛ࢖ͬͨBotΛॻ͘ • http://tech.mercari.com/entry/2017/05/23/095500 • Gopher Stickers • https://github.com/tenntenn/gopher-stickers

Slide 24

Slide 24 text

• ΦϦδφϧͷGopher͸ Renee FrenchʹΑͬͯσβΠϯ ͞Ε·ͨ͠ɻ • εϥΠυ্ͷ GopherͷҰ෦ը૾͸ @tenten͞Μͷ gopher-stickersΛ࢖༻͍ͯ͠·͢ 
 (https://github.com/tenntenn/gopher-stickers)