初心者でも分かる!SalesforceのAPIを外部アプリと連携して使用する方法
ノーコードでアプリを開発するとき、Salesforceからデータを取得したり、データを更新したい時があります。
Zapier等のiPaaSやコネクタを仲介させるのが最も簡単な方法ですが、課金が発生してしまうほか、単純に「直接データ連携させる仕組みがわからないのが、なんとなく気持ち悪い」ということもあるでしょう。
しかし、Salesforceのヘルプを読んでも、非エンジニアにとっては難しいワードが登場し、もれなく挫折します。
そこで、今回は「SalesforceのAPIと外部アプリをノーコードで連携させる方法」をご紹介したいと思います。
SalesforceのAPIを使ってデータを取得する
SalesforceなどのCRMや、クラウドサービスの多くは、APIという外部アプリとデータをやり取りする仕組みが用意されています。
SalesforceにもこのAPIが備わっており、APIを利用することで、ノーコードツールからSalesforceのデータを取得したり、逆にSalesforceにデータを作成したり、データの更新することができます。
SalesforceのAPIを利用する際に、特に気をつけたいのがセキュリティです。
例えば、APIの中でも、「郵便番号を送信すると住所を返す」ようなオープンAPIであれば、セキュリティを気にする必要はありません。
しかし、Salesforceには、個人情報や機密データが蓄積されており、万が一、自分の会社のSalesforceのAPIに誰でも自由にアクセスできてしまったら、大変なことになります。
そのため、SalesforceのAPIを安全に利用するために、「OAuth2.0認証」と呼ばれる方式に沿ってデータの取得を行う必要があります。
OAuth2.0認証の流れ
OAuthのAuthは、Authorization(権限の付与)を意味します。
そして、OAuth認証とは、他のアプリケーションやサービスに対して、自分のデータへのアクセス権限を付与し、操作を許可するための規格です。
例えば、ZapierなどのiPaaSでSalesforceを初めて連携する時に、IDとパスワードが求められ、「(あなた=管理者の代わりに)以下の処理を許可してよいですか?」と聞かれると思います。
そして、一度許可をすれば、その後はIDやパスワードを入力しなくても、iPaaSは管理者と同等の権限を持って、さまざまなデータの取得や操作を自動的に行なってくれます。
その裏側では、OAuth認証が行われています。
iPaaS側では、最初にユーザーがIDとパスワードを入力した際に、データにアクセスする許可証となる「アクセストークン(access_token)」と呼ばれる秘密の文字列をSalesforceから受け取っており、それを利用してデータにアクセスしています。
そして、OAuth認証の中でも、このようにアクセストークンを要求・付与する業界標準の規格を「OAuth 2.0」といいます。
Salesforceにおいても、APIにデータ取得をリクエストする時に、「アクセストークン」を含めることで、Salesforceにデータを取得する資格があると認められ、データへアクセスができます。
※OAuthとアクセストークンについては、こちらの記事が分かりやすいです。
Salesforceでデータを取得するまでの流れ
Salesforceのデータへのアクセスするには、アクセストークンが必要がある、ということがわかりました。
しかし、このアクセストークンは、セキュリティ上、有効期限が設定されており、一定時間経つと使用不可になります。
そこで、「リフレッシュトークン(refresh_token)」と呼ばれる別のトークンをSalesforceに送信すると、新しいアクセストークンを発行してもらうことができます。
そのため、SalesforceにAPIでデータにアクセスする流れは、最終的には、以下のようになります。
1.Salesforceからリフレッシュトークンを取得する
2.リフレッシュトークンを使ってアクセストークンを取得する
3.アクセストークンを使ってSalesforceのAPIにアクセスする
順番に進めていきましょう。
1.Salesforceのリフレッシュトークンを取得する
まずは、APIを利用する許可証であるアクセストークンを継続的に発行してもらうために、リフレッシュトークンを取得します。
手順が少し複雑ですが、一度入手すれば、その後は基本的に再発行する必要はありません。
以下の手順に従って、リフレッシュトークンの取得を行います。
(こちらの英語記事を参考にしました)
1.お使いのSalesforceCRMに管理者としてログインします。
2.ライトニングの場合、右上の歯車のボタンから設定ページに遷移します。
3.設定ページのクイック検索で、「アプリケーションマネージャー」と入力して、ページに移動します。
4.「アプリケーションマネージャ」ページのの右上隅にある「新規接続アプリケーション」をクリックします。
5.「新規接続アプリケーション」ページで、
・接続アプリ名
・API 名
・取引先責任者のメールアドレス
を入力します(以下は例)。
6.すぐ下の「API (OAuth設定の有効化)」セクションで、「OAuth設定の有効化」にチェックを入れます。
7.「コールバック URL」フィールドには、
https://login.salesforce.com/
と入力します。
8.「選択したOAuth 範囲」フィールドでは、
・APIを利用してユーザーデータを管理 (api)
・いつでも要求を実行 (refresh_token、offline_access)
・Web ブラウザを使用してユーザデータを管理 (web)
の3つ選択し、 追加ボタンをクリックします。
保存ボタンをクリックして、新しい接続アプリケーションを保存します。
9.アプリケーションマネージャーの一覧の中から、自分が作成したアプリ名を見つけて、▼メニューから「Manage」を選択します。
10.開いたページで、「ポリシーを編集」ボタンをクリックします。
OAuth ポリシーの「許可されているユーザ」を、「すべてのユーザーは自己承認可能」を選択し、保存ボタンを押します。
11.アプリケーションマネージャーのページに戻り、一覧から自分が作成したアプリを見つけて、▼メニューから「参照」を選択します。
API(OAuth設定の有効化)の「コンシューマの詳細を管理」ボタンをクリックします。
ログインや2段階認証を行った後、
「コンシューマ鍵」
「コンシューマの秘密」
が表示されるので、これをメモし、大切に保管します。
12.Chromeなど、自分が使っているブラウザで、以下のURLを入力します。
https://<インスタンス>.salesforce.com/services/oauth2/authorize?response_type=code&client_id=<コンシューマ鍵>&redirect_uri=https://login.salesforce.com/
<コンシューマ鍵>は、11.で取得したもので置き換えます。
<インスタンス>は、Salesforceの設定→「組織情報」の中に、「インスタンス」という項目がありますので、これを入力します(AP0 など)。
このURLをブラウザで開くと、URLがリダイレクトして変化します。
このcode=xxxの部分をメモして、大切に保管しておきます。
https://login.salesforce.com/?code=xxx
次に、ご自身が利用しているAPIのテストツールを開きます。
APIのテストツールはPOSTMANなどが有名ですが、今回はGoogleの拡張機能「API Tester」を利用します。
API TesterのURL欄には、以下を入力します。
https://<インスタンス>.salesforce.com/services/oauth2/token?code=<先ほど取得したCODE>&grant_type=authorization_code&client_id=<コンシューマ鍵>&client_secret=<コンシューマ秘密鍵>&redirect_uri=https://login.salesforce.com/
<>部分は、それぞれメモに控えておいた情報を入れ込みます。
そして、METHODで「POST」を選択し、「Send」をクリックします。
すると、「Response」に、"refresh_token":"xxxx"とリフレッシュトークンが表示されるので、これをメモして大切に保管します。
※もし、「この組織では REST API が有効になっていません」というエラーが発生した場合は、salesforceの設定→管理→ユーザ→プロファイルを選択し、更新するプロファイルで「編集」をクリックし、システム管理者権限の「APIの有効化」にチェックを入れて、保存ボタンを押します。
【トークンの取り扱いに注意!】
アクセストークンやリフレッシュトークンは、Salesforceデータへのアクセス権限そのものですので、大切に保管します。
また、Salesforce側でも、アプリ側に操作を許可する範囲を適切に設定し、大切な情報の漏洩リスクを減らします。
そして、クライアント側の処理には、決してこのリフレッシュトークンやアクセストークンを貼り付けて利用しないでください。
ブラウザの開発者ツールでトークンが丸見えになったり、アプリを解析されてトークンが漏洩してしまう可能性があります。
OAuth認証は、ユーザーの目に触れないサーバー側で行います。
ノーコードであれば、Bubbleの場合は、Backend workflowを使ったり、あるいは、バックエンドノーコードツール(backendlessやXano)上でAPIを実行し、OAuth認証やデータの取得を行います。
そして、バックエンドノーコードツールのAPIを介して、フロントエンドのノーコードツールとデータのやり取りを行うことで、ユーザーからはトークンを秘匿することができます。
2.リフレッシュトークンを利用して、アクセストークンを取得する
次に、リフレッシュトークンを使って、アクセストークンを取得します。
以降の操作は、実際にはバックエンドノーコードツール上で行うことになりますが、今回はデモとして、API Testerで実施してみます。
先ほどと同じ要領で、<>内の情報は差し替え、URLを入力します。
https://<インスタンス>.salesforce.com/services/oauth2/token?grant_type=refresh_token&client_id=<クライアント鍵>&refresh_token=<リフレッシュトークン>
「POST」を選択して、Sendをクリックします。
すると、RESPONSEに「"access_token":"xxx"」が表示されますので、xxx部分をメモしておきます。
3.アクセストークンを使って、Salesforceからデータを取得する
いよいよ、SalesforceのデータにAPIでアクセスします。
データを取得するには、API Testerで以下の通り設定を行います。
・METHOD:GET
・URL:
https://<自分のSalesforceのドメイン>.my.salesforce.com/services/data/v55.0/query
※「v55.0」の箇所は、必要に応じて任意のAPIのバージョンを入力します。
・QUERY PARAMETERS:
URLの末尾に付与する「?xxx=yyy」をクエリパラメータと呼びます。
xxxはname、yyyはvalueと呼びます。
今回、nameは「q」と入力し、valueには、SOQL(Salesforce版のSQL)のクエリを入力します。
※SOQLについては、こちらの記事が参考になります。
今回は試しに、Accountのオブジェクトから、100件分のNameを取得するクエリを入力します。
valueには、以下のように入力します。
※半角スペースは、ツールによっては「+」「%20」に置き換えが必要です。
SELECT Name from Account LIMIT 100
URLとQUERY PARAMETERSは合体され、最終的に以下のようになります。
https://<自分のSalesforceのドメイン>.my.salesforce.com/services/data/v55.0/query?q=SELECT Name from Account LIMIT 100
・HEADERS
Salesforceのデータにアクセスするには、ヘッダーに認証情報であるアクセストークンを含めます。
ここには、
・Authorization
・Bearer[半角スペース]<取得したアクセストークン>
と入力します。
この状態で「Send」をクリックすると、以下のように、Accountのオブジェクトから100件分のNameを取得することができました。
SalesforceのAPI連携をどんどん活用しよう!
無事にSalesforceからデータを取得することができたでしょうか?
今回は、SalesforceとのAPI接続の方法について、大まかな流れを学び、API Testerでデモンストレーションを行いました。
APIやOAuth認証の仕組みについて、説明だけ聞いてもピンときませんが、このように実際に手を動かしてみることで、体感できたことでしょう。
実務上では、バックエンドのノーコードツール上でこのSalesforceのAPIを実行することになりますが、それはまた後で記事にしたいと思います。
お読みいただき、ありがとうございました!