[HowTo] Automatisierte Anwahl von calling cards

TinTin

Aktives Mitglied
Mitglied seit
6 Mai 2004
Beiträge
1,864
Punkte für Reaktionen
0
Punkte
0
Achtung
Stanaphone hat die kostenlose Anwahl von 1-800 Nummern eingestellt, stattdessen kann man jetzt aber einen anderen Provider nehmen. Die jeweils aktuelle/neueste Version dieser Anleitung findet man hier


Hallo zusammen,

hier, wie versprochen, meine Erkenntnisse bzgl. einer durch Asterisk automatisierten Anwahl einer calling card Nummer mit Übermittlung der PIN sowie der zu wählenden Rufnummer.

Das Beispiel bezieht sich alleinig auf die Anwahl von Handynummern in Deutschland, kann natürlich für andere Länder und/oder Festnetznummern angepaßt werden.

Um das Beispiel nachzuspielen wird benötigt:

1. Asterisk :)
2. Ein kostenloser account bei http://www.stanaphone.com
3. Eine calling card

Warum Stanaphone? Stanaphone ist einer der wenigen Anbieter, die kostenlos Anrufe auf 1-800 Nummern in den USA anbieten. Bei keinem anderen kostenlosen Anbieter für die Wahl von 1-800 Nummern war ich bisher erfolgreich mit dem automatisierten senden von DTMF Tönen via Asterisk. Wer hier noch einen anderen kostenlosen Anbieter nennen kann mit dem meine Methode funktioniert... immer her damit. Mit Sipgate und Nikotel funktioniert es auch, allerdings sind Anrufe über die beiden Anbieter zu 1-800 Nummern in den USA nicht kostenlos.

[s:7bd2a38b70]Als calling card benutze ich die "EuroCell" von Sprint. Erhältlich z.B. via http://www.cheapphonecards.com : calling card suchen für Gespräche von USA nach Mobilfunk Deutschland - bestellen und ggf. vorher ergoogelten Rabattcode eingeben (bei mir funktionierte noch save15). Die calling card kostet ohne Rabatt US $ 10 für 166min. Das sind umgerechnet bei heutigem (relativ schlechtem) Dollarkurs 4,9 EuroCent/min. - mit Rabattcode dann noch weniger.[/s:7bd2a38b70]

Die "Eurocell" gibt's leider nicht mehr, daher habe ich das Beispiel jetzt angepaßt an eine neuere calling card von Sprint die es jetzt gibt. Kurs ist etwas schlechter, die Karte kostet US $ 15 für 166min. auf deutsche Handys, was umgerechnet einen Minutenpreis von 7,5 EuroCent/min. ergibt. Die Karte hab' ich gekauft bei http://www.ebuypins.com . Links im search Fenster nach "sprint" suchen und die erste gelistete auswählen:

