- 23 typed MCP messaging and account-management tools;
- a ChatKit channel for inbound conversations and agent replies;
- a Signals provider for Linq webhook events; and
- a disabled-by-default Reverse Proxy profile for the Partner API V3.
Before you start
Create a Partner API token in Linq API Tooling. Treat it as a secret. Tilde stores the token as an encrypted managed credential; it does not place the token in MCP schemas, fixed tool arguments, webhook URLs, or exported state. Decide which phone lines the installation should own:- Leave Phone-line filters empty to use the account’s complete line pool and Linq failover.
- Enter one or more E.164 numbers, separated by commas, to limit inbound routing and outbound defaults to that operational pool.
- Create one Tilde installation per line when each line needs independent agents, access policy, or lifecycle. Use a shared installation when several lines should round-robin as one pool.
Connect Linq
- In Tilde, open ChatKit or Tools and add Linq.
- Enter the Linq API token and an account or line-pool name.
- Optionally enter the E.164 phone-line filters and choose a default ChatKit agent.
- Complete setup once. Tilde provisions the Tool, ChatKit, Signals, and Reverse Proxy surfaces together; connecting Linq from either Tools or ChatKit produces the same installation.
- Enable the Linq tools needed by an MCP server. The Reverse Proxy remains disabled until you explicitly enable it.
common_provider/installation plus a pending credential/setup_item. After importing state, reconnect the API token once to restore every generated surface. Webhook signing secrets are generated again and are never exported.
Webhooks
For the managed Linq setup, do not create a webhook subscription manually. Tilde creates it through the Linq Partner API, subscribes to the events Linq currently accepts, stores the one-time Standard Webhooks signing secret, and removes the subscription when the common installation is deleted. The generated target has this shape:- Create the Signals provider in Tilde and copy its generated webhook URL.
- In Linq API Tooling, create a webhook subscription whose target is the copied URL with
?version=2026-02-03appended. - Subscribe to the event families your automation needs.
- Copy the returned
whsec_...signing secret immediately into the Tilde setup field. Linq returns it only when the subscription is created.
Supported events
Tilde normalizes Linq message, reaction, poll, participant, chat, typing, phone-number, contact-card, payment, and connection events. Incomingmessage.received events can also open or continue a ChatKit session keyed by the Linq chat.
Linq currently advertises four webhook names that its subscription-creation endpoint rejects: payment.declined, payment.authorized, connection.created, and connection.revoked. Managed setup detects explicit rejection and retries without only those names; the rest of the catalog remains subscribed.
Go-live practices
Design messaging for inbound-first conversations, space messages naturally, share contact cards early, and round-robin new users across active lines. Keep fallback lines warm. Do not exceed roughly 5,000–7,000 messages per day per line, include links or media in the first message, bombard non-responders, isolate Android users onto separate lines, or use iMessage for cold outreach.Verify the connection
Use the Linq tools to list phone lines and chats, then send a reply to a conversation that has already messaged the line. Confirm that:- the recipient receives the text, reaction, or poll;
- a
linq.message.receivedSignal appears for an inbound reply; and - the matching ChatKit session receives the inbound message when the messages subscription is enabled.
TypeScript SDK types
@trytilde/sdk-vercel-ai-node exposes inbound Linq message metadata as
context.linq with LinqChatKitMessageMetadata. Signals use the complete
LinqSignalType union and the event-indexed LinqSignalByType map, so a
"linq.message.received" handler receives a narrowed
LinqWebhookEnvelope<"message.received"> rather than untyped JSON.
Register conversions under onUnprocessed.linq when loading ChatKit history: