Automatische Rufanahme von einer Fritzbox?

3PO

Neuer User
Mitglied seit
3 Jun 2005
Beiträge
164
Punkte für Reaktionen
3
Punkte
18
Hallo Zusammen,

Ich habe eine FritzBox 7490 die auch gleichzeitig meine "Telefonanlage" ist und das soll auch so bleiben.

Leider aber ist es so, dass man den internen Anrufbeantworten der FB keine Telefonbücher zuordnen kann.

Ich habe folgendes vor, ich möchte, dass wenn ein ich von einer Rufnummer angerufen werde, die in einer Nummernliste steht, dann sofort ein AB rangeht, eine "Begrüßung" abspielt und dann auflegt.

Ich habe auf einem Raspberry Pi Asterisk installiert, denn ich denke, dass Asterisk das bestimmt kann. ;)

OK, ich weiß natürlich dass das "mit Kanonen auf Spatzen schießen" ist, aber leider habe ich keine andere Lösung für mein Problem gefunden.

Ich habe jetzt Asterisk soweit, dass es sich via SIP an der FB anmeldet, aber das ist leider auch schon alles....


Evtl. kann mir ja einer der Asterisk-Experten hier bei meinem Vorhaben weiterhelfen?
 
Anrufbeantworter 1 deaktivieren und Anrufbeantworter 2 und folgende für deine Ansage
Danach in der Rufbehandlung die "Regel" einrichten
 
@ thtomate12,

leider steht dort nicht, wie die o.g. Bedingung einbaue?


@ informerex,

leider habe ich auch das nicht verstanden, was soll das bringen, wenn ich AB 1 deaktiviere?
 
was soll das bringen, wenn ich AB 1 deaktiviere?
dass Probleme umgangen werden
Ersten Anrufbeantworter einrichten und deaktivieren
Den ersten Anrufbeantworter können Sie nicht exklusiv als Rufumleitungsziel für anonyme Anrufer verwenden, weil dieser Anrufbeantworter immer auch auf externe Anrufe reagiert. Wenn Sie diesen Anrufbeantworter verwenden, würden auch Anrufer an den Anrufbeantworter geleitet, die ihre Rufnummer übermitteln. Daher müssen Sie den ersten Anrufbeantworter zunächst einrichten und deaktivieren, falls Sie noch keinen Anrufbeantworter in der FRITZ!Box eingerichtet haben:
https://avm.de/service/fritzbox/fri...tisch-auf-internen-Anrufbeantworter-umleiten/
 
Das funktioniert leider nicht, da es dort keine Option gibt, ein ganzes Telefonbuch auszuwählen.

2016-10-11_193452.jpg
 
Ich habe via Google folgendes gefunden:

http://maxschmid72.blogspot.de/

Leider aber bekomme ich bei einem Anruf folgende Fehlermeldung:

Code:
....
Asterisk Ready.
  == Parsing '/etc/asterisk/cli.conf': Found
  == Using SIP RTP CoS mark 5
[Oct 13 18:40:16] NOTICE[21107][C-00000000]: chan_sip.c:25872 handle_request_invite: Call from '623' (192.168.177.1:5060) to extension '623' rejected because extension not found in context 'macro-check-caller-reputation'.

Hat Jemand eine Idee, was Asterisk mir da mitteilen will?
 
Das...
Code:
'623' rejected because extension not found in context 'macro-check-caller-reputation'
...deutet an, dass du im Kontext [macro-check-caller-reputation] noch sowas brauchst...
Code:
exten => 623,1,Answer(250)
same => n,StartMusicOnHold()
(Ist was automatisches)
:rolleyes:

Wenn du mit einer Liste arbeiten möchtest, schlage ich...
Code:
same  => n,GotoIf(${BLACKLIST()}?blacklisted)
http://www.voip-info.org/wiki/view/Asterisk+func+BLACKLIST
...vor.

EDIT

Hab mir mal das Makro angesehen, wahrscheinlich reicht es...
Code:
[macro-check-caller-reputation]  
exten => s,1,NoOp(CALLER-REPUTATION)

..in..
Code:
[macro-check-caller-reputation]  
exten => _X.,1,NoOp(CALLER-REPUTATION)
( _X. = ${EXTEN} = Jede Nummer )
...zu ändern.
 
