【Salesforceの商談IDと商談名をRPAで楽々取得！】BizRobo!でSalesforceのREST APIを呼びだす方法

# 本記事でできること
本記事では、SalesforceのREST APIを利用して「昨日登録された商談から商談IDと商談名を取得してタイプファイルに出力する」ロボットを作成します。
APIを用いて開発をすることでSalesforceと別システムの自動化が実現しやすくなると思います。
また、SalesforceのAPIの使い方やBizRobo!でAPIを利用するための設定方法について理解できます。


# 背景
BizRobo!はステップの編集だけで簡単にデジタルレイバー(ロボット)を作成できるので非エンジニアの方にもなじみやすいのが特徴だと思います。
ただ、画面操作だけの開発だとクラウドサービスのアップデート等でUIが変更になるとロボットが止まってしまって改修に時間がかかってしまう、、、というケースも少なくないと思います。
そういった状況を解決するためにAPIを利用するという方法があります。
ただ、非エンジニアの方の中には「APIって高度なイメージがあって難しそう」「ステップの操作でも実行できるから充分」と思う方もいらっしゃると思います。(かくゆう私もそう思っていた時期がありました)
そのような方に向けて弊社で利用しているAPIとその使い方について紹介したいと思います。

:::note warn
本記事はサードパーティーのツールを利用するため、動作を保証するものではございません。
APIを利用するための参考としてお考え下さい。
:::

:::note
BizRobo!に搭載されているコネクター機能を用いてSalesforceを操作することも可能です。
コネクターを使う場合は[こちら](https://robot-hub.bizrobo.com/products/view/5157746f4e476331526c686d57467059626b46476346565a63314a355258526a4e4551724e327044617a41785657394e5333633950513d3d)を参照ください。
:::


# 事前準備
### Salesforceの設定
Salesforceの認証を設定してください
* ユーザのAPI有効化
* OAuth設定の有効化

認証の設定が終わったらプロパティを用意します。
今回のロボットでは以下の値を利用します。

| プロパティ | ラベル |
|:-----------|:-----------|
| instance_name | 組織のインスタンス |
| username | ユーザ名 |
| passsword | パスワード |
| client_id | コンシューマ鍵 |
| client_secret | コンシューマの秘密 |

### 利用バージョン
本記事で利用する各システムの情報は下記になります。
| 対象システム | 利用バージョン |
|:-----------|:-----------|
| BizRobo! | 11.3.0.2 |
|Salesforce REST API | 58.0 |

# ロボットの作成手順
以下のステップにて実現します。
左から12個のステップごとに説明をしていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/416fe74c-a700-453a-fbd2-f605c235762b.png)

## ①パスワード取得（Lookup Password）
ロボットにパスワードを持たせるのはセキュリティ的によくないのでMCのパスワードストアを利用します。
流れとしては以下になります。
A：ステップを用意する
B：MCのパスワードストアにパスワードを設定する
C：アクセストークンを取得する
D：MCのパスワードストアにアクセストークンを設定する

### A:ステップを用意
ステップ選択: その他 > パスワード取得

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/0919ad81-0095-d147-901d-3b919af47f31.png)

パスワード取得ステップ設定
1. ユーザー名: Salesforceのユーザ名（_username_）
1. ターゲットシステム: 任意の値
1. 変数: パスワード型の変数を設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/b12a7c3f-acfb-1556-4d83-6c46763552f0.png)

### B:MCのパスワードストア設定(パスワード)
1. MCログイン
1. リポジトリ > パスワードストア > パスワード ストア エントリを作成を選択
1. ユーザー名: DSと同じユーザー名の値を入力
1. ターゲットシステム: DSと同じターゲットシステムの値を入力
1. パスワード: Salesforceのパスワード（_passsword_）
1. OKボタンクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/a9e1a93d-d5e9-68c3-a518-6588450e22fa.png)

### C:アクセストークン取得
1. DSに戻る
1. ヘルプ > 製品について
  
<img width="65%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/d3d617ea-8a0c-3461-a92f-cb5a531d71d9.png">

Design Studio アクセス トークン をコピー

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/c5e3bccb-ddeb-7853-7d90-1e297f5b1e2a.png">

### D:MCのパスワードストア設定(アクセス)
1. MCログイン
1. リポジトリ > パスワードストア > パスワード アクセス > パスワード アクセス エントリを作成を選択
1. プロジェクト: 対象プロジェクト選択
1. パスワード アクセス トークン: 先ほどコピーしたDesign Studio アクセス トークンを貼り付け
1. 説明: パスワードについての説明を入力
1. パスワード エントリ: ユーザー名@ターゲットシステムを選択
1. OKボタンクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/5b16c1e4-cdc6-8ed3-724b-28ea1959b79b.png)

以上で設定完了です。
変数にパスワードが格納されていることを確認してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/6a11a5e1-ea53-7c4c-1f74-753cbf0fc200.png)

## ②アクセストークン生成（OAth）
アクセストークンを生成するステップを作成します。
流れとしては以下になります。
A：ステップを用意する
B：ステップの設定をする

### A:ステップを用意
ステップ選択: Web サービス呼出 > REST Web サービス呼出

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/184fcc87-af23-75c6-c9c3-1feaca1de36f.png)

第３者が見てもわかりやすいようにコメントを記入しておくと良いでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/fa513f70-e3d8-0bac-0dee-7fb2b6dcd9b4.png)

### B:ステップの設定
1. URL: REST APIのエンドポイント
    * https://[Salesforceの組織のインスタンス（_instance_name_）]/services/oauth2/token
1. リクエスト: REST APIの操作方法
    * POST
