0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Salesforce上のWebhookはどう作成するか。

Posted at

Webhookについて

Webhookとは何でしょうか。

※既にWebhookご存知の方は、SalesforceでのWebhook作成節をご覧ください。

まずはRedhatの記事をお読みになってください。

クライアントはサーバーにある最新情報を取得することに例えます。

サーバーの最新情報を得るため、クライアント側は、サーバー側へHTTPリクエスト発信し続けて、最新状態を主動的にプール(ポーリングとも言います)します。しかし、最新情報を得るために、発信し続けなければならく、通信資源が消耗され、効率はよくありません。

一方、もしサーバー側で、最新情報があったら、クライアント側へ発信することが出来たら、情報更新されるたびに、サーバーから一回の発信で済みます。

一回の送受信で最新情報を得られようにすることは、サーバー側の発信は何等かのトリガーでロジックを組めばいいが、クライアント側は発信を受け取るための仕掛けが必要です。
このクライアント仕掛けはWebhookのことです。

上記の例は、クライアント/サーバーのS/Cパータンを例にしています。
API同士でWebhook利用していることが多くあります。

SalesforceのWebhookは何が出来るでしょうか。

Salesforceは、外部ERPを皮切り、外部WMSや会計システムなど外部サービスといった外部システム連携することが多々あります。外部システムで提供したPackage(パッケージ)、APIなどを利用して、簡易に連携出来ますが、それ以外の外部システムと送受信することは、カスタム開発が必要になります。
WebhookはSalesforce上の受信触点となり、外部システムからの情報を取得します。

SalesforceでのWebhook作成

制作過程

・新規Restful API作成
 受信するためのAPEXを実装

・新規Site作成
 外部からアクセス可能にする

・SiteにRestful APIを関連する

新規Restful API作成

通常のRestfulAPIの作成と同じです。
例にしているのが「Webhook_Tracking」クラスで、「tracking」というAPIです。

@RestResource(urlMapping = '/tracking/*')
global with sharing class Webhook_Tracking {
    @HttpPost
    global static ReturnMessage doPost(WebhookPaylod payload){
        return new ReturnMessage();
    }

    @HttpGet
    global static ReturnMessage doGet(){
        return new ReturnMessage();
    }
    
    global class WebhookPaylod{
        global String event_id;
        global String event_type;
        global String tracking_number;
        global String tracking_update_id;
        global String date_added;
        global String tracking_status;
    }


    global class ReturnMessage{
        global String msg{ get; set;}
        global Integer code {get; set;}
        global  ReturnMessage(){
            msg = 'Calling successed. But Nothing return';
            code = 401;
        }
    }
}

新規Site作成

・Setup→UserInteface→Sites and Domains→Sitesへアクセスします。
image.png

・新規作成
image.png

・必須項目記入して、保存してください。
 Active Site Home Page項目は、任意のページでいいです。
 その他項目は、そのままでいいです。
image.png

・新規作成したSiteにアクセス
 例にしたのは「webhook」というSiteです。
image.png

SiteにRestful APIを関連する

・SiteのPublic Acess Settingsをクリックして、Restful API のApexにアクセス権限を付与
image.png

image.png

・SiteのActiveにすることを忘れなく
image.png

・疎通テスト
{Domain Name}/services/apexrest/{urlMapping}/へアクセスして、疎通確認。
 APEXクラスのurlMappingは「tracking」なので、ここは{Domain Name}/services/apexrest/tracking/へアクセス
image.png
結果は想定通りでした! Webhook成功

セキュリティについて

SalesforceのSiteはユーザーの認証不要で、アクセス可能のため、セキュリティ面に十分ご注意ください。
・SitesのPublic Acess Settingsは、いつも最小限度のアクセス権限付与すること
・リクエスト出来るIPアドレスを制限すること
・リクエストの内容に認証エレメントをいれて、リクエストを認証すること
などの措置で、Salesforceシステムの安全性を保ちましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?