@EthanGutheil
It is probably impossible to know who has seen the announcement. Announcements may get forwarded via a notification that goes to the student's email. Canvas has no access to that and cannot know if the student read the message or not. Any solution you come up with is going to be a partial solution. Canvas can let you know who read the announcement within Canvas, but not who read the announcement at all.
Canvas has several ways of knowing if someone read an announcement from within a Canvas interface (not through an external system like email).
- Announcements are added to the student's To Do list and Canvas knows what is on the To Do list.
- Announcements are based off of discussions. For each discussion post, Canvas knows whether the user has read the discussion post. There is the little blue circle in front of unread posts. Hovering over a discussion can mark it as auto-read, indicating the user has read the discussion. This is accessible by the "read_state" through the Canvas REST API for discussions. It may be "unread" or "read".
- Announcements allow likes to replies, but not the original announcement. You might be tempted to post a reply to your own announcement saying "Hit the Like button to let me know you've read this." It sounds like the solution you're asking for. You can respond, so there is only one message and one notification rather than 50. Canvas does track which users hit the like button. That tracking is necessary so that users can reverse their decision to like the message. This is available through the Discussions API when you view a discussion. There is an entry_ratings property that contains an array of the IDs of the liked replies. That also contains an array of unread_entries, so you could see if the user had read the announcement.
- One way that does not work is to add an announcement to a module and then make it a requirement for completion of that module.
Once upon a time, back when I used to quantify participation as opposed to subjectively grading them. I wrote a Google spreadsheet that would go through and quantify as much about the discussion as I could. This included the how many posts they had made, the date-time of every post, the number of characters in each post, the percentage of all messages read, and how many likes they had given.
Here's the problem with everything that you want to do and why it probably won't work for you.
Whether someone has marked something off their To Do list, read a discussion, or liked a discussion is all private to that user. You have to be that student to know what the student has done. Those API calls I mentioned? I was able to make them because I'm a Canvas Admin who has permission to masquerade as the student. Unless you have the ability to masquerade as other users (and you're not going to get that unless you have the dual role of professor/admin like I do), you cannot make those calls. That means that the information is not available to you.
Abandon hope of getting the information via likes. It requires that extra post and permissions you likely don't have.
Here's what I would suggest, and then I'll come back and answer your question about what you can do.
Give up trying to track students and force them into good behavior. I may be jaded as I teach college students, but the saying "you can lead a horse to water but you cannot make them drink" applies. I have spent a lot of time over the years trying to get students to be better students and implement best practices for being successful. I teach statistics and would have discussions about best ways to study and be successful. We would gather data and analyze it based off different approaches to preparing. I mentioned the data that I gathered about discussions. At the end of every semester, we gather data about the students activity in the class (over 30 variables) and have them analyze what it takes to be successful in the course. For my course, it basically comes down to turning in assignments. All the other things: watching videos, taking quizzes multiple times, spending time in Canvas, etc., don't have much of an impact on student success. I've even tried (and currently use) badges to track student behavior and reward them for doing things that they should be doing anyway. To really encourage them, I put some of my own money behind it and will spend about $150 in gift cards for the students at the top of the leaderboard. A few are motivated by the badges -- the ones who don't need them because they will be successful anyway. That's why I gave out money instead of extra credit -- those top bad earners don't need extra credit, they're going to have A's anyway.
Stop trying to get them to certify that they have read something so that they can be held accountable. I have used module requirements to have students certify that they have read and understand the directions before they get to take a quiz. They cannot get to the quiz unless they certify that they understand. They still don't follow the directions. Kind of like the EULA (end user license agreement) when you install software or go to use a service. People don't read, they just check the box to get to the thing they want to do.
Instead of forcing them to go do something, hold them accountable whether they read the message or not. Part of being a student is monitoring communication sent by the instructor. Complaints that I didn't know or see that message are on the student. Give them a free pass in some way if you want to. Some instructors allow two free mistakes a semester and they track it in a spreadsheet. I let Canvas drop the lowest grade in most of my assignment categories (besides projects, which are open for two weeks after they're due) for things that happen.
Now, if you really, really want to know how has read the message and you want to force them to do something, here are some options.
When a student views a discussion within Canvas, it is added to the Access Report for the student along with how many times it was viewed and when the last time it was viewed is. You would have to view each student's access report individually or use something like the userscript I wrote for obtaining and using access report data for an entire course. That gathers the access reports for every student and lets you open it up in a spreadsheet. This will not catch people who view the announcements via their email.
You could add a content page that contains more information than what you might put in the announcement. For example, the announcement might say "There is no class on Wednesday due to weather. Read how this will impact us and changes to assignments as <give URL to page in Canvas>." You add that content page to a module and make "view the item" a requirement for finishing the module. Canvas tracks progression on modules and shows that to instructors. Unfortunately, you have to check each student one at a time to see whether that assignment has been done.
There is nothing for the student to do other than click on the link. There is no like to give, they just need to go open the page. Whether they read it or not is up to them. You could use a "Mark as done" requirement to make them check off that they have read it. Since students must do something, you catch people who read it via email as well as those who read it within Canvas. If they don't open the page, they don't get credit for it. They might have still read the message, they just don't get recognized for having read the message.
There are not 50 notifications going around, it's all tracked internally by Canvas.
Unfortunately, it requires that you create a content page, add it a module, add it as a requirement to the module. If you are using announcements as weekly reminders, that might be great. "Here's the content for the week, be sure to check it out." If you use the announcements for time-sensitive messages, such as "School closed today", then you don't have time to handle the extra overhead.
A problem with this technique is that you won't know when the student viewed the page to mark off the module completion. They might go view the page 3 weeks after it was relevant and it would be marked off their list. You would need to go in and check right away. I will say that if you use my userscript for the whole class, it also gives the first time the student viewed the content. The Canvas web page only shows the last time.
You could create a quiz and link to it from the announcement. "Complete this quiz about the announcement: <link to URL>". The quiz could be as simple as one question: "I have read and understood the announcement" with two choices yes/no. Give them just one attempt if you want to be mean about it.
The quizzes can have dates set on them. You could make it so that they only have 12 hours to complete the quiz.
The beauty of the quiz is that you can use the Quiz Moderation page to see who has completed the quiz. That's all on one page and doesn't require anything outside Canvas. They don't have to go into modules.
The downside is the overhead of creating the quizzes. But you can create a bunch of quizzes ahead of time and not publish them until you're ready to use them.
What you do with these quizzes is up to you. You could reward the student for doing it or penalize them for not. You could also put it in an assignment category worth 0% of the grade so that it doesn't count."
There may be other ways to accomplish this. Perhaps my suggestions will prompt new ways of looking at things that you hadn't considered.
Faculty have wanted to see who liked a reply. That's been a feature request more than once. There have been some third party tools developed that will analyze discussions and show relationships of who liked whom so you can visually see the "friends" in the class. There's nothing wrong with wanting that capability, it's just not the best thing to do for measuring what you're trying to accomplish here.