Javascript 匡威从API打开聊天室

Javascript 匡威从API打开聊天室,javascript,converse.js,Javascript,Converse.js,我正在寻找通过API与用户打开聊天窗口的方法 我已经设置(并在白名单中注册)了一个插件,可以触发 converse.plugins.add('startChat', { initialize: function () { this._converse.on('connected', function () { console.log("wibble"); this._converse.

我正在寻找通过API与用户打开聊天窗口的方法

我已经设置(并在白名单中注册)了一个插件,可以触发

    converse.plugins.add('startChat', {
        initialize: function () {
            this._converse.on('connected', function () {
                console.log("wibble");
                this._converse.api.chats.open('user@chat.domain.com');
            });
          }
      });
这将触发,但不会启动聊天。我在控制台中遇到以下错误:

wibble

converse.js:48049
FATAL: TypeError: Cannot read property 'get' of undefined
    at child.createChatBox (/converse.js:50015:56)
    at child.getChatBox (/converse.js:50050:40)
    at Object.open (/converse.js:50153:84)
    at Object.<anonymous> (Page.aspx:1264:41)
    at triggerEvents (/converse.js:46015:57)
    at triggerApi (/converse.js:46003:19)
    at eventsApi (/converse.js:45802:16)
    at Object.Events.trigger (/converse.js:45993:5)
    at Object._converse.emit (/converse.js:48071:27)
    at Object.onConnected (/converse.js:48671:27)

converse.js:48041 
ERROR: User connection callback caused an exception: TypeError: Cannot read property 'get' of undefined
wibble
匡威js:48049
致命:TypeError:无法读取未定义的属性“get”
在child.createChatBox(/converse.js:50015:56)
在child.getChatBox(/converse.js:50050:40)
在Object.open(/converse.js:50153:84)
反对。(第页aspx:1264:41)
在触发事件(/converse.js:46015:57)
在triggerApi(/converse.js:46003:19)
在eventsApi(/converse.js:45802:16)
在Object.Events.trigger(/converse.js:45993:5)
at Object._converse.emit(/converse.js:48071:27)
在Object.onConnected(/converse.js:48671:27)
匡威js:48041
错误:用户连接回调导致异常:TypeError:无法读取未定义的属性“get”

首先,匡威.js不允许与不在您名册中的用户开始聊天(除非您已设置为
true
)。因此,请确保您试图与之聊天的用户在您的名册中

其次,在
连接
事件触发之后,现在尝试打开聊天室还为时过早

所以你必须先等到名册填好。这就是事件/承诺

除此之外,最好先等到已经打开的聊天盒(缓存在sessionStorage中)也从缓存中取出。这就是事件/承诺

这两个事件每个会话只触发一次,因此它们也可以作为承诺提供

要首先等待这两个承诺得到解决,您的代码将如下所示:

converse.plugins.add('startChat', {
  initialize: function() {
    var _converse = this._converse;
    Promise.all([
        _converse.api.waitUntil('rosterContactsFetched'),
        _converse.api.waitUntil('chatBoxesFetched')
    ]).then(function() {
      // Note, test@conversejs.org must be in your contacts roster!
      _converse.api.chats.open('test@conversejs.org');
    });
  } 
});

下面是一个运行上述代码的JSFIDLE:

对于未来的旅行者:我解决了从匡威外部开始匡威聊天的问题,如下所示:

<li id="start-chat" data-id="idOfTheUser" data-name="nameOfTheUser"> Message</li>

啊-对我来说,没有和不在我花名册中的用户开始聊天是缺失的一环。这对我来说不起作用。。。匡威拒绝打开聊天窗口
    converse.plugins.add('startChat', {
        initialize: function () {
            var _converse = this._converse;

            $('#start-chat').on('click', function () {

                var jid = $('#start-chat').attr("data-id") +'@chat.domain.com';
                var userFullName = $('#start-chat').attr("data-name");

                _converse.api.contacts.add(jid, userFullName);
                _converse.api.chats.open(jid, true);
            });
          }
      });