[Zapier] 從 Salesforce 觸發 Zapier 的寄信動作,但邏輯稍微複雜,我又沒有錢升級 Zapier 到 Professional 版本,該怎麼辦?
問題
我要利用 Zapier 發通知信給不同的 product team。至於要發給哪個 team 則是根據 Salesforce Account 上的某個 multiple picklist value 來判斷,裡面可能同時含有多種不同的 product。
直覺簡單的想法就是使用類似 IF-ELSE 功能的 "path"。
但遇到了幾個問題:
- path 一定要擺在整個 zap 的最後一步。意即你無法先判斷完第一個 product 再依序判斷第二個第三個。
- 若要使用 Zapier 的 path 功能來實現 conditional action 的話,就必須付更多的錢升級到 Professional 版本以上才行。
簡單來說,path 要錢,而我沒有錢。
解決方案
還好 Zapier 提供了一個極為強大的工具是 "Code",你可以在其中用 JavaScript 或是 Python 做到一大堆你想做的事情。
(Code Tool: https://zapier.com/apps/code/integrations)
假設我有五種可能的 product ,我原本直覺的設計是要放五個不同的寄信 action,每個產品的 action 有各自不同的 subject, body, recipients。並在這五個 action 上加上條件判斷,各自判斷要不要執行。
一旦論及條件判斷,在不寫 code 的情況下,就一定得使用 path。
不過還好,我們可以寫 code!
我把五個寄信 action 合併成一個,裡頭的 subject, body, recipients 全都設成變數。
哪裡來的變數呢?
是在前一個步驟用 python 產生出來的!
只要先用 ptyhon code 把所有要用到的參數都準備好,就可以使用 for loop 去對每個 product 各執行一次寄信的 action。
以此省下了每個月數十元美金。
概念很簡單,附上一個簡單的 sample:
product_list = input_data['products_str'].split(";")
product_config = []
for product in product_list:
if product == '1':
product_config.append({
'product': product,
'notify_emails': '1_notify_emails@appier.com',
'jira_board': 11111,
'assignee': 'assignee1'})
elif product == '2':
product_config.append({
'product': product,
'notify_emails': '2_notify_emails@appier.com',
'jira_board': 22222,
'assignee': 'assignee2'})
elif product == '3':
product_config.append({
'product': product,
'notify_emails': '3_notify_emails@appier.com',
'jira_board': 33333,
'assignee': 'assignee3'})
elif product == '4':
product_config.append({
'product': product,
'notify_emails': '4_notify_emails@appier.com',
'jira_board': 44444,
'assignee': 'assignee4'})
elif product == '5':
product_config.append({
'product': product,
'notify_emails': '5_notify_emails@appier.com',
'jira_board': 55555,
'assignee': 'assignee5'})
output = [{"iterable_product":product_config}]


留言
張貼留言