chan_capi_cm - problem mit der Rufnummernübermittlung

thorsten.gehrig

Mitglied
Mitglied seit
14 Jun 2004
Beiträge
493
Punkte für Reaktionen
0
Punkte
16
Hi
ich habe folgendes Problem:
ich benutze die aktuelle version von chan_capi_cm und stelle die abgehende MSN per SetCIDNum(12345678) ein.

Das funktioniert soweit auch richtig.

Wenn ich nun per Callback mich einwähle und dann einen Wählvorgang starte klappt das nicht mehr.
Wenn ich mein log richtig interpretiere Setzt der SetCIDNum-Befehl beim Ausführen die CID für die erstel Leitung (die mich ja auf meinem Handy angerufen hat). Die CID muss aber für die 2. Leitung gesetzt werden.
Wie mache ich das?

Grundsätzlich würde ich es SEHR SEHR schätzen wenn man wieder im DIAL-Commando die MSN mit angeben könnte - z.B. in den Befehlsparametern.
Nur so kann man z.B. für einen Paralellanruf (DIAL auf mehrere Ziele) verschiendene abgehende Rufnummern eingeben.
(Für einige SIP-anbieter soll es z.B. notwendig sein den Benutzernamen in der CID zu haben... etc).

Problem verstanden?
Lösungsansätze?

Danke im vorraus!

Gruß
Thorsten
 
Das Problem habe ich nicht ganz verstanden. Was meinst Du mit zweiter Leitung? Wenn vor dem Dial() ein SetCIDNum() kommt, dann wird diese Nummer auch als MSN verwendet. Vieleicht hilft mir ein log (kannst es mir auch per email senden).

Bezueglich der MSN im Dial() Kommando habe ich auch schon nachgedacht dies wieder einzufuehren, allerdings als Zusatz oder 'override'.
Das waere dann aber eine CAPI-spezifische Sache. Soweit ich weiss kann das kein anderer Channel!?
Vorschlaege wie das im Dial() aussehen sollte?

Armin
 
Hi,
Bezueglich der MSN im Dial() Kommando habe ich auch schon nachgedacht dies wieder einzufuehren, allerdings als Zusatz oder 'override'.
Super!

Zum anderen: also bei callback ruft mein Asterisk mich auf dem Handy an
(leitung 1).
Dann bekomme ich ein Amt (DISA).
Dann wähle ich Raus. Und hier scheint das SetCIDNum sich auf die bestehende Leitung auszuwirken - nicht auf die neu gewählte nummer.

Wenn ich mich nicht täusche sieht man das auch im log. Ich werde eins Nachreichen.... (morgen oder so)

Gruß
Thorsten
 
Hier das ankommende Gespräch (in dem callfile.agi erstelle ich das callfile für den rückruf)
Code:
    -- Executing Wait("CAPI/ISDN1/448844-a3", "1") in new stack
    -- Executing AGI("CAPI/ISDN1/448844-a3", "callfile.agi|017230516237|thorsten") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/callfile.agi
    -- AGI Script callfile.agi completed, returning 0
    -- Executing Hangup("CAPI/ISDN1/448844-a3", "") in new stack
  == Spawn extension (line-in, 448844, 3) exited non-zero on 'CAPI/ISDN1/448844-a3'
Hier geht das Gespräch raus:
Code:
    -- Attempting call on CAPI/contr1/01013017230516237 for s@hfc-dialtone-thorsten:1 (Retry 1)
    -- Executing SetLanguage("CAPI/ISDN1/01013017230516237-a5", "de") in new stack
Hier hab ich abggenommen:
    -- Executing Answer("CAPI/ISDN1/01013017230516237-a5", "") in new stack
und hier bekomme ich den DISA-Wählton:
    -- Executing DISA("CAPI/ISDN1/01013017230516237-a5", "no-password|line-out|"Callback Thorsten Handy" <0017230516237>") in new stack
Das hier könnte auf den Fehler hinweißen
Code:
Oct  8 21:25:36 WARNING[24042]: cdr.c:286 ast_cdr_init: CDR already initialized on 'CAPI/ISDN1/01013017230516237-a5'
und hier sieht man die der SetCIDNum auf die erste Leitung (010130172...) gesetzt wird. Die eigentliche Ausgehende Leitung "CAPI/contr1/010130602706027464481/B|60|Tt" sieht man erst beim executing Dial in der vorletzten Zeile.
Code:
    -- Executing NoOp("CAPI/ISDN1/01013017230516237-a5", "") in new stack
    -- Executing SetCIDNum("CAPI/ISDN1/01013017230516237-a5", "448844") in new stack
    -- Executing AGI("CAPI/ISDN1/01013017230516237-a5", "bt.agi|06027464481|06027") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/bt.agi
    -- Executing Dial("CAPI/ISDN1/01013017230516237-a5", "CAPI/contr1/010130602706027464481/B|60|Tt") in new stack
    -- Called contr1/010130602706027464481/B

