event an ICQ mit mICQ ...

n8isch

Mitglied
Mitglied seit
22 Mrz 2005
Beiträge
275
Punkte für Reaktionen
0
Punkte
0
... oder spass mit mICQ ;)

was machen wir und wozu?

ich bin auf den gedanken gekommen, daß es eventuell ganz lustig wäre eine anrufbenachrichtigung auf ICQ zu bekommen. zu dem zweck habe ich mein anrufe-in-datenbank-und-per-net-send-an-pc-script um diese möglichkeit erweitert. um euch allerdings nicht mit einzelheiten zu langweilen, habe ich das script um die relevanten teile verkürzt (telefonbuch u.a. flog raus).

das ganze ist debianized ;)

viel spass

1. Installation von mICQ
2. anlegen des isdnlog.php scripts für reverselookup und ICQ u. NETSEND
3. extension.conf

1. Installation von mICQ
mICQ ist ein schlanker ICQ client der mit ncurses auf der console läuft. es lassen sich über die komandozeile *hust* komandos mitgeben, was ihn für unseren zweck qualifiziert.

zuerst besorgen wir uns das progrämmchen bei micq.org (da sollte für jeden was dabei sein). ich nehme natürlich das .dep. wer sarge stable benutzt, muß leider auf die vorletzte version (micq_0.5.0.1-0.1woody1_i386.deb) zurückgreifen, weil die neuste libc6 in einer neueren version benötigt.

dann fix ein $: dpkg -i micq_0.5.0.1-0.1woody1_i386.deb
(und vielleicht noch ein $: apt-get -f install)

und das sollte es gewesen sein.

wenden wir uns nun der micqrc zu, die unter /home/<user>/.micq/ zu finden sein sollte.

falls es nicht schon da steht fügen wir der datei folgendes hinzu:

Code:
[Connection]
type icq8 auto
version 8
server login.icq.com
port 5190
uin <ICQ-NUMMER>  #edit here
password <ICQ-NUMMER> #edit here
status 0

[Connection]
type remote auto
version 0
server scripting

ggf. sollten noch die locale angepasst werden, ich gebe sie allerdings im asterisk beim programmaufruf mit (ebenso uid/pw).

das war es hier!

2. anlegen des isdnlog.php scripts für reverselookup und ICQ u. NETSEND

wie schon oben erwähnt enthält das script auch reverselookup. es ist anders als das hier bereits diskutierte, da ich es schon hatte bevor ich das forum kannte. welches man aber benutzt, ist mit sicherheit wurscht ;). fürs versenden mit micq ist nur die exec() relevant.

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

$telNumber=$_SERVER["argv"][1];

$ddmmyyyy=date("d.m.Y");
$hhiiss=date("H:i:s");

$url="http://www.dasoertliche.de/Controller?form_name=search_inv&ph=".$telNumber;
$lines = file($url);
foreach ($lines as $line_num => $line)
{

        if (strstr($line, 'class="entry"'))
        {$data=$line;
         $data=strip_tags($data);
         $data=ltrim($data);
       $calleralias=rtrim($data);

        $zaehler=0;
        }

        if (isset($zaehler))
        {$zaehler++;}

        if($zaehler==7)
        {$anschrift=strip_tags($line);

         $anschriftarr=explode(',', $anschrift);

         $strassehausnrarr=explode("&nbsp;", $anschriftarr[0]);
        $callstrasse=$strassehausnrarr[0];
        $callhausnr=$strassehausnrarr[1];

         $plztownarr=explode("&nbsp;", $anschriftarr[1]);
        $callplz=$plztownarr[1];
        $callertown=$plztownarr[2];
         $did='0';

}
}



//* ======================================================================================



$str= $calleralias.' ['.$callerID.'] - '.$callstrasse.' '.$callhausnr.' - '.$callplz.' '.$callertown;

$ex=exec('echo ANFRUF VON: '.$str.' | smbclient -M <rechnername> &'); //* net send
$ex=exec('micq -b "<pfad zu micqrc>" -i "de_DE@euro" -u "<UID/icq-nummer>" -p "<icq-pw>" -C "msg "<icq-empfänger> '.$str.'" -C "exit" >> /dev/null &'); //* mICQ


