{"id":26415046,"url":"https://github.com/symblai/twilioflex-inbound-adapter","last_synced_at":"2026-04-19T19:33:45.957Z","repository":{"id":43981844,"uuid":"245276108","full_name":"symblai/twilioflex-inbound-adapter","owner":"symblai","description":"A sample app with starter code for implementing Twilio Media Streams over Symbl.ai's WebSocket Streaming API.  Build your own custom, fully programmable continuous conversation intelligence application. ","archived":false,"fork":false,"pushed_at":"2022-12-12T03:59:24.000Z","size":13549,"stargazers_count":2,"open_issues_count":4,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-18T00:17:32.621Z","etag":null,"topics":["100daysofcode","amazon","api","aws","chime","media-streaming-demo","sentiment","starter-code","symbl","transcription","twilio","websocket","websockets"],"latest_commit_sha":null,"homepage":"","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/symblai.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}},"created_at":"2020-03-05T21:59:13.000Z","updated_at":"2024-07-25T16:30:29.000Z","dependencies_parsed_at":"2023-01-27T13:01:09.004Z","dependency_job_id":null,"html_url":"https://github.com/symblai/twilioflex-inbound-adapter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/symblai/twilioflex-inbound-adapter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symblai%2Ftwilioflex-inbound-adapter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symblai%2Ftwilioflex-inbound-adapter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symblai%2Ftwilioflex-inbound-adapter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symblai%2Ftwilioflex-inbound-adapter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/symblai","download_url":"https://codeload.github.com/symblai/twilioflex-inbound-adapter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symblai%2Ftwilioflex-inbound-adapter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32020695,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"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":["100daysofcode","amazon","api","aws","chime","media-streaming-demo","sentiment","starter-code","symbl","transcription","twilio","websocket","websockets"],"created_at":"2025-03-18T00:17:16.614Z","updated_at":"2026-04-19T19:33:45.934Z","avatar_url":"https://github.com/symblai.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Twilio Flex Inbound Adapter\n\n\n[![Websocket](https://img.shields.io/badge/symbl-websocket-brightgreen)](https://docs.symbl.ai/docs/streamingapi/overview/introduction)\n\nSymbl's APIs empower developers to enable: \n- **Real-time** analysis of free-flowing discussions to automatically surface highly relevant summary discussion topics, contextual insights, suggestive action items, follow-ups, decisions, and questions.\n- **Voice APIs** that makes it easy to add AI-powered conversational intelligence to either [telephony][telephony] or [WebSocket][websocket] interfaces.\n- **Conversation APIs** that provide a REST interface for managing and processing your conversation data.\n- **Summary UI** with a fully customizable and editable reference experience that indexes a searchable transcript and shows generated actionable insights, topics, timecodes, and speaker information.\n\n\u003chr /\u003e\n\n## Enable Symbl for Twilio Flex Calls\n\n\u003chr /\u003e\n\n * [Setup](#setup)\n * [Integration](#integration)\n * [Conclusion](#conclusion)\n * [Community](#community)\n\n## Introduction\n\nThis is a sample implementation of Symbl's Websocket API using Twilio Flex as an inbound adapter for streaming audio.  These instructions use Twilio Media Streams configured in the Twilio Studio and ngrok to expose a local endpoint.  \n\n## Setup\n\nThe first step to getting setup is to [sign up][signup]. \n\nUpdate the .env file with the following:\n1. Your App Id that you can get from [Platform](https://platform.symbl.ai)\n2. Your App Secret that you can get from [Platform](https://platform.symbl.ai)\n3. Your email address where the conversation summary and insights will be sent.\n4. Your name to be attached to conversation summary \n\nIn a new terminal, run `ngrok http 3000` to create a http tunnel to allow Twilio to hit the websocket server. If you plan to deploy this server, then you don't need to use ngrok and instead just have to configure Twilio Media Streams endpoint to hit the deployed server.\n\nConfigure your Twilio Flex flow using `Media Streams` - Follow the \"Setting Up your Twilio Studio\" with your ngrok or server endpoint from this [blog post](https://symbl.ai/integrating-symbl-insights-with-twilio-media-streams/)\n\nRun the follwing npm commands:\n1. `npm install` to download all the node modules\n2. `node index.js` to start the websocket server\n\n## Integration\n\n### Pre-requisites\n\n* JS ES6+\n* Node.js\n* npm (or your favorite package manager)\n* ngrok - free accounts at https://ngrok.com/ (or a deployed server)\n* Twilio account w/ Flex and Studio features included - https://www.twilio.com/try-twilio\n\n### Function Parameters \n\nFunction params passed to the Symbl [Streaming API](https://docs.symbl.ai/docs/streamingapi/overview/introduction) to open the websocket connection can be found beginning on line 71 of the index.js file.  \n\n```javascript\nclient_connection.send(JSON.stringify({\n    \"type\": \"start_request\",\n    \"insightTypes\": [\"question\", \"action_item\"],\n    \"config\": {\n      \"confidenceThreshold\": 0.5,\n      \"timezoneOffset\": 480, // Your timezone offset from UTC in minutes\n      \"languageCode\": \"en-US\",\n      \"speechRecognition\": {\n        \"encoding\": \"MULAW\", // Codec required for Twilio Flex\n        \"sampleRateHertz\": 8000 // Make sure the correct sample rate is\n      },\n      \"meetingTitle\": \"Customer Call\"\n    },\n    \"speaker\": {\n      \"userId\": process.env.USER_EMAIL,\n      \"name\": process.env.USER_NAME\n    },\n}));\n```\n\n### Dependencies\n\n```json\n  \"dependencies\": {\n    \"dotenv\": \"^8.2.0\",\n    \"express\": \"^4.17.1\",\n    \"http\": \"0.0.0\",\n    \"mic\": \"^2.1.2\",\n    \"path\": \"^0.12.7\",\n    \"request\": \"^2.88.2\",\n    \"websocket\": \"^1.0.31\",\n    \"ws\": \"^7.2.1\"\n  }\n```\n\n### References\nConfigured Twilio Studio flow\n\n\u003cimg src=\"./Capture.PNG\" height=\"50%\" width=\"50%\"\u003e\n\n## Conclusion\nWhen implemented once a Twilio Flex agents answers a new call, the call will connect with Symbl and the the conversation + insights will be generated and sent via email when the call is closed. \n\n## Community\n\nIf you have any questions, feel free to reach out to us at devrelations@symbl.ai, through our Community [Slack][slack], or [developer community][developer_community]\n\nThis guide is actively developed, and we love to hear from you! Please feel free to [create an issue][issues] or [open a pull request][pulls] with your questions, comments, suggestions and feedback.  If you liked our integration guide, please star our repo!\n\nThis library is released under the [MIT License][license]\n\n[license]: LICENSE.txt\n[telephony]: https://docs.symbl.ai/docs/telephony/overview/post-api\n[websocket]: https://docs.symbl.ai/docs/streamingapi/overview/introduction\n[developer_community]: https://community.symbl.ai/?_ga=2.134156042.526040298.1609788827-1505817196.1609788827\n[signup]: https://platform.symbl.ai/?_ga=2.63499307.526040298.1609788827-1505817196.1609788827\n[issues]: https://github.com/symblai/symbl-for-zoom/issues\n[pulls]: https://github.com/symblai/symbl-for-zoom/pulls\n[slack]: https://join.slack.com/t/symbldotai/shared_invite/zt-4sic2s11-D3x496pll8UHSJ89cm78CA\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsymblai%2Ftwilioflex-inbound-adapter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsymblai%2Ftwilioflex-inbound-adapter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsymblai%2Ftwilioflex-inbound-adapter/lists"}