1. パラメータで指定
1. パラメータ: REST APIに送信する追加情報
    * grant_type: password(固定値)
    * username: Salesforceのユーザ名（_username_）
    * password: password(変数)
    * client_id: Salesforceのコンシューマ鍵（_client_id_）
    * client_secret: Salesforceのコンシューマの秘密（_client_secret_）
1. エンコード:Form-urlencoded
1. 出力値:ブラウザにロード
1. 送信する追加ヘッダー: REST APIに送信する付加情報
    * Content-Type:application/x-www-form-urlencoded

:::note
SalesforceのOauthの詳細については[開発者ガイド](https://developer.salesforce.com/docs/atlas.ja-jp.chatterapi.meta/chatterapi/quickstart_connecting.htm)をご確認ください。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/e0905ddd-a058-65e0-9990-a2b1d252bba3.png)

## ③レスポンスを読み取り専用で開く（View as JSON）
②で取得した情報をJSON形式で読み取り専用で開きます。

ステップ挿入: アクションを選択 > 開く（読み取り専用）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/ab7493eb-1dab-9bbd-e3d7-cf6e74c0f2ac.png)

## ④アクセストークン取得（Extract Access Token）
③で表示されたJSONからアクセストークンを取得します。

access_tokenを選択して変数に抽出する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/559301a7-56dd-582f-ee97-2a3b57ce751d.png)

変数にアクセストークンが格納されていることを確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/c82a122d-fe72-c3b8-5ab6-531038dd6ac4.png)

## ⑤昨日登録された商談を取得（query）
SOQLクエリを設定してSalesforceから情報を取得します。

1. ステップ選択: Web サービス呼出 > REST Web サービス呼出
1. ステップ名変更: Call REST Web Serviceからqueryへ変更
1. URL: https://[Salesforceの組織のインスタンス（_instance_name_）]/services/data/v58.0/query
1. リクエスト: GET
1. パラメータ: SOQL クエリ
    * q: SELECT Id,Name FROM Opportunity WHERE CreatedDate=YESTERDAY
1. 出力値:ブラウザにロード
1. 送信する追加ヘッダー
    * エクスプレッションを選択して以下を設定
    * "Authorization:Bearer "+access_token

:::note
SOQLクエリの詳細については[Salesforceの開発者ガイド](https://developer.salesforce.com/docs/atlas.ja-jp.api_rest.meta/api_rest/resources_query.htm)をご確認ください。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/71259860-c439-aa96-4223-4c6386753c97.png)

## ⑥レスポンスを読み取り専用で開く（View as JSON）
⑤で取得したデータをJSON形式で出力します。

ステップ挿入: アクションを選択 > 開く（読み取り専用）

## ⑦件数取得（Extract Count）
⑥で出力されたJSONから検索結果に該当する件数を取得します。

totalSizeを選択して変数に抽出
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/966a3495-8571-8d5a-cfd6-f99a13f34091.png)

## ⑧商談があるかどうか判定
該当データが0件の場合は処理が終了するため条件分岐を設定します。

ステップ選択: テスト > 変数判定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/778db4c6-51a4-59bd-5c5d-cdc29a565df4.png)

データが0件の場合、後続処理を行わない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/635573d7-5ede-f18b-c557-1060c56b8750.png)

0件はエラーで無いのでエラー処理のチェックを外す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/4deca4a3-53cb-9bcd-53e9-b538641dc08c.png)

:::note
Tips
本記事ではAPIの処理を優先する為エラーハンドリングを実施していませんが、検索結果0件の場合にログの出力を設定しておくと運用しやすくなります。
:::
ステップ名変更: Test Variablesから商談チェックへ変更

## ⑨レスポンスJSONをループ（For Each 商談）
出力された商談のデータを取得します。複数のデータが存在する可能性があるためループ処理を実装します。

ステップ挿入
1. recordsを選択(JSON)
1. ループ > アイテム

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/b207c6f7-52cf-1bd4-c40b-532ed73c1b6f.png">

ステップ名変更: For Each ItemからFor Each 商談へ変更

次のステップで必要となるタイプファイルを用意します。
Id,Nameを格納するタイプファイル作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/5d755845-28be-8fa4-911e-d1354bb45a50.png)


## ⑩商談ID抽出（Extract Id）
ループ処理が行われる際にidの情報を抽出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/778cad82-57d2-3f04-aff1-9556540ffc0a.png)
囲われた枠の左の+アイコンをクリックする
<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/7c73a12b-7357-f269-3a48-b02c9c8a34a0.png">
上記で作成したタイプファイルに抽出
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/915613f7-5dfd-74b9-97c6-2d6112397852.png)

## ⑪商談名抽出（Extract Name）
⑩の手順と同様に商談名を抽出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/50dcebf1-3d21-9774-49c4-2392e4f7b959.png)

## ⑫結果確認（Return Value）
正常に動作しているか結果を確認します。

ステップ選択: 値返却
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/205e0eaf-bac2-0e7d-53c6-9b1dcd0fea55.png)

以上でロボットの作成は完了になります。

# まとめ
今回はSalesforceのAPIを利用して商談データの取得を行ってみました。
SalesforceのAPIを利用するとロボットの構築の幅が広がり、メンテナンス性も向上できると思います。
APIを利用したロボットの開発のための一助となれば幸いです。

:::note
RPAテクノロジーズではSalesforceの操作を容易にする為にコネクターを開発しております。
APIで構築するよりも簡単に開発ができるツールになっているのでぜひご利用ください。
リンクは[こちら](https://robot-hub.bizrobo.com/products/view/5157746f4e476331526c686d57467059626b46476346565a63314a355258526a4e4551724e327044617a41785657394e5333633950513d3d)
:::