[Node-RED]SalesForceに接続してデータの読み書きを行おう

【前提】

Salesforceアカウントを持っている

SalesforceのAPI利用が可能(今回はトライアルで試してみます。)

Node-REDがインストールされている

Node-REDはRaspberry PiでもWindowsでも構いません。

1. Salesforce で「接続アプリケーション」を作成(API連携設定)

  1. Salesforceへ管理者ユーザーでログイン
  2. 右上の歯車アイコン > [設定] を開く
  3. [アプリケーション] > [アプリケーションマネージャ]
  4. 「新規接続アプリケーション」を作成
    • 名前:Node_RED(任意)
    • API有効化(OAuth設定)
      • コールバックURL: http://localhost:1880/callback(Node-REDで使うURL。仮でOK)
      • OAuth範囲: full または api を選択
  5. Consumer KeyConsumer Secret を控える
  6. セキリュティトークンの確認
    • Salesforceでは、APIアクセスや外部アプリ(Node-RED、Outlookなど)からの接続時に、
      通常のログインパスワードだけではログインできません
      追加の認証要素として「セキュリティトークン」という文字列が発行されます。

      【使い方】
      1. 通常のSalesforceログイン(ブラウザ等)
      ユーザーIDとパスワードだけでOK
      2. 外部アプリからSalesforce APIへ接続する場合
      パスワード」の後ろにセキュリティトークンを付けて1つのパスワードとして使う必要があります。

      あなたのパスワードが Password123
      セキュリティトークンが a1b2c3d4e5f6g7h8
      この場合、Node-REDやAPI設定画面では
      Password123a1b2c3d4e5f6g7h8
      連結したものを「パスワード」欄に入力します。

      【セキュリティトークンの発行・確認方法】
      Salesforceにログイン(ブラウザで)
      右上の自分のアイコン→「設定」
      「私の個人情報」→「私のセキュリティトークンのリセット」
      メールでトークンが送信される
      ※一度リセットすると、古いトークンは使えなくなります
  7. SalesforceではOAuth「ユーザー名+パスワード」認証フローを有効化
    • ログイン履歴を確認して、ログイン履歴の「状態」に「ユーザー名+パスワードのフローが無効になっています」と表示されていれば無効になっています。
    • 【この意味】
      SalesforceではOAuth「ユーザー名+パスワード」認証フローは、組織設定で無効化されている場合があります。
      つまり、現在の認証フロー(Resource Owner Password Credentials Grant)が許可されていないため、認証自体がブロックされています。

    • 【よくある背景】
      Salesforceはセキュリティ強化のため、2022年以降、
      「ユーザー名+パスワード」OAuthフロー(Resource Owner Password Credentials Grant)をデフォルトで無効化しています。

    • 【対策方法】
      【A案】管理者に「認証フロー有効化」を依頼
      Salesforce管理者で行います 上の検索欄に
      「OAuth設定」>「ユーザー名+パスワード認証フロー」を有効化してください。
      [設定] > [アプリケーション] > [アプリケーションマネージャ] > [接続アプリ](Node-RED連携用)
      > 「ポリシー」タブの「OAuth許可フロー」→「ユーザー名+パスワードフローを許可」
      これで「ユーザー名+パスワード」認証が許可されます。

2. Node-REDにSalesforceノードをインストール

Node-REDの「パレットの管理」から

node-red-contrib-salesforce

を検索してインストール

1. soql ノード

役割: Salesforceの「SOQL(Salesforce Object Query Language)」でレコードを検索・取得するノード。

使い方:

  • ノード設定でSOQLクエリを指定
    例:SELECT Id, Name FROM Contact LIMIT 2
  • または、msg.queryにクエリ文字列をセットして渡す

出力: 検索結果(配列)をmsg.payload.recordsに格納


2. sosl ノード

役割: Salesforceの「SOSL(Salesforce Object Search Language)」でキーワードによる横断検索を実行するノード。

