{"id":22430866,"url":"https://github.com/zeljkobenovic/tsbc","last_synced_at":"2025-08-01T11:32:30.760Z","repository":{"id":198030962,"uuid":"583060744","full_name":"ZeljkoBenovic/tsbc","owner":"ZeljkoBenovic","description":"Teams Direct Routing SBC connects your local PBX with MS Teams voice platform.","archived":false,"fork":false,"pushed_at":"2024-06-06T19:02:58.000Z","size":678,"stargazers_count":8,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-07T21:08:15.498Z","etag":null,"topics":["sbc","session-border-controller","sip","teams","teams-direct-routing","voice","voip"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZeljkoBenovic.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":"2022-12-28T16:39:39.000Z","updated_at":"2024-12-30T22:27:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"7cb34b09-3fce-4413-a6e1-6f47aca38d29","html_url":"https://github.com/ZeljkoBenovic/tsbc","commit_stats":null,"previous_names":["zeljkobenovic/tsbc"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ZeljkoBenovic/tsbc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZeljkoBenovic%2Ftsbc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZeljkoBenovic%2Ftsbc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZeljkoBenovic%2Ftsbc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZeljkoBenovic%2Ftsbc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZeljkoBenovic","download_url":"https://codeload.github.com/ZeljkoBenovic/tsbc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZeljkoBenovic%2Ftsbc/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268215585,"owners_count":24214365,"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-08-01T02:00:08.611Z","response_time":67,"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":["sbc","session-border-controller","sip","teams","teams-direct-routing","voice","voip"],"created_at":"2024-12-05T21:09:49.346Z","updated_at":"2025-08-01T11:32:30.408Z","avatar_url":"https://github.com/ZeljkoBenovic.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MS Teams Session Border Controller (TSBC)\n\nTSBC allows the interconnection between the internal PBX system, that is running on plain old SIP on UDP protocol \nand the MS Teams VoIP platform, which uses SSIP (Secure SIP) on TCP/TLS protocol.\n\nInterconnecting the local PBX system and MS Teams platform, requires the implementation of a dedicated local \nSBC device, which sits between MS Teams VoIP platform and local PBX, which can be quite costly.    \nOther solution is to expose local PBX system to the public world, which is not considered the best practise \nsecurity wise. Even if the PBX is exposed to the public, being able to communicate with MS Teams platform, \nit would still require changing some SIP headers to comply with MS Teams security specifications. \nUsually, these local PBX systems like Asterisk do not have the capability to manipulate SIP headers in such \na specific fashion.\n\nTSBC connects your local PBX (any SIP compatible PBX) with MS Teams voice platform.  \nIt sits between MS Teams and local PBX, translating SIP/RTP traffic. On MS Teams side SSIP/TLS and on the \nother, local, SIP/UDP traffic.\n\n![diagram](docs/diagram.png)\n\n## Prerequisites\n\n* Docker `\u003e= 20.10.17`\n\n## Deployed infrastructure\n\nTSBC deploys two (or three) docker containers.   \n* `zeljkoiphouse/kamailio:v0.2` - [Kamailio](https://www.kamailio.org/w/) based container which handles\n  all the SIP signalisation traffic between local PBX and MS Teams VoIP platform.\n* `zeljkoiphouse/rtpengine` - [RTPEngine](https://github.com/sipwise/rtpengine) based container which handles \n  all the RTP (media) traffic.\n* `linuxserver/swag` - container that handles TLS certificates utilising LetsEncrypt service.\n  There will always be only one container per docker host.\n\n\n## Command usage\n\n* [tsbc](docs/cmd_usage/tsbc.md)- TSBC root level command\n* [tsbc destroy](docs/cmd_usage/tsbc_destroy.md)\t - Destroy SBC cluster or TLS node\n* [tsbc list](docs/cmd_usage/tsbc_list.md)\t - Get a list of all the deployed SBCs\n* [tsbc recreate](docs/cmd_usage/tsbc_recreate.md)\t - Command used to recreate SBC nodes\n* [tsbc restart](docs/cmd_usage/tsbc_restart.md)\t - Command used to restart SBC nodes\n* [tsbc run](docs/cmd_usage/tsbc_run.md)\t - Command used to deploy a new SBC cluster\n\n## Docker host requirements\n* All traffic from MS Teams platform IP \n[addresses](https://learn.microsoft.com/en-us/microsoftteams/direct-routing-plan#microsoft-365-office-365-and-office-365-gcc-environments) \nforwarded to docker host.\n* DNS name for the SBC tied to the public IP address of docker host\n* Ports `tcp/80` and `tcp/443` forwarded to docker host as they are needed for certificate verification  \n* Local `PBX` and `TSBC` host, directly reachable on the IP level (same LAN or routed) \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeljkobenovic%2Ftsbc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzeljkobenovic%2Ftsbc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeljkobenovic%2Ftsbc/lists"}