fmEcommerce Link (Shopify Edition) Now Supports Creating Webhook Subscriptions

fmEcommerce Link (Shopify Edition), our FileMaker solution for integrating with the Shopify platform, has been updated to support creating webhook subscriptions using the Shopify Webhooks API. You can now use the fmEcommerce Link to:

  • create a new Webhook Subscription
  • update an existing Webhook Subscription (e.g. to change the URL address for the webhook)
  • delete an existing Webhook Subscription
  • download a list of all Webhook Subscriptions

The main advantage of using fmEcommerce Link to create new webhook subscriptions concerns the warning email notifications sent by Shopify when you webhook has continually failed to respond successfully. These notification emails are only sent when the webhook is created via the Shopify API and not when manually setup in the Shopify Admin screen.

Our support site has all the details for creating webhook subscriptions using the fmEcommerce Link (Shopify Edition) solution.

fmMMS Now Supports MessageBird MMS Gateway

fmMMS, our FileMaker solution that lets you send and receive MMS messages from the FileMaker Platform, has just been updated to include support for the MessageBird MMS Gateway based in the USA. You can send and receive MMS messages in the United States and Canada with fmMMS and MessageBird.

You can download a trial version of fmMMS to test with the MessageBird MMS Gateway from here. You can also sign up for a trial account with MessageBird. More information on using the MessageBird Gateway with fmMMS is available on our support site.

Accepting Online Payments Without an Online Store

Ever found yourself with a customer who would like to pay your invoice online but you don’t have an online store setup? Wouldn’t it be great if you could send your customer a link directly from your FileMaker invoice screen that takes them to a secure, online payment page where they can quickly and easily pay for invoice by credit card, PayPal, Apple Pay etc.

Research has shown that small businesses get paid up to twice as fast with online invoice payments. With online payments you can get paid up to 15 days faster and, in some cases, you get paid instantly.

Customers love online payment too, because it’s quick and easy. Plus they have the option to pay by credit card, which gives them extra financial flexibility.

There are a number of options for accepting online credit card payments without requiring you to setup your own online eCommerce store. To start accepting online payments you will need an account with a payment service like Stripe or PayPal.

Here are some examples of ways that you can accept online payments for your FileMaker generated invoices. I’m using our fmAccounting Link (Xero Edition) solution to demonstrate these.

Xero Pay Now

If you’re using Xero for your accounting software you can setup an online payment service like Stripe and connect this to your Xero account in just a few clicks. Once setup a ‘Pay now’ button displays on your online invoices, allowing customers to pay with credit card, debit card, or Apple Pay on their mobile device.

Here’s a screenshot of a typical invoice generated in our fmEcommerce Link solution:

Once the Invoice has been uploaded to Xero we can retrieve the Online Invoice URL and send this to the customer with our FileMaker generated invoice, or email the customer via Xero using the Email Invoice button. The online invoice looks like this with the Pay now button in the top left corner:

Customers click the Pay now button and enter their preferred payment details. Another advantage of accepting online payments is that invoices that are paid using a payment service are automatically marked as paid in Xero and ready to be matched with a transaction on your bank statement.

Stripe Integration

We’ve worked on many projects over the years helping customers connect their FileMaker business apps to Stripe for credit card processing integration. We’ve also setup Stripe webhooks so we can receive automatic notifications in FileMaker when a payment has been processed by Stripe.

You can also use Stripe to create an invoice with an online URL and send that to customers.

Here’s a screenshot of the same invoice ready to be uploaded to Stripe:

We can then upload the invoice to Stripe and have Stipe email the customer with the online payment link. We can also store the online invoice URL in FileMaker which we can send to the customer directly.

Here’s how the online invoice looks in Stripe:

Customers click the Pay button and enter their preferred payment details.

Another advantage accepting credit card payments online is that you are not physically handling any credit card numbers and don’t have to worry about PCI DSS compliance.

Here’s a short video demonstrating creating online payments from FileMaker via Xero and Stripe (you can also watch this on YouTube here):

fmSMS Now Supports Beem Africa SMS Gateway

fmSMS, our FileMaker solution for sending and receiving SMS messages from the Claris FileMaker Platform, has been updated to support the Beem Africa SMS Gateway based in Tanzania.

Beem have created an integrated communications & financial services platform with the largest mobile network operator reach in Africa, helping businesses drive their success quickly throughout the African continent.

You can download a trial version of fmSMS to test with the Beem Africa SMS Gateway from the fmSMS website.

