Receive phone calls from anybody on the Web. Or host a telephony server yourself.

WebCall

WebCall WebRTC Telephony Server

Browser based telephony over E2E-encrypted P2P-links with very high audio quality. WebCall is lightweight and easy to use.

https://timur.mobi/webcall

Install

Build WebCall telephony server and run it for yourself and for others.

https://timur.mobi/webcall/install

License

AGPL3.0 - see: LICENSE

3rd party code (external)

  • lesismal/nbio
  • go.etcd.io/bbolt
  • pion/turn
  • mrjones/oauth
  • SherClockHolmes/webpush-go
  • gopkg.in/ini
  • webrtcHacks/adapter.js

3rd party code (embedded/modified)

  • github.com/RapidLoop: skv
  • github.com/ChimeraCoder: Twitter
  • AppRTC's sdputils.js: prefercodec.js
  • mr-wang-from-next-door: GetOutboundIP()
  • github.com/mahan: AtomBool
Comments
  • Buttons broken in latest webcall server version?

    Buttons broken in latest webcall server version?

    I implemented a call button for testing purposes on one of my webpages and it worked fine, but in recent updates of the webcall server it seems to be broken, see console output by Chrome browser: Uncaught TypeError: Cannot read properties of null (reading 'contentWindow') at window.onload (button.js:3:3) window.onload @ button.js:3 load (async) (anonymous) @ button.js:1 and Uncaught TypeError: Cannot set properties of null (setting 'value') at caller.js:642:27 at caller.js:1120:4 at xhr.onreadystatechange (client.js:315:4) (anonymous) @ caller.js:642 (anonymous) @ caller.js:1120 xhr.onreadystatechange @ client.js:315 XMLHttpRequest.send (async) ajaxFetch @ client.js:341 checkServerMode @ caller.js:1118 onload2 @ caller.js:630 window.onload @ caller.js:521 load (async) (anonymous) @ caller.js:115

    it does not matter if I enter the ID or nickname, the error remains the same. Did the button behaviour change in any way different to the documentation maybe?

    Thanks!

  • Backups function problem

    Backups function problem

    Hi, I can't find a file like "webcall_(yyyy-mm-ddThh+mm:ss).tgz" in the path "(home)/_backup/". I followed the steps on the site and it still doesn't appear (I've had the server running for over 48 hours).

    Below is the content of my config.ini file.

    hostname = (mydomain) httpsPort = 8068 wssPort = 8443 insecureSkipVerify = false logevents = attach thirtySecStats = true turnPort = 3739 turnRealm = (mydomain) turnIP = (myIP) backupScript = backupdb.sh backupPauseMinutes = 240

    Then the following is the content of my backupdb.sh file.

    export MYDATE=`date --iso-8601=hours` tar cfvz ~/_backup/webcall_db/_$MYDATE.tgz db/*

    Then the following is what my terminal shows.

    stats 0/0/0 calls:0/0 0/0 go:81 stats 0/0/0 calls:0/0 0/0 go:81 callBackupScript sync db's (backupdb.sh) stats 0/0/0 calls:0/0 0/0 go:81 callBackupScript exec (backupdb.sh)... # callBackupScript backupdb.sh err=exit status 2 log=(db/rtccalls.db db/rtccontacts.db )stats 0/0/0 calls:0/0 0/0 go:81 stats 0/0/0 calls:0/0 0/0 go:81 stats 0/0/0 calls:0/0 0/0 go:81 stats 0/0/0 calls:0/0 0/0 go:81 stats 0/0/0 calls:0/0 0/0 go:81 callBackupScript sync db's (backupdb.sh) stats 0/0/0 calls:0/0 0/0 go:81 callBackupScript exec (backupdb.sh)... # callBackupScript backupdb.sh err=exit status 2 log=(db/rtccalls.db db/rtccontacts.db db/rtchashedpw.db )stats 0/0/0 calls:0/0 0/0 go:81 stats 0/0/0 calls:0/0 0/0 go:81 stats 0/0/0 calls:0/0 0/0 go:81 stats 0/0/0 calls:0/0 0/0 go:81 stats 0/0/0 calls:0/0 0/0 go:81 callBackupScript sync db's (backupdb.sh) stats 0/0/0 calls:0/0 0/0 go:81 callBackupScript exec (backupdb.sh)... # callBackupScript backupdb.sh err=exit status 2 log=(db/rtccalls.db )stats 0/0/0 calls:0/0 0/0 go:81

    BTW I have put config.ini and backupdb.sh in the webcall folder.

    Thank you.

  • transfer speed

    transfer speed

    I found the file transfer speed too slow.  I did the streaming test on Google's WebRTC and the speed was much better.  Another observation, sometimes the button to send files does not appear when in the browser.

  • Does webcall support audio conferences?

    Does webcall support audio conferences?

    Hi, thank you for webcall.

    Is it possible to use webcall to have more than two participants in a call? I'm looking for a simple browser-based voice chat system.

    Thanks.

  • In Chrome browser, can't hang up as caller

    In Chrome browser, can't hang up as caller

    I see only red light, I can see in Chrome browser the button "Hang up" but can't hang up. When clicking the button I can hear the busy signal, but can't hang up.

  • server user management: reset, recover, or change passwords?

    server user management: reset, recover, or change passwords?

    Hi,

    I'm sorry if there is an obvious answer to this or if it has already been answered. I looked through the documentation and closed issues that I could find.

    Does the webcall server support resetting, recovering, or changing user passwords? Or, is there some way to do this manually to the backing data store? The probability that I will forget or misplace a password approaches 1 as the amount of time I use webcall approaches infinity 😃

    Thank you!

  • Unable to run with given nginx configurations

    Unable to run with given nginx configurations

    Very neat project! I was trying to run my own instance behind nginx as a reverse proxy. I followed the steps https://timur.mobi/webcall/install/

    Using config.ini as such:

    httpsPort = 0
    hostname = hostname.url
    wssPort = 8443
    

    nginx config is same as provided on URL above (adjusted to point to proper webroot).

    I also checked precedence to ensure it's not caught by any other location handlers... that said I can access the callee page, get assigned an ID but then when I'm taken to https://url/callee/123456789, I get a 404... "GET /callee/11727440667 HTTP/2.0" 404 107

    I tried playing with try_files configs to point to full path to callee/index.html and some other things, but all to no avail.

    There's nothing suspicious in my error.log, and I do not see activity in the webcall standard output (except registration calls which work fine)

    What is it that handles routing URLs ending in numbers beyond the nginx confiugration? Please let me know if I can provide any additional information, would love to get this working. :)

  • Video Telephony issue

    Video Telephony issue

    Hi, When I use the video function, after clicking the "monitor" button, the message "monitor paused" will be displayed on my screen, but the other party (the person I am chatting with) will still see my video screen (turning head, moving, etc. ). Thank you.

  • Nickname

    Nickname

    Hi, When I set "Nickname" to "1" and call my friend, my friend's phone will show as "unkonw". When I set "Nickname" from "1" to "2" and call my friend again, my friend's phone will show "1". When I set "Nickname" from "2" to "3" and call my friend again, my friend's phone will show "2".

    The "Nickname" displayed will be the "Nickname" of the previous call. Thank you.

  • Running as a non-root user (enhancement request)

    Running as a non-root user (enhancement request)

    Running as non-root user yields:

    tls.LoadX509KeyPair err=(open tls.pem: permission denied)

    I believe this is because it needs the certs to run the websocket server (let me know if im wrong) which is not and cannot (?) be proxied through nginx

    Given that LetsEncrypt requires frequent renewals, and some people such as myself automate certbot using cron jobs, Thus, I opted to symlink the certs inside my webcall deployment so they remain unaffected when they change.

    While I understand workarounds may exist like copying and altering the permissions of the files, they do require maintenance as well as leniency on security.

    Perhaps if detected that EUID is 0 it can read TLS files into memory then de-escalate to a specified user from config.ini? Just first thing that came to mind.

  • ws-connect timeout in LAN test

    ws-connect timeout in LAN test

    Hello dear developer, thank you very much for your amazing project!

    I got a ws-connect timeout problem when I was testing in a local area network.

    what I plan to do

    1. Build webcall server
    2. Use NAT traversal service to use webcall on the internet.

    what happened

    1. Build webcall server on an orange pi zero 2 (a Raspberry Pi like device), succeed.
    2. Webcall build succeed
    3. Using this config.ini below, tested in localhost with http, works fine.
    hostname = 127.0.0.1
    httpsPort = 8068
    wssPort = 8443
    insecureSkipVerify = true
    
    1. Using this config.ini below, tested in localhost with HTTP, self-signed certificate, works fine.
    hostname = 127.0.0.1
    httpsPort = 8068
    wssPort = 8443
    insecureSkipVerify = true
    
    1. Using this config.ini below, test in LAN, not able to Go Online using a machine in LAN. Error log shows /login ws-connect timeout 30s remove xxxxxxxxxxx/xxxxxxxxxxx xxxxxxxxxxx rip=192.168.0.105:58573 ver= ua=xxxxxx
    hostname = 192.168.0.112
    httpsPort = 8068
    wssPort = 8443
    insecureSkipVerify = true
    
    1. Tried many NAT traversal service, using this config.ini, same problem.
    hostname = 127.0.0.1
    httpsPort = 8068
    wssPort = 8443
    insecureSkipVerify = true
    

    Environment

    Orange pi zero 2 Debian 10 go1.17 linux/arm64 Firefox

  • Connection via internal network, QR Code and Browser

    Connection via internal network, QR Code and Browser

    There could be an alternative to create, on Android, a server on an internal network to talk to people who are on the same network, but they don't have the app. Could create a link with the data by creating a qrcode.

  • record and stream call

    record and stream call

    I used Jitsi Meet, but it doesn't allow having a single contact login and Wecall allows you to receive calls without the other person needing to install or create a login.  What I miss about WebCall is the ability to receive calls from dial-up (cell) numbers.  Another Jitsi Meet function is the ability to record and stream to YouTube and accept more than one person on the call.

simplified helper to create http client calls to test your server

Overview Simplified creating http client calls for testing http servers or handlers. Cleanly build and execute http requests in tests so that you can

Nov 1, 2021
Send email and SMS broadcasts to your contacts. SMS are sent via your Android phone connected to your PC.

Polysender Send email and SMS broadcasts to your contacts. Polysender is a desktop application, so it does not require a complicated server setup. Ema

Aug 11, 2022
User Agents detector for tv, phone, tablet and desktop devices.

gouseragents Accurate and fresh list of desktop, phone, tablet and tv user agents. install go get github.com/emetriq/gouseragents usage import ( "f

Apr 26, 2022
Group peer to peer video calls for everyone written in Go and TypeScript

Peer Calls v4 WebRTC peer to peer calls for everyone. See it live in action at peercalls.com. The server has been completely rewriten in Go and all th

Dec 30, 2022
Aidos Kuneen (v2 network) daemon program that is controlled through the command line and remotely via RPC calls

adk-daemon: aidosd.v2 aidosd (v2) is a deamon which acts as bitcoind for adk. This version has been built specifically for network mesh version 2+ For

Dec 1, 2021
Service that calls uzma24/project1 service, takes input from .txt file and prints JSON output returned from the service.

Service that calls uzma24/project1 service, takes input from .txt file and prints JSON output returned from the service. Program can take large input files.

Feb 6, 2022
LazySSH is an SSH server that acts as a jump host only, and dynamically starts temporary virtual machines.

LazySSH is an SSH server that acts as a jump host only, and dynamically starts temporary virtual machines. If you find yourself briefly starti

Dec 11, 2022
EasyAgent is an infrastructure component, applied to manage the life-cycle of services on the remote host.
EasyAgent is an infrastructure component, applied to manage the life-cycle of services on the remote host.

Easyagent English | 中文 介绍 easyagent是在袋鼠云内部广泛使用的基础架构组件,最佳应用场景包括ELK体系beats等数据采集器的管控和配置管理、数栈体系自动化部署等 基本原理 easyagent主要有sidecar和server两个组件,sidecar部署在主机端,si

Nov 24, 2022
⚡ 🖥️ 👾 Host your own Lightning Address on LND

⚡ ??️ ?? Host your own Lightning Address on LND Lighting Wallets like BlueWallet, Blixt and many more allow us to send sats to Lighting Addresses like

Dec 22, 2022
Proxy your Go Module`s Import Path from your own domain to a public host (e.g. github.com).

Go Modules Remote Import Path Proxy Proxy your Go Module`s Import Path from your own domain to a public host (e.g. github.com). For example Uber (buil

Nov 2, 2021
The rest api that can manage the iptables rules of the remote host

fiewall-api firewall api是基于firewalld来远程管理iptables规则的rest-api,无需部署agent Features 指定一个主机ip,让这个主机上的iptables增加一个规则 处理单个IP或CIDR范围(xx.xx.xx.xx/mask,mac,inte

Mar 24, 2022
Ping library for Golang with multi-host support

pingo Fast and lightweight ping library for Golang with multi-host support. Features ICMP sockets: UDP port 0 means "let the kernel pick a free number

Nov 9, 2022
apache dubbo gateway,L7 proxy,virtual host,k8s ingress controller.
apache dubbo gateway,L7 proxy,virtual host,k8s ingress controller.

apache dubbo gateway,L7 proxy,virtual host,k8s ingress controller.

Jul 22, 2022
Application wirtten in GO to check if the port on the remote host is open

portcheck A simple Pod that get API POST request with port type and number with a target's IP address and checks if the destination port is available

Nov 26, 2021
Simple ssh client for persistent host info.
Simple ssh client for persistent host info.

zssh Simple ssh cli for persistent hosts information. Getting started (1) Go get and install $ go get -u github.com/zacscoding/zssh/... $ zssh --help

Dec 19, 2021
Observe host metrics collector Written in Go

Observe Host Metrics Collector Experimental collector and forwarder of host metr

Jan 4, 2022
Ffind - A tool to find files of interest on a compromised host during a penetration test
Ffind - A tool to find files of interest on a compromised host during a penetration test

ffind ffind is a tool to find files of interest on a compromised host during a p

Jul 25, 2022
C-ping is a very simple and small ping tool that sends ICMP Echo datagram to a host.

C-ping is a very simple and small ping tool that sends ICMP Echo datagram to a host.

Aug 9, 2022
oniongrok forwards ports on the local host to remote Onion addresses as Tor hidden services and vice-versa

oniongrok Onion addresses for anything. oniongrok forwards ports on the local host to remote Onion addresses as Tor hidden services and vice-versa. Wh

Jan 1, 2023