2017-11-29 3 views
0

Ich habe eine freie App in node.js implementiert, wo ich dynamisch ein Dropdown-Menü von einem Options Load URL zu einem Kanal auf der Slack-Gruppe anzeigen .Wie man einen Wert von Slack-Kanal an "Optionen laden URL" in Slack App

Die Drop-Down korrekt auf der Grundlage der Optionen JSON angezeigt bekommen, die ich Form die externe URL kehre zurück,

aber jetzt das Problem ist, dass ich einzelne Elemente in dem Dropdown-Menü haben, müssen auf das, was der Benutzer hat den Schlafkanal betreten.

Zum Beispiel:

Wenn der Benutzer sagt: give me choices for option 1: dann wird der Wert 1 soll die Options Load URL und den Code übergeben werden, die ich in diesem URL implementiert habe, wird mit dem entsprechenden JSON basierend auf dem eingegebenen Wert antwortet 1 .

Als nächstes, wenn die Nutzer sagen give me choices for option 2: dann wird der Wert 2 soll die Options Load URL und der Code übergeben wird implementiert wird es die Optionen antwortet basierend auf dem Wert 2, die er empfängt.

Der Code bei Options Load URL ist bereits implementiert. Der Code zum Extrahieren der Nummer 1 oder 2 aus der Benutzernachricht ist ebenfalls implementiert.

Die Werte 1 oder 2 ... usw. sind nicht konstant oder fest. Diese können zufällig ausgewählt werden und die API unter Options Load URL kann diese Werte korrekt verarbeiten.

Ich muss nur einen Weg finden, diese Werte an die Options Load URL irgendwie zu senden.

Ist es irgendwie möglich, dies in Slack zu tun?

Antwort

1

Verwenden Sie die name-Eigenschaft in Ihrer Anfrage, um einen benutzerdefinierten Wert an den Teil Ihrer App zu übergeben, der die Optionenanforderungen von Slack verarbeitet ("Optionen URL laden"). Ich verwende es normalerweise, um auszuwählen, welche vordefinierte Optionsliste zurückgegeben werden soll, aber Sie können es auch verwenden, um dynamisch eine neue Optionsliste basierend auf dem Wert zu erstellen.

Als Referenz hier ist das Beispiel Slack-Anfrage zum Erstellen eines dynamischen Menüs (von der offical documentation), wo Sie die Name-Eigenschaft unter Aktion sehen können. In diesem Beispiel hat sie den Wert "bugs_list":

{ 
    "text": "What's bugging you?", 
    "response_type": "in_channel", 
    "attachments": [ 
     { 
      "fallback": "Upgrade your Slack client to use messages like these.", 
      "color": "3AA3E3", 
      "attachment_type": "default", 
      "callback_id": "select_remote_1234", 
      "actions": [ 
       { 
        "name": "bugs_list", 
        "text": "Which random bug do you want to resolve?", 
        "type": "select", 
        "data_source": "external", 
        "min_query_length": 3, 
       } 
      ] 
     } 
    ] 
} 

Und hier ist es, was die URL Ihrer Optionen laden erhalten. Beachten Sie den Parameter name.

{ 
    "name": "bugs_list", 
    "value": "bot", 
    "callback_id": "select_remote_1234", 
    "team": { 
     "id": "T012AB0A1", 
     "domain": "pocket-calculator" 
    }, 
    "channel": { 
     "id": "C012AB3CD", 
     "name": "general" 
    }, 
    "user": { 
     "id": "U012A1BCJ", 
     "name": "bugcatcher" 
    }, 
    "action_ts": "1481670445.010908", 
    "message_ts": "1481670439.000007", 
    "attachment_id": "1", 
    "token": "verification_token_string" 
} 

Der name Parameter ist ein gemeinsamer Parameter in einer HTTP-Anforderung, so dass man dort so ziemlich alles setzen kann, auch Datenstrukturen, solange sie als Strings codiert werden. Siehe auch meine other answer, die über die Grenzen der Weitergabe von Daten in Slack-Parametern spricht.

+0

Danke, Das ist eine Art von was ich getan habe. Aber in meinem Fall waren die Dinge etwas komplizierter, als ich diesen Namen später verwendete, als ich die Antwort durch die Aktionen zurückbekam, um festzustellen, welche Art von Aktion der Benutzer ausgeführt hatte. (Ich hatte auch Button-Klicks, die ich unter Verwendung dieses Namens differenzierte, um herauszufinden, auf welche Schaltfläche der Benutzer geklickt hatte.) Also fügte ich meinen Wert an den Namen als eine durch Leerzeichen getrennte Zeichenkette an.Dies schien keine elegante Lösung zu sein, aber es funktioniert jetzt. – sumit

+0

cool. Ich mache das gleiche, verwende aber normalerweise JSON-Codierung für meine Datenstruktur. Ich stimme zu, dass es nicht wie eine elegante Lösung aussieht, aber es gibt keine guten Alternativen. –

Verwandte Themen