Ich habe einen eingehenden Webhook auf Slack, die als ein Benachrichtigungssystem für Änderungen in meiner Ruby-basierten Web-App (mit Sinatra, nicht Rails).Slack eingehende Webhook funktioniert nicht, wenn es Apostrophe in Text
Hier ist der Code für die Ruby-Methode, die die Daten an die Webhook sendet (sensible Informationen aus dem webhook_url ist geschwärzt wie [...]):
def notify_slack(text, user)
webhook_url = "https://hooks.slack.com/services/[...]/[...]/[...]"
payload = {
:channel => "#app-changelog",
:username => "Changelog Bot",
:attachments => [
{
:fields => [
{
:title => "Change Description",
:value => text
},
{
:title => "Changed By:",
:value => user,
:short => true
}
]
}
]
}.to_json
cmd = "curl -X POST --data-urlencode 'payload=#{payload}' #{webhook_url}"
system(cmd)
end
Bei dem Verfahren wird das text
Argument ist ein Zeichenfolge, die die Beschreibung der Änderung enthält und das user
Argument ist eine Zeichenfolge, die den Namen der Person enthält, die für die Änderung verantwortlich ist.
Wenn jedoch das text
Argument einen Apostroph '
hat, zeigt es nichts auf schlaff an.
Ich habe versucht, die '
Argument text
zu entkommen, aber das hat nicht funktioniert - ich habe Zuflucht genommen, die Apostrophe zu entfernen, aber kann keine Situationen berücksichtigen, in denen Benutzer Apostrophe in etwas enthalten können. Laut dem Nachrichtengenerator von slack sollten Apostrophe möglich sein.
Irgendeine Idee, was ich tun kann, um das zu beheben?
_Sidenote: _ sollte man den 'Kernel # system' Aufruf _return_ überprüfen. Wenn es falsch ist, stimmt etwas mit dem Befehl 'curl' nicht überein. – mudasobwa
Warum verwenden Sie ein Befehlszeilenprogramm (curl), um die HTTP-Anfrage zu stellen? Ruby kommt mit 'Net :: HTTP' und es gibt mehrere HTTP-Edelsteine. – Stefan