# Chat read receipts

**URL:** <https://community.glideapps.com/t/chat-read-receipts/79869>\
**Category:** Ask for Help\
**Created:** [February 7, 2025, 6:58am UTC](https://community.glideapps.com/t/chat-read-receipts/79869 "2025-02-07T06:58:39Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![rickd](https://avatars.discourse-cdn.com/v4/letter/r/e8c25b/32.png) [@rickd](https://community.glideapps.com/u/rickd)\
**Post date:** [February 7, 2025, 6:58am UTC](https://community.glideapps.com/t/chat-read-receipts/79869/1 "2025-02-07T06:58:39Z")

</div>

Hello Gliders,

I have a chat on my app and I was hoping to add read receipts if possible.

Does anyone know how to do this?

---

<div class="post-metadata">

**Author:** ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)\
**Post date:** [February 7, 2025, 7:07am UTC](https://community.glideapps.com/t/chat-read-receipts/79869/2 "2025-02-07T07:07:11Z")

</div>

Is it a 1:1 or 1:many chat?

Essentially what you want is a custom action that writes a timestamp to a column when a user navigates to a chat message. If your chat is 1:1 that should be pretty straightforward. If it’s a 1:many chat, then it’s a little more complex, and depending how you set it up could use a lot of rows.

---

<div class="post-metadata">

**Author:** ![rickd](https://avatars.discourse-cdn.com/v4/letter/r/e8c25b/32.png) [@rickd](https://community.glideapps.com/u/rickd)\
**Post date:** [February 8, 2025, 4:14am UTC](https://community.glideapps.com/t/chat-read-receipts/79869/3 "2025-02-08T04:14:28Z")

</div>

Hello Darren,  
It is a 1:many (7 users). When you say navigates to the chat message do you mean click on it or open the app? How would this be impacted if the window was left open but not active?

Appreciate any help.

---

<div class="post-metadata">

**Author:** ![ThinhDinh](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/thinhdinh/32/49_2.png) [@ThinhDinh](https://community.glideapps.com/u/ThinhDinh)\
**Post date:** [February 9, 2025, 12:58am UTC](https://community.glideapps.com/t/chat-read-receipts/79869/4 "2025-02-09T00:58:57Z")

</div>

It gets complicated because with read receipts, you want the “other people” to see it.

Let’s take an example, I used to have clients asking me if I can show read/unread conversations to the signed-in user. In that scenario, I can just have a **user-specific** timestamp column that I set every time the user navigates to the chat’s details view.

If there are any messages that are sent after that timestamp, then I can show it as “unread”, and vice versa.

For receipts, due to the nature of chats, you don’t usually “click” on messages to have a point of interaction, I think your best bet is still doing what I did above, but you have to log it to a helper table because if you use user-specific, other people can not see the data.

- Add a helper table for “last read” of users.

| Chat ID | User ID | Timestamp |
| --- | --- | --- |
| C001 | U001 | Feb 9 2025, 7AM |
| C002 | U001 | Feb 9 2025, 9AM |

- In the chats table, add a query column, targetting the helper table above, filter by chatID is this row \> rowID and user ID is signed-in user’s ID.
- Add a single value \> whole row column on top of the query above to get a single match.
- Have a collection of chats, upon the user clicking on the collection of chats, if the single value column is empty, add a new row, else set the current timestamp to the existing row.

Then, you can play around with that data to show at which point did a user last read the chat.
