🙌

Spirで商談日程が確定したらSFDCにリードを作成する

2024/10/22に公開

日程調整からSalesforceリード登録まで自動化

メールで何度もやり取りして日程調整するのって、本当に面倒ですよね。
最近はSpirやTimeRexといった便利なツールが登場し、弊社でもSpirを使って日程調整の自動化に成功しています。

実は、Spirでは日程調整と同時に顧客情報を入力してもらえるフォームを自由に設定できるんです。
でも、その情報を手動でリードや商談に登録するなんて、、、
ここで登場するのがSpirのWebhook機能。これを使って、一気に自動化しちゃいましょう。

テクニカルサマリ

Spirから自動で日程調整完了時に自動送信されるWebhookをSalesforceの"サイト"で受け付け、Apexで処理をして、Salesforceのリードとして登録。
これはGoogle SpreadsheetやほかのサイトからのWebhook受信にも応用できます。

今回実現すること

Spirで初回商談が決まったら、フォームに入力された情報を自動でSalesforceのリードに登録します。

もちろんZapierやMakeなどを利用しても、実装は可能ですが、依存性やコスト(と技術的な面白くなさ)からApexで実装しています。

イメージ

①SpirのWebhook専用URLを作成(理由は後述)

  • フォームを割り当て、タイトルに「リード」というワードが含まれていればOKです。
    専用URL作成

②Apex Classの作成

長くなるので注意点のみ列挙します。どのような実装になるか気になる方は、ぜひご相談下さい!

  • question == 'name'question == 'email'はSpir側で固定です。
  • 'name'はスペースの前後で姓名を分けるようにしています。
  • 会議の主催者がリードの所有者となるように設定しています。
  • SpirではWebhookを設定すると全てのURLでWebhookが発生してしまうので、今回は"リード"
    というワードが日程調整URLの名前に入っているもののみを対象とするようにしています。(そのために①で専用URLを作成しています。)
LeadWebhookProcessor
@RestResource(urlMapping='/spir2lead/*')
global class LeadWebhookProcessor {
    @HttpPost
    global static void processWebhook() {
        RestResponse res = RestContext.response;
        try {
            RestRequest req = RestContext.request;
            String requestBody = req.requestBody.toString();
            
            〜省略〜
            
    // ペイロードからフォーム回答をパース
    private static List<Map<String, Object>> parseFormAnswers(Map<String, Object> payload) {
        Object formAnswersObj = payload.get('formAnswers');
        if (formAnswersObj == null || !(formAnswersObj instanceof List<Object>)) {
            return null;
        }

        List<Object> formAnswersList = (List<Object>) formAnswersObj;
        List<Map<String, Object>> formAnswers = new List<Map<String, Object>>();
        for (Object obj : formAnswersList) {
            try {
                formAnswers.add((Map<String, Object>) obj);
            } catch (Exception e) {
                return null;
            }
        }
        return formAnswers;
    }

    // フォーム回答を基にリードオブジェクトを作成
    private static Lead createLead(List<Map<String, Object>> formAnswers) {
        Lead newLead = new Lead();
        for (Map<String, Object> answer : formAnswers) {
            String question = (String) answer.get('question');
            String answerValue = (String) answer.get('answer');
            
            // フォーム質問に基づいてリードフィールドを設定
            if (question == 'name') {
                setLeadName(newLead, answerValue);
            } else if (question == 'email') {
                newLead.Email = answerValue;
            } else if (question == '会社名') {
                newLead.Company = answerValue;
            } else if (question == '電話番号') {
                newLead.Phone = answerValue;
            }
        }
        return newLead;
    }
            〜省略〜
}

③サイトの作成

サイト作成

OAuthの設定がOutgoing Webhook側で設定できる場合は不要ですが、今回のSpirのWebhookではそういった設定はできません。
そのためSFDC上の公開サイト経由でWebhookを受け付けます。なお、他のアプリケーションからwebhookを受け付ける場合もこちらのサイトで受け付けることができるのであえて一般的な名称にしてあります。

④作成したサイトのApexクラスアクセスを設定

サイトの表示ラベル→公開アクセス設定→Apexクラスアクセスで作成したApexクラスを有効化。Apexクラスに権限を付与

Apexクラスアクセス設定

ここまでで、SFDC側の設定は終わりです。Postmanなどを利用すればテストできるので、以下のURLでPOSTされるかテストしてみて下さい。

https://{your-org}.my.salesforce-sites.com/webhooks/services/apexrest/spir2lead

Postmanテスト

⑤SpirへのWebhookリクエスト

確認できたURLに対してSpirへWebhookをリクエスト。数日で利用可能になります。

おまけ

⑥作成後、リード作成者のユーザ名を変更

Spir2Lead Webhook Bot とか。

ユーザ名変更

参考
Salesforce Inbound Webhook Integration Guide

siracusa テックブログ

Discussion