I want to create a slack integration that will list the user's Stack Overflow activity. EG: when the user asks a question, posts an answer, edits a post etc.
What can I use for this kind of notification?
I want to create a slack integration that will list the user's Stack Overflow activity. EG: when the user asks a question, posts an answer, edits a post etc.
What can I use for this kind of notification?
/users/{ids}/timeline
route is for.It returns an ordered list of these kinds of timeline events:
Here is what your timeline currently looks like:
"items": [ {
"badge_id": 2,
"post_id": 7113,
"user_id": 43099,
"timeline_type": "badge",
"post_type": "question",
"creation_date": 1478279530,
"detail": "Student",
"title": "How to get notified when user ask a question or post an answer?"
}, {
"post_id": 7113,
"user_id": 43099,
"timeline_type": "asked",
"post_type": "question",
"creation_date": 1478266565,
"title": "How to get notified when user ask a question or post an answer?"
}, {
"badge_id": 9,
"user_id": 43099,
"timeline_type": "badge",
"creation_date": 1478264868,
"detail": "Autobiographer"
}
] ...
I recommend polling the route no more than once every 65 seconds, and judiciously using the fromdate
parameter (which is really a unix epoch time parameter).
If you're more looking for events that happened, like posting/edit an answer or question, posting a comment or a new user that got created, use the /events endpoint.
It does require that you authenticate, so you can't run this as an anonymous user, you have to register an application and have one of the OAuth flows implemented.
When you call the /events endpoint you get the following JSON:
{
"items": [
{
"creation_date": 1512992823,
"event_id": 47752262,
"event_type": "question_posted",
"link": "https://stackoverflow.com/questions/47752262/nointerfacefoundtext-webcam-js"
},
{
"creation_date": 1512992822,
"event_id": 82464767,
"event_type": "comment_posted",
"link": "https://stackoverflow.com/questions/47750306/kafka-topic-creation-using-java-api-without-zookeeper/47751185#comment82464767_47751185"
},
{
"creation_date": 1512992822,
"event_id": 17416351,
"event_type": "post_edited",
"link": "https://stackoverflow.com/questions/17416351/difference-between-prelude-and-yesod-with-mongodb"
},
{
"creation_date": 1512992821,
"event_id": 47752261,
"event_type": "answer_posted",
"link": "https://stackoverflow.com/questions/47750098/count-user-within-15-min-and-15-to-30-min-sql-query/47752261#47752261"
},
{
"creation_date": 1512992815,
"event_id": 9083513,
"event_type": "user_created",
"link": "https://stackoverflow.com/users/9083513/yamini-lakshmi-menni"
},
....
]
}
Notice the event_type
that indicates what you're dealing with. The event_id is the unique id for the object of the event. So for a question_posted the event_id will be the id of the question, for comment_posted, the event_id will be the id of the comment. You can fed those id's in the other API endpoints to get more details. The event itself can deliver an excerpt but that is about it.
To convert this in a "webhook" you have to keep track of the last time you called events and then call it with the since
parameter set. As you can make 10,000 calls per day this should allow for an events call just under every 10 seconds but it is advised to limit the number of calls. There is 15 minutes worth of events kept and you can access only 5 minutes of events. The call supports paging.