节点 ARI 客户端 |连接方法不触发回调?

Node ARI Client | Connect method not firing callback?

所以,我开始使用 Asterisk Restful 界面 (ARI)。

我已经创建了一个单独的快捷应用程序来执行此操作。

我有一个正确配置的 Asterisk 13 实例 运行。我知道这一点是因为当我在浏览器中转到 https://192.168.46.122:8088/ari/sounds 时,系统会提示我输入用户名和密码,在输入时,returns 一个有效的 JSON 对象返回预期数据。 .

[
  {
    "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

在我的 app.js 文件中,我包含了以下代码...

...
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!!');
});
...

问题是永远不会触发匿名回调。我从未见过 'HELLLLLLOOOOO!!'

任何人都可以阐明 why/under 在什么情况下会发生这种情况?是否有任何已知的模块错误可能导致此问题?

如果您需要有关配置、环境等的更多信息,请告诉我

谢谢大家

更新

以下评论...我尝试了以下方法:

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

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

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

没有错误,任何时候都没有 'HELLLLLOOOOOO!!' :-(

更新 2

刚刚访问了 /ari/api-docs/resources.json 并得到了以下回复...所以它看起来像是存在的。

{
  "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.",
  "_author": "David M. Lee, II <dlee@digium.com>",
  "_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"
    }
  ]
}

我现在认为这可能是 SSL 问题?!

您的连接失败(原因如下所述),并且由于 node-ari-client 中的问题/即将推出的功能,未记录失败的连接。

node-ari-client 模块使用 Swagger,它期望加载描述 API 的 JSON 模式。在 node-ari-client 实现中,Swagger 期望在 %s//%s/ari/api-docs/resources.json 处找到此 JSON 架构。

因此,首先要检查的是您的应用程序中是否存在/可访问:

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

这可能不可用有多种原因,但最有可能的问题是身份验证。您提到在访问您的 URL 时“提示输入用户名和密码”。如果您的 JSON 架构(或任何其他需要在没有凭据的情况下访问的文件)落后于身份验证,您将需要重新考虑您的应用程序结构。

目前,如果 Swagger 加载 JSON 模式之前出现连接失败,node-ari-client 将静默失败。有一个 Pull Request waiting 可以解决这个问题并记录错误,但与此同时你应该解决阻止连接的潜在问题。

如果您可以成功访问resources.json,访问资源时可能存在其他问题。您描述的 URL 通过 https 访问您的服务,但您的 resources.json 文件告诉 Swagger 通过常规 http 访问它。要处理这个问题,您可以尝试:

更改 Swagger 架构中的 basePath 以使用 https:

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

protocols 字段添加到您的 Swagger 模式:
"protocols":["http", "https"]

正在删除 https
为了发现 https 是否是连接问题的原因,这可能是一个不错的选择。只需保持 Swagger 模式不变,并尝试通过 http 访问/连接到您的服务。这有什么不同吗?