{"id":6041,"date":"2015-11-20T22:48:00","date_gmt":"2015-11-20T22:48:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/webdev\/2015\/11\/20\/using-asp-net-webhooks-with-ifttt-and-zapier-to-monitor-twitter-and-google-sheets\/"},"modified":"2023-09-19T11:46:31","modified_gmt":"2023-09-19T18:46:31","slug":"using-asp-net-webhooks-with-ifttt-and-zapier-to-monitor-twitter-and-google-sheets","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/using-asp-net-webhooks-with-ifttt-and-zapier-to-monitor-twitter-and-google-sheets\/","title":{"rendered":"Using ASP.NET WebHooks with IFTTT and Zapier to Monitor Twitter and Google Sheets"},"content":{"rendered":"<p>With the latest <a href=\"http:\/\/blogs.msdn.com\/b\/webdev\/archive\/2015\/11\/07\/updates-to-microsoft-asp-net-webhooks-preview.aspx\">drop of ASP.NET WebHooks<\/a> we have added a generic JSON WebHook receiver, which can be used to receive WebHooks from services like <a href=\"http:\/\/zapier.com\">IFTTT<\/a> and <a href=\"http:\/\/zapier.com\">Zapier<\/a>. Both <a href=\"http:\/\/zapier.com\">IFTTT<\/a> and <a href=\"http:\/\/zapier.com\">Zapier<\/a> provide a huge number of integrations in areas such as productivity, automotive, blogging, CRM, commerce, project management, IoT, social, mobile, collaboration, and much more. For a full list, check out <a href=\"https:\/\/ifttt.com\/channels\">IFTTT channels<\/a> and browse <a href=\"https:\/\/zapier.com\/app\/apps-explore\">Zapier zaps<\/a>.<\/p>\n<p>A really cool thing about both IFTTT and Zapier is that they enable regular HTTP requests to be output of an integration. That is, you can build integrations that when something happens, a Web request is sent to some specified destination. <\/p>\n<p>Here we\u2019ll show how to leverage this to build two simple integrations \u2013 one with IFTTT and one with Zapier \u2013 and then use ASP.NET WebHooks to receive the result. For IFTTT we wire it up to <a href=\"https:\/\/twitter.com\">Twitter<\/a> monitoring when a tweet is sent, and for Zapier we wire it up to a <a href=\"https:\/\/www.google.com\/sheets\/about\/\">Google Sheet<\/a> monitoring when a row is added. These are of course just examples \u2013 the possibilities for integrations are endless!<\/p>\n<h3>Configuring Generic WebHook Handler<\/h3>\n<p>As usual, let\u2019s first create an empty Web Application with Web API in Visual Studio which we will use for receiving WebHooks from IFTTT and Zapier. Btw, if you just want to look at the code then you can also <a href=\"https:\/\/github.com\/aspnet\/WebHooks\/tree\/master\/samples\/\">check out this sample<\/a>. Otherwise, continue by setting the project up for deployment in Azure by checking <strong>Host in the cloud<\/strong>:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/0160.EmptyProject_thumb_4D3BD08A-1.png\"><img decoding=\"async\" title=\"EmptyProject\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"EmptyProject\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/0160.EmptyProject_thumb_4D3BD08A-1.png\" width=\"500\" height=\"390\" \/><\/a><\/p>\n<p>Install the <a href=\"http:\/\/www.nuget.org\/packages\/Microsoft.AspNet.WebHooks.Receivers.Generic\">Microsoft.AspNet.WebHooks.Receivers.Generic<\/a> Nuget package. The registration happens exactly like in the blog <a href=\"http:\/\/blogs.msdn.com\/b\/webdev\/archive\/2015\/09\/04\/introducing-microsoft-asp-net-webhooks-preview.aspx\">Introducing Microsoft ASP.NET WebHooks Preview<\/a> by <font style=\"background-color: #ffffff\">adding<\/font> <font style=\"background-color: #ffff00\">this line<\/font> to the <strong>WebApiConfig.Register<\/strong> method:<\/p>\n<p id=\"codeSnippetWrapper\">\n<pre id=\"codeSnippet\"><span style=\"color: #0000ff\">public<\/span> <span style=\"color: #0000ff\">static<\/span> <span style=\"color: #0000ff\">class<\/span> WebApiConfig<br \/>{<br \/>    <span style=\"color: #0000ff\">public<\/span> <span style=\"color: #0000ff\">static<\/span> <span style=\"color: #0000ff\">void<\/span> Register(HttpConfiguration config)<br \/>    {<br \/>        <span style=\"color: #008000\">\/\/ Web API routes<\/span><br \/>        config.MapHttpAttributeRoutes();<br \/>        config.Routes.MapHttpRoute(<br \/>            name: <span style=\"color: #006080\">&quot;DefaultApi&quot;<\/span>,<br \/>            routeTemplate: <span style=\"color: #006080\">&quot;api\/{controller}\/{id}&quot;<\/span>,<br \/>            defaults: <span style=\"color: #0000ff\">new<\/span> { id = RouteParameter.Optional }<br \/>        );<br \/> <br \/>        <span style=\"color: #008000\">\/\/ Initialize Generic JSON WebHook receiver<\/span><br \/>        <font style=\"background-color: #ffff00\">config.InitializeReceiveGenericJsonWebHooks();<\/font><br \/>    }<br \/>}<br \/><\/pre>\n<p><\/p>\n<p>In this case we want the same receiver to handle both IFTTT and Zapier WebHooks which means that we need two WebHook URIs looking like this (one for IFTTT and one for Zapier):<\/p>\n<div id=\"codeSnippetWrapper\">\n<pre id=\"codeSnippet\">https:\/\/<span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #800000\">host<\/span><span style=\"color: #0000ff\">&gt;<\/span>\/api\/webhooks\/incoming\/genericjson\/<font style=\"background-color: #ffff00\">i<\/font>?code=<font style=\"background-color: #ffff00\">1388a6b0d05eca2237f10e4a4641260b0a08f3a5<\/font><br \/>https:\/\/<span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #800000\">host<\/span><span style=\"color: #0000ff\">&gt;<\/span>\/api\/webhooks\/incoming\/genericjson\/<font style=\"background-color: #00ff00\">z<\/font>?code=<font style=\"background-color: #00ff00\">80ad19e357b01a04fe767067df7cd31b96a844e1<\/font><\/pre>\n<p><\/div>\n<p>We achieve this by defining the <strong>MS_WebHookReceiverSecret_GenericJson<\/strong> application setting as follows:<\/p>\n<div>\n<pre id=\"codeSnippet\"><span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #800000\">appSettings<\/span><span style=\"color: #0000ff\">&gt;<\/span><br \/>  <span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #800000\">add<\/span> <span style=\"color: #ff0000\">key<\/span><span style=\"color: #0000ff\">=&quot;MS_WebHookReceiverSecret_GenericJson&quot;<\/span><br \/>       <span style=\"color: #ff0000\">value<\/span><span style=\"color: #0000ff\">=&quot;<font style=\"background-color: #ffff00\">i=1388a6b0d05eca2237f10e4a4641260b0a08f3a5<\/font>,<font style=\"background-color: #00ff00\">z=80ad19e357b01a04fe767067df7cd31b96a844e1<\/font>&quot;<\/span> <span style=\"color: #0000ff\">\/&gt;<\/span><br \/><span style=\"color: #0000ff\">&lt;\/<\/span><span style=\"color: #800000\">appSettings<\/span><span style=\"color: #0000ff\">&gt;<\/span><\/pre>\n<\/div>\n<div>As stated in the blog <a href=\"http:\/\/blogs.msdn.com\/b\/webdev\/archive\/2015\/09\/04\/introducing-microsoft-asp-net-webhooks-preview.aspx\">Introducing Microsoft ASP.NET WebHooks Preview<\/a>, the preferred way to do this is to set it in the <a href=\"https:\/\/portal.azure.com\/\">Azure Portal<\/a>. The &#8216;code&#8217; parameter must be between 32 and 128 characters long and as usual, you should pick values that have high entropy. A good idea is to pick something like a SHA256 hash which you for example can get from <a href=\"http:\/\/www.freeformatter.com\/hmac-generator.html\">FreeFormatter Online Tools For Developers<\/a>. <\/div>\n<p>Finally, we add a GenericJsonWebHookHandler.cs file containing the following class for processing the incoming WebHooks for both IFTTT and Zapier. Note how we use the \u2018Id\u2019 property to differentiate between the two:<\/p>\n<div id=\"codeSnippetWrapper\">\n<pre id=\"codeSnippet\"><span style=\"color: #0000ff\">public<\/span> <span style=\"color: #0000ff\">class<\/span> GenericJsonWebHookHandler : WebHookHandler<br \/>{<br \/>    <span style=\"color: #0000ff\">public<\/span> GenericJsonWebHookHandler()<br \/>    {<br \/>        <span style=\"color: #0000ff\">this<\/span>.Receiver = <span style=\"color: #006080\">&quot;genericjson&quot;<\/span>;<br \/>    }<br \/> <br \/>    <span style=\"color: #0000ff\">public<\/span> <span style=\"color: #0000ff\">override<\/span> Task ExecuteAsync(<span style=\"color: #0000ff\">string<\/span> generator, WebHookHandlerContext context)<br \/>    {<br \/>        <span style=\"color: #008000\">\/\/ Get JSON from WebHook<\/span><br \/>        JObject data = context.GetDataOrDefault&lt;JObject&gt;();<br \/> <br \/>        <span style=\"color: #0000ff\">if<\/span> (context.Id == <span style=\"color: #006080\">&quot;i&quot;<\/span>)<br \/>        {<br \/>            <span style=\"color: #008000\">\/\/ Received a WebHook from IFTTT!<\/span><br \/>        }<br \/>        <span style=\"color: #0000ff\">else<\/span> <span style=\"color: #0000ff\">if<\/span> (context.Id == <span style=\"color: #006080\">&quot;z&quot;<\/span>)<br \/>        {<br \/>            <span style=\"color: #008000\">\/\/ Received a WebHook from Zapier!<\/span><br \/>        }<br \/> <br \/>        <span style=\"color: #0000ff\">return<\/span> Task.FromResult(<span style=\"color: #0000ff\">true<\/span>);<br \/>    }<br \/>}<\/pre>\n<\/div>\n<h3>Integrations using IFTTT\u2019s Maker Channel<\/h3>\n<p>Setting up a recipe with <a href=\"http:\/\/ifttt.com\">IFTTT<\/a> is fairly straight forward, but obviously you need an account with IFTTT. And just to avoid any confusion, to wire up to <a href=\"https:\/\/twitter.com\">Twitter<\/a> you also need a twitter account. Start by going to <strong>My Recipes<\/strong>, then <strong>IF<\/strong>, then <strong>Create a Recipe<\/strong>, and then <strong>this<\/strong> to set up the trigger part:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/16\/2018\/10\/0777.IFTTT-01_6CEAAA52.png\"><img decoding=\"async\" title=\"IFTTT-01\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"IFTTT-01\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/8738.IFTTT-01_thumb_5AA1E390-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<p>Look for the Twitter channel:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/16\/2018\/10\/0702.IFTTT-02_2F5D4C89.png\"><img decoding=\"async\" title=\"IFTTT-02\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"IFTTT-02\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/8345.IFTTT-02_thumb_3610560C-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<p>and select <strong>New tweet for you<\/strong>:<\/p>\n<h3><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/2577.IFTTT-03_thumb_55BF2FD4-1.png\"><img decoding=\"async\" title=\"IFTTT-03\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"IFTTT-03\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/2577.IFTTT-03_thumb_55BF2FD4-1.png\" width=\"500\" height=\"326\" \/><\/a><\/h3>\n<p>Wire it up to your twitter account and create the trigger:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/16\/2018\/10\/3162.IFTTT-04_5148AF0D.png\"><img decoding=\"async\" title=\"IFTTT-04\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"IFTTT-04\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/5810.IFTTT-04_thumb_11129593-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<p>Now select <strong>that<\/strong> for the action part:<\/p>\n<h3><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/5381.IFTTT-05_thumb_5EAEC213-1.png\"><img decoding=\"async\" title=\"IFTTT-05\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"IFTTT-05\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/5381.IFTTT-05_thumb_5EAEC213-1.png\" width=\"500\" height=\"326\" \/><\/a><\/h3>\n<p>Search for the <strong>Maker<\/strong> channel:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/16\/2018\/10\/2620.IFTTT-06_0106578D.png\"><img decoding=\"async\" title=\"IFTTT-06\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"IFTTT-06\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/6558.IFTTT-06_thumb_27D46DCD-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<p>and select the <font style=\"font-weight: bold\">Make a web request<\/font> action:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/4863.IFTTT-07_thumb_40640B1D-1.png\"><img decoding=\"async\" title=\"IFTTT-07\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"IFTTT-07\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/4863.IFTTT-07_thumb_40640B1D-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<p>Set <strong>URL<\/strong> to the first WebHook URI value from above, set the <strong>Method<\/strong> to \u2018POST\u2019 and <strong>Content Type<\/strong> to \u2018application\/json\u2019.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/1050.IFTTT-08_thumb_54E95A9B-1.png\"><img decoding=\"async\" title=\"IFTTT-08\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"IFTTT-08\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/1050.IFTTT-08_thumb_54E95A9B-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<p>Also, set the <strong>Body<\/strong> to something like this while being careful generating valid JSON \u2013 otherwise the WebHook receiver will reject it:<\/p>\n<div>\n<pre id=\"codeSnippet\">{ <span style=\"color: #006080\">&quot;Text&quot;<\/span>: <span style=\"color: #006080\">&quot;{{Text}}&quot;<\/span>, <span style=\"color: #006080\">&quot;Link&quot;<\/span>: <span style=\"color: #006080\">&quot;{{LinkToTweet}}&quot;<\/span> }<\/pre>\n<\/div>\n<div>&#160;<\/div>\n<div>Select <strong>Create Action<\/strong> and you should see something like this:<\/div>\n<div>&#160;<\/div>\n<div><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/1200.IFTTT-09_thumb_49539D5C-1.png\"><img decoding=\"async\" title=\"IFTTT-09\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"IFTTT-09\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/1200.IFTTT-09_thumb_49539D5C-1.png\" width=\"500\" height=\"326\" \/><\/a><\/div>\n<h3>Integrations using Zapier\u2019s WebHook Action<\/h3>\n<p>Setting up an integration with Zapier is equally simple, but of course you also need a Zapier account to get going and one for Google Drive to wire up to Google Sheets. Start by going to your dashboard and select <strong>Make a new Zap<\/strong>:<\/p>\n<h3><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/5822.Zapier-01_thumb_40669BCE-1.png\"><img decoding=\"async\" title=\"Zapier-01\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"Zapier-01\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/5822.Zapier-01_thumb_40669BCE-1.png\" width=\"500\" height=\"326\" \/><\/a><\/h3>\n<p>Then for trigger search for <strong>Google Sheets<\/strong> as the trigger app:<\/p>\n<h3><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/16\/2018\/10\/5706.Zapier-02a_39475F56.png\"><img decoding=\"async\" title=\"Zapier-02a\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"Zapier-02a\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/5228.Zapier-02a_thumb_0E02C84F-1.png\" width=\"500\" height=\"326\" \/><\/a><\/h3>\n<p>Then pick <strong>New Spreadsheet Row<\/strong> as the trigger. Similarly, pick <strong>WebHooks by Zapier<\/strong> as the action app and then <strong>POST<\/strong> as the action:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/6445.Zapier-03_thumb_547FB857-1.png\"><img decoding=\"async\" title=\"Zapier-03\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"Zapier-03\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/6445.Zapier-03_thumb_547FB857-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<p>For this tutorial I created a Google Sheet with simple data like this:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/6327.GoogleSheet_thumb_2D456F22-1.png\"><img decoding=\"async\" title=\"GoogleSheet\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"GoogleSheet\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/6327.GoogleSheet_thumb_2D456F22-1.png\" width=\"454\" height=\"235\" \/><\/a><\/p>\n<p>Now add your Google Sheets account to the trigger part of the Zap in step 2:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/7563.Zapier-04_thumb_56BC4113-1.png\"><img decoding=\"async\" title=\"Zapier-04\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"Zapier-04\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/7563.Zapier-04_thumb_56BC4113-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<p>The <strong>WebHooks by Zapier<\/strong> action doesn\u2019t require any account setup in step 3 so just continue to step 4:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/2656.Zapier-05_thumb_043D60D7-1.png\"><img decoding=\"async\" title=\"Zapier-05\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"Zapier-05\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/2656.Zapier-05_thumb_043D60D7-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<p>Select the particular sheet you want to monitor and pick the particular worksheet:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/4174.Zapier-06_thumb_6BDDADDB-1.png\"><img decoding=\"async\" title=\"Zapier-06\" style=\"border-top: 0px;border-right: 0px;border-bottom: 0px;float: none;padding-top: 0px;padding-left: 0px;border-left: 0px;margin: 0px auto;padding-right: 0px\" border=\"0\" alt=\"Zapier-06\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/4174.Zapier-06_thumb_6BDDADDB-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<p>Finally, set the <strong>URL<\/strong> to the second WebHook URI value from above and set the <strong>Payload Type<\/strong> to \u2019json\u2019:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/6011.Zapier-07_thumb_0D2CF316-1.png\"><img decoding=\"async\" title=\"Zapier-07\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"Zapier-07\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/6011.Zapier-07_thumb_0D2CF316-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<p>In step 6 you can test out the zap but for now just go to step 7, enable the zap and get ready to try it out:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/1258.Zapier-08a_thumb_25BC9066-1.png\"><img decoding=\"async\" title=\"Zapier-08a\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"Zapier-08a\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/1258.Zapier-08a_thumb_25BC9066-1.png\" width=\"500\" height=\"326\" \/><\/a><\/p>\n<h3>Trying it Out<\/h3>\n<p>Simply deploy your Web Application Project to Azure and try out the two integrations: To trigger the IFTTT integration, tweet from the account you registered, and for Zapier, add a row to the Google Sheet. For both IFTTT and Zapier there is a delay, at least in the free tier, for some minutes before changes cause a WebHook to fire. However, in both cases you can manually run the integration to cause it to fire.<\/p>\n<p>If you attach the debugger and add a row to the Google Sheet you and then run the zap manually, you should see this show up in the debugger like this:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/5516.Zapier-09_thumb_4F336257-1.png\"><img decoding=\"async\" title=\"Zapier-09\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;float: none;padding-top: 0px;padding-left: 0px;margin: 0px auto;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"Zapier-09\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2015\/11\/5516.Zapier-09_thumb_4F336257-1.png\" width=\"500\" height=\"230\" \/><\/a><\/p>\n<p>Similarly, after you tweet you should see the same breakpoint getting hit but this time for the IFTTT integration.<\/p>\n<p>That\u2019s it \u2013 you can now build integrations using IFTTT and Zapier and get the result straight into ASP.NET using ASP.NET WebHooks.<\/p>\n<p>Have fun!<\/p>\n<p>Henrik<\/p>\n","protected":false},"excerpt":{"rendered":"<p>With the latest drop of ASP.NET WebHooks we have added a generic JSON WebHook receiver, which can be used to receive WebHooks from services like IFTTT and Zapier. Both IFTTT and Zapier provide a huge number of integrations in areas such as productivity, automotive, blogging, CRM, commerce, project management, IoT, social, mobile, collaboration, and much [&hellip;]<\/p>\n","protected":false},"author":403,"featured_media":58792,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[197],"tags":[34,7505,7506],"class_list":["post-6041","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aspnet","tag-asp-net-web-api","tag-asp-net-webhooks","tag-webhooks"],"acf":[],"blog_post_summary":"<p>With the latest drop of ASP.NET WebHooks we have added a generic JSON WebHook receiver, which can be used to receive WebHooks from services like IFTTT and Zapier. Both IFTTT and Zapier provide a huge number of integrations in areas such as productivity, automotive, blogging, CRM, commerce, project management, IoT, social, mobile, collaboration, and much [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/6041","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/403"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=6041"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/6041\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/58792"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=6041"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=6041"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=6041"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}