{"id":18584786,"url":"https://github.com/makingchatbots/ivr-tester","last_synced_at":"2025-09-20T01:09:36.217Z","repository":{"id":38762469,"uuid":"305850890","full_name":"MakingChatbots/ivr-tester","owner":"MakingChatbots","description":"An automated testing framework for Interactive Voice Response (IVR) call flows","archived":false,"fork":false,"pushed_at":"2024-09-05T19:12:48.000Z","size":4182,"stargazers_count":42,"open_issues_count":26,"forks_count":13,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-18T04:30:20.980Z","etag":null,"topics":["automated-testing","call-flow","ivr","nodejs","telephony"],"latest_commit_sha":null,"homepage":"https://ivr-tester.makingchatbots.com/","language":"TypeScript","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/MakingChatbots.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,"zenodo":null}},"created_at":"2020-10-20T22:47:10.000Z","updated_at":"2025-09-17T18:37:01.000Z","dependencies_parsed_at":"2023-02-06T12:31:52.811Z","dependency_job_id":"29f50cd0-ba2b-4a15-83dd-d52b0aa6d5a6","html_url":"https://github.com/MakingChatbots/ivr-tester","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MakingChatbots/ivr-tester","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakingChatbots%2Fivr-tester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakingChatbots%2Fivr-tester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakingChatbots%2Fivr-tester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakingChatbots%2Fivr-tester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MakingChatbots","download_url":"https://codeload.github.com/MakingChatbots/ivr-tester/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakingChatbots%2Fivr-tester/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276027375,"owners_count":25572667,"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-09-19T02:00:09.700Z","response_time":108,"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":["automated-testing","call-flow","ivr","nodejs","telephony"],"created_at":"2024-11-07T00:28:57.509Z","updated_at":"2025-09-20T01:09:36.166Z","avatar_url":"https://github.com/MakingChatbots.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IVR Tester\n\n[![npm](https://img.shields.io/npm/v/ivr-tester)](https://www.npmjs.com/package/ivr-tester)\n![](https://github.com/SketchingDev/ivr-tester/workflows/On%20Push/badge.svg)\n[![Follow me on LinkedIn for updates](https://img.shields.io/badge/Follow%20for%20updates-LinkedIn-blue)](https://www.linkedin.com/in/lucas-woodward-the-dev/)\n\n\n\n\u003cp align=\"center\"\u003e\n  Automate the testing of your IVR call flows!\n\u003c/p\u003e\n\n[Follow me on LinkedIn](https://www.linkedin.com/in/lucas-woodward-the-dev/) to learn about updates to this project\n\nIVR Tester automates the testing of IVR flows by calling them, interpreting prompts and replying with DTMF tones based\non fluent test definitions.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"doc/assets/demo.gif\"\u003e\n\u003c/p\u003e\n\nFeatures:\n* Fully automates testing call flows\n* Test multiple scenarios in parallel\n* Expressive test definitions help document call flow\n* Record audio of tests\n* Record transcriptions of tests\n* Supports Google Speech-to-Text and AWS Transcript for transcribing calls\n* Open-source\n\n```typescript\nconst config = { transcriber: googleSpeechToText({ languageCode: \"en-GB\" }) };\n\nnew IvrTester(config).run(\n  { from: \"0123 456 789\", to: \"0123 123 123\" },\n  {\n    name: \"Customer is provided a menu after their account number confirmed\",\n    steps: [\n      {\n        whenPrompt: similarTo(\"Please enter your account number\"),\n        then: press(\"184748\"),\n        silenceAfterPrompt: 3000,\n        timeout: 6000,\n      },\n      {\n        whenPrompt: similarTo(\n          \"press 1 for booking a repair or 2 for changing your address\"\n        ),\n        then: hangUp(),\n        silenceAfterPrompt: 3000,\n        timeout: 6000,\n        },\n     ],\n  }\n);\n```\n\n## Quick Start\n\n1. [Create a Twilio account](https://www.twilio.com/referral/9E7LvU) (referral link for $10 free if you upgrade), load it with money and rent a phone number\n   1. Store an [authentication token](https://support.twilio.com/hc/en-us/articles/223136027-Auth-Tokens-and-How-to-Change-Them) in environment variables:\n   ```shell\n   export TWILIO_ACCOUNT_SID=ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n   export TWILIO_AUTH_TOKEN=your_auth_token\n   ```\n1. Configure your environment for either [Google](packages/transcriber-google-speech-to-text) or [Amazon's](packages/transcriber-amazon-transcribe) transcription service\n1. Install and start ngrok\n   ```shell\n   npm install ngrok -g\n   ngrok http 8080\n   ```\n1. Run the tests\n   ```shell\n   # Local port that IVR Tester will listen on\n   export LOCAL_SERVER_PORT=8080\n   # URL that ngrok exposes to the outside world\n   export PUBLIC_SERVER_URL=$(curl -s localhost:4040/api/tunnels | jq -r .tunnels[0].public_url)\n\n   node test.js\n   ```\n\n## How it works\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"doc/assets/flow.jpg\"\u003e\n\u003c/p\u003e\n\nUnder the hood this orchestrates:\n 1. Establishing a bi-directional audio stream of the call to the IVR flow - using [Twilio](https://www.twilio.com/)\n 1. Transcribing the voice responses from the flow - using [Google Speech-to-Text](https://cloud.google.com/speech-to-text)\n 1. Using the test to conditionally respond with DTMF tones to transcripts\n\n## Writing tests\n\n| When         | Overview                             |\n| -------------|--------------------------------------|\n| [contains]   | Prompt contains a piece of text      |\n| [matches]    | Prompt matches regular expression    |\n| [similarTo]  | Prompt is similar to a piece of text |\n| [isAnything] | Prompt can be anything               |\n\n[contains]: ./packages/ivr-tester/doc#contains\n[matches]: ./packages/ivr-tester/doc#matches\n[similarTo]:  ./packages/ivr-tester/doc#similarto\n[isAnything]: ./packages/ivr-tester/doc#isanything\n\n| Then        | Overview            |\n| ------------|---------------------|\n| [press]     | Produces DTMF tones |\n| [hangUp]    | Terminates the call |\n| [doNothing] | Doesn't do anything |\n\n[press]: ./packages/ivr-tester/doc#press\n[hangUp]: ./packages/ivr-tester/doc#hangup\n[doNothing]: ./packages/ivr-tester/doc#donothing\n\n## Development\n\n### Documentation\n\nWhere possible the documentation is generated from the code using the following script in the root directory or\nindividual packages:\n\n```shell\nyarn docs\n```\n\nThe documentation is automatically generated and committed as part of the CI pipeline when merged to the main branch.\n\nThe official website can be previewed locally by running:\n\n```shell\ndocsify serve docs\n```\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FSketchingDev%2Fivr-tester.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2FSketchingDev%2Fivr-tester?ref=badge_large)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakingchatbots%2Fivr-tester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmakingchatbots%2Fivr-tester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakingchatbots%2Fivr-tester/lists"}