fmESignature Link (DocuSign Edition) Now Supports DocuSign Payments

Version 1.35 of fmESignature Link (DocuSign Edition) has just been released and it includes a number of exciting new features that we’ve been working on over the past few months. Here is a brief summary of the main new features in this release.

DocuSign Payments Support

With fmESignature Link you can now send an agreement to be signed which also includes a request for payment using DocuSign Payments. Customers can pay with a credit card, debit card, Apple Pay, and Google Pay using one of the supported Payment Gateways. Connecting payments and agreements into a single workflow reduces payment delays and provides a superior customer experience by allowing customers to sign and pay from almost anywhere in the world on most devices in one transaction.

DocuSign Payments are great for agreements that have and associated payment such as membership renewals, deposits, event registrations, rentals and payment authorisations.

When you send an agreement with an associated payment request the recipient is prompted to make the payment after signing the agreement:

Here’s a short video demonstrating DocuSign Payments with fmESignature Link (you can also watch this on YouTube here):

We have a new article on our support site that covers all the details for setting up DocuSign Payments and creating a template in fmESignature Link which includes a payment request.

Carbon Copy Recipients

You can now include recipients who don’t need to sign but do need to receive a copy of the completed agreement:

Check out our new support article for all the details on including carbon copy recipients.

Recipient Language Settings

You can now specify the language for signers that will be used in the DocuSign email notifications and the online signing ceremony. For example you could specify French for one signer and German for another if that is their preferred language:

This article in our support site has all the details for specifying the recipient language.

The full list of changes are listed in the version history notes here. Once again this is a free update and existing customers can download this version from the link on your original order email (contact us if you need the link to be reset etc).

Using AppleScript to Automate Business Workflows

I was surprised recently to see an announcement about an updated version of the ebook FileMaker Pro Scripting Book with AppleScript (English Edition) and also pleased that others are still using the combination of FileMaker Pro and AppleScript to automated tasks using software that has been around for several decades.

AppleScript is the scripting language created by Apple that lets you directly control Mac apps using instructions written in an English-like scripting language. It was first introduced in 1993 when System 7 was the current macOS operating system. In 1995 Claris (still in its first incarnation under the Claris brand name) released FileMaker Pro v3 which included the Perform AppleScript script step which allowed you to call AppleScript commands from a running FileMaker script.

I’ve drifted in and out of AppleScript development over the years but recently turned to it as a way of automating some repetitive tasks as part of the process of releasing updates to our suite of FileMaker integration solutions. Every time we release an update to a product we have to perform a number of steps which include:

  • making a copy of the master development files
  • opening the new copy and performing a FileMaker script to clear out any test data
  • setting the File Options to use a default login
  • create a .zip file of the new version
  • upload the .zip to our online store via FTP

We also release an updated trial version at the same time which includes the above steps but also some additional steps that involve the FileMaker Pro Developer Utilities to remove admin access to the files.

We were performing each of these tasks manually and sometimes we would get distracted and forget to perform a step or perform the steps in the wrong order and then have to start all over again. The process was very much prone to human error. I wrote last year about how you should Automate What You Hate and this was definitely something I avoided and did not enjoy. After thinking about how I could automate all or parts of this process I knew AppleScript would be the most likely candidate.

For a few months in my spare time I had been developing a FileMaker solution to manage these tasks and automate them but hit a brick wall when I realised that my FileMaker Script, which was using the Perform AppleScript script step, couldn’t call FileMaker scripts as part of the AppleScript whilst the FileMaker script was running. It would generate this error:

"FileMaker Pro 19 got an error: No user interaction allowed." number -1713

After several failed attempts to work around this I abandoned the FileMaker solution and resorted to using AppleScript directly and just running the script manually using the Script Editor application which has worked a treat. I use Panic’s Transmit for handing the FTP upload and that has great support for AppleScript. My AppleScript skills were a bit rusty but thanks to Google and a bit of trial and error I was able to get a working script in a matter of hours.

The process now involves a simple double click to run the script and within seconds the AppleScript performs a series of commands using the macOS Finder, FileMaker Pro and Transmit that is free of any human errors. It now makes releasing updates to our products an enjoyable experience and something we are now likely to do more frequently rather than putting this off.

If you’re using Macs in your business and finding yourself manually performing a series of tasks multiple times it is worth investigating whether this can be scripted using AppleScript. It might not be as exiting as modern API integrations but this venerable piece of technology can still help businesses automate repetitive manual tasks that are prone to human error as we have been recently reminded.

fmSMS Now Supports TeleSign SMS Gateway

