Slack Commands parsen und mit strukturierten Daten antworten

Neue Slack Slash Command Features für ASP.NET WebHooks
Kommentare

Mit Slack hat das US-amerikanische Unternehmen „Slack Technologies“ einen Team-Messaging-Dienst an den Start gebracht, der die Kommunikation innerhalb von Arbeitsgruppen vereinfachen soll. Für Entwickler sind ab sofort verschiedene neue Funktionen in ASP.NET WebHooks verfügbar, die es erleichtern sollen, Integrationen mit Slack Slash Commands zu erstellen.

Commands sind Nachrichten, die mit einem Slash / beginnen, und es Slack-Nutzern ermöglichen sollen, direkt über Slack mit anderen Services zu interagieren. Mithilfe eines solchen Commands lässt sich jede Art der Verarbeitung eines Slack-Channels triggern, indem ein HTTP-Request generiert wird, der Details zum Command enthält.

So kann ein Command, das in einen Slack-Channel eingegeben wurde, etwa so konfiguriert sein, dass es einen HTTP-Request an einen WebHook-Endpoint sendet, an dem die Verarbeitung stattfinden kann: /henrik Remember to buy flowers!

Slack-Commands parsen

In einem aktuellen Blog-Beitrag beschreibt das ASP.NET-Team jetzt, wie sich Slash-Commands erstellen lassen, die eine Liste von mehreren Nutzern managen können, wie zum Beispiel hier gezeigt:

/list add
/list list
/list remove

Um das zu bewerkstelligen, muss der der Command geparst und die Action aus dem Parameter herausgelöst werden. Dazu steht die SlackCommand-Helper-Klasse bereit. In einem ASP.NET-WebHooks-Handler kann das Command damit wie folgt verarbeitet werden:

public class SlackWebHookHandler : WebHookHandler
{
public SlackWebHookHandler()
{
this.Receiver = SlackWebHookReceiver.ReceiverName;
}


public override Task ExecuteAsync(string generator, WebHookHandlerContext context)
{
// Get Slash Command data as a name value collection
var command = context.GetDataOrDefault<NameValueCollection>();

// Parse the text of the form 'action parameter'.
var slashCommand = SlackCommand.ParseActionWithValue(command["text"]);

// Look at action and parameter
string action = slashCommand.Key;
string parameter = slashCommand.Value;

return Task.FromResult(true);
}
}

Im oben gezeigten Beispiel gibt es lediglich einen Parameter und Nutzer, aber natürlich sind auch Szenarien denkbar, in denen mehrere Parameter übergeben werden müssen. Beispielsweise ist es möglich, eine Liste mit Action Items zu erstellen, in der jedes Item einem Nutzer zugewiesen werden kann, wie nachfolgend dargestellt:

/list add title=Remember to buy flowers!; assignedTo: henrik
/list list

Mit strukturierten Daten antworten

So wie es möglich ist, komplexe Commands zu übergeben, ist es auch möglich, mit strukturierten Daten zu antworten. Um ebendies zu erleichtern, steht jetzt die SlackSlashResponse-Klasse bereit, mit deren Hilfe man eine Antwort erstellen kann, die sich an Slack übersenden lässt. In der einfachsten Form benötigt man hierzu lediglich einen String, allerdings können auch Anhänge mit strukturierten Texten, tabellarischen Daten und Bildern angefügt werden:

public class SlackWebHookHandler : WebHookHandler
{
public SlackWebHookHandler()
{
this.Receiver = SlackWebHookReceiver.ReceiverName;
}

public override Task ExecuteAsync(string generator, WebHookHandlerContext context)
{
// Get Slash Command data as a name value collection
var command = context.GetDataOrDefault<NameValueCollection>();

// Parse the text of the form 'action parameter'.
var slashCommand = SlackCommand.ParseActionWithValue(command["text"]);

// Look at action and parameter
string action = slashCommand.Key;
string parameter = slashCommand.Value;

return Task.FromResult(true);
}
}

Antworten in Slack müssen binnen drei Sekunden nach Anfrage erfolgen, jedoch kann ein spezieller URI genutzt werden, um Daten bis zu 30 Minuten nachdem das Command zum ersten Mal übersendet wurde, zu posten. Details hierzu gibt es auf der Slash-Commands-Übersichtsseite.

Weitere Samples zum Thema gibt es auf GitHub. ASP.NET WebHooks lässt sich über NuGet beziehen, eine kleine Einführung in das Thema findet sich übrigens im folgenden Blogpost. Alle weiteren Infos können zudem im .NET-Web Development-and-Tools-Blog nachgelesen werden.

Aufmacherbild: Cat with a dog on the phone with a can von Shutterstock / Urheberrecht:  Rasulov

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -