[HowTo] Zahlen in Buchstaben umzuwandeln?

Status
Für weitere Antworten geschlossen.

alvoip

Mitglied
Mitglied seit
31 Okt 2004
Beiträge
490
Punkte für Reaktionen
0
Punkte
16
Ich habe aufgrund des Threads http://www.ip-phone-forum.de/showthread.php?t=98998 eine Verbindung zwischen meinem Asterisk und Skype geschaffen. Wirklich eine super Sache, Skype ist jetzt wie ein weiterer SIP-Provider von meinem Asterisk aus verwendbar.

Ein Problem dabei ist, dass Skype keine Nummern, sondern Namen mit Buchstaben und Ziffern verwendet. Den Echotest von Skype, der die "Nummer" echo123 hat, erreiche ich so:
Code:
exten => 98812,1,Dial,SIP/echo123@skype|60
Ich kann natürlich für jedes meiner Skype-Ziele eine solche Zeile machen, aber das hat natürlich keine Flexibilität. Jedes Mal, wenn ein neues Skype-Ziel dazu kommt, müsste ich in die extensions.conf. Besser wäre natürlich, die Skype-Namen in Ziffern darzustellen, diese dann am Telefon zu wählen, und Asterisk dann das Ganze wieder in die Buchstaben zurückverwandeln zu lassen. Dabei habe ich an folgendes System gedacht:
Code:
a = 21 (weil es auf der Zifferntaste 2 der erste Buchstabe ist)
b = 22 (weil es auf der Zifferntaste 2 der zweite Buchstabe ist)
.....
z = 94 (weil es auf der Zifferntaste 9 der vierte Buchstabe ist)

Für die Ziffern 0 is 9 würde ich 00 bis 09 nehmen.
Der Skypename echo123 hätte dann die Nummer 32 23 42 63 01 02 03. Ich bin aber an der Implementierung dieser Stringmanipulation in Asterisk gescheitert. Gehen tut es aber sicher. Wer traut sich da drüber?
 
Zuletzt bearbeitet von einem Moderator:
Das läßt sich am einfachsten in der extensions.ael lösen

Du teilst die Länge der gewählten Nummer durch 2 - damit weißt Du, wieviele Zeichen Du am Schluß haben mußt. MIt diesem Zähler gehst Du in eine Schleife, schneidest jedesmal 2 Stellen von der Nummer ab und wertest die in einem case Statement aus. Das Ergebnis hängst Du an die Ziel-Variable an.

Fertig ist die Laube.
 
Zuletzt bearbeitet von einem Moderator:
Danke für den Tip mit extensions.ael. Als Newbie wusste ich gar nichts davon, und habe mich gleich schlau gemacht. Hier nun die Lösung meines Problems aus meiner extensions.ael:
Code:
context skype { 
    _1080X. => { 
         skypenum=${EXTEN:4}; 
         for (x=-2; ${x} < ${LEN(${skypenum})}-2; x=${x} + 2) { 
             skypesub=${skypenum:${x}:2}; 
             switch (${skypesub}) { 
                  case 21: 
                       skypechar=a; 
                       break; 
                  case 22: 
                       skypechar=b; 
                       break; 
                  case 23: 
                       skypechar=c; 
                       break; 
                  case 31: 
                       skypechar=d; 
                       break; 
                  case 32: 
                       skypechar=e; 
                       break; 
                  case 33: 
                       skypechar=f; 
                       break; 
                  case 41: 
                       skypechar=g; 
                       break; 
                  case 42: 
                       skypechar=h; 
                       break; 
                  case 43: 
                       skypechar=i; 
                       break; 
                  case 51: 
                       skypechar=j; 
                       break; 
                  case 52: 
                       skypechar=k; 
                       break; 
                  case 53: 
                       skypechar=l; 
                       break; 
                  case 61: 
                       skypechar=m; 
                       break; 
                  case 62: 
                       skypechar=n; 
                       break; 
                  case 63: 
                       skypechar=o; 
                       break; 
                  case 71: 
                       skypechar=p; 
                       break; 
                  case 72: 
                       skypechar=q; 
                       break; 
                  case 73: 
                       skypechar=r; 
                       break; 
                  case 74: 
                       skypechar=s; 
                       break; 
                  case 81: 
                       skypechar=t; 
                       break; 
                  case 82: 
                       skypechar=u; 
                       break; 
                  case 83: 
                       skypechar=v; 
                       break; 
                  case 91: 
                       skypechar=w; 
                       break; 
                  case 92: 
                       skypechar=x; 
                       break; 
                  case 93: 
                       skypechar=y; 
                       break; 
                  case 94: 
                       skypechar=z; 
                       break; 
                  case 00: 
                       skypechar=0; 
                       break; 
                  case 01: 
                       skypechar=1; 
                       break; 
                  case 02: 
                       skypechar=2; 
                       break; 
                  case 03: 
                       skypechar=3; 
                       break; 
                  case 04: 
                       skypechar=4; 
                       break; 
                  case 05: 
                       skypechar=5; 
                       break; 
                  case 06: 
                       skypechar=6; 
                       break; 
                  case 07: 
                       skypechar=7; 
                       break; 
                  case 08: 
                       skypechar=8; 
                       break; 
                  case 09: 
                       skypechar=9; 
                  default: 
                       skypechar=§; 
             }; 
         skypename=${skypename}${skypechar};
         }; 
         Dial(SIP/${skypename}@skype,60);
    }; 
};
Zur Erklärung:

