Jump to content

Multiple webhooks sent on Playback finished (and some other stuff)


GrimReaper

Recommended Posts

GrimReaper

Been doing some tests with Notifiarr Dev for Emby integration, which has just gone live in early stage as of last night. With the obvious lack of " New content added" webhook, here's few of the observations:

1. While Playback events do work, per se:

617549295_Screenshot2021-05-30132437.png.7d576055a0a8652e237d14e20ce8170a.png

1307425442_Screenshot2021-05-30132456.png.5bdc649272d5215e595f8328afaad0fe.png

524440506_Screenshot2021-05-30132511.png.8ed5ce6bd678ebbf63a56fb501caf4b3.png

2143065978_Screenshot2021-05-30132529.png.9ec8645bd11a18aea7fbb157e15e51b2.png

 

Triple webhook (Pause/Stop/Scrobble) is sent upon Playback finished:

531591592_Screenshot2021-05-30132646.thumb.png.88921941c4663a0cdae331f9f489064d.png

unknown.png.2a1fb13bc9ef4aef1265926637f39aee.png

 

Could you adjust above so that only scrobble is sent upon finish?

 

2. System events also function but are fairly limited in info provided:

1610680909_Screenshot2021-05-30133833.png.5ebd07d582d344bfe8b782f91b34840e.png

 

Could you append same with some additional data?

 

3. Same goes for User events, which also do get through:

 242649370_Screenshot2021-05-30133547.png.430bfd133339dfbfbf09c67908e8f3d7.png

324435438_Screenshot2021-05-30133603.png.dd54f8660c54cf0949f3917e5e3d1faf.png

303076658_Screenshot2021-05-30133636.png.943ddddfabfc2325c7974779ccbe5f02.png

 

However, same webhook is sent upon "Mark favorite" and "Unmark favorite", so there's no way to distinguish which event actually occurred.

 

Sidenote: Had a good laugh on some of the notification descriptions when I saw them for the first time, Dev's got some spirit there. 🤣

 

  • Like 1
  • Haha 1
Link to comment
Share on other sites

Hi, it will be to be reported individually to each app that it is happening with as the server is simply just relaying events provided to it by the player.

Link to comment
Share on other sites

GrimReaper
On 5/30/2021 at 9:19 PM, Luke said:

Hi, it will be to be reported individually to each app that it is happening with as the server is simply just relaying events provided to it by the player.

Ok, here's both:

Triple webhook sent on Playback finished - Web App - Emby Community

Double webhook sent on Playback finished - Android TV / Fire TV - Emby Community

Cheers

Link to comment
Share on other sites

  • 5 months later...
ryzilla

Yeah this is awesome playing around now, i need to use sonarr radarr for new content which is all i really use it for, but will be great once it is added!

  • Like 1
Link to comment
Share on other sites

  • 2 months later...
johnnycash
On 5/30/2021 at 1:48 PM, GrimReaper said:

However, same webhook is sent upon "Mark favorite" and "Unmark favorite", so there's no way to distinguish which event actually occurred.

Additionally: the same webhhook is also sent upon change of seen/unseen status, so in this state the webhook is pretty useless.

Regards

Link to comment
Share on other sites

johnnycash

You have to parse the entire payload to get the items id and then in a second step you can query the item's seen or favorite status. This could also be easier.

Link to comment
Share on other sites

  • 3 weeks later...

The fact that pause happens right before the stop is not a fault of the server and simply due to the way the audio/video players stop on the client-side. They are in fact, stopping, which must trigger a pause event first, followed by stop.

That really should be cleaned up individually in each app to have special handling to not fire that when we know we're stopping.

Having said that, I don't think it's a big issue.

  • Agree 1
Link to comment
Share on other sites

Regarding stop and scrobble, maybe we should just drop the scrobble event and add more information to the stop event to indicate if it was played to completion.

  • Agree 1
Link to comment
Share on other sites

@GrimReaper

Please try this version of the webhooks plugin. It adds a new PlaybackInfo object containing some information:

  • PlayedToCompletion
  • PositionTicks
  • PlaylistIndex
  • PlaylistLength
  • PlaylistItemIdEmby.Webhooks.zip
Link to comment
Share on other sites

nitsua

Would it be to much of an ask to include the webhook response in the logs to know it reached the destination? This one he is testing is not creating any logs what so ever which means it isn't leaving his server. He rolled back to the old one and it started creating logs so there is for sure some kinda issue here.

 

