telnyx

n8n community node for Telnyx — WhatsApp (templates + free-form), SMS/MMS, Verify (OTP) and Number Lookup. Includes a dedicated Trigger node for inbound events and delivery status webhooks.

Documentation

@swemmanuelgz/n8n-nodes-telnyx

npm version
License: MIT

Community node for n8n that gives you complete coverage of the Telnyx v2 API — with first-class support for WhatsApp Business (templates + free-form messages), SMS/MMS, Verify (OTP) and Number Lookup, plus a dedicated Trigger node for inbound webhooks.

The highlight: when you pick WhatsApp Message → Send Template, the template list is fetched live from your Telnyx account and the parameter fields for the template you select are generated automatically, so you just fill in the blanks.


Table of contents


Features

Area What's covered
WhatsApp Message Send Template, Send Text, Send Media (image/video/audio/document), Send Interactive (buttons/list), Send Location, Send Contacts, Get, List
WhatsApp Template List, Get, Create, Update, Delete
WhatsApp Business Account List, Get
WhatsApp Phone Number List, Get, Verify (register new number)
SMS / MMS Message Send SMS, Send MMS, Schedule, Cancel, Get, List
Messaging Profile List, Get, Create, Update, Delete, Get Metrics, Regenerate Secret
Messaging Phone Number List, Get, Update (reassign profile)
Short Code List, Get, Update
Hosted Number List, Get, Update
Verify (OTP) Create (SMS / Voice / Flashcall / WhatsApp), Submit Code, Get, List Profiles
Number Lookup Carrier + CNAM lookup
Trigger Filter by event type: message.received, message.sent, message.finalized, message.delivery.updated, verify.verification.verified/expired, whatsapp.message.received, whatsapp.message.updated, or all

Dynamic WhatsApp templates

  • The From number and Template fields are loaded live from your Telnyx account.
  • When you select a template, the UI inspects its components (HEADER, BODY, BUTTONS) and renders one input per variable: {{1}}, {{2}}, header media URL, button URL parameter, etc.
  • At send time the node builds the template_parameters payload for you — no JSON hand-crafting.

Installation

From the n8n UI (recommended)

  1. Open n8n and go to Settings → Community Nodes.
  2. Click Install.
  3. Enter @swemmanuelgz/n8n-nodes-telnyx and confirm.

Via npm (self-hosted)

cd ~/.n8n/custom
npm install @swemmanuelgz/n8n-nodes-telnyx
# then restart n8n

Docker

Mount a volume that contains the installed package under /home/node/.n8n/custom/:

volumes:
  - ./custom:/home/node/.n8n/custom
environment:
  - N8N_CUSTOM_EXTENSIONS=/home/node/.n8n/custom

Credentials

  1. Go to Mission Control Portal → API Keys and create a key (or reuse an existing one).
  2. In n8n, open the Credentials panel and add a new Telnyx API credential.
  3. Paste the API key into the API Key field.
  4. Click Test — the node sends a lightweight GET /whatsapp/business_accounts?page[size]=1 request to verify authentication.

The same key authenticates every resource (WhatsApp, SMS, Verify, Lookup).


Nodes

Telnyx (action node)

The main node. Pick a Resource (e.g. WhatsApp Message) then an Operation (e.g. Send Template) and fill in the fields. Resource-specific fields appear and disappear via displayOptions, so the form only ever shows what's relevant.

Architecture on disk (contributors' reference):

nodes/Telnyx/
├── Telnyx.node.ts              # Dispatcher: routes resource+operation to the right handler
├── GenericFunctions.ts         # HTTP helper, pagination, WhatsApp template parser/builder
├── descriptions/               # One *.ts per resource (INodeProperties[])
├── operations/                 # One *.ts per resource (execute handlers)
└── methods/                    # loadOptions + resourceMapping
    ├── loadOptions.ts
    ├── smsLoadOptions.ts
    ├── verifyLoadOptions.ts
    └── resourceMapping.ts      # Generates template parameter fields dynamically

TelnyxTrigger (webhook node)

Add TelnyxTrigger to a workflow and n8n will expose a webhook URL. Paste that URL in your Telnyx Messaging Profile (or WhatsApp configuration) and every event Telnyx sends will start the workflow.

Options:

  • Events — multi-select filter. Default is All Events. If you narrow the list, events that don't match get a 200 acknowledgement but do not trigger the workflow (so Telnyx doesn't retry them).
  • Response Code — HTTP status returned to Telnyx (default 200).
  • Raw Body — when enabled, the first item contains { headers, params, query, body } instead of the parsed payload — useful for signature verification or debugging.

