← Back to Plugins
Channels

Linq

stormb0rn By stormb0rn 👁 7 views ▲ 0 votes

OpenClaw channel plugin for Linq β€” iMessage, RCS & SMS via Linq cloud API

GitHub

Install

npm install
openclaw

Configuration Example

{
  "channels": {
    "linq": {
      "enabled": true,
      "apiKey": "<your-linq-api-key>",
      "fromNumber": "+1XXXXXXXXXX",
      "webhookSecret": "<signing-secret-from-webhook-subscription>",
      "dmPolicy": "pairing",
      "allowFrom": ["[email protected]"],
      "groupPolicy": "open",
      "serve": {
        "port": 3337,
        "bind": "127.0.0.1",
        "path": "/linq-webhook"
      }
    }
  }
}

README

# openclaw-linq

OpenClaw channel plugin for [Linq](https://www.linqapp.com/) β€” enables AI conversations via iMessage, RCS, and SMS through Linq's cloud messaging API.

## Features

- iMessage, RCS, SMS support with intelligent fallback
- DM and group chat support
- Pairing-based access control
- Webhook signature verification (HMAC-SHA256)
- Typing indicators and read receipts
- Reply context tracking
- Standalone webhook server (bypasses gateway auth)

## Setup

### 1. Install the plugin

```bash
cd openclaw-linq
npm install
openclaw plugins install --link .
```

### 2. Configure

Add to `~/.openclaw/clawdbot.json`:

```json
{
  "channels": {
    "linq": {
      "enabled": true,
      "apiKey": "<your-linq-api-key>",
      "fromNumber": "+1XXXXXXXXXX",
      "webhookSecret": "<signing-secret-from-webhook-subscription>",
      "dmPolicy": "pairing",
      "allowFrom": ["[email protected]"],
      "groupPolicy": "open",
      "serve": {
        "port": 3337,
        "bind": "127.0.0.1",
        "path": "/linq-webhook"
      }
    }
  }
}
```

### 3. Register a webhook subscription

```bash
curl -X POST https://api.linqapp.com/api/partner/v3/webhook-subscriptions \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "target_url": "https://your-domain.com/linq-webhook",
    "subscribed_events": [
      "message.received", "message.sent",
      "message.delivered", "message.failed",
      "reaction.added", "reaction.removed"
    ]
  }'
```

Save the returned `signing_secret` as `webhookSecret` in the config.

### 4. Expose webhook endpoint

Use Cloudflare Tunnel, ngrok, or any reverse proxy to route your public URL to the standalone server port (default 3337).

### 5. Restart gateway

```bash
openclaw gateway restart
```

## Configuration Options

| Key | Type | Default | Description |
|-----|------|---------|-------------|
| `apiKey` | string | β€” | Linq Partner API key (required) |
| `fromNumber` | string | β€” | Your Linq phone number in E.164 format (required) |
| `webhookSecret` | string | β€” | Webhook signing secret for HMAC verification |
| `dmPolicy` | string | `"pairing"` | DM access policy: `pairing`, `allowlist`, `open`, `disabled` |
| `allowFrom` | string[] | `[]` | Allowed sender handles (email/phone) |
| `groupPolicy` | string | `"allowlist"` | Group chat policy: `open`, `allowlist`, `disabled` |
| `groupAllowFrom` | string[] | β€” | Group-specific allowlist (falls back to `allowFrom`) |
| `preferredService` | string | β€” | Preferred messaging service: `iMessage`, `RCS`, `SMS` |
| `sendReadReceipts` | boolean | `true` | Auto-send read receipts on inbound messages |
| `blockStreaming` | boolean | β€” | Enable/disable block streaming for replies |
| `textChunkLimit` | number | `4000` | Max characters per outbound message chunk |
| `serve.port` | number | `3337` | Standalone webhook server port |
| `serve.bind` | string | `"127.0.0.1"` | Standalone server bind address |
| `serve.path` | string | `"/linq-webhook"` | Webhook endpoint path |

## Pairing

When `dmPolicy` is set to `"pairing"`, new senders receive a pairing code. Approve with:

```bash
openclaw pairing approve linq <CODE>
```

## License

MIT
channels

Comments

Sign in to leave a comment

Loading comments...