View Categories

Symbolleiste

9 min read

image 6

(i) #

Im Unterpunkt „Hilfe“ kann immer das aktuelle Handbuch heruntergeladen werden.

Person #

Hier kann man sich ausloggen und sein Passwort ändern

Glocke -> Chat                          #

Sichtbar für alle mit der Rolle „Team“. Einträge werden nach 7 Tagen gelöscht

Telefon -> Rufnummernanzeige #

Eingehende Anrufe werden automatisch angezeigt. Wenn die Nummer bestehenden Patient:innen zugeordnet ist, werden diese angezeigt.

Bei aktivierter Anzeige wird der letzte Anruf in der Titelzeile angezeigt und eine Liste der letzten 7 Tage in Patienten -> Anrufe erzeugt.

image 7

Der Hörer kann in Administration / Basiskonfiguration / Parameter aktiviert werden:

telefon.aktiv=ja

Einrichtung #

Die Telefonanlage muss bei eingehenden Anrufen eine Website aufrufen. Diese hat folgendes Format:

https://test.chiro-cloud.de/DEINE-URL/?action=members_telefon&code=geheimnis123&telefon=05311234567

DEINE-URL: Das was in deiner ChiroCloud Instanz hinter dem / kommt.
code= hier kommt hin, was mit dem Parameter „telefon.code=“ gesetzt wurde.
Hinter telefon= kommt eine Variable, die durch die Anrufernummer ersetzt wird. Diese Variable ist je nach System unterschiedlich bezeichnet.

Starface #

Einstellungen -> Browser -< URLs / Anruf-Aktionen
über „+“ neue Aktion hinzufügen

image

In die untere Zeile (Anruf-Aktion URL / Befehlszeile) die kommt:
https://test.chiro-cloud.de/DEINE-URL/?action=members_telefon&code=geheimnis123&telefon=$(callerIdNational)

Anrufstatus: Eingehend

Aufruf im Hintergrund, ohne einen Browser aufzurufen.

Fritz!Box und ioBroker #

Wenn die Praxistelefonnummer in der Fritz!Box konfiguriert ist, kann man ioBroker nutzen. Hierbei handelt es sich um eine grundlegend kostenlose Software, die man auf Windows oder einem Raspberry Pi installieren kann.

Adapter #

Man benötigt nur den „TR-064“ Adapter. Die Einrichtung ist hier gut erklärt: https://www.smarthome-tricks.de

image
Skript #

Erklärungen zum Skript:

  • Object ID = ringing
    • Dies ist der Datenpunkt der sich ändert, wenn das Telefon klingelt. true = klingelt, false = klingelt nicht
      Normalerweise muss dieser nicht angepasst werden und ist „tr-064.0.callmonitor.ringing“
  • Debug output: Wenn das Klingeln des Telefons korrekt erkannt wird, wird im Auswertungskasten unten angezeigt: „Telefon klingelt“
  • Pause 50ms: Wichtig, weil die FritzBox häufig das Klingeln sofort übergibt (s.o.), die Anrufernummer aber leicht verzögert aktualisiert wird. Wenn in der Anruferliste häufig die Nummer des vorletzten Anrufenden auftaucht, hier die Zahl erhöhen. Normalerweise funktioniert 50ms.
  • Wert vom Objekt „callee“
    • Hier eintragen, was im Datenpunkt „tr-064.0.callmonitor.ringing“ angezeigt wird. Normalerweise die Telefonnummer ohne führende „0“, kann aber abweichen.
    • Wenn in der FritzBox mehrere Telefonnummern konfiguriert sind, hier die entsprechende Anzeige bei Klingeln der Praxisrufnummer eintragen.
  • erstelle Text aus:
    • Hier unbedingt die URL anpassen!
      https://chiro-cloud.de/DEINE-URL/?action=members_telefon&code=geheimnis123&telefon=
      DEINE-URL: Das was in deiner ChiroCloud Instanz hinter dem / kommt.
      code= hier kommt hin, was mit dem Parameter „telefon.code=“ gesetzt wurde.
  • Debug Output: AnrufURL: Wenn alles richtig eingestellt ist, wird beim Klingeln im Auswertungskasten unten die URL inkl. der Anrufernummer angezeigt.
  • http (GET) ruft die erstellte URL auf -> Anrufernummer wird in ChiroCloud angezeigt
