20. Redirecting Pipeline Output¶
If it’s good enough for your terminal, it’s good enough for your chat bot
Normally when you execute a chat command, the output will be sent to the
same place you typed the command. That is, if you’re talking with Cog in
your #general
Slack channel, output will show up in #general
as
well.
However, it can be useful to have output go to another location (or even
multiple locations!). Cog provides two operators for this: >
for
single-destination redirects, and *>
for multiple destinations.
This can be great for ensuring that everyone that needs to know what’s going on is clued in. As it turns out, it’s also great for trolling your coworkers, as we’ll see icon:smile-o[]
20.1. Redirection Destinations¶
- Chat User
You can direct output to an individual user by using their chat handle as a destination.
Cog.
!echo "Hi, boss!" > @imbriaco
The output will show up in a one-on-one chat conversation between the Cog bot and the user.
One important thing to note is that this target is the chat handle of the person, and not their Cog username (which may be different). Another thing to be aware of is the destination must be formatted according to your chat platform’s conventions for mentioning users. For example, if you’re using Slack,
@imbriaco
would be valid, but justimbriaco
(without the@
) would be invalid. On the other hand, If you’re using IRC, which has no such conventions, you would use just the bare chat handle (here,imbriaco
).- Chat Room / Channel
Instead of sending the output of a command to only one person, you can alternatively send it to a chat room. The notation is similar to that for individual users:
Cog.
!echo "I love our operations team!" > #ops
Just as with user redirection destinations, your chat room’s name must be formatted according to the expected conventions of your chat provider (e.g.
#ops
but notops
on Slack, etc.)
- here Alias
Cog provides a special alias
here
that is shorthand for “wherever the command came from”. In fact, if you provide no redirect destinations, Cog will effectively treat it as though you redirected tohere
. That is,!echo "Hello"
and!echo "Hello" > here
will behave identically. If you do provide explicit redirect destinations, however, you will need to providehere
if you would also like output to go to wherever you are currently typing.While this is sometimes useful in chat, it becomes more useful when setting up pipelines that are triggered remotely.
This alias is always the literal string
here
, regardless of chat platform.
- me Alias
Similar to
here
, theme
alias is a shortcut for sending output to yourself.This alias is always the literal string
me
, regardless of chat platform.
- chat:// URLs
Under the hood, a user or room redirect destination like
#general
is actually treated as though it were typedchat://#general
. This URL syntax instructs Cog to use the currently-configured chat adapter to send output to#general
, whatever that means for that specific chat adapter.This additional syntax is unnecessary when you are interacting with Cog via chat;
!echo "Hello" > #general
expands to!echo "Hello" > chat://#general
, because Cog defaults to sending output via the same adapter it received the input.However, this URL syntax becomes required when you interact with Cog through non-chat means, such as by triggering pipelines via the HTTP adapter. In that case, you may want output to show up in chat, but the HTTP adapter does not know how to resolve
#general
to your Slack channel. By usingchat://#general
, you’re instructing Cog to hand off output processing to your chat adapter instead.
20.2. Multiple Redirect Destinations¶
By altering our syntax slightly, we can redirect to any number of destinations, which is useful for keeping multiple parties in the loop.
If you’re in the middle of an incident, you could imagine using a
notional tweet
command to alert users of your service, while using
redirection to let your support and operations teams know that
something’s up, all at the same time:
Cog.
!tweet "Investigating slow API response times" *> here #support #ops @brent
Instead of >
, we use *>
. Now the utility of aliases comes into
play; we would also probably like a record of what’s happening in the
current channel, as well as bringing others into the situation.
20.3. Easter Egg: Trolling Your Coworkers¶
As we stumbled upon here at Operable, redirection can also be used to troll your coworkers. Simply type commands in a private chat with the bot (where nobody can see what you’re doing) and redirect the output to the destination(s) of your choice.
Cog.
!echo "I'm sorry Dave; I'm afraid I can't do that." > #general
Remember: with great power comes great responsibility!