diff --git a/changelogs/fragments/10796-rocketchat-force-content-type.yml b/changelogs/fragments/10796-rocketchat-force-content-type.yml new file mode 100644 index 0000000000..96ca116e62 --- /dev/null +++ b/changelogs/fragments/10796-rocketchat-force-content-type.yml @@ -0,0 +1,2 @@ +bugfixes: + - rocketchat - fix message delivery in Rocket Chat >= 7.5.3 by forcing ``Content-Type`` header to ``application/json`` instead of the default ``application/x-www-form-urlencoded`` (https://github.com/ansible-collections/community.general/issues/10796, https://github.com/ansible-collections/community.general/pull/10796). diff --git a/plugins/modules/rocketchat.py b/plugins/modules/rocketchat.py index 79dbaa77f2..bd3862ac0a 100644 --- a/plugins/modules/rocketchat.py +++ b/plugins/modules/rocketchat.py @@ -202,14 +202,17 @@ def build_payload_for_rocketchat(module, text, channel, username, icon_url, icon return payload -def do_notify_rocketchat(module, domain, token, protocol, payload): +def do_notify_rocketchat(module, domain, token, protocol, payload, is_pre740): if token.count('/') < 1: module.fail_json(msg="Invalid Token specified, provide a valid token") rocketchat_incoming_webhook = ROCKETCHAT_INCOMING_WEBHOOK % (protocol, domain, token) - response, info = fetch_url(module, rocketchat_incoming_webhook, data=payload) + headers = None + if not is_pre740: + headers = {'Content-type': 'application/json'} + response, info = fetch_url(module, rocketchat_incoming_webhook, data=payload, headers=headers) if info['status'] != 200: module.fail_json(msg="failed to send message, return status=%s" % str(info['status'])) @@ -256,7 +259,7 @@ def main(): is_pre740 = True payload = build_payload_for_rocketchat(module, text, channel, username, icon_url, icon_emoji, link_names, color, attachments, is_pre740) - do_notify_rocketchat(module, domain, token, protocol, payload) + do_notify_rocketchat(module, domain, token, protocol, payload, is_pre740) module.exit_json(msg="OK")