By logs i am referring to Notifiarr side logs that are generated for every incoming request

Edited by nitsua
  • Like 1
Link to comment
Share on other sites

GrimReaper
3 hours ago, Luke said:

@GrimReaper

Please try this version of the webhooks plugin. It adds a new PlaybackInfo object containing some information:

  • PlayedToCompletion
  • PositionTicks
  • PlaylistIndex
  • PlaylistLength
  • PlaylistItemIdEmby.Webhooks.zip

Tried with the updated Webhooks plugin, besides Test event, no Playback events are going out, no webhook POSTs in the log.

Once downgraded/reverted, all is back in order. 

Link to comment
Share on other sites

nitsua
1 hour ago, Luke said:

Sorry, my mistake. Please try this version:Emby.Webhooks.zip

Thanks.

Is PlaybackInfo.PositionTicks supposed to be the current ticks or overall ticks? If it is current ticks then i can look at RunTimeTicks and compare to it with the pause notifications and skip them if they are the same since it is immediately followed by a stop hook.

  • Like 1
Link to comment
Share on other sites

1 minute ago, nitsua said:

Is PlaybackInfo.PositionTicks supposed to be the current ticks or overall ticks? If it is current ticks then i can look at RunTimeTicks and compare to it with the pause notifications and skip them if they are the same since it is immediately followed by a stop hook.

I wouldn't necessarily suggest that, but if you really want to, it might be ok.

Link to comment
Share on other sites

nitsua
1 hour ago, Luke said:

I wouldn't necessarily suggest that, but if you really want to, it might be ok.

Hmm, that doesn't clarify the question at all. I would need to know the answer before i can consider it. For a user who has Stop and Pause enabled, i dont need to double send them. If they dont have stop enabled but do have pause then it can send them. So if PlaybackInfo.PositionTicks is current ticks then this will work to eliminate a needless notification.

 

Sidenotes:

Can you fix Server.Name to be actually right instead of "Emby Server" or just flat out missing in some webhooks?

Can you add a flag to differentiate favorite/unfavorite?

Can you add a flag to differentiate seen/unseen?

Edited by GrimReaper
Strikethrough
  • Like 1
Link to comment
Share on other sites

14 minutes ago, nitsua said:

Hmm, that doesn't clarify the question at all. I would need to know the answer before i can consider it. For a user who has Stop and Pause enabled, i dont need to double send them. If they dont have stop enabled but do have pause then it can send them. So if PlaybackInfo.PositionTicks is current ticks then this will work to eliminate a needless notification.

 

Sidenotes:

Can you fix Server.Name to be actually right instead of "Emby Server" or just flat out missing in some webhooks?

Can you add a flag to differentiate favorite/unfavorite?

Can you add a flag to differentiate seen/unseen?

The Server object is set on every single webhook that goes out. Yes I'll fix the Name.

  • Thanks 1
Link to comment
Share on other sites

nitsua
17 minutes ago, Luke said:

The Server object is set on every single webhook that goes out. Yes I'll fix the Name.

Thanks, also ignore the comment about fixing Seen/Unseen as Grim mentioned Notifiarr notifications already tell them apart. I was just mentioning what i saw earlier in the thread. So really it is just favorite/unfavorite that it cant tell apart. And the lack of any information in the plugin payloads and the restart pending payload.

  • Like 1
Link to comment
Share on other sites

7 minutes ago, nitsua said:

Thanks, also ignore the comment about fixing Seen/Unseen as Grim mentioned Notifiarr notifications already tell them apart. I was just mentioning what i saw earlier in the thread. So really it is just favorite/unfavorite that it cant tell apart. And the lack of any information in the plugin payloads and the restart pending payload.

Lack of what information? ?Those system events don't have a user, session or library item attached because there isn't one.

Link to comment
Share on other sites

GrimReaper
3 minutes ago, Luke said:

Lack of what information? ?Those system events don't have a user, session or library item attached because there isn't one.

But it is surely known which plugin is updated and what is the reason for Server restart required?

Link to comment
Share on other sites

nitsua
2 minutes ago, Luke said:

Lack of what information? ?Those system events don't have a user, session or library item attached because there isn't one.

system.serverrestartrequired - New version? Plugin required it? What triggered the need for a restart

system.plugininstalled - Version? Plugin name? Automatic install (If that is a thing such as a dependancy) or user generated?

system.pluginuninstalled - Plugin name? Automatic uninstall (if that is a thing such as a security reason) or user generated?

