You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Integrate ElevenLabs trunk support into NethVoice #7892
We would like to improve the ElevenLabs integration in NethVoice with the following enhancements:
Add ElevenLabs trunk to configurable trunks via UI
Currently, the ElevenLabs trunk is not available among the trunks that can be configured through the NethVoice web interface.
Please add the ElevenLabs trunk to the list of trunks that can be managed from the UI, so it can be configured without manual intervention.
Update transfer mode to also check the Trunk context when resolving the transfer context, since an extension using a modified dial string (e.g., PJSIP/TRUNK_NAME) can initiate a transfer.
Documentation: internal extension dialing directly via trunk
Add documentation explaining how to create an internal extension that dials directly through the ElevenLabs trunk.
Test case 1 — ElevenLabs trunk inbound call with authentication
Objective
Verify that an ElevenLabs trunk created from the NethVoice wizard accepts inbound calls from ElevenLabs using inbound SIP digest authentication and auth_username endpoint identification.
Preconditions
NethVoice updated with the ElevenLabs trunk wizard changes.
ElevenLabs account with SIP trunk support.
Public DNS, SIP proxy, and RTP routing correctly configured.
NethVoice Proxy is installed and working.
A reachable inbound route or test destination is available in NethVoice.
Steps
Open the NethVoice trunk wizard.
Create a new trunk using provider ElevenLabs.
Configure:
Trunk Name:elevenlabs-test
Trunk Password:<secure-password>
Inbound route destination: test extension, IVR, or echo/test destination
Save and apply the configuration.
On the ElevenLabs side, configure the SIP trunk:
SIP Trunk Username:elevenlabs-test
SIP Trunk Password:<secure-password>
From ElevenLabs, place an inbound call to NethVoice.
Check the Asterisk/PJSIP logs.
Expected result
NethVoice challenges the inbound INVITE with SIP digest authentication.
ElevenLabs retries the INVITE with an Authorization header.
The Authorization username is elevenlabs-test.
Asterisk identifies the trunk using auth_username.
Authentication succeeds.
The call enters NethVoice and reaches the configured inbound route/destination.
No custom SIP header matching is required.
No manual match_header configuration is required.
Negative check
Repeat the inbound call with a wrong ElevenLabs SIP trunk password.
Expected result:
SIP digest authentication fails.
The call is rejected.
The call does not enter the inbound route.
Test case 2 — Unauthenticated trunk identified by header through NethVoice Proxy
Objective
Verify that a trunk without registration and without inbound authentication can be identified by SIP header when calls arrive through NethVoice Proxy.
Preconditions
NethVoice updated with the trunk header-identification changes.
NethVoice Proxy version is >= 1.6.2-testing.2.
External SIP provider or SIP test tool able to send inbound INVITEs to NethVoice Proxy.
Provider/test client source IP is known.
Inbound route or test destination is available in NethVoice.
Steps
Verify the installed proxy version:
api-cli run module-info --agent module/nethvoice-proxy1
or use the NS8 UI/module status page.
Confirm that NethVoice Proxy is version 1.6.2-testing.2 or newer.
Create a PJSIP trunk with:
Registration: disabled
Inbound Authentication: disabled
Outbound Authentication: disabled or enabled, either is valid
Identification mode: header-based identify
Header used for identify:X-Forwarded-For
Header value: expected original source IP of the SIP provider/test client
Activity
Update returnontransfer module to version 1.1.11 (#702)
Amygos commentedon Mar 16, 2026
Release
nethesis/ns8-nethvoice1.6.44 remaining items
Stell0 commentedon Jun 9, 2026
Requirements for Integration
1. Create the ElevenLabs Trunk from the Wizard
Create the trunk using the NethVoice trunk wizard and select the ElevenLabs provider.
The wizard configures the required PJSIP parameters automatically, including:
auth_username-based endpoint identification2. Configure the ElevenLabs Trunk Credentials
On the NethVoice side, configure:
NOME_TRUNKSECRET_TRUNKNUMERO_TRUNKOn the ElevenLabs side, configure:
NOME_TRUNKSECRET_TRUNKThe SIP Trunk Username configured in ElevenLabs must match the NethVoice Trunk Name exactly.
3. Inbound Call Authentication and Identification
ElevenLabs inbound calls are authenticated using SIP digest authentication.
NethVoice identifies the inbound trunk using the SIP
Authorizationusername through the PJSIPauth_usernameidentifier.Therefore:
match_headerrule is requiredPJSIP identifysection is requiredheaderis requiredThe trunk is matched by the authentication username, not by a custom ElevenLabs header.
4. Create an Extension for the AI
Create an extension that calls the ElevenLabs trunk using the following dial string:
Replace:
NOME_TRUNKwith the NethVoice trunk nameNUMERO_TRUNKwith the ElevenLabs destination number or SIP target5. Shared Parameters Between NethVoice and ElevenLabs
The following parameters must match on both sides:
NOME_TRUNKSECRET_TRUNKThe following parameter is used by NethVoice for outbound calls:
NUMERO_TRUNKHeader parameters are no longer required:
HEADER_NAMEis not neededHEADER_VALUEis not neededStell0 commentedon Jun 9, 2026
Test case 1 — ElevenLabs trunk inbound call with authentication
Objective
Verify that an ElevenLabs trunk created from the NethVoice wizard accepts inbound calls from ElevenLabs using inbound SIP digest authentication and
auth_usernameendpoint identification.Preconditions
Steps
Open the NethVoice trunk wizard.
Create a new trunk using provider ElevenLabs.
Configure:
elevenlabs-test<secure-password>Save and apply the configuration.
On the ElevenLabs side, configure the SIP trunk:
elevenlabs-test<secure-password>From ElevenLabs, place an inbound call to NethVoice.
Check the Asterisk/PJSIP logs.
Expected result
Authorizationheader.Authorizationusername iselevenlabs-test.auth_username.match_headerconfiguration is required.Negative check
Repeat the inbound call with a wrong ElevenLabs SIP trunk password.
Expected result:
Test case 2 — Unauthenticated trunk identified by header through NethVoice Proxy
Objective
Verify that a trunk without registration and without inbound authentication can be identified by SIP header when calls arrive through NethVoice Proxy.
Preconditions
1.6.2-testing.2.Steps
Verify the installed proxy version:
or use the NS8 UI/module status page.
Confirm that NethVoice Proxy is version
1.6.2-testing.2or newer.Create a PJSIP trunk with:
X-Forwarded-ForExample expected generated identify logic:
Save and apply the configuration.
From the external SIP provider or SIP test client, send an inbound INVITE to NethVoice through NethVoice Proxy.
Check the SIP message received by Asterisk.
Check that the forwarded INVITE contains:
Check Asterisk/PJSIP logs and call routing.
Expected result
X-Forwarded-Forheader.Negative checks
Missing header
Send the same INVITE without
X-Forwarded-For.Expected result:
Wrong header value
Send the same INVITE with:
Expected result:
Amygos commentedon Jun 19, 2026
Release
nethesis/ns8-nethvoice1.6.12