cURL 명령과 쉘 스크립트에서 Salesforce Chatter REST API를 실행하여 Chatter 메시지 게시

소개



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 버전 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

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 참조의 설명이 올바른 것 같습니다.

subjectId 없이 cURL 실행 시 오류
$ ./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도 실행할 수 있습니다.

이상이 됩니다.

좋은 웹페이지 즐겨찾기