Sprint (#1) International Prepaid Phone Card - $15.00


Wenn man länger als 7min. telefoniert lohnt sich die Sprint (#3), da sie dann billiger wird als die #1. Der Unterschied bei der #3 ist, dass man pro Gespräch eine connection fee von 50 UScent zahlt, dafür dann aber nur 2,4 UScent/min. (!). Ggf. kann man sich also beide Karten holen und dann den Dialplan dahingehend erweitern dass man entweder über die eine oder die andere telefoniert.


Jetzt aber zum eigentlichen Thema:

Relevante Einträge in der sip.conf:

Code:
;registrieren bei stanaphone, Achtung: das Webpasswort ist nicht identisch
;mit dem SIP Passwort, einloggen bei stanaphone und nachschauen wie es
;lautet, die "Nummer" ist die von stanaphone vergebene Telefonnummer

register => Nummer:[email protected]/Nummer

[stanaphone]
type=friend
username=Nummer
secret=SipPasswort
fromuser=Nummer
host=sip.stanaphone.com
fromdomain=sip.stanaphone.com
nat=yes ;wenn Asterisk hinter einem Router, sonst nat=no
context=incoming
canreinvite=no
qualify=no
insecure=very
dtmfmode=rfc2833
tos=reliability
disallow=all
allow=ulaw ;unbedingt ulaw benutzen, wichtig für DTMF Töne !
allow=alaw

[Endgeraet]
...
...
...
context=MeinDialout
...

Relevante Einträge in der extensions.conf
Code:
[MeinDialout]

;nur bei Handyvorwahlen reagieren
;ersetze NNNNNNNNNN mit Deiner calling card Nummer

exten => _01[5-7].,1,SetGlobalVar(EUROCELL=NNNNNNNNNN)

;die gewählte Rufnummer speichern wir in der Variablen DIALEDNUMBER
;und schneiden die Null vorne ab, da sie später nicht mitgewählt werden
;darf

exten => _01[5-7].,2,SetGlobalVar(DIALEDNUMBER=${EXTEN:1})

;Jetzt wählen wir los über stanaphone, die 18008145427 ggf. mit der 
;calling card access Nummer ersetzen die ihr verwendet, falls nicht auch
;die EuroCell Karte benutzt werden soll. Nach Anwahl wird ins Macro
;macro-MD2 verzweigt.

exten => _01[5-7].,3,Dial(SIP/18008145427@stanaphone,,TM(MD2))

[macro-MD2]
;Jetzt erfolgt das senden der calling card Nummer per DTMF
;und sonstige Tönen für die Menüsteuerung der calling card
;wenn nicht EuroCell verwandt wird, muß man es natürlich 
;auf die eigene calling card anpassen. Die Pausen zwischen
;den Tönen (Wait(x)) können evtl. verkürzt werden, muß man selbst mal
;ausprobieren, für mich lief es so am besten.

exten => s,1,SIPDtmfMode(info)
exten => s,2,SendDTMF(1)
exten => s,3,Wait(2)
exten => s,4,SendDTMF(${EUROCELL})
exten => s,5,Wait(2)
exten => s,6,SendDTMF(2)
exten => s,7,Wait(1)
exten => s,8,SendDTMF(49${DIALEDNUMBER})

ACHTUNG
Noch ein wichtiger Hinweis: Ruft man zu oft hintereinander (4-5 Mal oder öfter) in kurzer Zeit über stanaphone eine 1-800 Nummer an, so wird diese Nummer temporär für ein paar Stunden geblockt. Das kann beim Testen natürlich schnell mal passieren...

Wenn mein Dialplan Verwendung findet und auch bei Euch gut funktioniert dann schreibt hier doch bitte einen Kommentar dazu. Natürlich auch falls es bei Euch nicht funktionieren sollte.

Ich hoffe es hat sich kein Tippfehler eingeschlichen.

Viel Spaß beim basteln & Geld sparen!

Tin
 
Zuletzt bearbeitet:
Hi Tin,

ich befürchte es gibt die Calling Card nicht mehr :-(
Am Mittwoch war sie out of stock und seit gestern hat cheapphonecards sie nicht mehr im Programm.
Eine Alternative/anderen Anbieter konnte ich bis jetzt nicht finden.

Ich hoffe das ist nur temporär.

Gruß
Matthias
 
Ja, ist mir gestern auch erst aufgefallen, sowas dummes, hätte ich bloß ein paar mehr gekauft. Naja...

Es gibt noch eine andere von Sprint (anscheinend aber noch nicht bei cheapphonecards.com), allerdings lohnt sich die nur für Telefonate so ab 4-5min., der Minutenpreis zu deutschen Handys liegt bei nur 3 USc./min, aber dafür gibt es einen Aufschlag von 49 USc pro Gespräch. Der Rest ist gleich, keine maintenance fee usw.

Gruß,
Tin
 
Registrierung bei FWD ist unkomplizierter und funzt auch zu +1800er Nummern, dazu ***1800XXXXXXX wählen

Sipphone bietet ebenfalls kostenlose Anrufe zu +1800

jo
 
@rollo

nur funktionierte bei meinen Tests bei keinem von beiden Asterisk's Senddtmf zufriedenstellend und es geht ja um die automatisierte Anwahl.

Gruß,
Tin
 
Hab' jetzt noch eine Sprint Karte gefunden gleiche Konditionen wie vorher die EuroCell, nur kostet sie US $ 15 statt wie vorher 10. Aber das ist immer noch ein guter Kurs entspricht dann 7,5 EuroCent /min. auf deutsche Handys und kein extra Aufschlag pro Anruf wie bei der anderen die ich vorher erwähnte.

Die Karte hab' ich gekauft bei http://www.ebuypins.com . Links im search Fenster nach "sprint" suchen und die erste gelistete auswählen:

Sprint (#1) International Prepaid Phone Card - $15.00 .

Damit kann man 166min. zu jedem deutschen Handy vertelefonieren, die Karte ist gültig bis September 2007 (!), keine maintenance fee, kein Aufschlag, abgerechnet wird im Minutentakt.

Gruß,
Tin
 
@tintin interessante Sache.

Um die ganze Angelegenheit noch zu vereinfachen, könnte man noch die Möglichkeit hinzufügen, die CC-Number in der asterisk-internen Datenbank abzulegen, damit man bei einer neuen Karte nicht immer die extensions.conf anpassen muß.

Code:
exten => _*55.,1,NoOp(CallingCardNumber speichern)
; mit *55xxxxxxx die CC-Nummer setzen.
; Jeder Aufruf überschreibt den vorherigen Eintrag.
exten => _*55.,n,DBput(ccnum/${CALLERIDNUM}=${EXTEN:3})
exten => _*55.,n,HangUp

;Auslesen im Dialplan dann mit 
exten => _0[15-7].,1,DBget(eurocell=ccnum/${CALLERIDNUM})

Das Ganze ist in dem hier vorgestellten Beispiel natürlich auch noch Caller-ID-Num abhängig. Daber das läßt sich ja problemlos ändern.
 
@betateilchen

sehr gute Idee, danke! Vereinfacht es noch mehr.
 
echt genial... ich muss nur noch meinen Asterisk Server bauen und warten bis die Hardware kommt....
 
soo...
habs am laufen, allerdings mit 2 kleinen Änderungen:

Dtmfmode musste bei mir auf Info.
Mit rfc2833 hab ich eine Verwählquote von >70%, mit Info 0,0%.

Im Dialplan stimmt das _0[15-7] doch nicht?
_01[5-7]

Es ist interessant wieviel das tos=reliability bei der SIP Überseeverbindung macht. Mit Lowdelay gibts Knackser ohne Ende, mit reliability herrscht absolute Stille. Da scheinen sich also tatsächlich ein paar Router dran zu halten :)

Sprachqualität ist abgesehen von einer etwas längeren Laufzeit (wobei die sich auch nicht groß von der der callbycall Anbieter unterscheitdet) einwandfrei.

Tnx!!
Matthias :)
 
Ich versuche etwas ähnliches um eine Durchwah SIP -> ISDN (hier durch eine OpenCom 31) zu erreichen, aber es klappt gar nicht:

extensions.conf
Code:
exten => 995,1,SetCallerId,760XXXX
exten => 995,2,Dial(SIP/11,,TM(Durchwahl))
exten => 995,3,Hangup

[macro-Durchwahl]
exten => s,1,SIPDtmfMode(rfc2833)
exten => s,2,Wait(5)
exten => s,3,SendDTMF(0000)
exten => s,4,Wait(1)  
exten => s,5,SendDTMF(210XXXX)

SIP 11 ist die Durchwahl der OC31. Die nimmt den Ruf auch an, aber reagiert dann nicht weiter. Wenn ich die Zahlen von Hand über's Telefon eigebe, geht es.

Code:
    -- Executing SetCallerID("SIP/12-b667", "760XXXX") in new stack
    -- Executing Dial("SIP/12-b667", "SIP/11@11||TM(Durchwahl)") in new stack
    -- Called 11@11
    -- SIP/11-0790 is making progress passing it to SIP/12-b667
    -- SIP/11-0790 is ringing
Jun 28 00:11:14 WARNING[25750]: rtp.c:440 ast_rtp_read: RTP Read too short
Jun 28 00:11:14 WARNING[25750]: rtp.c:440 ast_rtp_read: RTP Read too short
    -- SIP/11-0790 answered SIP/12-b667
    -- Executing SIPDtmfMode("SIP/11-0790", "rfc2833") in new stack
    -- Executing Wait("SIP/11-0790", "5") in new stack
    -- Executing SendDTMF("SIP/11-0790", "0000") in new stack
    -- Executing Wait("SIP/11-0790", "1") in new stack
    -- Executing SendDTMF("SIP/11-0790", "210XXXX") in new stack
    -- Attempting native bridge of SIP/12-b667 and SIP/11-0790
  == Spawn extension (intern, 995, 2) exited non-zero on 'SIP/12-b667'
pingu*CLI>
Nach Wahl der SIP 11 nimmt die OC31 den Anruf entgegen und die DTMF-Töne werden wohl auch gesendet (zumindest wird das Macro ausgeführt), aber es passiert nichts. Erst wenn das alles fertig sit, wird das Audio durchgeschaltet. Dann kann ich von Hand nochmal versuchen, das klappt dann auch.

Habe auch schon inband und info und ulaw/alaw als Codec usw probiert.
Hat jemand 'ne Idee?

Udo
 
Ich grabe diesen alten Thread mal aus, um mitzuteilen, dass es bei mir auch funktioniert :)
Allerdings geht es bei mir nicht mit info, sondern nur mit inband.
Benutze es um automatisch über dialnow.com rauszuwählen.
Hier der Teil meiner extensions.conf
Code:
[outgoing]
exten => _007.,1,SetGlobalVar(DIALEDNUMBER=${EXTEN})
exten => _007.,2,Dial(SIP/021153997878@voipdiscount,,TM(MD2))

[macro-MD2]
exten => s,1,SIPDtmfMode(inband)
exten => s,2,Wait(2)
exten => s,3,SendDTMF(www${DIALEDNUMBER}#)

Funzt alles wunderbar nur diese Zeile iritiert mich: "[Mar 23 13:25:33] WARNING[18720]: rtp.c:891 ast_rtcp_read: RTCP Read too short"
 
hier mit Abwarten, bis die Ansage vom Provider kommt

:) danke danke danke für dieses Posting.

Hier meine Ergänzung zum Macro, die eine Antwort flexibel abwartet, bevor
die DTMF Folge abgesendet wird.

... es sind ein paar überflüssige Kommentarzeilen drin, die die Funktionsweise
am Monitor besser aufzeigen.

[macro-prepaid]
;
exten => s,1,NoOp(macro-prepaid: Calling card/prepaid)
exten => s,n,Set(TIMEOUT(response)=20)
exten => s,n,BackgroundDetect(de/custom/silence30,1000,50,30050)
exten => s,n,NoOp(End of backgrounddetect)
;
exten => talk,1,NoOp(yeah, answer detected)
exten => talk,n(go),SIPDtmfMode(inband) ;info
exten => talk,n(pin),GotoIf($["${PIN}" = ""]?talk,num)
exten => talk,n,SendDTMF(w${PIN})
exten => talk,n,Wait(3)
exten => talk,n(num),GotoIf($["${CALLNR}" = ""]?talk,end)
exten => talk,n,SendDTMF(w${CALLNR}#)
exten => talk,n(end),NoOp(lösche Variablen für nächsten call)
exten => talk,n,SetGobalVar(CALLNR=)
exten => talk,n,SetGobalVar(PIN=)

CALLNR ist die anzurufende Nr
PIN ist die PIN, wenn erforderlich
ggf. mit w vor den Nummern die Wartezeiten erhöhen

es muss noch ein GSM file erstellt werden, das 30sec Stille enthält,
de/custom/ ist der Pfad der Ablage unter /var/lib/asterisk/sounds/

ich benutze dafür wavepad von www.nch.com/wavepad/de, ist
ein super Programm, das unlizensiert verwendet werden darf

die backgrounddetect Funktion ist gut bei voip-info.org beschrieben
und die Parameter dort entnommen.

für normale Gespräche ohne den Provider werden die Daten CALLNR
und PIN gelöscht, sonst wird die Tonfolge gesendet. Wer lieber mit
ARG-parametern arbeiten möchte, bitte sehr...

Euer :mad: aaa007
 
noch

kleiner Fehler
SetGlobalVar (l vergessen)

Euer :mad: aaa007
 
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.