?>

sodele, die letzte zeile ist wichtig, und weil man da so viel reinschreiben muß, nehme ich sie hier nochmal auseinander.

micq

-b "<pfad zu micqrc>" // am wichtigsten überhaupt. alle anderen parameter können dort hinterlegt werden. beim ausführen durch asterisk findet er die datei nicht automatisch, gibt aber auch keine fehlermeldung!

-i "<locale>" // kann mit (wie sollte es anders sein) $: locale nachgeschaut werden. wird unter asterisk nicht automatisch erkannt!

-u "<UID>" // ICQ-NUMMER des ABSENDERS

-p "<pw>" // is klar

-C "<cmd>" // ist das komando, daß er nach hergesellter verbindung auführen soll. es muß in folgendem format vorliegen:

msg <empfängericq> <nachricht>

-C "exit" // beendet mICQ durch ausführen des exit-befehls.

ich hoffe jetzt habe ich auch den aufmerksamsten leser verwirrt. gut, dann weiter ;)

3. extension.conf

in der extension.conf wird das script nun folgendermaßen aufgerufen:

exten => 21,2,system(/scripts/./isdnlog.php "${CALLERIDNUM}" &)

das wars!

für verbesserungsvorschläge und kritik bin ich offen.

viel spaß damit
n8!
 
Zuletzt bearbeitet:
hi,

ma ne frage zu micq vielleicht weis das wer,

wenn ein anruf kommt und ich den befehl micq ... ausführe dauert das relativ lange, weil sich icq erst am server anmeldet und dann die nachricht verschickt,

besteht die möglichkeit micq beim systemstart im hintergrund zu starten (micq -u UIN -p passwort &)

und nur wenn ein anruf kommt über kommandozeile auf micq zugreifen und nachricht verschicken.
 
Hallo Hias-online,

ich habe mal etwas rumprobiert und nichts gefunden (wer das nicht glaubt liest weiter beim EDIT :) ). ich habe allerdings nicht das problem (in der regel dauert es ca 10 sek) was ich vertretbar finde. du kannst allerdings mal centericq ausprobieren. (apt-get install centericq). das schickt die nachrichten von der shell in eine queue und versendet sie wenn du den client startest automatisch. d.h. du kannst auch den client starten und dann nach und nach die nachrichten an die shell schicken, also das was du suchst.

meine praktische überlegung war nur, daß es 1. länger dauert als mit micq (frag mich nicht warum) und zum 2. muß der client auch laufen, wenn man ihn nicht braucht. ist natürlich unfug. du kannst ihn ja mal ausprobieren und deine erfahrungen posten. das prinzip ist das gleiche. ;)

EDIT:

DOCH, ES GEHT.

Code:
echo "msg <ICQ-EMPFÄNGER> hallo welt" >> /home/<homedir>/.micq/scripting

und das ganze selbstverständlich bei gestartetem micq (eventuell über ein startscript), sonst gibt es nämlich das ziel nicht

viel spass
n8|
 
Zuletzt bearbeitet:
hi danke für deine antwort

wenn ich micq im vordergrund am laufen habe (einfach mit micq) starte und dann in einer zweiten console
Code:
"msg UIN hiho" >> /root/.micq/scripting
eingebe funktionierts einwandfrei

wenn ich aber micq via
Code:
micq &
oder via startskript starten lasse tut sich gar nix ;(

ich denke der erstellt die scripting nicht wenn ichs im hintergrund starte, aber wenn ich sie manuel hinzufüge bringts auch nix ... ne idee ?
 
Zuletzt bearbeitet:
in der tat. ein umlenkung in eine datei und darauf ein tail -f brachte den hinweis:

Code:
Warning: Can't read terminal modes.

ich gehe mal davon aus, das es daran liegen könnte, was immer dies bedeutet.

er verbindet sich bei mir und das "scripting" ist auch vorhanden. woran es liegt, was man beim start alles mitgeben muß, das kann ich beim besten willen nicht sagen.

allerdings wäre es schön, wenn das problem gelöst würde. mir fallen da spontan noch ganz ganz viele sachen ein, die man per icq verschicken könnte, aber nach einer bestimmten anzahl anmeldungen in einem bestimmten zeitraum bekommt man (verständlicherweise) von ICQ eine 30 minütige zwangspause ;)
 
