Workflow Action to add cheap IDD call prefix


Does your service provider differentiate between standard or "premium" IDD and "budget" IDD like mine does? Typically, the standard + international call prefix will default to the premium option, but to use the the cheaper option, usually via voice-over-IP (VoIP), one has to specific a different carrier-defined prefix, e.g. 12300 (I just made this up, check with your telco). I can't find a built-in way to do this on iOS... enter the Workflow App!

I tried three methods, and currently methods 1 and 3 live on my phone.

Method 1: Select Contact

Here's what to add:

  1. First, Select Contact.
  2. Do a Get Details of Contacts to GetPhone Number.
  3. Since the Contact might have more than one phone number, and since I prefer to eyeball the number even if there is only one, add Choose from List.
  4. Next, what you want is to use the prefix only if dialing international, i.e. not the country you reside in. So, use If to check for your country code, e.g. Contains+65.
  5. In the Otherwise section of the If, Replace Text to Find+ and Replace With the appropriate prefix, which in my fictitious example is 12300.
  6. In the last step, after the End If, is just Call.

Nice standard Contacts UI with a search bar at the top! But I can't automatically filter the first Select Contact to only my work address book. On to try number two!

Method 2: Filter Contacts Where

If you really want to filter contacts:

Worfklow Find Contacts Where

  1. First start with Find Contacts Where instead and set the filter to Group is Work or whatever your Contact Group is, and Phone Number"does not contain"+65 i.e. your own country code.
  2. Add Choose from List.
  3. Like previously, Get Details of Contacts to GetPhone Number.
  4. Then Choose from List to choose a single phone number from a list.
  5. And to change the prefix, do Replace Text to Find+ and Replace With the alternative prefix.
  6. In the last step, Call.

Well, the filter saves on the If, but the filter set is not exhaustive, so you'll end up nesting Find Contacts Where e.g. there is no simple way to add Phone Numberdoes not begin with+. But the main downside is it won't return local +65 numbers and the terrible UI (courtesy of Choose from List, since it's not possible to pass input to Select Contacts). On to attempt three!

Method 3: Workflow Action

As much as I prefer Method 1, I think I'd stick with this. Create the Workflow as an Action Extension that accepts Contacts:

Workflow Action Extension that accepts Contacts

  1. First, Get Details of Contacts to GetPhone Number.
  2. Then Choose From List.
  3. And If input Contains+65.
  4. In the Otherwise section, Replace Text to Find Text+65 and Replace With the 12300 prefix.
  5. After the End If, Call.

To run the workflow:

  1. Open a contact from the Contacts or Phone app.
  2. Scroll to the bottom and select Share Contact.
  3. Tap Run Workflow (and if you don't see it, press ... More and enable Run Workflow).
  4. Select the workflow we just created.

Using Share Contact to Run Workflow

Yes, it's rather involved, but at least I can use Contacts or a third party app to do the filtering I'm after.


Here I've shown a few methods of using Workflow to retrieve and alter a phone number.

You can also combine Methods 1 and 2, but that's an excercise left to you, dear reader. Hint: I used CountItems and if zero, then Select Contact, else Get VariableWorkflow Input.