{"id":22085627,"url":"https://github.com/nexmo/node-voice-proxy","last_synced_at":"2025-07-24T17:31:33.999Z","repository":{"id":66173045,"uuid":"65324670","full_name":"Nexmo/node-voice-proxy","owner":"Nexmo","description":"Voice Proxy example in Node.JS using the Nexmo Voice API","archived":false,"fork":false,"pushed_at":"2025-05-19T19:27:56.000Z","size":18,"stargazers_count":1,"open_issues_count":8,"forks_count":7,"subscribers_count":23,"default_branch":"main","last_synced_at":"2025-05-22T22:06:19.032Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://developer.nexmo.com/tutorials/private-voice-communication","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Nexmo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-09T20:07:44.000Z","updated_at":"2022-09-02T15:10:06.000Z","dependencies_parsed_at":"2025-03-11T05:19:52.814Z","dependency_job_id":"9257d299-8424-4264-b766-dff32bc4af60","html_url":"https://github.com/Nexmo/node-voice-proxy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Nexmo/node-voice-proxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nexmo%2Fnode-voice-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nexmo%2Fnode-voice-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nexmo%2Fnode-voice-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nexmo%2Fnode-voice-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nexmo","download_url":"https://codeload.github.com/Nexmo/node-voice-proxy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nexmo%2Fnode-voice-proxy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266878570,"owners_count":23999619,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-24T02:00:09.469Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-01T01:15:24.257Z","updated_at":"2025-07-24T17:31:33.676Z","avatar_url":"https://github.com/Nexmo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Voice Proxy using the Nexmo Voice API\n\n## Prerequisites\n\n* [A Nexmo Account](https://dashboard.nexmo.com/sign-up)\n* [Nexmo CLI (Command Line Interface)](https://github.com/nexmo/nexmo-cli)\n\n## Getting Started\n\n### Create a Nexmo App\n\nCreate an application and take a note of the application UUID: \n\n```sh\nnexmo app:create voice-proxy https://example.com/proxy-call https://example.com/event\n```\n\n*Note 1: You may also want to save the private key file that is returned. You won't be able to get this again.*\n\nIf you don't know the URLs for your proxy-call and event webhooks yet you can update them later e.g.\n\n```sh\nnexmo app:update APP_ID voice-proxy https://example.com/proxy-call https://example.com/event\n```\n\n### Configuration\n\nCopy the `example.env` to `.env` and update the content as appropriate:\n\n```\ncp example.env .env\n```\n\nConfiguration is as follows:\n\n| Environment Variable | Required? | Description |\n| -------------------- | --------- | ----------- |\n| NEXMO_API_KEY | Yes | Your Nexmo API key (Get from the [Nexmo Dashboard](https://dashboard.nexmo.com/settings)) |\n| NEXMO_API_SECRET | Yes | Your Nexmo API secret (Get from the [Nexmo Dashboard](https://dashboard.nexmo.com/settings)) |\n| NEXMO_APP_ID | Yes | The id generated when you created your Nexmo application. |\n| NEXMO_DEBUG | No | Determines if interactions with the Nexmo API should be logged to the console. A non-falsy value will result in debug being on |\n| PROVISIONED_NUMBERS | No | If supplied it should be in the format `[{\"country\":\"GB\",\"msisdn\":\"NUMBER_1\"},{\"country\":\"GB\",\"msisdn\":\"NUMBER_2\"}]` |\n\n### Run the App\n\nStart the application:\n\n```sh\nnpm start\n```\n\n## Usage\n\nTo indicate that a conversation between two users should be allowed navigate to the following replacing `FROM_NUMBER` and `TO_NUMBER` with e.164 formatting international numbers (e.g. 14155550123):\n\nhttp://localhost:3000/conversation/start/FROM_NUMBER/TO_NUMBER\n\nIn a real system this conversation would be set up by an automated process.\n\nTo check the existing ongoing conversations navigate to:\n\nhttp://localhost:3000/conversations\n\nYou should see a response such as the following:\n\n```json\n[{\n  \"userA\":{\n    \"realNumber\":{\n      \"msisdn\":\"USER_A_REAL_NUMBER\",\n      \"country\":\"GB\"\n    },\n    \"virtualNumber\":{\n      \"msisdn\":\"USER_A_VIRTUAL_NUMBER\",\n      \"country\":\"GB\"\n    }\n  },\n  \"userB\":{\n    \"realNumber\":{\n      \"msisdn\":\"USER_B_REAL_NUMBER\",\n      \"country\":\"GB\"\n    },\n    \"virtualNumber\":{\n      \"msisdn\":\"USER_B_VIRTUAL_NUMBER\",\n      \"country\":\"GB\"\n    }\n  }\n}]\n```\n  \nThis tells us there are two participants and gives us the details of their real number and their assigned virtual number.\n\n* If you make a call from a UserA's real number to UserB's virtual number the call will be proxied to UserB's real number and the from number will be show as UserA's virtual number.\n* If you make a call from a UserB's real number to UserA's virtual number the call will be proxied to UserA's real number and the from number will be show as UserB's virtual number.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnexmo%2Fnode-voice-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnexmo%2Fnode-voice-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnexmo%2Fnode-voice-proxy/lists"}