Zuletzt bearbeitet:
Vielen Dank @ koyaanisqatsi,

mit der Änderung ist der Fehler weg.

Allerdings kommt jetzt bei einem Anruf folgender Fehler:

Code:
....
Asterisk Ready.
  == Parsing '/etc/asterisk/cli.conf': Found
  == Using SIP RTP CoS mark 5
    -- Executing [623@macro-check-caller-reputation:1] NoOp("SIP/fbfgateway-00000000", "CALLER-REPUTATION") in new stack
    -- Executing [623@macro-check-caller-reputation:2] Set("SIP/fbfgateway-00000000", "TLW_ANINUM=") in new stack
    -- Executing [623@macro-check-caller-reputation:3] NoOp("SIP/fbfgateway-00000000", "Testing number ") in new stack
    -- Executing [623@macro-check-caller-reputation:4] AGI("SIP/fbfgateway-00000000", "tellowsagi.php") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/tellowsagi.php
 tellowsagi.php: Failed to execute '/var/lib/asterisk/agi-bin/tellowsagi.php': No such file or directory
    -- Executing [623@macro-check-caller-reputation:5] NoOp("SIP/fbfgateway-00000000", "AGI Return  with score ") in new stack
    -- Executing [623@macro-check-caller-reputation:6] GotoIf("SIP/fbfgateway-00000000", "0?reqOK:exit") in new stack
    -- Goto (macro-check-caller-reputation,623,46)
    -- Executing [623@macro-check-caller-reputation:46] MacroExit("SIP/fbfgateway-00000000", "") in new stack
[Oct 14 16:05:34] WARNING[30967][C-00000000]: pbx.c:6862 __ast_pbx_run: Timeout, but no rule 't' or 'e' in context 'macro-check-caller-reputation'

Die Meldung, "No such file or directory" wundert mich, denn die Datei existiert:

Code:
server01 ~ # file /var/lib/asterisk/agi-bin/tellowsagi.php
/var/lib/asterisk/agi-bin/tellowsagi.php: a /usr/bin/php -q   script, ISO-8859 text executable
server01 ~ #
 
Moin

Existiert? Für Wen?
Asterisk läuft normalerweise als Benutzer/Gruppe: asterisk.asterisk
Der Pfad zum Skript muss asterisk.asterisk also erlaubt sein.
Die Rechte des Skripts auch.

Probier also mal als Benutzer: root
1. su -l asterisk
2. whoami
3. cd /var/lib/asterisk/agi-bin/
4. ls -la ./tellowsagi.php
5. ./tellowsagi.php
6. php tellowsagi.php

Vielleicht reichen als root diese Kommandos...
1. chown -R asterisk.asterisk /var/lib/asterisk
2. chmod +x /var/lib/asterisk/agi-bin/*.php
 
Zuletzt bearbeitet:
An den Rechten scheint es nicht zu liegen:

Code:
server01 agi-bin # ll
insgesamt 120
drwxr-xr-x  2 asterisk asterisk  4096 12. Okt 20:45 .
drwxr-xr-x 12 asterisk asterisk  4096 14. Okt 17:01 ..
-rwxrwxr-x  1 asterisk asterisk   239 30. Sep 2010  mkdocs.php
-rwxrwxr-x  1 asterisk asterisk 25079 30. Sep 2010  phpagi-asmanager.php
-rwxrwxr-x  1 asterisk asterisk  2322 30. Sep 2010  phpagi-fastagi.php
-rwxrwxr-x  1 asterisk asterisk 67615 30. Sep 2010  phpagi.php
-rwxr-xr-x  1 asterisk asterisk  6441 12. Okt 20:46 tellowsagi.php
server01 agi-bin #

Allerdings habe ich beim Starten noch mehr Fehler: :(

https://paste.lugons.org/show/rzHI4aLBKw33sftErkqJ/
 
Das extern gehostete Logfile kann ich mir nicht angucken...
Screenshot_2016-10-14-17-26-38.png

Mit Chrome gehts...

MySQL greift ins Klo...
Code:
 == Parsing '/etc/asterisk/res_config_mysql.conf': Found[Oct 14 17:13:56] WARNING[16734]: res_config_mysql.c:1505 load_mysql_config: MySQL RealTime: No database user found, using 'asterisk' as default.
[Oct 14 17:13:56] WARNING[16734]: res_config_mysql.c:1511 load_mysql_config: MySQL RealTime: No database password found, using 'asterisk' as default.
[Oct 14 17:13:56] WARNING[16734]: res_config_mysql.c:1517 load_mysql_config: MySQL RealTime: No database host found, using localhost via socket.
[Oct 14 17:13:56] WARNING[16734]: res_config_mysql.c:1523 load_mysql_config: MySQL RealTime: No database name found, using 'asterisk' as default.
[Oct 14 17:13:56] WARNING[16734]: res_config_mysql.c:1529 load_mysql_config: MySQL RealTime: No database port found, using 3306 as default.
[Oct 14 17:13:56] WARNING[16734]: res_config_mysql.c:1541 load_mysql_config: MySQL RealTime: No database socket found, using '/var/run/mysqld/mysqld.sock' as default.
[Oct 14 17:13:56] WARNING[16734]: res_config_mysql.c:1546 load_mysql_config: MySQL RealTime: No database socket found (and unable to detect a suitable path).
[Oct 14 17:13:56] NOTICE[16734]: config.c:2563 ast_config_engine_register: Registered Config Engine mysql
  == MySQL RealTime driver loaded

Fehler in der extensions.conf...
Code:
NoOp(Testing number ${TLW_ANINUM}
...da fehlt eine runde Klammer am Ende.
 
Zuletzt bearbeitet:
Das Problem mit dem PHP Script konnte ich teilweise lösen, indem ich PHP neu installiert habe.

Jetzt nörgelt PHP allerdings wegen:

Code:
    -- Launched AGI Script /var/lib/asterisk/agi-bin/tellowsagi.php
PHP Notice:  Undefined index: PATH in /var/lib/asterisk/agi-bin/phpagi.php on line 1693
PHP Notice:  Undefined index: PATH in /var/lib/asterisk/agi-bin/phpagi.php on line 1693

Hier die phpagi.php: --> https://bpaste.net/show/16383237d805

MySQL greift ins Klo...
Brauche ich unbedingt MySQL?
 
PHP
Notice ist nicht kritisch.
Eine nicht indizierte Variable oder Arrayelement.
Probier mal: error_reporting(E_ALL ^ E_NOTICE);
(Alle Fehlermedungen außer Notice)
...oder...
error_reporting(0);
(Schaltet alle Fehlermeldungen ab)
...als zweite Zeile im PHP-Skript ;)

Ich mein gesehen zu haben, dass das Skript eine Datenbank zum Nachschauen der Nummern braucht.
...bin mir aber auch nicht sicher.
:rolleyes:
Auf der Seite wo du es her hast steht jedenfalls:
"I also included some basic MySQL logging to log all incoming calls and the results of Tellows check. I intend to use this for some statistics later"
 
Zuletzt bearbeitet:
[...]

Ich mein gesehen zu haben, dass das Skript eine Datenbank zum Nachschauen der Nummern braucht.
...bin mir aber auch nicht sicher.
:rolleyes:
Auf der Seite wo du es her hast steht jedenfalls:
"I also included some basic MySQL logging to log all incoming calls and the results of Tellows check. I intend to use this for some statistics later"

Ja, schon, aber ich denke dass das von PHP erledigt wird, oder?

tellowsagi.php
PHP:
[...]
 function LogToDB ($score,$callertype,$location,$country,$request,$num_checked,$text) {  
     // $result['score'] $result['callertype'] $result['location'] $result['country'] $result['request'] $result['num_checked']  
 echo "Run Function";  
     $dbname = 'TellowsLog';  
     $dbuser = 'root';  
     $dbpass = 'xxxxxxx';  
     $dbhost = 'localhost';  
     $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);  
     if ($mysqli->connect_errno) {  
         echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;  
     }  
   
     if (!$mysqli->query("INSERT INTO Log(score,callertype,location,country,request,num_checked,Text)   
                                   VALUES ('$score','$callertype','$location','$country','$request','$num_checked','$text')")){  
         echo "Data insert failed: (" . $mysqli->errno . ") " . $mysqli->error;  
     }  
     return;  
 }

Ich habe auf jeden Fall mal eine MySQL DB entsprechend angelegt. ;)
 
So wie es aussieht, scheint alles wie gewünscht zu laufen.

1000 Dank an dieser Stelle an koyaanisqatsi für die kompetente Unterstützung, ohne die ich es ganz bestimmt nicht hinbekommen hätte.


Allerdings hätte ich noch eine kleine Frage:

Wenn ich bei einem Anruf ein Shellscript aufrufen will und die Rufnummer mit übergeben will, wie müsste ich denn das machen?
 
Moin

Dafür empfehl ich SHELL()

Code:
same => n,Verbose(SHELL(/bin/sh /etc/asterisk/shellscript.sh ${CALLERID(num)}))
...für eine Integerzahl, und...
Code:
same => n,Verbose(SHELL(/bin/sh /etc/asterisk/shellscript.sh "${CALLERID(name)}"))
...für einen String.

Verbose() gibt das aus, was das Skript mit echo ausgibt.
...das kann genauso gut im Set() angewendet werden...
Code:
 same => n,Set(myVar=${SHELL(/bin/sh /etc/asterisk/shellscript.sh ${CALLERID(num)})})
...auch hier: Für eine Integerzahl
Code:
 same => n,Set(myVar="${SHELL(/bin/sh /etc/asterisk/shellscript.sh "${CALLERID(name)}")}")
...und: String
 
Zuletzt bearbeitet:
DANKE! ;)

Aber ich hätte das Script jetzt nicht nach "/etc/asterisk" gelegt, sondern nach "/var/lib/asterisk/agi-bin", denn dort liegen ja auch die anderen Scripte, oder ist das nicht sinnvoll?
 
Sinnvoll, solange du die kompletten Pfade nimmst, ist eben an die Rechte von asterisk.asterisk gebunden.
...der darf nicht überall rin. :mrgreen:
 
Ich den Aufruf für das Shellscript mal so eingebaut,

Code:
[macro-check-caller-reputation]  
same => n,Verbose(SHELL(/bin/bash /var/lib/asterisk/agi-bin/callerlog.sh ${CALLERID(num)}))
exten => _X.,1,NoOp(CALLER-REPUTATION)
....

Aber ausgeführt wird es leider nicht. :(

Der Rest funktioniert soweit fehlerfrei:

Code:
......
Asterisk Ready.
  == Parsing '/etc/asterisk/cli.conf': Found
  == Using SIP RTP CoS mark 5
    -- Executing [623@macro-check-caller-reputation:1] NoOp("SIP/fbfgateway-00000000", "CALLER-REPUTATION") in new stack
    -- Executing [623@macro-check-caller-reputation:2] Set("SIP/fbfgateway-00000000", "TLW_ANINUM=") in new stack
    -- Executing [623@macro-check-caller-reputation:3] NoOp("SIP/fbfgateway-00000000", "Testing number ") in new stack
    -- Executing [623@macro-check-caller-reputation:4] AGI("SIP/fbfgateway-00000000", "tellowsagi.php") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/tellowsagi.php
    -- <SIP/fbfgateway-00000000>AGI Script tellowsagi.php completed, returning 0
    -- Executing [623@macro-check-caller-reputation:5] NoOp("SIP/fbfgateway-00000000", "AGI Return ok with score 5") in new stack
    -- Executing [623@macro-check-caller-reputation:6] GotoIf("SIP/fbfgateway-00000000", "1?reqOK:exit") in new stack
    -- Goto (macro-check-caller-reputation,623,7)
    -- Executing [623@macro-check-caller-reputation:7] NoOp("SIP/fbfgateway-00000000", "") in new stack
    -- Executing [623@macro-check-caller-reputation:8] GotoIf("SIP/fbfgateway-00000000", "0?setType:setLoc") in new stack
    -- Goto (macro-check-caller-reputation,623,9)
    -- Executing [623@macro-check-caller-reputation:9] Set("SIP/fbfgateway-00000000", "CALLERID(name)=XXXXXXXXXXXX") in new stack
    -- Executing [623@macro-check-caller-reputation:10] Goto("SIP/fbfgateway-00000000", "exit") in new stack
    -- Goto (macro-check-caller-reputation,623,46)
    -- Executing [623@macro-check-caller-reputation:46] MacroExit("SIP/fbfgateway-00000000", "") in new stack
[Oct 16 09:24:56] WARNING[2322][C-00000000]: pbx.c:6862 __ast_pbx_run: Timeout, but no rule 't' or 'e' in context 'macro-check-caller-reputation'
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.