{"action":"created","issue":{"url":"https://api.github.com/repos/TheThingsNetwork/ttn/issues/254","repository_url":"https://api.github.com/repos/TheThingsNetwork/ttn","labels_url":"https://api.github.com/repos/TheThingsNetwork/ttn/issues/254/labels{/name}","comments_url":"https://api.github.com/repos/TheThingsNetwork/ttn/issues/254/comments","events_url":"https://api.github.com/repos/TheThingsNetwork/ttn/issues/254/events","html_url":"https://github.com/TheThingsNetwork/ttn/issues/254","id":177750733,"number":254,"title":"Report payload function errors back over MQTT","user":{"login":"johanstokking","id":13334001,"avatar_url":"https://avatars.githubusercontent.com/u/13334001?v=3","gravatar_id":"","url":"https://api.github.com/users/johanstokking","html_url":"https://github.com/johanstokking","followers_url":"https://api.github.com/users/johanstokking/followers","following_url":"https://api.github.com/users/johanstokking/following{/other_user}","gists_url":"https://api.github.com/users/johanstokking/gists{/gist_id}","starred_url":"https://api.github.com/users/johanstokking/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johanstokking/subscriptions","organizations_url":"https://api.github.com/users/johanstokking/orgs","repos_url":"https://api.github.com/users/johanstokking/repos","events_url":"https://api.github.com/users/johanstokking/events{/privacy}","received_events_url":"https://api.github.com/users/johanstokking/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/TheThingsNetwork/ttn/labels/project/backend","name":"project/backend","color":"006b75"}],"state":"open","locked":false,"assignee":{"login":"htdvisser","id":181308,"avatar_url":"https://avatars.githubusercontent.com/u/181308?v=3","gravatar_id":"","url":"https://api.github.com/users/htdvisser","html_url":"https://github.com/htdvisser","followers_url":"https://api.github.com/users/htdvisser/followers","following_url":"https://api.github.com/users/htdvisser/following{/other_user}","gists_url":"https://api.github.com/users/htdvisser/gists{/gist_id}","starred_url":"https://api.github.com/users/htdvisser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/htdvisser/subscriptions","organizations_url":"https://api.github.com/users/htdvisser/orgs","repos_url":"https://api.github.com/users/htdvisser/repos","events_url":"https://api.github.com/users/htdvisser/events{/privacy}","received_events_url":"https://api.github.com/users/htdvisser/received_events","type":"User","site_admin":false},"assignees":[{"login":"htdvisser","id":181308,"avatar_url":"https://avatars.githubusercontent.com/u/181308?v=3","gravatar_id":"","url":"https://api.github.com/users/htdvisser","html_url":"https://github.com/htdvisser","followers_url":"https://api.github.com/users/htdvisser/followers","following_url":"https://api.github.com/users/htdvisser/following{/other_user}","gists_url":"https://api.github.com/users/htdvisser/gists{/gist_id}","starred_url":"https://api.github.com/users/htdvisser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/htdvisser/subscriptions","organizations_url":"https://api.github.com/users/htdvisser/orgs","repos_url":"https://api.github.com/users/htdvisser/repos","events_url":"https://api.github.com/users/htdvisser/events{/privacy}","received_events_url":"https://api.github.com/users/htdvisser/received_events","type":"User","site_admin":false}],"milestone":null,"comments":2,"created_at":"2016-09-19T10:29:07Z","updated_at":"2016-09-19T10:31:39Z","closed_at":null,"body":"If a payload function fails, the processing is stopped and there should be a way to inform the user (see conversation in #248).\r\n\r\nThe extent to which we make these errors available to the end user, e.g. in the dashboard or ttnctl, is to define later, but it all starts with reporting back on MQTT.\r\n\r\nFor uplink payload function errors, I propose reporting the error to `:app-id/devices/:dev-id/up/rejected`, and for downlink `:app-id/devices/:dev-id/down/rejected`. This follows [AWS IoT naming](http://docs.aws.amazon.com/iot/latest/developerguide/thing-shadow-mqtt.html), and allows for a companion named `accepted`.\r\n\r\nThe error should indicate the type of error (payload function) and the concerning payload function (decoder, converter or validator).\r\n\r\nThe type of error should be clear, because there are other use cases for this topic. For example, we can use the `.../up/rejected` also for payload marked as invalid by the validator, and `.../down/rejected` in cases where we can't find a gateway for downlink in time."},"comment":{"url":"https://api.github.com/repos/TheThingsNetwork/ttn/issues/comments/247959568","html_url":"https://github.com/TheThingsNetwork/ttn/issues/254#issuecomment-247959568","issue_url":"https://api.github.com/repos/TheThingsNetwork/ttn/issues/254","id":247959568,"user":{"login":"johanstokking","id":13334001,"avatar_url":"https://avatars.githubusercontent.com/u/13334001?v=3","gravatar_id":"","url":"https://api.github.com/users/johanstokking","html_url":"https://github.com/johanstokking","followers_url":"https://api.github.com/users/johanstokking/followers","following_url":"https://api.github.com/users/johanstokking/following{/other_user}","gists_url":"https://api.github.com/users/johanstokking/gists{/gist_id}","starred_url":"https://api.github.com/users/johanstokking/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johanstokking/subscriptions","organizations_url":"https://api.github.com/users/johanstokking/orgs","repos_url":"https://api.github.com/users/johanstokking/repos","events_url":"https://api.github.com/users/johanstokking/events{/privacy}","received_events_url":"https://api.github.com/users/johanstokking/received_events","type":"User","site_admin":false},"created_at":"2016-09-19T10:31:39Z","updated_at":"2016-09-19T10:31:39Z","body":"The question here is if we should put something behind `:app-id/devices/:dev-id/up/...`, because we're also publishing payload fields here. So `accepted` and `rejected` become reserved words for fields."}}
{"actor":{"display_login":"johanstokking"}}