system.pluginupdated -  New version? Old version? Plugin name? Automatic update or user generated?

As a user i would like to know when things change yes, but also what changed. I dont have a dog in this race as i dont use Emby but your Emby users ask for this kind of information when they see it in other apps but not here.

Link to comment
Share on other sites

4 hours ago, nitsua said:

system.serverrestartrequired - New version? Plugin required it? What triggered the need for a restart

system.plugininstalled - Version? Plugin name? Automatic install (If that is a thing such as a dependancy) or user generated?

system.pluginuninstalled - Plugin name? Automatic uninstall (if that is a thing such as a security reason) or user generated?

system.pluginupdated -  New version? Old version? Plugin name? Automatic update or user generated?

As a user i would like to know when things change yes, but also what changed. I dont have a dog in this race as i dont use Emby but your Emby users ask for this kind of information when they see it in other apps but not here.

Yes those are good ideas. Thanks for the feedback.

Link to comment
Share on other sites

nitsua
13 hours ago, Luke said:

Yes those are good ideas. Thanks for the feedback.

Np bud. Transcode information is also something highly requested for Emby & JF since it is available in the Plex notifications. You're welcome to add me on discord or hop in the Notifiarr server if you want to discuss things.

  • Like 1
Link to comment
Share on other sites

Sure, I will add transcoding information in the coming days and push out an update to the webhooks plugin. Thanks.

  • Agree 1
Link to comment
Share on other sites

On 3/11/2022 at 12:16 PM, Luke said:

Sure, I will add transcoding information in the coming days and push out an update to the webhooks plugin. Thanks.

A webhooks plugin update went out for this, although I've limited it to 4.7 servers for now.

  • Thanks 1
Link to comment
Share on other sites

GrimReaper
1 hour ago, Luke said:

A webhooks plugin update went out for this, although I've limited it to 4.7 servers for now.

Tested updated Webhooks (1.0.18.0) with beta .30, no Playback method/Transcoding info in payload (or at least none that we can make sense of):

