You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am using Pubnub for a chat feature I am building. I am trying to use the message actions API to add an action value to an already published message as described in the documentation found here message action api. But whenever I run my code I get the error below:
NOTE: I removed certain components from the error response because it contained sensitive data!
The error response:
{
"error": true,
"operation": "PNAddActionOperation",
"statusCode": 500,
"errorData": {
"original": null,
"response": {
"req": {
"method": "POST",
"url": "https://ps18.pndsn.com/v1/message-actions/my_sub_key/channel/my_channel_name/message/17053072012353411?uuid=my_user_uuid&pnsdk=PubNub-JS-Web%2F7.4.5&l_hist=791&l_pres=1733",
"data": {
"type": "isRead",
"value": true
},
"headers": {
"content-type": "application/json"
}
},
"xhr": {},
"text": "<html>\r\n<head><title>500 Internal Server Error</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>500 Internal Server Error</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n<!-- a padding to disable MSIE and Chrome friendly error page -->\r\n<!-- a padding to disable MSIE and Chrome friendly error page -->\r\n<!-- a padding to disable MSIE and Chrome friendly error page -->\r\n<!-- a padding to disable MSIE and Chrome friendly error page -->\r\n<!-- a padding to disable MSIE and Chrome friendly error page -->\r\n<!-- a padding to disable MSIE and Chrome friendly error page -->\r\n",
"statusText": "Internal Server Error",
"statusCode": 500,
"status": 500,
"statusType": 5,
"info": false,
"ok": false,
"redirect": false,
"clientError": false,
"serverError": true,
"error": {
"status": 500,
"method": "POST",
"url": "https://ps18.pndsn.com/v1/message-actions/my_sub_key/channel/my_channel_name/message/17053072012353411?uuid=my_user_uuid&pnsdk=PubNub-JS-Web%2F7.4.5&l_hist=791&l_pres=1733"
},
"created": false,
"accepted": false,
"noContent": false,
"badRequest": false,
"unauthorized": false,
"notAcceptable": false,
"forbidden": false,
"notFound": false,
"unprocessableEntity": false,
"headers": {
"content-length": "588",
"content-type": "text/html"
},
"header": {
"content-length": "588",
"content-type": "text/html"
},
"type": "text/html",
"links": {},
"body": null
},
"status": 500
},
"category": "PNUnknownCategory"
}
My JS Code:
let pubnub;
const pubnub_publish_key = 'demo'
const pubnub_subscribe_key = 'demo'
const user_id = 'test_user_id'
const my_channel_name = 'test_channel'
const setupPubNub = () => {
// Initialize PubNub with the publish and subscribe keys and the current user's ID
pubnub = new PubNub({
publishKey: pubnub_publish_key,
subscribeKey: pubnub_subscribe_key,
userId: user_id,
reconnectPolicy: 'linear'
});
await pubnub.subscribe({
channels: [my_channel_name],
presence: true,
});
fetchMessages(my_channel_name)
const listener = {
status: (statusEvent) => {
if (statusEvent.category === "PNConnectedCategory") {
console.log("Connected")
}
},
message: (messageEvent) => {
console.log(messageEvent)
},
presence: function(presenceEvent) {
console.log(presenceEvent)
}
};
pubnub.addListener(listener);
};
window.onload = setupPubNub;
window.onbeforeunload = (event) => {
pubnub.unsubscribeAll();
}
// Asynchronous function to fetch messages from a channel
const fetchMessages = async(channelName) => {
try {
// Fetch messages from the channel
await pubnub.fetchMessages({
channels: [channelName],
count: 100,
stringifiedTimeToken: true,
}, (status, response) => {
if (status.error) {
throw new Error(JSON.stringify(status));
} else {
// Encode the channel name (becaues it contains a colon)
const encodedChannelName = encodeURIComponent(channelName)
if (response) {
// Get the messages from the response
const messages = response.channels[encodedChannelName]
// If there are messages
if (messages) {
// Wrap the loop in an async function
(async() => {
// For each message
for (let i = 0; i < messages.length; i++) {
let {
uuid,
timetoken,
message: {
text: messageText
}
} = messages[i];
//other code goes here to insert the message text and time to ket to the ui. Removed it becasue it doesn't matter for the error i am getting
// If this is the last message
if (i == messages.length - 1) {
let lastMessageTimetoken = messages[i] ? .timetoken
//logs the last message data properly
console.log(channelName, lastMessageTimetoken)
const isRead = messages[i].message ? .isRead ? true : await updateIsRead(channelName, lastMessageTimetoken);
console.log(isRead)
}
}
})();
}
}
}
});
} catch (error) {
// Log any errors that occurred
console.error(`Error in fetchMessages: ${error.message}`);
}
}
//this is where i get the error
const updateIsRead = async(channelName, timetoken) => {
if (typeof channelName !== 'string' || typeof timetoken !== 'string') {
console.error('Invalid parameters');
return;
}
await pubnub.addMessageAction({
channel: channelName,
messageTimetoken: timetoken,
action: {
type: 'isRead',
value: true,
},
},
function(status, response) {
if (status.error) {
return status
} else {
return response
}
}
);
}
The text was updated successfully, but these errors were encountered:
The problem is that all the values inside the action object should be a string. I used a boolean and that's what caused the issue. The documentation specifies that I should use a string value I overlooked. However, an internal server error response for this error is misinformative.
I am using Pubnub for a chat feature I am building. I am trying to use the message actions API to add an action value to an already published message as described in the documentation found here message action api. But whenever I run my code I get the error below:
NOTE: I removed certain components from the error response because it contained sensitive data!
The error response:
My JS Code:
The text was updated successfully, but these errors were encountered: