How to configure Webhooks in Shopify App?

Cryptex Technologies
3 min readJun 7, 2021

By:Category: Shopify Technologies: Ruby on Rails, Shopify

Webhooks are a useful tool in Shopify for retrieving and storing data from any certain Admin events.

Webhooks can be useful for the followings:

● Synchronize multiple e-commerce platforms, third-party apps, CRMs, or stores in Shopify
● Sending notifications to Merchants for new Orders
● Sending notifications to Customers for their Orders
● Changing a product’s price in other eCommerce platforms
● Integrate our own Accounting Softwares
● And many more …

Here, I am going to give a quick example of a simple webhook configuration in the Shopify App.

Before we move forward, I am assuming you already have created a Shopify app, if not I will recommend first create it using the ‘shopify_app’ gem here is GitHub documentation:
https://github.com/Shopify/shopify_app

Let’s assume we have a requirement to send a welcome order notification to new customers when they purchase an item from the store for the very first time.

First, we need to add an order event webhook to our config using the add_webhook generator. Please run the following command:

rails g shopify_app:add_webhook -t orders/create -a
https://example.com/webhooks/orders_create

Here, please replace “ https://example.com “ with your app URL. Where “-t” is the topic and “-a” is the address to where the webhook should be sent to.

We can check the configuration in the shopify_app.rb initializer file. It should look like this:

ShopifyApp.configure do |config|
config.webhooks = [
{topic: ‘orders/create’, address: ‘https://example.com/webhooks/orders_create'}
]
end

If you are doing configuration changes to your existing Shopify app, then make sure to delete the app from the Store if it is already installed and then reinstall the app so as to reflect the configuration changes into the app.

When installing the app, Shopify completes the OAuth flow and its callback, and ShopifyApp will then queue a background job which will ensure all the specified webhooks exist for our shop.

So, now run the below command to create an Orders_Create Job:

rails generate job orders_create

Add the following line of codes in the created job:

class OrdersCreateJob < ActiveJob::Base
def perform(shop_domain:, webhook:)
shop = Shop.find_by(shopify_domain: shop_domain)
if shop.nil?
logger.error(“#{self.class} failed: cannot find shop with domain
‘#{shop_domain}’”)
return
end
shop.with_shopify_session do
domain = ShopifyAPI::Shop.current.domain
OrderMailer.order_notification(webhook[:customer][:email],
webhook[:customer][:state], domain).deliver_now
end
end
end

Here, we will receive a webhook for creating an order event. I have sent Customer Email, Customer state i.e. whether the customer account is disabled/enabled/invited to the Order Mailer to send Order notification mail. You can update the above code by whatever parameters you want to pass to your Action Mailer.

Now you need to create a mailer for OrderMailer using Action Mailer. For Mailer configuration, please refer: https://guides.rubyonrails.org/action_mailer_basics.html

After completing all configurations, you need to create an Order from the Shopify store, and can now see an Order notification mail being delivered to your (customer) mail.

Here is a sample Order notification mail I received after placing an order from the Shopify store for which I set up the above webhook.

You can find here the list of supported webhook events by Shopify:
https://shopify.dev/docs/admin-api/rest/reference/events/webhook#events-2021-04

I hope you got a better understanding of Webhooks and its configuration in Shopify. Thanks for reading. We would love to hear from you, please feel free to put your valuable comments. Let me know if you encounter any issues while configuring it.

Originally published at https://www.cryptextechnologies.com.

--

--

Cryptex Technologies

Cryptex specializes in developing open source web applications and software solutions across all domains and verticals using Ruby on Rails (ROR) technology