mICQ im Hintergrund laufen lassen

Hi,

als Lösung für dieses Problem bietet sich z.B. das "screen" Programm an

"screen -d -m micq -b <micq_basepath>"

fortan existiert eine Pipe "<micq_basepath>/scripting", auf die der Benutzer, der das obige Kommando ausgeführt hat Schreibrechte hat
 
na, vielen dank auch. das werde ich sofort ausprobieren.
 
Hallo,

ich bekomme immer diesen fehler:
asti:/# /scripts/icq.php

Parse error: parse error, unexpected $ in /scripts/icq.php on line 52

Aber in dem Script gibt es keine Zeile 52, es gibt insg. nur 51 Zeilen.

Ich habe den Kompletten Script von oben benutzt.

mfg
 
Hallo,
nachdem entfernen der Reverselookup Prüfung funktioniert es ohne Probleme
Code:
#!/usr/bin/php
<?php
        $icqempfaenger = "xxx";
        $pfadzuscripting = "/.../.micq/scripting";
        $unbekannt = "Unbekannter Teilnehmer";

        $telNumber=$_SERVER["argv"][1];
        if($telNumber=="") { $telNumber = $unbekannt;  }

        $ddmmyyyy=date("d.m.Y");
        $hhiiss=date("H:i:s");

        $str="Datum: ".$ddmmyyyy." Uhrezeit: ".$hhiiss;
        $ex=exec("echo \"msg ".$icqempfaenger." [".$telNumber."] ".$str."\" >> ".$pfadzuscripting);

        if($telNumber==$unbekannt) { exit; } else {
                $daten = exec("lynx \"http://www.dasoertliche.de/DB4Web/es/oetb2suche/home.htm?kw_invers=".$telNumber."&main=Antwort&s=2\" -dump -nolist | grep printselected.gif -A 2 -m 1 | awk '{ if (NR>1) {printf $0} } '");

                $ex=exec("echo \"msg ".$icqempfaenger." >>".$daten."<<\" >> ".$pfadzuscripting);

                exit;
        }
        exit;
?>

edit: Habe es ein wenig erweitert
edit2: Noch eine veränderung
edit3: siehe voriges edit
 
Zuletzt bearbeitet:
Funktioniert denn der Reverselokkup garnicht?
 
Ich habe jetzt
#!/usr/bin/php4 -q
<?php
$telNumber=$_SERVER["argv"][1];

$ddmmyyyy=date("d.m.Y");
$hhiiss=date("H:i:s");

$ex=exec("echo \"msg xxx [".$telNumber."]\" >> /root/.micq/fifo/scriptin
g");

$daten = exec("lynx \"http://www.dasoertliche.de/DB4Web/es/oetb2suche/ho
me.htm?kw_invers=".$telNumber."&main=Antwort&s=2\" -dump -nolist");

$str= $daten." Datum: ".$ddmmyyyy." Uhrezeit: ".$hhiiss;

$msg = "msg XXXX \"".$str."\"";
$excstr = "echo ".$msg." >> /root/.micq/fifo/scripting";

$ex=exec($excstr);

exit;
?>

und bekomme dann per ICQ

| Linktipps | Marketing | DasTelefonbuch | GelbeSeiten Datum: 19.09.2006 Uhrezeit: 19:46:24

Warum?
 
Versuche es bitte mit dem aktuellen nochmal jetzt müsste es funktionieren. Es hat beim kopieren nicht alles übernommen. awk... ;)
 
so, das script funktioniert wieder, hatte eine klammer zuviel gelöscht.

viel spaß damit
n8
 
ich habe das script jetzt an das "neue" layout von dasoertliche angepasst, es sollte sich jetzt auch wieder zurrechtfinden ;)
 
Zuletzt bearbeitet:
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.