[ 'generic' => [ 'title' => 'Generic JSON', 'name' => 'n8n incident workflow', 'address' => 'Receiver webhook URL', 'placeholder' => 'https://automation.example.com/webhook/pharos-incidents', 'help' => 'Use the production URL of a receiver that accepts JSON over POST. In n8n, choose the Webhook node, not the HTTP Request node.', 'summary' => 'Start an automation when an incident is created or updated.', 'steps' => ['Create a POST webhook in n8n or your own receiver.', 'For n8n, publish or activate the workflow and copy its Production URL. A Test URL only works while listening.', 'Add this destination, then use Send test and check the workflow execution.'], 'result' => 'JSON contains event and incident. In n8n, read body.event and body.incident. Resolutions arrive as incident.updated with a populated resolved_at.', 'docs' => 'https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/', ], 'slack' => [ 'title' => 'Slack', 'name' => '#status in Slack', 'address' => 'Slack incoming webhook URL', 'placeholder' => 'https://hooks.slack.com/services/YOUR/WEBHOOK/SECRET', 'help' => 'Copy the Incoming Webhook URL from your Slack app. The webhook chooses the channel; the name above is only a label in Pharos.', 'summary' => 'Send incident updates to a Slack channel.', 'steps' => ['Enable Incoming Webhooks in your Slack app.', 'Authorize the destination channel and copy its webhook URL.', 'Add this destination, then use Send test and check that channel.'], 'result' => 'Slack receives a formatted incident message with its status, impact and affected components.', 'docs' => 'https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/', ], 'teams' => [ 'title' => 'Microsoft Teams', 'name' => 'Operations channel in Teams', 'address' => 'Teams Workflow webhook URL', 'placeholder' => 'Paste the full URL generated by your Teams Workflow', 'help' => 'Use a Teams Workflow webhook that accepts requests without Microsoft sign-in. Keep the full URL, including its query parameters.', 'summary' => 'Post incident cards to your Teams workflow destination.', 'steps' => ['Create a Workflow with the trigger When a Teams webhook request is received.', 'Configure its destination and an authentication setting compatible with external webhook requests, then copy the generated URL.', 'Add this destination and use Send test. Pharos sends an Adaptive Card envelope.'], 'result' => 'Teams receives a card with the incident and a link to the status page. Tenant restrictions may limit which workflows you can create.', 'docs' => 'https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook', ], 'discord' => [ 'title' => 'Discord', 'name' => '#status in Discord', 'address' => 'Discord channel webhook URL', 'placeholder' => 'https://discord.com/api/webhooks/WEBHOOK_ID/WEBHOOK_TOKEN', 'help' => 'Copy the webhook URL for the destination channel. A server invite or bot token is not a webhook URL.', 'summary' => 'Send incident messages to a Discord channel.', 'steps' => ['Create or select a webhook in the channel integrations.', 'Copy its HTTPS webhook URL from discord.com.', 'Add this destination, then use Send test and check the channel.'], 'result' => 'Discord receives the incident title and status-page link. Automatic mentions are disabled.', 'docs' => 'https://docs.discord.com/developers/resources/webhook', ], 'telegram' => [ 'title' => 'Telegram', 'name' => 'Telegram operations group', 'address' => '', 'placeholder' => '', 'help' => 'Pharos builds the Telegram API address from your bot token. No webhook URL is needed.', 'summary' => 'Send incident messages through your Telegram bot.', 'steps' => ['Create a bot with @BotFather and copy its token.', 'Start a chat with the bot or add it to your group or channel with permission to send.', 'Enter the numeric chat ID, including a group minus sign, or a public channel @username. Add the destination and send a test.'], 'result' => 'The selected chat receives the incident status, title and status-page link. A personal @username cannot replace a numeric chat ID.', 'docs' => 'https://core.telegram.org/bots/features#botfather', ], 'signal' => [ 'title' => 'Signal', 'name' => 'Signal on-call group', 'address' => 'Signal bridge URL', 'placeholder' => 'https://signal.example.com/v2/send', 'help' => 'Use your own signal-cli-rest-api bridge at /v2/send over HTTPS, with a reverse proxy that checks the bearer token below.', 'summary' => 'Send incident messages through a Signal bridge you manage.', 'steps' => ['Set up and register your own signal-cli-rest-api bridge.', 'Protect its HTTPS endpoint with bearer-token authentication at the reverse proxy.', 'Enter the sender, recipient and bridge token. Add the destination, then send a test.'], 'result' => 'Your bridge sends the incident title and status-page link to the chosen recipient. Pharos does not host or register a Signal account.', 'docs' => 'https://github.com/bbernhard/signal-cli-rest-api', ], ], ];