使い方:

  • ノード設定 or msg.queryでSOSLクエリを指定
    例:FIND {united*} IN ALL FIELDS RETURNING Account (Id, Name), Contact (Id, Name)

出力: 結果配列をmsg.payload.recordsに格納


3. obm ノード

役割: Salesforceの「Outbound Message」(外部通知・ワークフローでSalesforceから送信されるXMLメッセージ)をJSONに変換するノード。

使い方:

  • Node-RED側のhttp inノード(POSTエンドポイント)に続けて設置
  • Salesforce側でOutbound MessageのエンドポイントURLとしてNode-REDのURLを設定
  • SalesforceからPOSTされたXMLデータをJSONに変換してmsg.payloadに格納

4. chatter ノード

役割: Salesforceの「Chatter(社内SNS/フィード)」に投稿を行うノード。

使い方:

  • msg.payloadに投稿したいテキストやタイトル、親オブジェクトIDなどを指定
  • 例:msg.payload = "Hello World"; msg.title = "タイトル"; msg.ParentId = "取引先ID";

5. dml ノード

(Data Manipulation Language)

役割: Salesforceのデータ操作(Insert/Update/Upsert/Delete)を実行するノード。

使い方:

  • ノード設定、またはmsg.action(insert, update, upsert, delete)とmsg.object(オブジェクト名)で動作指定
  • 操作するデータはmsg.payloadにセット

:

  • Insert
    msg.action = "insert"
    msg.object = "Contact"
    msg.payload = { firstname: "Nikola", lastname: "Tesla" }
  • Update
    msg.action = "update"
    msg.object = "Contact"
    msg.payload = { id: "00337000002uFbW", firstname: "Nikola", lastname: "Tesla" }
  • Delete
    msg.action = "delete"
    msg.object = "Contact"
    msg.payload = { id: "00337000002uwUVAAY" }

6. streaming ノード

役割: Salesforceの「ストリーミングAPI」や「PushTopic」「Platform Event」などにサブスクライブし、リアルタイムでレコード変更等のイベントをNode-REDで受信するノード。

使い方:

  • サブスクライブ先をmsg.topicで指定(例: /topic/MyPushTopic
  • イベントを受信するとmsg.payloadに内容が入る

参考:基本フローの組み方

たとえば、「新しいContactを登録する」場合は
[ inject ] → [ function ] → [ dmlノード ]
のようにして、functionノードで下記のようにセットします。

msg.action = "insert";
msg.object = "Contact";
msg.payload = {
  firstname: "Nikola",
  lastname: "Tesla"
};
return msg;

そして、dmlノードに渡します。

ノードまとめ

ノード機能・用途設定・msgで指定する主な内容
soqlSOQL検索でレコード取得msg.query
soslSOSL横断検索でレコード取得msg.query
dmlInsert/Update/Delete/Upsert等レコード操作msg.action, msg.object, msg.payload
streamingストリーミングAPIによるイベント受信msg.topic
obmOutbound MessageのXMLをJSONに変換http inノード直後に配置
chatterChatterフィードに投稿msg.payload, msg.title, msg.ParentId

3. Salesforceノードをフローに追加・認証情報を設定

  1. Node-REDエディタで「Salesforce」ノード(例えば「Salesforce In」「Salesforce Out」など)をフローにドラッグ
  2. ノードをダブルクリックして「新しいSalesforce認証」設定
    • Consumer Key
    • Consumer Secret
    • Username(SalesforceのログインID)
    • Password(パスワード+セキュリティトークン)
    • Login URL(通常は https://login.salesforce.com
    ※セキュリティトークンはSalesforceから発行してメールで届きます
    (Salesforce「設定」→「マイパーソナル情報」→「セキュリティトークンのリセット」)

それぞれのノードについて簡単に用途とできることを解説します。
(node-red-contrib-salesforce に含まれる主なノードです)


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする