"online SIP connector"?

flyingcat

Neuer User
Mitglied seit
25 Mrz 2008
Beiträge
1
Punkte für Reaktionen
0
Punkte
0
Hallo liebes VOIP-Forum,

eine Frage dazu, wie ich folgendes am besten bewerkstelligen kann:
Ich will eine Web-Seite aufsetzen, auf der ich zwei Telefonnummern eingeben kann. Die erste wird dann per SIP angerufen, wenn der angerufene drangeht, wird er mit der zweiten verbunden.

Ziel ist, einen Außendienstler anzubinden, der da wo er ist selbst keinen SIP-Client betreiben kann (aus Sicherheitsgründen geht da außer HTTP nichts).

Also: Außendienstler gibt seine Handynummer ein, die wird dann (über unseren eigenen SIP-Server) angerufen. Er geht dran und hört den Klingelton der Person, deren Nummer er als zweite angegeben hat. Für die sieht es dann so aus, als hätte der Außendienstler einfach bei uns aus dem Büro rausgewählt (der SIP-Client terminiert über unseren Anschluß).

Hat jemand eine Idee, wie man das am Einfachsten aufsetzen kann? Es geht nur um einen einzigen, maximal vielleicht mal zwei bis drei Außendienstler.

Danke & Gruß,
Christian
 
Das geht mit einem Asterisk Server.

Alternativ ohne Webseite CallThrough (siehe DISA bei Asterisk) oder Callback
 
Als Quick-And-Dirty-Hack ginge das so:

/etc/asterisk/extensions.conf (Ausschnitt):
Code:
; ANFANG CALLBACK

[callback-withoutcallid]
exten => s,1,Set(LANGUAGE()=de)
exten => s,2,Answer
exten => s,3,Wait,1

; EingabeSchleife zur Zieleingabe
exten => s,4,Set(MYNR=)
exten => s,5,Background(privacy-prompt)
exten => s,6,Set(TIMEOUT(digit)=10)
exten => s,7,WaitExten
exten => _X,1,Set(MYNR=${MYNR}${EXTEN})
exten => _X,2,Goto(s,6)

; Zuruecksetzen
exten => *,1,Goto(s,4)

; Eigene Rufnummer uebergeben
exten => #,1,Background(queue-thankyou)
exten => #,2,SetCallerID(${MYNR})
exten => #,3,AGI(callback.agi)
exten => #,4,Hangup

; Handling fuer Timeout & bye
exten => t,1,Playback(vm-goodbye)
exten => t,2,HangUp

[callback-withcallid]
exten => s,1,Set(LANGUAGE()=de)
exten => s,2,AGI(callback.agi)
exten => s,3,Hangup


;;;;;;;;;;;


[callback-dial]
exten => _X.,1,Wait,20
exten => _X.,2,Dial(SIP/${EXTEN}@498154711,,)

[callback-go]
exten => s,1,Set(LANGUAGE()=de)
exten => s,2,Wait,1

; Soll ein Passwort abgefragt werden?
exten => s,3,GotoIf($[${ask4pass} = true]?4:7)

; Erstmal Passwort ueberpruefen
exten => s,4,DigitTimeout(5)
exten => s,5,Set(TIMEOUT(digit)=10)
exten => s,6,Authenticate(${password})

; EingabeSchleife zur Zieleingabe
exten => s,7,Set(NR=)
exten => s,8,Background(vm-enter-num-to-call)
exten => s,9,DISA(no-password|callback_disa)

; Handling fuer Timeout & bye
exten => t,1,Playback(vm-goodbye)
exten => t,2,HangUp

[callback-1und1-gehend]
; Diesen Context verwenden wir zum Waehlen von abgehenden
; Rufnummern 1und1 Account 498154711 zum Aufbau des Callbacks


exten => _0[2-8]X.,1,Dial,SIP/${EXTEN}@498154711|120|r


; Ende CALLBACK

/etc/asterisk/callback.settings
Code:
# If set to true: the user will be promted for a password on callback
ask4pass=true

# If set to true: only the following numbers are accepted for callback
restricted=true

# If restricted=false + ask4pass=true + noUserPassFound > this password will be used
generalpass=998877665544387436583645823875683723896583653568734

# Accepted numbers with password
TELNUMBER:PASSWORD
112233:1234

/var/lib/asterisk/agi-bin/callback.agi
Code:
#!/bin/bash

callbackAllow="/etc/asterisk/callback.settings"
callpath="/var/spool/asterisk/tmp/"
callfile=$callpath"call`date +%Y%m%d_%H%M%S`"
date=`date +%Y%m%d-%H%M%S`
logfile=/var/log/asterisk/full

mkdir -p $callpath
i=0

read -a name

while [ "${name[0]}" != "agi_callerid:" ]
do
  read -a name
  i=`expr $i + 1`
  if [ $i -ge 20 ] ; then
      break
  fi
done

if [ ${name[0]} = "agi_callerid:" ] ; then

   callerid=`echo ${name[1]} | sed 's/+//g'`
   search=`grep "$callerid" $callbackAllow`
   rtest=`grep "restricted=true" $callbackAllow`
   ptest=`grep "ask4pass=true" $callbackAllow`

   if [ -n "$rtest" ] && [ -n "$ptest" ] ; then
        restricted=true
        ask4pass=true
        password=`echo $search | sed 's/.*://g'`

   elif [ -z "$rtest" ] && [ -n "$ptest" ] ;  then
        restricted=false
        ask4pass=true
        if [ -n "$search" ] ; then
           password=`echo $search | sed 's/.*://g'`
        else
           password=`grep "generalpass=" $callbackAllow | sed 's/.*=//g'`
        fi

   elif [ -n "$rtest" ] && [ -z "$ptest" ] ; then
        restricted=true
        ask4pass=false
        password="noPass"

   else
        restricted=false
        ask4pass=false
        password="noPass"

   fi


   echo -n $date" : restricted=$restricted ask4pass=$ask4pass" >> $logfile

   if [ $restricted == false ] || [ -n "$search" ]
       then
         echo " : accepting incoming call from '$callerid'!"     >> $logfile
         touch $callfile
         echo "Channel: Local/$callerid@callback-dial"           >> $callfile
         echo "Callerid: $callerid"                              >> $callfile
         echo "Context: callback-go"                             >> $callfile
         echo "Extension: s"                                     >> $callfile
         echo "MaxRetries: 0"                                    >> $callfile
         echo "RetryTime: 10"                                    >> $callfile
         echo "SetVar: ask4pass=$ask4pass"                       >> $callfile
         echo "SetVar: password=$password"                       >> $callfile
         echo "SetVar: caller=$callerid"                         >> $callfile

         cp $callfile /var/spool/asterisk/outgoing

        else
          echo " : incoming call from '$callerid' rejected!"      >> $logfile
        fi

fi

Damit wäre der Asterisk fertig. Zum Start des Callbacks kann nun eine Nummer verwendet werden, die dann in die extensions.conf rein muß, um Callback auszulösen. Dazu muß die Nummer des Anrufers in die Datei callback.settings eingetragen werden oder je nach Lust und Laune anders konfiguriert werden.

Soll das ganze nun über ein Web-Frontend angestoßen werden können, dann hilft folgendes Perl-Fragment, das nur noch mit CGI garniert werden muss. In seiner jetzigen Form muss die Nummer, der ein Freizeichen präsentiert werden soll, als Parameter mitgegeben werden.

callback.pl
Code:
#!/usr/bin/perl -w
#
$ENV{PATH}="/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/etc/ppp/ip-up.d:/etc/init.d";
$< = $>;        # Setze reale uid auf effektive uid

my $NUMMER=$ARGV[0];
my $file = "/tmp/callmenow";
open (HANDLE, ">".$file) || die "Kann Datei nicht anlegen\n";
print HANDLE "Channel: Local/".$NUMMER."\@callback-dial\n";
print HANDLE "Callerid:".$NUMMER."\n";
print HANDLE "Context: callback-go\n";
print HANDLE "Extension: s\n";
print HANDLE "MaxRetries: 0\n";
print HANDLE "RetryTime: 10\n";
print HANDLE "SetVar: caller=".$NUMMER."\n";
print HANDLE "SetVar: ask4pass=false";
print HANDLE "SetVar: caller=".$NUMMER."\n";

close HANDLE;
system("/bin/mv $file /var/spool/asterisk/outgoing");

Hoffe, das hilft.

Hawedieehre.
Fant
 
Wir bieten genau das mit PBX-mobile an. Dabei wird die Rückrufnummer fest vorgegeben. Die Seite kann auch direkt vom Mobiltelefon aufgerufen werden.
Alternativ gibt es auch einen Vermittlungsservice bei dem Ziel und Quellnummer frei eingegeben werden können. Kunden finden das im Portal unter Extras. Beide Features funktionieren bereits mit PBX-Basic
 
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.