image
Blockly-Skript zum Importieren – zum Anzeigen anklicken.
<xml xmlns="https://developers.google.com/blockly/xml">
  <variables>
    <variable id="/oK^)!ZLGV/SuV]iM]Rv">Anrufe</variable>
    <variable id="T:TZ]8?L~xyd5-)_cjXt">AnrufURL</variable>
  </variables>
  <block type="on_ext" id="`lY*O30/tHQ{NTz:@[?n" x="38" y="38">
    <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
    <field name="CONDITION">true</field>
    <field name="ACK_CONDITION"></field>
    <value name="OID0">
      <shadow type="field_oid" id="so06JA^@4@`@@iWqTX/l">
        <field name="oid">tr-064.0.callmonitor.ringing</field>
      </shadow>
    </value>
    <statement name="STATEMENT">
      <block type="debug" id="+[B@m`TbL-!j*IPe0r.^">
        <field name="Severity">debug</field>
        <value name="TEXT">
          <shadow type="text" id="me(nZC_P2l:pYt|J3hwm">
            <field name="TEXT">Telefon klingelt</field>
          </shadow>
        </value>
        <next>
          <block type="timeouts_wait" id="Ew|=Q^+%xtme:,pr31VX">
            <field name="DELAY">50</field>
            <field name="UNIT">ms</field>
            <next>
              <block type="controls_if" id="%+%yT0J)0:^b^=lp,p?*">
                <value name="IF0">
                  <block type="logic_compare" id="7|F/j.sEc+AMayayAb*#">
                    <field name="OP">EQ</field>
                    <value name="A">
                      <block type="get_value" id="QzzW^oVX%,co.5Y]H)|]">
                        <field name="ATTR">val</field>
                        <field name="OID">tr-064.0.callmonitor.inbound.callee</field>
                      </block>
                    </value>
                    <value name="B">
                      <block type="math_number" id="J[,Tbdk*K`*t%0o9(Z]L">
                        <field name="NUM">5314287272</field>
                      </block>
                    </value>
                  </block>
                </value>
                <statement name="DO0">
                  <block type="variables_set" id="CuU]]BNE~[MiNhejxjKN">
                    <field name="VAR" id="/oK^)!ZLGV/SuV]iM]Rv">Anrufe</field>
                    <value name="VALUE">
                      <block type="get_value" id="KQ]+2!e/=f`cNdI*PNy;">
                        <field name="ATTR">val</field>
                        <field name="OID">tr-064.0.callmonitor.inbound.caller</field>
                      </block>
                    </value>
                    <next>
                      <block type="variables_set" id="-vh5p5cH_ccW*xTyl{`+">
                        <field name="VAR" id="T:TZ]8?L~xyd5-)_cjXt">AnrufURL</field>
                        <value name="VALUE">
                          <block type="text_join" id="eq/1?til7C|CQE2DaZmx">
                            <mutation items="2"></mutation>
                            <value name="ADD0">
                              <block type="text" id="F5Tsa{[wBh|0v0~n*(n!">
                                <field name="TEXT">https://chiro-cloud.de/DEINE-URL/?action=members_telefon&amp;code=geheimnis123&amp;telefon=</field>
                              </block>
                            </value>
                            <value name="ADD1">
                              <block type="variables_get" id=",qVJ!2lXyOz;h]Zey#+]">
                                <field name="VAR" id="/oK^)!ZLGV/SuV]iM]Rv">Anrufe</field>
                              </block>
                            </value>
                          </block>
                        </value>
                        <next>
                          <block type="debug" id="~-s^^m3[qz;wc}T+)SXb">
                            <field name="Severity">debug</field>
                            <value name="TEXT">
                              <shadow type="text" id="`q{;pL[zaijRY.F/q7:W">
                                <field name="TEXT">Zeit geändert</field>
                              </shadow>
                              <block type="variables_get" id="U@6DB);m7Ps:g!re([Ax">
                                <field name="VAR" id="T:TZ]8?L~xyd5-)_cjXt">AnrufURL</field>
                              </block>
                            </value>
                            <next>
                              <block type="http_get" id="m+*QQ*;cP:tZul~G0e=h">
                                <field name="TIMEOUT">2000</field>
                                <field name="UNIT">ms</field>
                                <field name="TYPE">text</field>
                                <value name="URL">
                                  <shadow type="text" id="v):RFO0J*LYs}D0W_4eZ">
                                    <field name="TEXT">http://</field>
                                  </shadow>
                                  <block type="variables_get" id="^h[rw(K:M#3b:bIpfp)e">
                                    <field name="VAR" id="T:TZ]8?L~xyd5-)_cjXt">AnrufURL</field>
                                  </block>
                                </value>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </statement>
              </block>
            </next>
          </block>
        </next>
      </block>
    </statement>
  </block>
</xml>

Asterisk auf Linux #

Relativ einfache Lösung, wenn man einen Linuxrechner hat (z.B. Ubuntu). Alternativ kann man für wenig Geld einen Raspberry Pi kaufen und auch mit dieser Anleitung einrichten.

Getestet für EasyBell. Andere VoIP-Anbieter sollten genauso funktionieren.

🧭 Schritt 1 – Asterisk installieren #
sudo apt update
sudo apt install asterisk curl -y

Asterisk läuft danach automatisch als Dienst (systemctl status asterisk).

