Hello PyBot Python Chat Bots for Slack github.com/jeffk/PyBot Jeff Kramer (@jeffk) ~ Data Infrastructure @ Vox Media
Hello PyBotPython Chat Bots for Slack
github.com/jeffk/PyBot
Jeff Kramer (@jeffk) ~ Data Infrastructure @ Vox Media
Users
Turing’s Magic Matrix
PassBots
Pass
Fail
Incoming Web Hooks• Unique URLs • JSON Payloads
• Custom Names/Icons/Chan
curl -X POST —data-urlencode 'payload={ "text": "This is posted to <#general> and comes from *monkey-bot*.", "channel": "#general", "username": "monkey-bot", "icon_emoji": “:monkey_face:"}' https://hooks.slack.com/services/T00/B000/XXXXXX
Outgoing Web Hooks• Channel and/or Trigger Words
(Public-Only) • HTTP Post, JSON Resp
token=XXXXXXXXXXXXXXXXXX team_id=T0001 team_domain=example channel_id=C2147483705 channel_name=test timestamp=1355517523.000005
user_id=U2147483697 user_name=Steve text=googlebot: What is the air-speed velocity of an unladen swallow? trigger_word=googlebot:
{ "text": "African or European?” }
/Slash Commands• POST or GET • Response Only Shown to User
It’s San Francisco, ergo cold.
token=gIkuvaNzQIHg97ATv team_id=T0001 team_domain=example channel_id=C2147483705 channel_name=test
user_id=U2147483697 user_name=Steve command=/weather text=94103
Other Integrations
• Web API (OAUTH, HTTP RPC) • IRC/XMPP/LOL/SOB
The Slack Real Time Messaging API
• WebSockets
• Used by all Slack Clients
• Pushed All Messages in All Channels
• Commonly Used with Bot Users
• Can’t Join Channels
• Always Active (Unless set)
Real Time WebSockets Examples
Frameworks & Wrappers• python-rtmbot
• Uses SlackClient
• Supports Plugins
• api.slack.com/community#python
• err - Popular Chatbot w/Slack Support
• butterfield - Uses asyncio
• slacker - Popular Wrapper
Scaling Up
• Connection Proxies/Message Brokers (Relax)
• Task Queues (Celery)
• Sharding
Resources
github.com/slackhq/python-slackclient & python-rtmbot
@jeffk jeffkramer.com github.com/jeffk/PyBot
dev4slack.xoxco.com api.slack.com/web api.slack.com/community