📖

SalesforceからノーコードでAPI Callする?できらぁ!

2025/01/10に公開

これはみすてむず いず みすきーしすてむず Advent Calendar 2024の5日目の記事です。

https://adventar.org/calendars/10203

※本記事はGistで書いていたものの移植です。

はじめに

はじめまして、またはおはこんばんちは!えりくしあと申します。
昨年のアドカレでは重てぇ話辛い話を書いておりました。

いつも猫を愛でたり酒に溺れたりしてるだけのひとなのですが、ここだけの話、Salesforceチョットワカルんです。わたし。
今年こそは技術屋さんぽいことを書いてみたいなぁと思ったので、最近触っててクソわかりづれぇちょっとおもしろかった 「フローを使ってHTTP CallOutをする」 ところを記事にしてみようかなと思います。

想定する読者層

Salesforce?あーなんか営業が使ってるね!なんかいろいろできるんでしょ?くらいの人でも読めるよう書いた・・・つもりです。
Salesforceってなんですか?までは説明していません。

注意事項

本記事は2024年12月現在のSalesforce Developer Editionをもとに執筆しております。
画面項目は今後のmajor updateにより変更される可能性が大いにあります。 ていうか変えろ。

参考リンク

前提: Salesforce フローとは?

フローとは、Salesforceで利用できる自動化プロセスのひとつです。
最大の特徴はノーコードで自動化プロセスが書けるだけでなく、付随する画面やスケジューラ等を実装できること。
・・・とは言うものの、変数や式の概念は存在するので、ユーザ部門が前提知識なしに使うにはちょっと難度が高いのがたまに傷。

何ができるか?のイメージを掴むにはサクセスナビのこちらの記事がわかりやすいかと思います。

Flow vs Others

Salesforceは他にもいくつか自動化を支援する機能が存在します。
各ツールについての比較を 自分で書くのはめんどいので Geminiくんにお願いしてみました。

image

ApexとはSalesforce Platformの開発で使うJava風のプログラミング言語です。
その他はすべてノーコードツールなので、その中で一番柔軟性が高いかわりに難易度が高いのがフロー、ということになります。

閑話休題: 自動化ツール多すぎ問題

上記の表を見て「同じPlatform上に似たようなツールがなんでこんなにあるんだよ・・・」と思った方、いらっしゃるのではないでしょうか?お目が高いですね。

実はノーコードツール3種(ワークフロールール、プロセスビルダー、フロー)は、右に進むにつれて時代の変化と技術的進歩によって追加されていった機能たちです。

最初はワークフロールールとApexしか存在せず、ノーコードでできたのは「レコード(とその親の特定Field)の作成・変更」をトリガに「自レコードを更新する / メールを送る / ◯日後になんかする」ことしかできませんでした。
そのため、要件に「自レコード"以外"の更新(子レコードとか)」を含む時点でApexで書かざるを得ませんでした。
また、UIも以下のとおり貧弱で、まるで詳細設計書でも書かされているような視認性の悪さも問題でした。

image
image

この問題点を解消するため、フローチャートに近いかたちで実装できるプロセスビルダーがリリースされました。
・・・が、これあまり流行らなかったんですよね。私自身も触る機会が少なかったのですが、ワークフロールールと比べたときに「視認性が上がった」以外にできることがたいして増えなかった、のが要因だったんじゃないかなぁ、と思っています。

image

そうしてプロセスビルダーが普及しきる前に爆誕してしまったのが、今回の記事で取り上げるフローです。名前が紛らわしいのどうにかならんかったのか。

今度は「要素(①)」と「コネクタ(②)」というシンプルな構成要素を組み合わせる形を採用したおかげで、従来の2機能と比べてよりきめ細やかな実装が可能になりつつ視認性を担保できた、と思います。
反面、以前の2機能に比べてやれることが増えすぎて学習コストが上がってしまいましたが・・・。

image

このように、似たような機能の乱立の背景には、Salesforceの進化の歴史があったわけです。
現在はフローへの移行・統一が推奨されているため、前述の2機能を触ることは(移行案件以外では)今後ないです。

本題: フローからHTTP Requestを送ってみる

大まかに以下の手順で実施します。

  1. 利用する外部サービスの情報をSalesforceに登録する
    1. 外部ログイン情報の設定
    2. 指定ログイン情報の設定
    3. 権限付与
  2. フローでHTTP CallOutを作成する

事前準備: GeminiのAPI Keyを取得する

今回はさっきご登場いただいたGeminiくんのAPIを叩くことにしてみます。

Google AI Studio にアクセスし、APIキーを発行しておきます。