{
	"Event": "playback.start",
	"User": {
		"Name": "GrimReaper",
		"Id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
	},
	"Item": {
		"Name": "The Truth",
		"ServerId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
		"Id": "608",
		"DateCreated": "2021-12-01T18:54:08.0000000+00:00",
		"PresentationUniqueKey": "xxxxx-en-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxx - xxxx",
		"Container": "mkv",
		"PremiereDate": "2016-03-13T23:00:00.0000000+00:00",
		"ExternalUrls": [{
			"Name": "IMDb",
			"Url": "https://www.imdb.com/title/tt5432602"
		}, {
			"Name": "TheTVDB",
			"Url": "https://thetvdb.com/?tab=episode&id=5482173"
		}, {
			"Name": "Trakt",
			"Url": "https://trakt.tv/search/tmdb/1161838?id_type=episode"
		}],
		"Path": "Z:\\[DL]\\Test\\TV\\11.22.63 (2016)\\Season 1\\11.22.63.S01E05.The.Truth.720p.10bit.BluRay.2CH.x265.mkv",
		"Overview": "Everything begins to fall apart as Jake struggles to live two lives: teacher and time traveler. When Sadie's life is threatened, Jake has to make a terrible choice, leaving Bill to his own devices. Lee Harvey Oswald takes steps that will lead him into a date with destiny.",
		"Taglines": [],
		"Genres": [],
		"CommunityRating": 8.2,
		"RunTimeTicks": 26268330000,
		"Bitrate": 608996,
		"ProductionYear": 2016,
		"IndexNumber": 5,
		"ParentIndexNumber": 1,
		"ProviderIds": {
			"Tmdb": "1161838",
			"TvRage": "1065881286",
			"Imdb": "tt5432602",
			"Tvdb": "5482173",
			"trakt": "2042777"
		},
		"IsFolder": false,
		"ParentId": "603",
		"Type": "Episode",
		"Studios": [{
			"Name": "Carpenter B",
			"Id": 697
		}, {
			"Name": "Bad Robot",
			"Id": 698
		}, {
			"Name": "Warner Bros. Television",
			"Id": 699
		}],
		"GenreItems": [],
		"ParentLogoItemId": "602",
		"ParentBackdropItemId": "602",
		"ParentBackdropImageTags": ["f68f445f7b7f5ff0af98ca3d28beb403"],
		"SeriesName": "11.22.63",
		"SeriesId": "602",
		"SeasonId": "603",
		"PrimaryImageAspectRatio": 1.7777777777777777,
		"SeriesPrimaryImageTag": "ba73744d73ae58253d80744f170b4b65",
		"SeasonName": "Season 1",
		"MediaStreams": [{
			"Codec": "hevc",
			"ColorTransfer": "bt709",
			"ColorPrimaries": "bt709",
			"ColorSpace": "bt709",
			"TimeBase": "1/1000",
			"VideoRange": "SDR",
			"DisplayTitle": "720p HEVC",
			"IsInterlaced": false,
			"BitRate": 608996,
			"BitDepth": 10,
			"RefFrames": 1,
			"IsDefault": true,
			"IsForced": false,
			"Height": 640,
			"Width": 1280,
			"AverageFrameRate": 23.976025,
			"RealFrameRate": 23.976025,
			"Profile": "Main 10",
			"Type": "Video",
			"AspectRatio": "2:1",
			"Index": 0,
			"IsExternal": false,
			"IsTextSubtitleStream": false,
			"SupportsExternalStream": false,
			"Protocol": "File",
			"PixelFormat": "yuv420p10le",
			"Level": 93,
			"IsAnamorphic": false,
			"AttachmentSize": 0
		}, {
			"Codec": "aac",
			"TimeBase": "1/1000",
			"DisplayTitle": "Und AAC stereo (Default)",
			"IsInterlaced": false,
			"ChannelLayout": "stereo",
			"BitRate": 192000,
			"Channels": 2,
			"SampleRate": 48000,
			"IsDefault": true,
			"IsForced": false,
			"Profile": "HE-AAC",
			"Type": "Audio",
			"Index": 1,
			"IsExternal": false,
			"IsTextSubtitleStream": false,
			"SupportsExternalStream": false,
			"Protocol": "File",
			"AttachmentSize": 0
		}, {
			"Codec": "subrip",
			"TimeBase": "1/1000",
			"DisplayTitle": "Und (Default SUBRIP)",
			"IsInterlaced": false,
			"IsDefault": true,
			"IsForced": false,
			"Type": "Subtitle",
			"Index": 2,
			"IsExternal": false,
			"IsTextSubtitleStream": true,
			"SupportsExternalStream": true,
			"Protocol": "File",
			"AttachmentSize": 0,
			"SubtitleLocationType": "InternalStream"
		}],
		"ImageTags": {
			"Primary": "63afe2595e7cecd44e844c7b7b2fb1e6"
		},
		"BackdropImageTags": [],
		"ParentLogoImageTag": "7177c3a26e33721dd8c6d685fc1e72db",
		"ParentThumbItemId": "602",
		"ParentThumbImageTag": "5106700c6f8853259604ab8e52b37492",
		"Chapters": [{
			"StartPositionTicks": 0,
			"Name": "Chapter 1",
			"MarkerType": "Chapter"
		}, {
			"StartPositionTicks": 3000000000,
			"Name": "Chapter 2",
			"MarkerType": "Chapter"
		}, {
			"StartPositionTicks": 6000000000,
			"Name": "Chapter 3",
			"MarkerType": "Chapter"
		}, {
			"StartPositionTicks": 9000000000,
			"Name": "Chapter 4",
			"MarkerType": "Chapter"
		}, {
			"StartPositionTicks": 12000000000,
			"Name": "Chapter 5",
			"MarkerType": "Chapter"
		}, {
			"StartPositionTicks": 15000000000,
			"Name": "Chapter 6",
			"MarkerType": "Chapter"
		}, {
			"StartPositionTicks": 18000000000,
			"Name": "Chapter 7",
			"MarkerType": "Chapter"
		}, {
			"StartPositionTicks": 21000000000,
			"Name": "Chapter 8",
			"MarkerType": "Chapter"
		}, {
			"StartPositionTicks": 24000000000,
			"Name": "Chapter 9",
			"MarkerType": "Chapter"
		}],
		"MediaType": "Video",
		"Width": 1280,
		"Height": 640
	},
	"Server": {
		"Name": "BLADE Beta",
		"Id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
	},
	"Session": {
		"RemoteEndPoint": "::1",
		"Client": "Emby Web",
		"DeviceName": "Google Chrome Windows",
		"DeviceId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
		"ApplicationVersion": "4.7.0.30",
		"Id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
	},
	"PlaybackInfo": {
		"PositionTicks": 0,
		"PlaylistIndex": 4,
		"PlaylistLength": 8
	},
	"CancellationToken": "System.Threading.CancellationToken"
}

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...