Ed25519 signature verification (telnyx-signature-ed25519) is planned — currently the trigger accepts any caller that reaches the webhook URL, so keep the webhook path private and optionally put a reverse-proxy check in front of it.


Examples

Send a WhatsApp template

  1. Drop a Telnyx node and select Resource: WhatsApp Message, Operation: Send Template.
  2. From Phone Number — pick a number from your Telnyx account (dropdown is loaded live).
  3. To — the E.164 number of the recipient (e.g. +34612345678).
  4. Template — pick an approved template. The name, language and ID are packed into a single value.
  5. Template Parameters — the fields shown are generated from the template components. Fill them in.
  6. Execute. The node builds the template_parameters payload (body / header / buttons) and POSTs /messages/whatsapp.

Send an SMS

  1. Resource: SMS / MMS Message, Operation: Send SMS.
  2. From: any SMS-enabled number on your account.
  3. To: E.164 recipient.
  4. Text: your SMS copy.
  5. Optional — Messaging Profile (dropdown), Webhook URL for per-message DLR, Auto-Detect Encoding.

To send MMS, switch to Send MMS and add one or more Media URLs (HTTPS, public).

Run an OTP verification

  1. Resource: Verify (OTP), Operation: Create SMS Verification.
  2. Pick a Verify Profile (dropdown).
  3. Phone Number: recipient's number.
  4. Optional Custom Code, Timeout Secs.

Later, when the user submits their code, call Operation: Submit Code with the same Phone Number, the entered code, and the same Verify Profile.

React to an inbound message

  1. Drop a TelnyxTrigger node — copy the webhook URL shown.
  2. In Telnyx Mission Control, open the Messaging Profile you want to listen to and paste the URL into Inbound Webhook URL. For WhatsApp, configure the webhook under the Business Account.
  3. Keep the Events filter on All Events initially so you can inspect what Telnyx sends, then narrow it.

Known limitations

  • WhatsApp 24-hour window — free-form messages (text, media, interactive…) can only be sent within 24 hours of the user's last inbound message. Outside that window, use a template.
  • SMS availability — Spanish numbers cannot send SMS as of 2026 (Telnyx limitation, not ours). Receiving still works. Use a foreign sender number or a messaging profile with Alphanumeric Sender ID.
  • Template approval — templates go through Meta review (24-72h). Only APPROVED templates can be sent; the loadOptions dropdown filters by APPROVED by default.
  • Webhook signature verification is not yet implemented in TelnyxTrigger — see the TODO in TelnyxTrigger.node.ts.

Roadmap

  • Ed25519 webhook signature verification (opt-in via a new credential field).
  • Voice / Call Control resources (answer, bridge, speak, gather, etc.).
  • Number Management (search & order phone numbers).
  • Fax API resource.
  • Storage / Object Storage resource.
  • Translating Telnyx's paginated responses into native n8n binary pairedItem data for better item tracking.

PRs welcome.


Development

git clone https://github.com/swemmanuelgz/n8n-nodes-telnyx.git
cd n8n-nodes-telnyx
npm install
npm run build         # compiles TS + copies SVG icons to dist/
npm run lint          # eslint-plugin-n8n-nodes-base
npm run dev           # tsc --watch

# Link into a local n8n for manual testing
npm link
cd ~/.n8n/custom && npm link @swemmanuelgz/n8n-nodes-telnyx
n8n start

Contributions and bug reports: https://github.com/swemmanuelgz/n8n-nodes-telnyx/issues.


License

MIT © Emmanuel Obaseki

Discussion