Messaging App Extension - Paginating Over Messages

Hello! I have posted my question in an older thread here. However, since it’s kind of a different issue, I thought it would be appropriate to create a new topic for it.

I have successfully implemented my getConversations endpoint to return only the most recent number of messages given to me by the query parameter messages_limit, which seems to be 30. The endpoint also only returns the most recent 30 conversations, as Pipedrive requests with the conversations_limit parameter. I’ve now moved on to getConversationsById endpoint to implement fetching older messages.

The endpoint is hit correctly when I scroll up in the messages screen but the loader doesn’t stop loading. When I check my logs I see the following request:

Incoming request: GET /api/channels/<provider-channel-id>/conversations/<conversation-id>?after=<next-messages-cursor>&messages_limit=30

I can see that the provider channel ID and conversation ID values are set correctly for the conversation I’m trying to fetch more messages for. The after parameter is simply the cursor I pass in the previous getConversations endpoint under the field next_messages_cursor.

I create a correctly-formatted JSON response for this request:

{
  "success": true,
  "data": [
    {
      "link": <conversation-url>,
      "id": <conversation-id>,
      "status": "open",
      "created_at": "2024-01-13T16:59:30.352Z",
      "seen": true,
      "next_messages_cursor": <the-next-next-messages-cursor>,
      "messages": [
        {
          "id": <unique-id-of-message>,
          "status": "sent",
          "created_at": "2024-01-13T17:00:02.316Z",
          "message": "This is message number 972",
          "sender_id": "pipedrive7",
          "reply_by": null,
          "attachments": []
        },
        {
          "id": <unique-id-of-message>,
          "status": "sent",
          "created_at": "2024-01-13T17:00:01.210Z",
          "message": "This is message number 971",
          "sender_id": "pipedrive8",
          "reply_by": null,
          "attachments": []
        },
        ...
        {
          "id": <unique-id-of-message>,
          "status": "sent",
          "created_at": "2024-01-13T16:59:31.425Z",
          "message": "This is message number 944",
          "sender_id": "pipedrive7",
          "reply_by": null,
          "attachments": []
        },
        {
          "id": <unique-id-of-message>,
          "status": "sent",
          "created_at": "2024-01-13T16:59:30.352Z",
          "message": "This is message number 943",
          "sender_id": "pipedrive8",
          "reply_by": null,
          "attachments": []
        }
      ],
      "participants": [
        {
          "id": "pipedrive7",
          "name": "pipedrive7",
          "role": "source_user",
          "avatar_url": null,
          "avatar_expires": false,
          "fetch_avatar": false
        },
        {
          "id": "pipedrive8",
          "name": "pipedrive8",
          "role": "end_user",
          "avatar_url": null,
          "avatar_expires": false,
          "fetch_avatar": false
        }
      ]
    }
  ],
  "additional_data": {
    "after": "not null"
  }
}

Obviously, everything in the JSON is in string format as required. Despite sending this JSON response in the api route with res.json(response) and seeing this correctly formatted JSON on my endpoint URL, the messages do not properly load in the front end. (I have also tried res.send(response) fyi.) How come? What response should I be sending?

Hey,
please try to remove the array wrapper in the JSON. It makes sense to use it if you are fetching a list of conversations, but with this getConversationById endpoint we expect just one conversation in response.

{
  "success": true,
  "data": {
    "id":"some-id",
    ...
  }
}

getConversationById doc

1 Like

Thanks! It works like a charm.