Ring med WebRTC mellan en webbläsare och en vanlig telefon
Jag byggde en grej för att kunna ringa med WebRTC mellan en webbläsare och en vanlig telefon. Här kommer jag dela med mig av de teoretiska delarna för att du ska få en tydligare bild av hur det fungerar.
Om du inte vet vad WebRTC är kan du först läsa mitt inlägg om WebRTC för nybörjare.
Vill du sätta upp samma lösning som jag byggde? Här är kodexemplet jag skrev. Om du vill ha hjälp att komma igång finns det steg-för-steg-guider du kan följa:
- Ring telefonsamtal ifrån din webbläsare med WebRTC
- Ta emot telefonsamtal i din webbläsare med WebRTC
Hur ringer jag till en webbläsare från en vanlig telefon?
Låt oss först ta ett steg tillbaka.
Att ringa mellan två webbläsare fungerar på samma sätt som att skicka meddelanden mellan två e-postadresser; Du anger den adress du vill komma i kontakt med och klickar sedan på "skicka". Detta fungerar ”out of the box” eftersom adresserna ligger på samma nätverk (Internet).
När vi däremot ska ringa mellan en webbläsare och en vanlig telefon så blir det lite knepigare. I detta fall ligger adresserna på två helt separata nätverk; Internet och telenätet. De två nätverket saknar kännedom om varandra och har dessutom helt olika infrastrukturer.
Om du behöver en analogi kan du kan se det som att en buss försöker simma eller att en båt försöker flyta fram på en grusväg - Det blir error.
För att kunna ringa mellan dessa två nätverk behöver vi en mellanhand som sköter kopplingen; Någon måste alltså springa mellan bussen och båten för att de ska kunna utbyta information med varandra. 46elks är ett exempel på en sådan mellanhand.
Så, hur ska du ringa till en webbläsare? - Låt oss hypotetiskt anta att du har följande:
- Ett vanligt telefonnummer.
Det du använder på daglig basis för att ringa/sms vänner och familj. - Ett virtuell telefonnummer.
Typ som ett vanlig telefonnummer fast med konfigurationsmöjligheter. - Ett WebRTC-nummer.
Du kan se det som ett användarnamn likt det du har på skype, zoom, facetime etc.
För att ringa till din webbläsare ringer du först till ditt virtuella nummer. Ditt virtuella nummer är konfigurerat till att försöka kontakta ditt WebRTC-nummer. Din webbläsare är tillsagd att lyssna på all kommunikation som rör WebRTC-numret. När ditt virtuella nummer försöker kontakta WebRTC-numret kommer därmed din webbläsare reagera och säga "inkommande samtal".
Låt oss bryta ner detta steg för steg:
- Det virtuella numret (+46706000001) ligger på telenätet vilket gör att du kan ringa till det via ditt vanliga telefonnummer.
- Att numret är just virtuellt (snarare än fysiskt som ditt vanliga telefonnummer är) indikerar att du kan tala om för numret att göra olika saker efter behov. I detta fall har vi sagt åt det virtuella numret att försöka kontakta WebRTC-numret vid inkommande samtal.
- När du (eller någon annan) ringer till ditt virtuella nummer kommer det virtuella numret titta i sin config och se att;
Aha, inkommande samtal betyder att jag ska prata med WebRTC-numret
. - Det virtuella numret går sedan till mellanhanden och säger ”Hej kompis! Jag har en grej till WebRTC-numret. Kan du vidarebefordra det?”.
- Mellanhanden tar meddelandet till WebRTC-numret och säger
Goddag! Jag har ett meddelande. Nummer +46706000001 försöker få tag i dig.
- Webbläsaren, som är tillsagd att lyssna på all aktivitet som rör WebRTC-numret, hör detta meddelande och visar en notis på skärmen som ett inkommande samtal från +46706000001.
Detta är såklart en förenkling. Det finns många tekniska detaljer som sker bakom kulisserna, vi behöver dock inte bry oss om de i det här avseendet 🤓
Hur ringer jag från en webbläsare till en vanlig telefon?
Att ringa från en webbläsare är ungefär samma sak som när du ringer till en webbläsare. Skillnaden här är att du först måste ringa upp dig själv för att kunna ringa ut.
Vi utgår från samma premisser som i föregående exempel och antar att du har följande:
- Ett vanligt telefonnummer.
Det du använder på daglig basis för att ringa/sms vänner och familj. - Ett virtuell telefonnummer.
Typ som ett vanlig telefonnummer fast med konfigurationsmöjligheter. - Ett WebRTC-nummer.
Du kan se det som ett användarnamn likt det du har på skype, zoom, facetime etc.
Låt oss bryta ner processen steg för steg:
- För att ringa från din webbläsare till en telefon behöver du "fejka" ett inkommande samtal till webbläsaren. Det kan förklaras som att webbläsaren letar upp en random människa på stan och ger den personen en lapp där det står "ring mig" med det telefonummer som webbläsaren vill kontakta, t.ex 123.
- Webbläsaren ber sedan denna person skicka meddelandet till det virtuella numret (+46706000001).
- När det virtuella numret får meddelandet händer samma sak som i föregående exempel, d.v.s. den tittar i sin config och ser att;
Aha, inkommande samtal betyder att jag ska prata med WebRTC-numret
. - Det virtuella numret går sedan till mellanhanden och säger ”Hej kompis! Jag har en grej till WebRTC-numret. Kan du vidarebefordra det?”.
- Mellanhanden tar meddelandet till WebRTC-numret och säger
Goddag! Jag har ett meddelande. Nummer +46706000001 försöker få tag i dig.
- Webbläsaren, som är tillsagd att lyssna på all aktivitet som rör WebRTC-numret, reagerar på kommunikationen. I detta fall visas dock inte en notis om "inkommande samtal" eftersom det var webbläsaren själv som triggade igång samtalet. Istället ger webbläsaren "tummen upp" till mellanhanden för att indikera att den har mottagit samtalet.
- Mellanhanden noterar tummen upp från webbläsaren och innan den går därifrån läser den meddelandet på lappen och ser att den ska kontakta ytterligare ett nummer (123). Numret rings upp och samtalet sätts på högtalare så att webbläsaren kan höra vad som sägs.
- I detta läge har vi alltså lyckats ringa från webbläsaren till en vanlig telefon.
I tekniska termer innebär allt detta att du gör ett s.k API-anrop till ditt virtuella nummer. Anropet skulle kunna se ut såhär i python:
import requests
auth = (
'API_USERNAME',
'API_PASSWORD'
)
fields = {
'from': '<your_virtual_number>',
'to': '<your_webrtc_number>',
'voice_start': '{"connect":"<recipient_number>"}'
}
response = requests.post(
"https://api.46elks.com/a1/calls",
data=fields,
auth=auth
)
print(response.text)
I anropet skickar du med en parameter som heter voice_start
(notera den markerade kodraden ovan) och där anger du vilket telefonnummer du vill ringa till. Detta är samma sak som det meddelande webbläsaren skrev på lappen och gav till personen på stan.
Detta API-anrop är egentligen det enda som skiljer ett utgående samtal från ett inkommande samtal.
Nudå?
Nu är det dags för dig att testa WebRTC. Det gör du antingen genom att bygga något från grunden eller utgå från befintliga exempel.
Som nämnt i början av inlägget så har jag skrivit två guider för ringa och ta emot samtal med WebRTC med tillhörande kodexempel.
Hör gärna av dig. Jag är nyfiken på att höra vad du hittar på 😁
Kommunicera mera
Har du tankar eller feedback på vad du just läst? Vi är alltid öppna för diskussioner och vill gärna höra dina åsikter!
Skriv en kommentar för att komma i kontakt med oss 👋🏼