2016-04-15 4 views
5

Also, ich habe angefangen mit dem Asterisk Restful Interface (ARI) zu spielen.Knoten ARI-Client | Connect Methode nicht Callback auslösen?

Ich habe eine separate Express-App erstellt, um dies zu tun.

Ich habe eine korrekt konfigurierte Instanz von Asterisk 13 läuft. Ich weiß das, weil wenn ich zu https://192.168.46.122:8088/ari/sounds in meinem Browser gehen, ist ich nach einem Benutzername und Passwort gefragt, die bei der Eingabe, gebe ein gültiges JSON-Objekt zurück mit den erwarteten Daten ...

[ 
    { 
    "id": "conf-now-unmuted", 
    "text": "The conference is now unmuted.", 
    "formats": [ 
     { 
     "language": "en", 
     "format": "gsm" 
     } 
    ] 
    }, 
    { 
    "id": "vm-nomore", 
    "text": "No more messages.", 
    "formats": [ 
     { 
     "language": "en", 
     "format": "gsm" 
     } 
    ] 
    }, 
    { 
    "id": "vm-review", 
    "text": "press 1 to accept this recording press 2 to listen to it press 3 to rerecord your message", 
    "formats": [ 
     { 
     "language": "en", 
     "format": "gsm" 
     } 
    ] 
    }, 
    { 
    "id": "demo-echodone", 
    "text": "The echo test has been completed.", 
    "formats": [ 
     { 
     "language": "en", 
     "format": "gsm" 
     } 
    ] 
    }, 
    { 
    "id": "confbridge-rest-talk-vol-out", 
    "text": "...to reset your speaking volume to the default level.", 
    "formats": [ 
     { 
     "language": "en", 
     "format": "gsm" 
     } 
    ] 
    }, ...... etc etc 

In meiner app.js Datei Ich habe den folgenden Code enthalten ...

... 
var logger = require('morgan'); 
var client = require('ari-client'); 
var url = 'https://192.168.46.122:8088/ari/sounds'; 
var username = 'correct_username'; 
var password = 'correct_password'; 

client.connect(url, username, password, function (err, ari) { 
    console.log('HELLLLLLOOOOO!!'); 
}); 
... 

Das Problem ist, dass der Anon Callback nie ausgelöst wird. Ich sehe nie 'HELLLLLLOOOOO !!'

Kann jemand Licht in die Frage bringen, warum/unter welchen Umständen dies passieren könnte? Gibt es irgendwelche bekannten Bugs mit dem Modul, die dies verursachen könnten?

Bitte lassen Sie mich wissen, wenn Sie über Config weitere Informationen benötigen, Umwelt usw.

Danke Jungs

UPDATE

Nach Kommentaren unten ... Ich habe versucht, die folgenden:

client.connect(url, username, password) 
.then(function(ari) { 
    console.log('HELLLLLLOOOOO!!'); 
}) 
.catch(function(err){ 
    console.log('ERR: ' + err); 
}); 

UND

client.connect(url, username, password, function (err, ari) { 
    if(err) console.log(err); 

    console.log('HELLLLLLOOOOO!!'); 
}); 

Kein Fehler und kein 'HELLLLLOOOOOO !!' an jedem Punkt :-(

UPDATE 2

besucht haben nur /ari/api-docs/resources.json und bekam folgende Antwort ... so sieht es aus wie es vorhanden ist.

{ 
    "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.", 
    "_author": "David M. Lee, II <[email protected]>", 
    "_svn_revision": "$Revision: 430337 $", 
    "apiVersion": "1.7.0", 
    "swaggerVersion": "1.1", 
    "basePath": "http://192.168.46.122:8088/ari", 
    "apis": [ 
    { 
     "path": "/api-docs/asterisk.{format}", 
     "description": "Asterisk resources" 
    }, 
    { 
     "path": "/api-docs/endpoints.{format}", 
     "description": "Endpoint resources" 
    }, 
    { 
     "path": "/api-docs/channels.{format}", 
     "description": "Channel resources" 
    }, 
    { 
     "path": "/api-docs/bridges.{format}", 
     "description": "Bridge resources" 
    }, 
    { 
     "path": "/api-docs/recordings.{format}", 
     "description": "Recording resources" 
    }, 
    { 
     "path": "/api-docs/sounds.{format}", 
     "description": "Sound resources" 
    }, 
    { 
     "path": "/api-docs/playbacks.{format}", 
     "description": "Playback control resources" 
    }, 
    { 
     "path": "/api-docs/deviceStates.{format}", 
     "description": "Device state resources" 
    }, 
    { 
     "path": "/api-docs/mailboxes.{format}", 
     "description": "Mailboxes resources" 
    }, 
    { 
     "path": "/api-docs/events.{format}", 
     "description": "WebSocket resource" 
    }, 
    { 
     "path": "/api-docs/applications.{format}", 
     "description": "Stasis application resources" 
    } 
    ] 
} 

ich jetzt denken Es kann sich um ein SSL-Problem handeln ?!

+0

können Sie versuchen, diese 'client.connect (URL, Benutzername, Passwort) .then (Funktion (ari) {}). Catch (Funktion (err) {console.log (err);});' Es wird helfen um zu sehen, was ist der Fehler –

+0

In Übereinstimmung mit Khaled hier, können Sie sehen, wenn Sie einen Fehler im Rückruf erhalten. Schreiben Sie 'if (err) console.error (err);' –

+0

über die Datei console.log. Dies könnte auch Ihr Problem sein: https://github.com/asterisk/node-ari-client/issues/ 35 –

Antwort

1

Ihre Verbindung ist fehlgeschlagen (aus den unten aufgeführten Gründen), und aufgrund eines Problems/einer bevorstehenden Funktion in node-ari-client wird die fehlgeschlagene Verbindung nicht protokolliert

Das Modul node-ari-client verwendet Swagger, von dem erwartet wird, dass ein JSON-Schema geladen wird, das eine API beschreibt. In der node-ari-client Implementierung erwartet Swagger, dieses JSON-Schema unter %s//%s/ari/api-docs/resources.json zu finden.

Also, das erste, was zu prüfen ist, ob diese vorhanden ist/ist in Ihrer Anwendung zugänglich:

https://192.168.46.122:8088/ari/api-docs/resources.json

Dafür kann es mehrere Gründe geben, warum diese nicht zur Verfügung stehen würde, aber wahrscheinlich das Problem ist Authentifizierung. Sie erwähnen, dass Sie beim Besuch Ihrer URL "aufgefordert für einen Benutzernamen und ein Passwort aufgefordert werden".Wenn sich Ihr JSON-Schema (oder andere Dateien, auf die ohne Anmeldeinformationen zugegriffen werden muss) hinter der Authentifizierung befinden, müssen Sie Ihre Anwendungsstruktur überdenken.

Wenn derzeit ein Verbindungsfehler vorliegt vor Swagger hat das JSON-Schema geladen, node-ari-client schlägt automatisch fehl. Es gibt eine Pull Request warten, die dieses Problem behebt und den Fehler protokollieren würde, aber in der Zwischenzeit sollten Sie die zugrunde liegenden Probleme beheben, die die Verbindung verhindern.

Wenn Sie können erfolgreich Zugriff auf resources.json, gibt es möglicherweise andere Probleme beim Zugriff auf Ressourcen. Die von Ihnen beschriebene URL greift über https auf Ihren Dienst zu, aber Ihre Datei resources.json weist Swagger an, über reguläre http darauf zuzugreifen. Um dies zu umgehen, könnten Sie versuchen:

die basePath in Ihrem Swagger Schema ändern https zu verwenden:

"basePath": "https://192.168.46.122:8088/ari",

ein protocols Feld Ihre Swagger Schema hinzu:
"protocols":["http", "https"]

Re Verschieben von https
Dies ist wahrscheinlich eine gute Option, um festzustellen, ob https die Ursache des Verbindungsproblems ist. Behalten Sie das Swagger-Schema einfach so bei und versuchen Sie, über http auf Ihre Dienste zuzugreifen bzw. eine Verbindung zu ihnen herzustellen. Macht das einen Unterschied?

+0

Vielen Dank für die Untersuchung, sehr geschätzt :) Siehe "Update 2" in meinem ursprünglichen Beitrag. Danke – AdamJeffers

+0

Danke, siehe Update oben – duncanhall

+0

Nette Arbeit Kumpel !! Es ist ein SSL-Problem ... das 100-Protokoll gehört dir ;-) – AdamJeffers

Verwandte Themen