Übrigens: die Rufnummern sind alle per cut&past verfremdet - also nicht ausprobieren...

Ich hoffe das zeigt den ganzen Sachverhalt klarer?

Wenn ich schon gerad mal dabei bin: gibt es eine Möglichkeit in einem Callfile die SetCallerID zu setzen?

Gruß
Thorsten
 
Also mit AGI kenne ich mich nicht gut aus, aber wenn du per DISA dann weiter deine Wahl machst, dann kannst Du doch in diesem Context ein SetCIDNum() von dem Dial() machen!?

Was ist denn das bt.agi? Wird der eigentliche Dial() am Schluss auch per AGI gemacht? Wenn ja, dann koennte es sein, dass hier kein caller-channel vorhanden ist und somit auch keine CallerId vorhanden ist. In dem Fall koennte nur ein SetCallerId per AGI, also direkt vor dem Dial() helfen.
DIes ist aber dann ein allgemeines Problem und wuerde bei SIP/IAX/ZAP genauso vorhanden sein.

Armin
 
thorsten.gehrig schrieb:
Wenn ich schon gerad mal dabei bin: gibt es eine Möglichkeit in einem Callfile die SetCallerID zu setzen?

ja, so;
Code:
SetVar: CALLERIDNUM=0815

Meiner Meinung nach ist die Ausgabe nicht falsch. Ich habe es gerade einmal mit einem SIP-Client probiert -> ähnliche Ausgabe. !?!?
 
Hi,

Also mit AGI kenne ich mich nicht gut aus, aber wenn du per DISA dann weiter deine Wahl machst, dann kannst Du doch in diesem Context ein SetCIDNum() von dem Dial() machen!?

Mit dem AGI hat das ganze auch nicht viel zu tun.
Das SetCIDNum() mache ich vor dem Dial(). Ich verwende den selben Context wenn ich "normal" rauswähle (da gehts!) und wenn ich der Call-Back rauswähle (da gehts NICHT).

Das BT.AGI ist mein Least-Cost-Routing-Script - das über "Billiger Telefonieren" die CbC-Vorwwahl raussucht ... also nichts weltbewegendes.

Wird der eigentliche Dial() am Schluss auch per AGI gemacht? Wenn ja, dann koennte es sein, dass hier kein caller-channel vorhanden ist und somit auch keine CallerId vorhanden ist. In dem Fall koennte nur ein SetCallerId per AGI, also direkt vor dem Dial() helfen.
Das Dial mache ich NICHT im AGI.
Mein Context sieht in etwa so aus (gekürzt)
Code:
exten => _00[023456789].,1,SetLanguage(de)
exten => _00[023456789].,2,SetCIDNum(464480)
exten => _00[023456789].,3,Dial(CAPI/contr1/${LCR}${EXTEN:1}/B,60,Tt)
exten => _00[023456789].,9,goto,hangup|${HANGUPCAUSE}|1

Ich habe mir jetzt heute morgen nochmal eine normales Log angeschaut - also wenn ich vom internen SIP rauswähle:
Code:
-- Executing SetCIDNum("SIP/24-5a46", "448844") in new stack
Das zeigt mir dass mein erster gedankenblitz Falsch war (ich dachte ja bei dem SetCIDNum wird die CID für den *ERSTEN* channel-parameter gesetzt - und meine MSN steht ja im *ZWEITEN* Parameter.

Wie kann ich denn überprüfen welche CallerID ich gerade gesetztt habe?
ein
EXTEN => ......, Noop(${CALLERIDNUM})
direkt vor dem Wählen bei o.g. "normalen" Gespräch bringt mir ein
-- Executing NoOp("SIP/24-5a46", "") in new stack - obwohl es vorher ein SetCIDNum(448844) gegeben hat.

Im Augenblick sehe ich den Wald vor lauter Bäumen nicht :-(

Gruß
Thorsten
 
Zu AGI kann ich leider nichts weiter sagen.

Aber ich habe chan_capi im CVS mal erweitert (Rev:1.114):
- in capi.conf kann eine 'defaultcid' angegeben werden, diese wird dann
beim dial-out verwendet, wenn als dial-option ein 'd' angegeben wird.
- Dial(CAPI/ISDN1/<callerid>:<destination>/<param>) ist nun moeglich.
'<callerid>:' ist optional und setzt die callerid/msn fuer diesen Anruf.

Armin
 
Super.
Durch die möglichkeit beim DIAL die CallerID zu setzen hat man alle möglichkeiten offen.
Wer dich morgen oder so probieren!
Danke nochmal!
Thorsten
 
Kostenlos!

Zurzeit aktive Besucher

Statistik des Forums

Themen
248,232
Beiträge
2,285,025
Mitglieder
377,494
Neuestes Mitglied
alpengeier