Online-Telefonbuch-Abfrage im MD-Client oder Flexpanel integrieren

Hallo,

Ich würde gerne eine Online-Suchabfrage bei Anrufeingang in den MD-Client oder das Flexpanel integrieren. Hat das schon jemand realisiert und könnte mir dabei allenfalls helfen?

Die Funktion soll sein:
Wenn eine Nummer nicht im MD-Telefonbuch/Outlook enthalten ist, soll eine weitere Abfrage via url (z.B. Angebot von http://tel.search.ch/api/help) stattfinden. Das Ergebnisse sollen dann wie ein Telefonbucheintrag im Client angezeigt werden. (Bis anhin lösen wir die gewünschte Funktion über den MD-Client/Aktionen URL öffnen, ist aber leider eher langsam und unübersichtlich.)

Vielen Dank und Grüsse
Fabian

Wenn ich von Pascom die nötigen Informationen bekomme baue ich ein Flexpanel-Widget dafür. Ich will so etwas nämlich auch haben.

Hi all,

Please take a look on my new blog article. I wrote a basic widget which uses API mentioned in the first post. You can polish it and adapt for your use cases. I would like to hear your opinion about it and all comments are appreciate.

You can find my post here http://community.pascom.net/entry.php?62-How-to-create-a-custom-Flex-Panel-widget

Kind regards,
Stefan

Hallo Stefan,

vielen Dank für Deinen Blog. Ich habe nun endlich einmal Zeit gefunden, um dies zu ergänzen/testen. Leider noch ohne Erfolg.

Ich habe ein neues Panel erstellt und den Code aus dem Custom.txt bei Definition eingefügt und mit dem erhaltenen API-Code ergänzt und gespeichert.
Den XMPP-Server neu gestartet und anschliessend das Panel geöffnet. Leider bleibt es grau in grau (den Rahmen vom widget sehe ich). Bei einem Anrufeingang geschieht auch nichts.

Habe ich etwas übersehen? Hast Du noch einem Tipp für mich?

Grüsse,
Fabian

Hi Fabian,

I am glad to hear that you have tried flex panel widget. I would like to give you a few tips how can you monitor what’s going on.
Please add this import


import java.util.logging.Logger;

Now you can try to print messages or variables from the script. For example you can try to print the phone number of the caller


RequestProcessor.getDefault().post(new Runnable() {
   public void run() {

      Logger.getLogger(HttpItem.class.getName()).warning(number)                
      def http = new HTTPBuilder( 'http://tel.search.ch' )
      //.... rest ...

Locate application directory on your system (About/Application directory). Navigate to the folder and go to subfolder var/log. Open the message.log file and you will find all printed messages. They will look like “WARNING [HttpItem]: …”

MobyDick client receives the phone number in full format (0041…). You need to be sure that “http://tel.search.ch” accepts full format of the number. You can use some REST client to test API like DHC (aka Dev HTTP Client) in browser. If full format is not supported you should try to format the number in requested format.

I hope those tips will help you to solve your problem.

Kind regards,
Stefan

Hi Stefan,

vielen dank, Du meinst das message.log im Asterisk-Ordner?

Dort gibt es nur die Warnung:
Mar 4 16:09:49] WARNING[10448][C-0000004a] app_dial.c: Unable to create channel of type ‘SIP’ (cause 20 - Subscriber absent)

Resp. was muss alles angewendet oder neu gestartet werden, wenn das Flexpanel angepasst wurde?

Vielen Dank und Grüsse
Fabian

Hallo Fabian,

ich beobachte auch diesen Thread. Bei mir (win7 x64) liegt die Datei unter C:\Users<USERNAME>\AppData\Roaming\MobyDickClient\var\log.

Viele Grüße

Georg

Hi Fabian,

FlexPanel is client feature and it executes on the desktop. GeoMue already wrote the path for Windows OS. If you use mac os the path is /Users/$user/Library/Application Support/MobyDickClient/var/log

Regards,
Stefan

Hallo,

vielen Dank an Euch.

Ich bin noch nicht so mit der Rest Api vertraut. Benutzer und Zugriff würde funktionieren aber wie kann ich einen Anruf simulieren?
Falls es die Ländervorwahl nicht benötigt, wo könnte ich diese ausklammern/entfernen?

Vielen Dank für Eure Hilfe und Geduld.

Grüsse,
Fabian

Hallo Stefan,

Dein Code funktioniert einwandfrei. Wenn man mit einer Nummer anruft, die nicht im Telefonbuch notiert ist, wird natürlich nichts angezeigt.
Wäre es möglich, dass wenn kein Eintrag gefunden wird, das eine Ausgabe “kein Eintrag” oder ähnliches erscheint?

Auf jeden Fall, vielen herzlichen Dank für Deine Realisierung.

Grüsse,
Fabian

Hi Fabian,

You can try to change definition of FlexPanel script. Please replace this part


                            FxUtils.runLater(new Runnable() {
                                @Override
                                void run() {
                                    //refresh item and show the searched information in the label
                                    HttpItem.this.lblName.setText(xml.entry[0].name.text());
                                }
                            });

with this one


                            String newName = xml.entry[0].name;
                            if(newName!=null && !newName.isEmpty()) {
                                FxUtils.runLater(new Runnable() {
                                    @Override
                                    void run() {
                                        //refresh item and show the searched information in the label
                                        HttpItem.this.lblName.setText(xml.entry[0].name.text());
                                    }
                                });
                            } else {
                                FxUtils.runLater(new Runnable() {
                                    @Override
                                    void run() {
                                        //did not find anything. CHANGE TEXT IN QUOTES WITH YOUR MESSAGE
                                        HttpItem.this.lblName.setText("Not found!");
                                    }
                                });
                            }

Kind regards,
Stefan

Hallo Stefan,

vielen Dank, habe den Code ersetzt aber leider wird bei einem entsprechenden Anruf “not found” nicht angezeigt.

Habe ich allenfalls noch ein Fehler im Code?


if(“ringing”.equals(eventType)) {
final ChannelEvent channelEvent = ci.getChannelEvent();

                    if (channelEvent.isOutbound()) {
                       
                        if(channelEvent.getTargetName()!=null && !channelEvent.getTargetName().isEmpty()) return;
                        resolve(channelEvent.getTargetNumber())
                    } else {
                      
                        if(channelEvent.getSourceName()!=null && !channelEvent.getSourceName().isEmpty()) return;
                        resolve(channelEvent.getSourceNumber())
                    }
                    return;
                } else if("hangup".equals(eventType)) {
                    
          
                 String newName = xml.entry[0].name;
                        if(newName!=null && !newName.isEmpty()) {
                            FxUtils.runLater(new Runnable() {
                                @Override
                                void run() {
                                    //refresh item and show the searched information in the label
                                    HttpItem.this.lblName.setText(xml.entry[0].name.text());
                                }
                            });
                        } else {
                            FxUtils.runLater(new Runnable() {
                                @Override
                                void run() {
                                    //did not find anything. CHANGE TEXT IN QUOTES WITH YOUR MESSAGE
                                    HttpItem.this.lblName.setText("Not found!");
                                }
                            });
                        }
                    
                    }
             
                number="";
               }
        }
    };

Danke und Gruss
Fabian

Hi Fabian,

I think you replaced wrong part. Please revert your changes and replace the part from this section.


                    response.success = { resp, xml ->
                            println resp.statusLine
                            println "Call from ${xml.entry[0].content}"
                            println "Call from ${xml.entry[0].phone}"
                            println "Call from ${xml.entry[0].name}"
                            FxUtils.runLater(new Runnable() {
                                @Override
                                void run() {
                                    //refresh item and show the searched information in the label
                                    HttpItem.this.lblName.setText(xml.entry[0].name.text());
                                }
                            })
                    }

Kind regards,
Stefan

Hallo Stefan,

vielen Dank, funktioniert nun. :cool:

Wenn Du Lust und Zeit hast, wäre es doch noch schön, wenn es wie beim TeamWidget einen Rahmen rundherum mit einer Beschriftung z. B. Onlineabfrage hätte und wenn ein Eintrag gefunden wird, das Hintergrundfeld grün wird… :wink: Spass, bin so schon Happy! :slight_smile:

Schönes Wochenende und Grüsse
Fabian

servus. wollte fragen ob das noch aktuell ist und mir das evtl mal jemand zeigen könnte ich wie ich das einrichten könnte?danke