Zielnummer mit CUT rausschneiden

gigauser

Neuer User
Mitglied seit
19 Aug 2021
Beiträge
61
Punkte für Reaktionen
6
Punkte
8
Hallo,
ich habe folgendes im Dialplan:
Sipgate schickt mir
"0305478254" <sip:[email protected]>;tag=as76ed706c
bei einen eingehenden Anruf.
Wie bekomme ich da ("längenunabhämgig") die Zielnummer raus, nämlich 0305478254?


exten => _X.,n,NoOP(Testwert=${SIP_HEADER(FROM)})
;exten => _X.,n,Testwert: "0305478254" <sip:[email protected]>;tag=as76ed706c"
exten => _X.,n,Set(Test=${CUT(Testwert,???,????)})

Gruss
 
Keine Ahnung ob (bzw wenn ja, dann auch wie...) das mit Astersik funktioniert aber auf einem RPi mit Raspbian 9 lässt sich mit cut folgendermaßen die gewünschte Rufnummer bzw das gewünschte Feld aus Deinem String extrahieren

Code:
stoney@server1:/tmp $ cut -d'"' -f2 test.cut
0305478254
test.cut wurde vorher natürlich mit dem von dir genanntem String (c&p) befüllt

Ich bin mir aber ziemlich sicher, @koyaanisqatsi wird sich dazu bestimmt auch noch melden ;)


//edit

wer sich vorher mal schlau macht, hätte sich diesen Post gespart xD


//edit2
sollte es nicht so funktionieren?
exten => _X.,n,Set(Test=${CUT(Testwert,",)})
 
Zuletzt bearbeitet:
danke,aber das hatte ich schon gelesen und dann auch erfolglos "probiert".
Dein Vorschlag endet in "
func_cut.c:263 acf_cut_exec: Syntax: CUT(<varname>,<char-delim>,<range-spec>) - missing argument!
"
Gruss
 
Code:
exten => _X.,n,Set(Test=${CUT(Testwert,",2,)})

Oder

exten => _X.,n,Set(Test=${CUT(Testwert,",,)})

PS: Du solltest evtl. etwas über Dein Setup (OS sowie Asterisk-Version) angeben
 
Zuletzt bearbeitet:
ich bin mir nicht sicher ob ich verstanden habe, was du genau suchst, aber kannst du nicht mit Asterisk Variablen arbeiten?
so wie ${CALLERID(num)}
 
Hallo,
Asterisk 16.2.1~dfsg-1+deb10u2 built by nobody @ buildd.debian.org
Debian GNU/Linux 9.13 (stretch)

Herkommen tut dieser Wert aus ${SIP_HEADER(FROM)}
Ich will einfach aus diesen String:
"0305478254" <sip:[email protected]>;tag=as76ed706c
die Zeichen zwischen ersten " und zweiten " auslesen, hier also 0305478254

Gruss
 
Funktioniert also keines meiner Beispiele und auch die Idee von @waldoo nicht?
 
Moinsen


Ich bin mir aber ziemlich sicher, @koyaanisqatsi wird sich dazu bestimmt auch noch melden ;)
Kennst deine Pappenheimer, wah?

Nun, Strings haben schon so etwas drinne.
Schau mal hier...
...unter: Manipulating variables
Demnach sollte also...
${SIP_HEADER(FROM):1:11}
...ausreichen ;)

Übrigens, so funktioniert das auch mit Linux Shellvariablen.
Beispiel: echo ${PWD:0:4}
...gibt dann nur die ersten vier Zeichen vom Pfad aus, bei mir gerade: /etc
...wenn PWD = /etc/asterisk

Mehr...
Mit CUT() REGEX() und Konsorten, schaumal...
...unter: getting DID from invite

@waldoo - Der Teil in Gänsefüßchen ist: ${CALLERID(name)}
...also eigentlich, da drinne sollte sowas wie "Max Mustermann" drinnestehen, aber mit SIP macht Jeder was er will :cool:
 
Zuletzt bearbeitet:
  • Like
Reaktionen: waldoo
Danke für die Infos..
${SIP_HEADER(FROM):1:11} oder solche Variaiablenbearbeitug kenne ich, nur sollte das ganze längenunabhangig sein, da die Menge der Einwahlrufnummer bekannt ist könnte man natürlich darauf die Abfragen machen, aber das ist ziemlich gebastelt und wenn mal eine dazukommt weiß man nicht mehr warum es nicht funktioniert.

Sipgate liefert das genau so,also mit drei doppelte Anführungszeichen drin!!!!
exten => _X.,n,NoOP(Testwert=${SIP_HEADER(FROM)})
;exten => _X.,n,Testwert: "0305478254" <sip:[email protected]>;tag=as76ed706c"
exten => _X.,n,Set(Test=${CUT(Testwert,???,????)})

Ich probiere das noch mal mit maskieren der gesuchten Zeichen bei CUT und REPLACE oder packe den ganzen String in eine Datenbank, lasse da ein Script drauf laufen und lese das denn wieder ein.

Funktioniert maskieren von Sonderzeichen denn bei Asterisk, also \" oder \"" oder '"' bei CUT, REPLACE oder so? Dann bräuchte ich ja nur das erste "wegmachen und dann das zweite " und hinter dem zweiten "

Die Zielrufnummer steht in ${SIP_HEADER(FROM)} drin, nicht in TO.
Gruss
 
Scheint hier nicht mehr viel los zu sein, wenn so eine einfache Frage nicht beantwortet kann.
Wo ist denn was los, mailing list asterisk-users?
Gruss
 
So ist es. Entweder die Mailinglist oder die Community. Dort antworten recht oft sogar die Entwickler selbst! Besser geht nicht. Allerdings englisch natürlich.
 
Ich stand mal vor einer vergleichbaren Aufgabe, aber ich mach sowas nur mehr über externe AGI Scripts. Das ist irgendwie einfacher, angenehmer in der laufenden Pflege und übersichtlicher für mich.

Wenn Du zum Beispiel PHP auf Deiner Maschine hast, kannst Du folgendes Script nach /var/lib/asterisk/agi-bin/test.php legen (mit chmod auf ausführbar setzen!):

PHP:
#!/usr/bin/php -q
<?php

function extract_number($string) {
$t = explode("\"",$string);
$extracted = trim($t[1]);
return $extracted;
}

$header_contact = extract_number($argv[1]);

$stdout = fopen('php://stdout', 'w');
        fwrite($stdout, "SET VARIABLE MEINNAME ".$header_contact."\n");
     
  fclose($stdout);
exit;

Im Dialplan machst Du dann zum Beispiel

Code:
exten => ankommende_extension,1,AGI(test.php,${SIP_HEADER(FROM)})
;jetzt sollte die Nummer in ${MEINNAME} drin sein

Wenn php nicht so Dein Ding ist, kannst Du das ganz auch mit jeder anderen beliebigen Sprache nachbauen. Das ganze kann man wahrscheinlich auch recht gut in bash machen, mit dem Ansatz von stoney hier https://www.ip-phone-forum.de/threads/zielnummer-mit-cut-rausschneiden.313231/#post-2478834
 
Zuletzt bearbeitet:
  • Like
Reaktionen: gigauser
Danke! php kann ich. Aber so viel Aufwand... Gut, Dialplan hat irgendwo Grenzen..
 

Statistik des Forums

Themen
246,128
Beiträge
2,246,620
Mitglieder
373,626
Neuestes Mitglied
Tottelitott
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.