Help > Forum > Website Integration > Sample code for receiving a webhook event
Sample code for receiving a webhook event
To create a webhook URL that receives a JSON payload, you need to set up a server and route that can handle the incoming HTTP POST request containing the JSON event data. This involves choosing a programming language and web framework, defining the route on your server that will handle the incoming request, and using a unique URL path for this route. Once you have set up the server and route, you can start your server and test the route by sending a test request with a sample JSON payload. Once you have confirmed that your server is receiving and processing the webhook events correctly, you can save the webhook URL in your forum settings, and it will start sending the events to this URL whenever a relevant event occurs.
In this code, we are using the Sinatra web framework to create a route that can handle the incoming HTTP POST request containing the JSON event data. The route extracts the JSON payload from the request and processes it as needed, then returns a 200 HTTP status code to indicate that the event was received and processed successfully.
require 'sinatra' require 'json' post '/webhook' do request_body = request.body.read request_data = JSON.parse(request_body) if request_data['type'] === 'post.created' # Do something with the webhook request data puts request_data['id'] end status 200 end
In this code, we are using the Flask web framework to create a route that can handle the incoming HTTP POST request containing the JSON event data. The route extracts the JSON payload from the request and processes it as needed, then returns a 200 HTTP status code to indicate that the event was received and processed successfully.
import json from flask import Flask, request app = Flask(__name__) @app.route('/webhook', methods=['POST']) def webhook(): request_body = request.get_data() request_data = json.loads(request_body) if request_data['type'] == 'post.created': # Do something with the webhook request data print(request_data['id']) # Return a 200 HTTP status code return '', 200
<?php $requestBody = file_get_contents('php://input'); $requestData = json_decode($requestBody, true); if ($requestData['type'] === 'post.created') { // Do something with the webhook request data echo $requestData['id']; } http_response_code(200); ?>
In this code, we are using the Jersey web framework to create a route that can handle the incoming HTTP POST request containing the JSON event data. The route extracts the JSON payload from the request and processes it as needed, then returns a 200 HTTP status code to indicate that the event was received and processed successfully.
import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.Response; @Path("/webhook") public class Webhook { @POST public Response webhook(String requestBody) { JSONObject requestData = new JSONObject(requestBody); if (requestData.getString("type").equals("post.created")) { // Do something with the webhook request data System.out.println(requestData.getString("id")); } // Return a 200 HTTP status code return Response.ok().build(); } }
In this code, we are using the Express web framework to create a route that can handle the incoming HTTP POST request containing the JSON event data. The route extracts the JSON payload from the request and processes it as needed, then returns a 200 HTTP status code to indicate that the event was received and processed successfully.
const express = require('express'); const app = express(); app.post('/webhook', (req, res) => { const requestBody = req.body; const requestData = JSON.parse(requestBody); if (requestData.type === 'post.created') { // Do something with the webhook request data console.log(requestData.id); } // Return a 200 HTTP status code res.sendStatus(200); }); app.listen(8000, () => console.log('Running on port 8000'));
In this code, we are using the Gorilla web framework to create a route that can handle the incoming HTTP POST request containing the JSON event data. The route extracts the JSON payload from the request and processes it as needed, then returns a 200 HTTP status code to indicate that the event was received and processed successfully.
package main import ( "encoding/json" "fmt" "io/ioutil" "net/http" "github.com/gorilla/mux" ) func main() { router := mux.NewRouter() router.HandleFunc("/webhook", webhookHandler).Methods("POST") http.ListenAndServe(":3000", router) } func webhookHandler(w http.ResponseWriter, r *http.Request) { // Read the request body requestBody, err := ioutil.ReadAll(r.Body) if err != nil { panic(err) } // Parse the request body as JSON var requestData map[string]interface{} if err := json.Unmarshal(requestBody, &requestData); err != nil { panic(err) } if requestData["type"] == "post.created" { // Do something with the webhook request data fmt.Println(requestData["id"]) } // Return a 200 HTTP status code w.WriteHeader(http.StatusOK) }
In this code, we are using the ASP.NET Core web framework to create a route that can handle the incoming HTTP POST request containing the JSON event data. The route extracts the JSON payload from the request and processes it as needed, then returns a 200 HTTP status code to indicate that the event was received and processed successfully.
using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; namespace Webhook.Controllers { [Route("api/[controller]")] public class WebhookController : Controller { [HttpPost] public IActionResult Webhook() { // Read the request body string requestBody = Request.InputStream.ReadToEnd(); // Parse the request body as JSON dynamic requestData = JObject.Parse(requestBody); if (requestData.type == "post.created") { // Do something with the webhook request data Console.WriteLine(requestData.id); } // Return a 200 HTTP status code return new HttpStatusCodeResult(200); } } }
If you still need help, please contact us.