Skype hat bei mir die Providervorwahl 1080. Also wird zuerst auf dieses Pattern gematched, und die ersten 4 Zeichen (also 1080) abgeschnitten. Dann wird die restliche Ziffernfolge paarweise abgearbeitet, und im switch statement das jeweilige Zeichen zugeordnet. Als primitives Errorhandling provoziere ich bei einem ungültigen Zahlenpaar einen Fehler, indem ich das Zeichen § zuweise. Das ist quick and dirty, aber funktioniert.

Nun kann ich ganz normal aus meinem Asterisk über ein Zifferntelefon nach Skype wählen. Wehrmutstropfen ist halt, dass Skype nicht auf meinem vServer laufen kann, sondern der Asterisk auf meinen Windows-PC zu Hause zugreifen muss. Aber wer weiß, vielleicht gibt es da auch einmal eine Lösung. So finde ich meine Lösung schon recht befriedigend, da sie doch einiges von der Proprietärität von Skype nimmt. Immerhin ist es nun in meinen Asterisk integriert.

Wenn jemand Verschönerungsvorschläge für meine Lösung hat: Nur zu, postet sie. Das ist schließlich mein erster Gehversuch mit AEL gewesen.

Als Nächstes werde ich dieses Programmstück dazu verwenden, SIP-URIs von der Zifferntastatur zu wählen. Ich muss dazu lediglich noch Zifferpaare für Punkt, Bindestrich und Klammeraffe einführen. Ich denke ich werde 10, 11 und 12 nehmen.
 
Super - siehste, da haste wieder was dazugelernt.

alvoip schrieb:
Wenn jemand Verschönerungsvorschläge für meine Lösung hat: Nur zu, postet sie. Das ist schließlich mein erster Gehversuch mit AEL gewesen.

Für einen ersten Versuch hast Du das Problem doch ganz super gelöst :D Meine Anerkennung!
 
auch einen glückwunsch von mir, das ist wirklich ausgesrochen praktikabel und sobald ich hier ein wenig luft habe, werde ich das hier auch umsetzen. vielen dank!
 
hallo alvoip

könntest du mir sagen, wie ich da ein - unterbringe?
wenn ich das versuche einzubauen, versucht asterisk immer damit zu rechnen und ich bekomme es auch nicht gequotet.

viele grüße
n8|
 
Dieses Problem konnte ich leider auch nicht lösen. Ich kiefelte noch wochenlang daran herum, bis ich schließlich aufgab. Damit ist meine Lösung leider nur eine Halbe geblieben. :-(

Aber jetzt wo das Thema wieder aufgegriffen ist, kommt hoffentlich jemand mit einer Idee.
 
Ne, leider nicht.

Ich experimentiere gerade zwar damit, aber wirklich weiter komme ich auch nicht.
 
@Psycho

welchen Sinn hat es eigentlich, nach so langer Zeit eine so nichtsagende Antwort zu posten :crazy:
 
Status
Für weitere Antworten geschlossen.

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,341
Beiträge
2,250,494
Mitglieder
373,998
Neuestes Mitglied
MacDeath
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.