🧭 Schritt 2 – alte Beispielkonfiguration deaktivieren #

Damit Asterisk schlank und sauber bleibt:

sudo mv /etc/asterisk/pjsip.conf /etc/asterisk/pjsip.conf.bak
sudo mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.bak

🧭 Schritt 3 – neue Konfigurationsdateien anlegen #

/etc/asterisk/pjsip.conf

sudo nano /etc/asterisk/pjsip.conf

Anpassungen: Rufnummer, SIP-Passwort, client-uri
Bei anderen Anbietern: server-uri, contact

Dann einfügen:

; =====================================================
; Minimal Asterisk config for Easybell Webhook listener
; =====================================================

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0

; --- Authentifizierung ---
[ezb-auth]
type=auth
auth_type=userpass
username=00495311234567   ; <- DEINE RUFNUMMER
password=S1pP@$$          ; <- DEIN SIP-PASSWORT

; --- Registrierung bei easybell ---
[ezb]
type=registration
outbound_auth=ezb-auth
server_uri=sip:voip.easybell.de
client_uri=sip:00495311234567@voip.easybell.de   ; <- DEINE RUFNUMMER@voip.easybell.de
retry_interval=60
forbidden_retry_interval=300
expiration=300
line=yes
endpoint=ezb-endpoint

; --- Ziel-Endpoint ---
[ezb-aor]
type=aor
contact=sip:voip.easybell.de
qualify_frequency=60

[ezb-endpoint]
type=endpoint
aors=ezb-aor
outbound_auth=ezb-auth
transport=transport-udp
context=from-easybell
disallow=all
allow=alaw,ulaw
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
language=de

Speichern: CTRL+O, ENTER, CTRL+X


/etc/asterisk/extensions.conf

sudo nano /etc/asterisk/extensions.conf

Hier unbedingt die URL anpassen!
https://chiro-cloud.de/DEINE-URL/?action=members_telefon&code=geheimnis123&telefon=${CID}
DEINE-URL: Das was in deiner ChiroCloud Instanz hinter dem / kommt.
code= hier kommt hin, was mit dem Parameter „telefon.code=“ gesetzt wurde.
Dann einfügen:

[general]
static=yes
writeprotect=no
clearglobalvars=no

[from-easybell]
; Fall 1: Provider liefert keine Zielnummer -> 's'
exten => s,1,NoOp(Incoming (s): ${CALLERID(all)})
 same => n,GoSub(callhook,s,1)
 ; WICHTIG: nicht auflegen, nur warten bis Provider CANCEL sendet
 same => n,Wait(60)

; Fall 2: normale Zielnummern (ohne Plus)
exten => _X.,1,NoOp(Incoming (_X.): ${CALLERID(all)} -> ${EXTEN})
 same => n,GoSub(callhook,s,1)
 same => n,Wait(60)

; Fall 3: Zielnummern mit +49 etc.
exten => _+X.,1,NoOp(Incoming (_+X.): ${CALLERID(all)} -> ${EXTEN})
 same => n,GoSub(callhook,s,1)
 same => n,Wait(60)

[callhook]
exten => s,1,NoOp(WebHook start)
 ; CallerID aufbereiten: +49 -> 0049 (falls du 0049 brauchst)
 same => n,Set(CID=${CALLERID(num)})
 same => n,Set(CID=${REPLACE(CID,+,00)})

 ; URL bauen
 same => n,Set(URL=https://chiro-cloud.de/DEINE-URL/?action=members_telefon&code=geheimnis123&telefon=${CID})

 ; Webhook via eingebaute CURL-Funktion (zuverlässiger als System/trySystem)
 same => n,Set(HOOKRES=${CURL(${URL})})
 same => n,NoOp(WebHook done: ${URL} (resp len=${LEN(${HOOKRES})}))

 same => n,Return()

Speichern & schließen.


🧭 Schritt 4 – Asterisk neu laden #
sudo systemctl restart asterisk

Dann kontrollieren:

sudo asterisk -rvvvvv
*CLI> pjsip show registrations

Wenn alles stimmt, siehst du:

<Registration/ServerURI............>  <Auth.......>  <Status>
ezb/sip:sip.easybell.de             ezb-auth       Registered

✅ Das heißt: dein Asterisk ist erfolgreich bei easybell angemeldet.


🧭 Schritt 5 – Testanruf #
  1. Rufe deine Rufnummer von einem anderen Anschluss aus an.
  2. In der Asterisk-Konsole (asterisk -rvvvvv) solltest du Zeilen sehen wie: -- Executing [004953112345677@from-easybell:1] NoOp("PJSIP/ezb-endpoint-00000001", "Incoming call: +491701234567") in new stack
  3. In deiner ChiroCloud sollte die Rufnummer angezeigt werden, sowie Patientenakten in denen diese steht.

Powered by BetterDocs