(´-`).。oO(支払い情報とかもなくさくっと発行できちゃうんだ・・・)

利用する外部サービスの情報をSalesforceに登録する

Salesforceから外部サービスを利用する場合、「指定ログイン情報」にエンドポイントや認証情報を持っておくのが定石です。
参考: Salesforce で外部サービスを使うときには「指定ログイン情報」を使いましょう

これをやっておくことで、Apexだけでなくフローでも認証まわり等をすっとばして、特定の外部サービスのAPIを叩くところだけの実装に注力できます。

外部ログイン情報を作成

設定 -> セキュリティ -> 指定ログイン情報 -> 外部ログイン情報タブ から 新規

image

適当に名前をつける。
認証はカスタムで。
(´-`).。oO(基本認証ってなんだと思ったらBasicか。。。)

image

プリンシパルを作成

ここでのプリンシパル ≒ 外部サービスのユーザ の意味合いっぽい
あとで環境変数的なので呼び出せるっぽいので、APIキーはここでもっておいてみる

image

カスタムヘッダーを設定

Gemini APIはRestだとヘッダじゃなくてURLパラメータとして持っちゃうみたいなので今回は不要そう
Authorizationとか書く必要あればここに
プリンシパルの情報呼び出しもできる

image

指定ログイン情報を作成

ここまでやったら 設定 -> セキュリティ -> 指定ログイン情報 まで戻って、指定ログイン情報タブで新規

image

エンドポイントURLを設定
※ここでさっきのプリンシパルの情報を使えると思ってたんだけど、数式指定してもうまいこといかないので泣く泣くkeyをベタ書きすることにした・・・ぐぅ。。。いったんこの記事の本質じゃないので・・・・。

image

ここまでで外部サービス呼び出しに必要な情報登録はおしまい

権限付与

外部ログイン情報で指定したプリンシパル(≒ユーザ≒APIキー)を使用できるSalesforceユーザを指定する必要がある

だいたいのdocで権限セットで付与してね!って書いてあるけど、プロファイル単位でも付与可能
今回はシス管全体につけちゃえ

image

フローでHTTP CallOutを作成する

やっとこフローにたどり着いた。コールアウト書きます。
今回はどっかのレコードページに配置してボタンぽちっとする想定で、画面フローで。

image

適当な初期画面

image

つぎにアクションノードを設置して、HTTPコールアウトを作成リンクをクリック

image

さっき作った指定ログイン情報を指定

image

Request bodyをサンプルからとってきて突っ込むと、構造解析して入力用の変数としてフロー上に用意してくれる

image

次は応答サンプル
自分で用意するか、実際にAPI Callしてみてその応答を解析するか選べる

image

スキーマ用に接続を選択して次へ進むと、入力済みのRequest Bodyサンプルを用いて実際にコールできる
応答が正しく返ってくれば、解析してこちらも出力用変数としてフロー上に用意される

image

ここまで終わったらフローに戻ってくるので、bodyに指定するリソースを作成する
どうやらさっきの手順でRequest BodyのスキーマをApexコードとして出力してくれているようで、自動でデータ型とクラスが入力済みなので、API参照名(= 変数名)を決めるだけでOK
(´-`).。oO(癖がすごい)

image

と思いきや、階層が深いやつは階層ぶん変数の用意が必要だった
今回のRequest Bodyは以下の通り

{
  "contents": [{
    "parts":[{"text": "Explain how AI works"}]
    }]
}

ということで階層ごとにそれぞれ準備

image

ここまで終わったら、画面から受け取った値を使ってbodyを組み立てる

image

さいごに結果を出力する画面を用意しておしまい

image

デバッグ!!

フローにはデバッグ機能がついているので、とりあえず動かしてみることができる

image

質問を入力して

image

えいや!!!

image

・・・はい、Responseの分解と整形は力尽きました

おまけ: いいかんじに配置するよ!

Responseの整形まわりと一緒に後日加筆予定

さいごに

フローの書き方自体がだいぶクセ強めで気になるポイントは多いものの、今回紹介したHTTPコールアウト以外にも今までApexでしか実現できなかった機能がどんどん拡充されており結構便利なツールになってきました。

特に簡単な画面を準備してなんかもぞもぞしたい・・・ってときには、ビルダー内でビジネスロジックまで含めてざっと書けちゃう素早さと手軽さはメリットになりうるかなと思うので、ぜひ毛嫌いせず触ってあげてみてください。

余談

簡単にコールできるぞ!ってとこを見せたかったのに、コールするAPI選定で今まで使ったことないGeminiにしちゃったせいで全然関係ないとこでハイパー詰まりました。
まぁ学びがあり面白かったのでワース。

Discussion