はじめに
Salesforceのチャット機能 「Chatter」 に対して、様々な操作を行えるChatter REST APIというものがあります。
Chatter REST APIはPHPやRubyといったプログラムからだけでなく、cURL(カール)コマンドでも呼び出す事が出来ます。
本記事では、cURLコマンドを使って、SalesforceのChatter REST APIを呼び出し、SalesforceのChatterへメッセージを投稿するコマンドを記します。
なお、cURLコマンドによるSalesforce REST APIの操作については、こちらの記事 をご参照下さい。
実行環境
本記事のcURLを実行している環境は以下の通りです。
OS | マシンの種類 | OSバージョン | カーネルバージョン |
---|---|---|---|
Mac | MacBook PRO (Retina) | macOS Mojave 10.14.1 | Darwin Kernel Version 18.2.0 |
Chatterメッセージ投稿先(Chatter REST API呼び出し先)のSalesforce組織のバージョンは以下の通りです。
バージョン | APIバージョン |
---|---|
Salesforce Winter '19 | Salesforce.com Enterprise Web Services API Version 44.0 |
参考資料
Salesforce社様のChatter REST APIリファレンスを参考にさせて頂きました。ありがとうございました。
Chatter REST API 開発者ガイド(英語版) -> Post a Feed Item
Chatter REST API 開発者ガイド(日本語版) -> ダイレクトメッセージの送信(日本語版)
cURLコマンドでSalesforce REST APIへ接続する為の事前準備
(1) Salesforce側でChatter REST APIを呼び出せるようにする設定
Chatter REST APIを呼び出せるようSalesforce側で「ログイン IP アドレスの制限」設定等をしておく必要があります。設定手順は以下の記事をご参照下さい。
PHP5からSalesforce REST APIを実行する (カスタムオブジェクトへレコードを追加する)
(2) cURLコマンド実行マシンのOpenSSLバージョンを確認する。
以下の記事と同じく、cURLコマンドを実行するマシンには、Chatter REST APIへ接続する為に必要なOpenSSL 1.0.1以上がインストールされている必要があります。詳細は以下記事をご参照下さい。
cURLコマンドでSalesforce REST APIを実行する
cURLコマンドでSalesforce Chatterへダイレクトメッセージを投稿する例
(1) cURLコマンドでChatterへメッセージを投稿するスクリプトを作成します。
以下のようなスクリプトを作成します。
$ vi push_salesforce_chatter_message.sh
#!/bin/sh
export SFDC_HOST="login.salesforce.com"
export SFDC_API_VER="v44.0"
export SFDC_CLIENT_ID="Salesforceの「設定」->「ビルド」->「作成」->「アプリケーション」のChatter REST API接続用アプリケーションの「コンシューマ鍵」(OAuthコンシューマキー文字列)を記載します。"
export SFDC_CLIENT_SECRET="Salesforceの「設定」->「ビルド」->「作成」->「アプリケーション」のChatter REST API接続用アプリケーションの「コンシューマの秘密」(OAuthコンシューマシークレット文字列)を記載します。"
export SFDC_CLIENT_USERNAME="Chatter REST APIを有効化しているSalesforceユーザアカウント名を記載します。"
export SFDC_CLIENT_AUTHENTICATE_PASSWORD="Chatter REST APIを有効化しているSalesforceユーザアカウントのパスワードを記載します。"
## Chatterメッセージ投稿先のSalesforceユーザIDを指定する
SFDC_USER_ID="005**********"
## ChatterグループID等を指定す
## ChatterグループIDはChatterグループURLの以下g=の部分の事( https://ap7.salesforce.com/_ui/core/chatter/groups/GroupProfilePage?g=0F9************ )
SFDC_CHATTER_GROUP_ID="0F9************"
## Chatter REST APIのアクセストークンを取得する
SFDC_AUTH_RESP=`curl -s https://${SFDC_HOST}/services/oauth2/token -d "grant_type=password" -d "client_id=${SFDC_CLIENT_ID}" -d "client_secret=${SFDC_CLIENT_SECRET}" -d "username=$SFDC_CLIENT_USERNAME" -d "password=${SFDC_CLIENT_AUTHENTICATE_PASSWORD}"`=
## 取得したChatter REST APIのアクセストークンをセットする
SFDC_ACCESS_TOKEN=`echo "${SFDC_AUTH_RESP}" | awk 'BEGIN{FS="access_token\":"}{print $2}' | awk 'BEGIN{FS=","}{print $1}' | sed -e 's/\"//g'`
## 取得したChatter REST APIのSalesforceインスタンスURLをセットする
SFDC_INSTANCE_URL=`echo "${SFDC_AUTH_RESP}" | awk 'BEGIN{FS="instance_url\":"}{print $2}' | awk 'BEGIN{FS=","}{print $1}' | sed -e 's/\"//g'`
## Chatterメッセージ投稿本文に付加する文字列
SFDC_CHATTER_POST_DATE=`date '+%Y%m%d_%H%m%S'`
## Chatter REST APIを呼び出して、Chatterへメッセージを投稿する
curl -s -X POST ${SFDC_INSTANCE_URL}/services/data/${SFDC_API_VER}/chatter/feed-elements \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${SFDC_ACCESS_TOKEN}" \
-H "X-PrettyPrint:1" \
-d '{
"body" : {
"messageSegments" : [
{
"type": "Text",
"text": "curlからのテストメッセージ 投稿日時=['${SFDC_CHATTER_POST_DATE}'] "
},
{
"type": "Mention",
"id": "'${SFDC_USER_ID}'"
}
]
},
"feedElementType": "FeedItem",
"subjectId": "'${SFDC_CHATTER_GROUP_ID}'"
}'
作成したシェルスクリプトの構文チェックを行います。以下のように何も表示されなければ、構文上の問題はございません。
$ sh -n push_salesforce_chatter_message.sh
$
作成したシェルスクリプトに実行権限を付与します。
$ chmod 750 push_salesforce_chatter_message.sh
$
(2) 前述で作成したシェルスクリプトを実行し、Chatterへメッセージを投稿します。
以下のようにスクリプトを実行し、Chatterへメッセージを投稿します。
スクリプト実行結果として、Chatter REST APIのレスポンスがずらずらと表示されますが、これでChatterへメッセージが投稿されます。
$ ./push_salesforce_chatter_message.sh
{
"actor" : {
"additionalLabel" : null,
(中略)
},
"body" : {
"isRichText" : false,
"messageSegments" : [ {
"text" : "curlからのテストメッセージ 投稿日時=[20181225_011241] ",
"type" : "Text"
}, {
"accessible" : true,
"name" : "** **",
"record" : {
(中略)
"visibility" : "AllUsers"
}
(3) Salesforceにログインして、Chatterにメッセージが届いている事を確認します。
Salesforceにログインして、cURLから投稿したメッセージがChatterに届いている事を確認します。
補足事項
Salesforce Chatter REST APIリファレンス(日本語版)では、Chatterメッセージ投稿API( https://******.salesforce.com/services/data/v44.0/chatter/feed-elements
)のパラメータに「subjectId」の記載ないのですが、英語版APIリファレンスには「subjectId」の記載があります。
実際にcURLで「subjectId」を付けないでリクエストを投げてみると、「subjectId」がないとエラーになるので、英語版APIリファレンスの記載が正しいようです。
$ ./push_salesforce_chatter_message_badrequest.sh
[ {
"errorCode" : "MISSING_ARGUMENT",
"message" : "Missing required 'subjectId' parameter."
} ]$
$
・正しい方の資料
Chatter REST API 開発者ガイド(英語版) -> Post a Feed Item
・誤りがある方の資料(パラメータの記述が古い?)
Chatter REST API 開発者ガイド(日本語版) -> ダイレクトメッセージの送信(日本語版)
最後に
cURLコマンドにより、Salesforce REST APIだけでなく、Chatter REST APIも実行可能です。
以上になります。