chatbase-node icon indicating copy to clipboard operation
chatbase-node copied to clipboard

Can't send group of messages using sendMessageSet

Open Vadorequest opened this issue 5 years ago • 1 comments

I have the following code:

    this.chatbaseMessageGroup = chatbase
      .newMessageSet()
      .setApiKey(this.chatbaseApiKey)
      .setUserId(this.deviceId)
      .setPlatform(this.platform)
      .setCustomSessionId(this.sessionId)
      .setIntent(this.agent.intent);
    this.chatbaseUserMessage = this.chatbaseMessageGroup
      .newMessage()
      .setAsTypeUser()
      .setMessage(this.agent.query)
      .setAsHandled()
      .setMessageId(this.responseId);

    this.chatbaseChatbotMessage = this.chatbaseMessageGroup
      .newMessage()
      .setAsTypeAgent()
      .setMessageId(this.responseId);
    console.log('--chatbaseMessageGroup', this.chatbaseMessageGroup);

Which produce the following output:

server --chatbaseMessageGroup MessageSet {
server   api_key: 'api-key',
server   user_id: '311adf00-11dd-11e9-8b1a-fbc5613ee3c7',
server   platform: 'web_unly',
server   type: null,
server   version: null,
server   intent: 'GeneralFallback',
server   session_id: '0bd74650-11f8-11e9-99a7-61058335dad0',
server   transport_timeout: 5000,
server   messages: 
server    [ MessageSetMessage {
server        api_key: 'api-key',
server        user_id: '311adf00-11dd-11e9-8b1a-fbc5613ee3c7',
server        type: 'user',
server        time_stamp: '1546809267025',
server        platform: 'web_unly',
server        message: 'AUTO_TALK',
server        intent: 'GeneralFallback',
server        not_handled: false,
server        feedback: false,
server        version: null,
server        message_id: '665ef794-912f-4f45-922c-76475e22e83e',
server        response_time: null,
server        session_id: '0bd74650-11f8-11e9-99a7-61058335dad0',
server        _state: [Object],
server        transport_timeout: 5000 },
server      MessageSetMessage {
server        api_key: 'api-key',
server        user_id: '311adf00-11dd-11e9-8b1a-fbc5613ee3c7',
server        type: 'agent',
server        time_stamp: '1546809267025',
server        platform: 'web_unly',
server        message: null,
server        intent: 'GeneralFallback',
server        not_handled: false,
server        feedback: false,
server        version: null,
server        message_id: '665ef794-912f-4f45-922c-76475e22e83e',
server        response_time: null,
server        session_id: '0bd74650-11f8-11e9-99a7-61058335dad0',
server        _state: [Object],
server        transport_timeout: 5000 } ],
server   _state: MessageLifecycleState { _state: { create: [Object], update: [Object] } } }

Then, I do some dynamic version resolving:

    // figure out version 

    this.chatbaseUserMessage.setVersion(chatbaseVersion);
    this.chatbaseChatbotMessage.setVersion(chatbaseVersion);

    // Send statistics to chatbase
    this.chatbaseMessageGroup.sendMessageSet()
      .then(set => {
        logger.info(set.getCreateResponse());
      })
      .catch(err => {
        logger.error(err);
      });

But I get the following anyway:

server 2019-01-06T21:18:18.782Z [Chatbot] error: One or more required fields were not set on the message, please check the documentation on how to set the following message fields: server api_key, type, user_id, time_stamp, platform, message

Even if I provide a proper version at the beginning, same result.

It is really not nice to have the same debug message at every try, you should consider improving the debugging DX here and let us know what's wrong exactly. It's a waste of time for everyone who tries to use this tool.

Vadorequest avatar Jan 06 '19 21:01 Vadorequest

I figured it out by debugging the code: Added a console.error to pinpoint the erroring message at MessageSet.js

static extractPayloadsFromMessageSet (messages) {
    var messagePayloadSet = [];
    for (var i = 0; i < messages.length; i++) {
      messagePayloadSet.push(messages[i].exportCreatePayload());
      if (last(messagePayloadSet) instanceof Error) {
        console.error('--err messages[i]', messages[i])
        // return the error
        return last(messagePayloadSet);
      }
    }
    return messagePayloadSet;
  }

The check that is done is basically checking that all those fields are strings: const MSG_UPDATE_EXPORT_KEYS = ['api_key', 'message_id', 'intent', 'feedback', 'version'];

In my case, the message field was null in the message that was the agent response.

Vadorequest avatar Jan 06 '19 21:01 Vadorequest