> For the complete documentation index, see [llms.txt](https://serverless-workshop.gitbook.io/azure/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://serverless-workshop.gitbook.io/azure/3.-trigge-funksjon-fra-slack.md).

# 3. Send en beskjed til slack

Nå skal vi lage en funksjon i vår app som kan sende en beskjed til en kanal i slack.

* Opprett en webhook i slack:&#x20;

![Finne frem til å opprette slack webhook](https://4012816346-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ldjr8il1rik0IKqibl_%2F-LhChbHon3WdhpD5_Sqd%2F-LhChodFzC9Goywj0rNI%2Fslack-webhook.gif?alt=media\&token=bbb38872-d7f2-4332-9e4b-fbd686e2c5e4)

* I Visual Studio Code - klikk for å lage ny funksjon:

![](https://4012816346-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ldjr8il1rik0IKqibl_%2F-LeQmnedTdm5bldUyieY%2F-LeQnKK7Pg_ZtNqzLe_X%2Fnewfunction.PNG?alt=media\&token=470e0cdf-be97-4c14-815e-f0af9222166f)

* Gi funksjonen et navn: f.eks `PostMessageToSlack`
* Oppgi et namespace: f.eks `Slack.Function`
* Funksjonen kan være `Anonymous`
* Som standard vil funksjonen akseptere både `GET`og `POST`. Vi skal bare sende inn en melding så vi kan endre den til kun å trigge på `POST`:

```csharp
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,ILogger log)
```

* Ta bort det autogenererte innholdet i funksjonen
* Vi ønsker å ta imot en melding i payload sendt inn til funksjonen på `POST`. Egenskapen i payloaden gir vi navnet `message`. For å hente ut dette legger du inn følgende i din funksjon:

```csharp
//read out the message from the body sent in by POST
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
var message = data?.message;
```

* Videre lager vi payload for å sende til slack

```csharp
//create slack payload and serialize
var payloadToSlack = new{ text = message};
var jsonPayLoad = JsonConvert.SerializeObject(payloadToSlack);
```

* Send den serialiserte meldingen til slack ved å benytte webhook'en som du har laget tidligere

```csharp
//post message to slack
var webhook = "https://replace.with.your.webhook.url";
using(var client = new HttpClient())
{
    var result = await client.PostAsync(webhook, new StringContent(jsonPayLoad, Encoding.UTF8, "application/json"));
}
```

* Da gjenstår det bare å returnere statuskode før vi kan teste funksjonen

```csharp
return new AcceptedResult();
```

* Nå kan du teste funksjonen lokalt ved å trykke F5 i Visual Studio Code. Se etter din lokale URL i output vinduet. Benytt f.eks Postman for å lage en request mot den nye funksjonen din. \
  Payload bør se slik ut:

```javascript
{
	'message':'this is the message to send to slack'
}
```

* Dersom det fungerer som du ønsker er det på tide å deploye til Azure

![klikk for å deploye din funksjon til Azure](https://4012816346-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ldjr8il1rik0IKqibl_%2F-LeQv13WZCP6dZyqYX8c%2F-LeQwNW2mAjFcUNsYHzD%2Fdeplytoazure.PNG?alt=media\&token=1f41de90-b497-45b4-93f7-a0239eec49c2)

* Når du har klikket deploy er det viktig at du velger **din** funksjonsapp i listen som vises. Etter du har valgt den, vil funksjonen publiseres.
