The only other change I'd suggest is to use `.presence` on these, so that empty fields are treated as missing.

    post_params['title'] = event.payload['title'].presence || event.payload['subject'].presence || options['title']

and also below, anywhere you think that makes sense.  E.g, 

    url = (event.payload['url'].presence || options['url'] || '').to_s

    url_title = (event.payload['url_title'].presence || options['url_title']).to_s

    post_params['priority'] = (event.payload['priority'].presence || options['priority']).to_i

etc.

sound, retry, expire, ...

Anything where empty string should be treated as nil.