AE2 Web Integration

Discord & ntfy notifications

Receive updates when tracked crafting jobs complete or are canceled, in a Discord channel or on your phone.

1. Prepare the server

Start with a working AE2 Web Integration server. Open config/ae2webintegration/config.toml and disable public mode:

[general]
public_mode = false

Crafting notifications require this mode, which makes the web panel available through the Admin account. You can use Discord, ntfy or both. Edit the existing sections in the generated file and keep your other settings.

2. Set up Discord

  1. In Discord, open Server Settings, then Integrations. Select Create Webhook and choose the text channel for updates. Your Discord role needs the Manage Webhooks permission.
  2. Select Copy Webhook URL and put the complete URL in discord.webhook.
  3. Optionally set discord.role_id to the numeric ID of a role to mention.
[discord]
webhook = 'paste-your-webhook-url-here'
role_id = ''
crafting_style = 'IMAGE_CARD'

Leave role_id empty for no role mention. When set, the role is mentioned on every Discord notification. Keep the webhook URL private; it allows posting to that channel. An empty webhook disables this destination.

crafting_style sets how a crafting notification looks. It defaults to IMAGE_CARD. Every style includes the text message with the item, quantity, network, CPU, duration and requesters.

  • IMAGE_CARD: adds a dark card image with the same details.
  • SMALL_ICON: adds the item's icon as a small thumbnail.
  • SIMPLE: sends text only.

The images use the server's icon pack. SMALL_ICON sends text only when no icon is available for the item, and IMAGE_CARD shows a placeholder instead of the icon, or sends text if the card cannot be created.

Discord's webhook guide includes the service's setup screens.

3. Set up ntfy

  1. Install the ntfy app and subscribe to a topic on ntfy.sh or your own ntfy server. The official phone setup guide covers the Android and iOS apps.
  2. Set ntfy.host to that server's base address and ntfy.topic to the exact topic name you subscribed to. Keep the topic out of the host address.
  3. For a topic that requires authentication, fill in both ntfy.user and ntfy.password using an account allowed to publish there. Otherwise leave both empty.
[ntfy]
host = 'ntfy.sh'
topic = 'your-topic-name'
user = ''
password = ''

An unprotected topic is accessible to anyone who knows its name. Choose a hard-to-guess topic or configure access control on your ntfy server.

A host without a protocol uses HTTPS. You can also provide a complete base address such as https://ntfy.example.com. Both host and topic are required. Filling in only one of user or password disables ntfy. See ntfy's authentication documentation for topic permissions.

4. Choose filters and the panel link

[notifications]
minimum_crafting_duration_seconds = 0
minimum_crafting_amount = 0
full_domain = ''

Both minimums must be met for a crafting notification to be sent. Duration is measured in seconds; amount uses the job's recorded final output quantity. Both default to 0, which allows all tracked jobs through these filters. Use nonnegative whole numbers to raise either minimum.

These filters apply to completed and canceled jobs on both destinations. Integration startup and configuration warning messages are separate and do not use these filters.

To open your web panel when an ntfy notification is selected, set notifications.full_domain to its complete browser address, including the protocol and port when needed. Use an address reachable from the receiving device. An empty value disables that link. This setting applies to ntfy.

5. Enable crafting tracking for each network

  1. Sign in to the web panel as Admin and choose a network.
  2. Open Network details.
  3. Enable Record crafting history and select Save settings.

Repeat this for each network whose jobs should send updates. Tracking must be enabled when a job starts and when it ends. The crafting notification includes the network name, CPU name, output name and quantity, elapsed time and whether the job completed or was canceled. A network without a name is shown by its identifier.

Discord and ntfy notifications also say who requested the job. A player is shown by name, an order placed in the web terminal as Web, and a machine request as Automation. When requests are merged into a running job, each different requester is listed, separated by commas; a repeat from the same player or source appears once. If no requester was recorded, the notification shows Unknown.

Jobs started by machines

Player crafting requests are eligible by default. To include requests made directly by machines, enable this setting too:

[tracking]
track_machine_crafting = true

This defaults to false. The network must still have crafting tracking enabled.

6. Apply the configuration and check delivery

Save config.toml, then restart the Minecraft server or run this command with server operator permission level 4:

/ae2webintegration reload

The reload restarts the web server and initializes the configured destinations. The mod sends an integration startup message to each enabled destination when public mode is disabled. Then start a new job on a tracked network and let it complete to check crafting notifications with your chosen filters.

If updates do not arrive

No startup message

Check the destination values and apply the configuration again. For Discord, confirm that the full webhook URL was copied. For ntfy, check the host, topic and matching subscription, and supply either both credentials or neither. Check the Minecraft server log for a webhook request failure or an HTTP response error.

Startup works, but crafting updates are missing

Confirm general.public_mode = false, enable Record crafting history on the correct network and start a new job. Check both notification minimums. For a request started directly by a machine, also check tracking.track_machine_crafting. A warning about public mode means crafting notifications are disabled until you change it and reload.

The ntfy notification opens the wrong address

Update notifications.full_domain to the panel address you use on that device, then reload the configuration. The notification link opens the panel; normal web access and login settings still apply.