Integrations
Zulip
Lineman can post your cost alerts into a Zulip stream using Zulip's Slack-compatible incoming webhook. It runs one way: alerts go out to Zulip, and nothing typed in Zulip changes anything in Lineman.
Not generally available yet. Zulip sits behind the integrations feature flag, so the card will not appear at Dashboard → Integrations unless your account has been enabled for it. There is no setting on your side that switches it on, so if you cannot see it, that is why.
Create the incoming webhook in Zulip
- 1In Zulip, open Personal settings and go to the Bots tab. Organisation administrators can do the same from Organisation settings, and some Zulip versions file this under Integrations instead.
- 2Add a bot whose type is Incoming webhook, name it something you will still recognise in six months (for example
Lineman), and pick the stream the alerts should go to. - 3Copy the bot's webhook URL. That URL is the credential on its own: anyone who holds it can post into that stream, so handle it like a password.
Connect it in Lineman
- 1In Lineman, go to Dashboard → Integrations and open Zulip.
- 2Paste the webhook URL into the form and save it.
- 3Press Test. This posts a real message to Zulip rather than a simulated one, so everyone subscribed to that stream will see it. Warn them first if it is a busy stream.
Do not skip the test. A webhook URL can be perfectly well-formed and still be dead: the bot was deactivated, or it lost the right to post to that stream. Nothing tells you until a real cost alert is dropped and nobody notices it is missing. The test is the one moment you get to see that failure while you are still looking at the screen.
Streams and topics
Zulip does not have plain channels. Every message lives in a stream and, within that, a topic. The second level is where alerts get lost: a message can arrive in exactly the right stream and still sit under a topic nobody has open.
So after pressing Test, go and find the message rather than trusting the confirmation. Check it landed in the stream you meant, under a topic your team actually reads. If it turned up under a default or unnamed topic, set the stream and topic on the webhook in Zulip, copy the URL again, save it in Lineman and test once more.
Self-hosted Zulip
- Any host works. Zulip is self-hosted as often as not, so Lineman does not restrict which host the webhook URL points at. Your own domain behaves exactly like a Zulip Cloud one.
- The URL must be https. A plain http URL is refused, because the alert and the webhook URL itself would otherwise cross the network in the clear.
- The URL is stored encrypted. To cut Lineman off, deactivate the bot in Zulip: that invalidates the URL straight away, whether or not you have removed it in Lineman first.
What gets posted
- Cost alerts, and nothing else. Lineman posts when a spend alert fires. It does not mirror your dashboard into Zulip, and there is no command you can type in Zulip to query it.
- Amounts are in US dollars. Lineman shows money in dollars everywhere, never cents, so a figure in a Zulip alert matches the one in Cost Explorer with no conversion needed.