fmSMS, our FileMaker solution for sending and receiving SMS messages from the Claris FileMaker Platform has been updated to support the TeleSign SMS Gateway based in the USA.

TeleSign Two-Way SMS enables businesses to send and receive text messages from customers in 84 countries around the globe in order to provide support and engage them in the most ubiquitous method available.

You can download a trial version of fmSMS to test with the TeleSign SMS Gateway from the fmSMS website.

fmMMS Now Supports Cellcast MMS Gateway

fmMMS, our FileMaker solution that lets you send and receive MMS messages from the FileMaker Platform, has just been updated to include support for the Cellcast MMS Gateway based in Australia. With fmMMS and Cellcast you can send MMS messages to Australian numbers.

You can download a trial version of fmMMS to test with the Cellcast MMS Gateway from here. You can also sign up for a trial account with Cellcast. More information on using the Cellcast Gateway with fmMMS is available on our support site.

Shopify API Versioning and Deprecated API Calls

If you’re starting to see notifications from Shopify in your Shopify Admin site or via email that look like the following:

this is Shopify alerting you to some upcoming breaking changes in the supported version of the Shopify API. We’ve recently updated fmEcommerce Link (Shopify Edition) to include support for calling their new Deprecated API calls endpoint to quickly find out the details of which deprecated API calls your private app is making. See our support article for full details.

Optimising Parsing JSON Arrays using the JSONGetElement Function

Using the JSONGetElement function you can query JSON data for a specific element by an object name, an array index, or a path. For example you might be querying an API like Xero or Shopify for a set of recent Invoices or Orders which you would like to download into your FileMaker solution. Most APIs use pagination to limit the number of records that are returned in response to your query. The number of records returned might be set by the API vendor (e.g. you will always get 50 records) or you might be able to specify the number of records to return by using a query parameter.

The response from the API will typically be a JSON Array – Claris use the following example JSON data in their documentation:

{
    "bakery" : 
    {
        "product" : 
        [
            {
                "id" : "FB1",
                "name" : "Donuts",
                "price": 1.99,
                "stock" : 43,
                "category" : "Breads",
                "special" : true
            },
            {
                "id" : "FB2",
                "price": 22.5,
                "name" : "Chocolate Cake",
                "stock" : 23,
                "category" : "Cakes", 
                "special" : true
            },
            {
                "id" : "FB3",
                "price": 3.95,
                "name" : "Baguette",
                "stock" : 34,
                "category" : "Breads", 
                "special" : true
            }
        ]
    }
}

This sample JSON contains a bakery object with an array of three product objects. To get the value of a particular object you can use JSONGetElement function and specify the array index and object name. For example if you wanted to get the value of the name object of the second product object in the array you would use:

JSONGetElement ( $$JSON ; "bakery.product[1]name" )

which would return ‘Chocolate Cake’. You would typically have a counter that you would set in your FileMaker script to increment the array index – remember to start your counter at 0 as JSON Array indexes are zero based. Whilst this approach works reasonably well for small JSON Arrays once your JSON Array contains larger results (50, 100, 150 records etc) then you will get better performance by breaking out each individual record into it’s own FileMaker variable and then referencing that with your JSONGetElement functions. The benefits are even more noticeable when your JSON data contains multiple nested arrays.

FileMaker’s JSON parser is much slower when it has to continually parse the JSON array to target the 1st record, then the 2nd, 3rd and so on. If you have over a hundred records in your JSON array (as well as each record having their own arrays, such as an Order with line items, tax items, refund items etc) you will get much better performance if you break out each record into it’s own FileMaker variable and target that. You want to avoid parsing any large JSON arrays as much as possible.

In our FileMaker integration solutions we have changed from using this type of structure in a loop:

JSONGetElement ( $response ; "orders[" & $counter & "].id" )

to extracting each record from the JSON array in a loop into a $record variable:

JSONFormatElements ( JSONGetElement ( $response ; "orders[" & $counter & "]" ) )

then we can simply target each object like this:

JSONGetElement ( $record ; "id" )

We’ve seen performance improvements of over 80% when converting scripts to this new format when testing our fmEcommerce Link (Shopify Edition) solution by downloading all Orders and all Products from Shopify. If you’re parsing large JSON arrays we highly recommend moving away from continually having to parse the JSON array to extracting each record from the array in your loop and perform your JSONGetElement queries on that instead.

Here’s a short video that demonstrates the technique (you can also watch this on YouTube here):

You can also download the file we used in this demonstration here.