# Wake your AI agent

An AI agent only works when its app is running. A webhook is a short message Rinhelp sends to your app when a conversation is assigned to you, or a customer replies on one. It tells the app to look at the conversations waiting on you.

Rinhelp sends at most one webhook a minute for each AI agent, and only while conversations are waiting. It tries again a few times if your app doesn't answer.

## Set up a webhook

[Connect your AI agent](/articles/98a0def1-a07d-4c34-9f19-4d168626b40c) first. Then:

1. Open **Settings > AI agents**.
2. Under the AI agent, find **Webhook for** followed by its name.
3. Pick the **App**, enter the **Web address** your app gave you (it must start with `https://`), and add any **Private headers**, one per line as `Name: value`. Rinhelp never shows them again.
4. Choose **Save**.
5. Copy the signing secret that appears. Rinhelp shows it only once. Your app uses it to check that messages really come from Rinhelp. Not every app needs it.

Choose **Remove** to stop webhooks.

## Claude routines

A routine is a saved task that Claude runs when something triggers it. Routines are in research preview on Pro, Max, Team and Enterprise plans.

1. Routines use your Claude connectors, so add Rinhelp as described in [Connect your AI agent](/articles/98a0def1-a07d-4c34-9f19-4d168626b40c), under **Claude**.
2. At claude.ai/code/routines, choose **New routine**. Give it a name and this prompt: "When fired, the message says conversations are waiting for you in Rinhelp. Look them up with conversation_list and work each one." Under **Select a trigger**, choose **API**, then create it.
3. Open the routine, choose **Edit**, then **Add another trigger** and **API**. Copy the address, then choose **Generate token** and copy the token. Claude shows it only once.
4. In Rinhelp, pick **Claude routine** as the **App**, paste the address, and add the private header `Authorization: Bearer` followed by the token. Rinhelp adds Claude's other required headers for you.

Rinhelp sends at most one webhook every 2 minutes for a Claude routine. Claude allows 30 runs an hour for one routine, so on a very busy day some webhooks may be turned away.

The prompt matters: Claude treats the message as untrusted, so the routine does nothing with it unless its prompt says so.

## Grok Bot

1. In Grok Bot, ask the Bot to add a webhook trigger to the routine that should work your conversations. Open the routine on desktop.
2. In the routine's webhook details, copy the address to post to and the key.
3. In Rinhelp, pick **Grok Bot** as the **App**, paste the address, and add the private header `Authorization: Bearer` followed by the key.

Make sure the routine's instruction tells the Bot to look up the conversations waiting on you with `conversation_list` and work them. Grok Bot passes the message to the routine along with that instruction.

## Hermes

Hermes checks the signature Rinhelp adds to every webhook, so you set up its side first and paste in the secret afterward.

1. Run `hermes gateway setup`, or set `WEBHOOK_ENABLED=true` and `WEBHOOK_PORT=8644` in `~/.hermes/.env`.
2. Hermes listens on plain `http`. Put it behind an `https` tunnel or proxy, so Rinhelp can reach `https://your-address/webhooks/rinhelp`.
3. In Rinhelp, pick **Hermes** as the **App**, enter that address, and choose **Save**. Copy the signing secret.
4. In `~/.hermes/config.yaml`, add this route with your secret:

   ```yaml
   platforms:
     webhook:
       enabled: true
       extra:
         port: 8644
         routes:
           rinhelp:
             secret: "whsec_your_secret"
             prompt: "{text}"
   ```

Hermes reads the change within about a minute. Rinhelp's message says how many conversations are waiting, and Hermes passes it to your AI agent as its prompt.

## Any other app

Pick **Other** as the **App**. Rinhelp sends a `POST` with a short JSON message, such as `{"text": "2 conversations need you in Acme"}`. It follows the Standard Webhooks signing method: every request has `webhook-id`, `webhook-timestamp` and `webhook-signature` headers, and the signing secret is the part after `whsec_`. Rinhelp doesn't follow redirects, and your app should answer within 10 seconds.
