3
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からSMS送信!SMSLINKをAPI接続してみた

Last updated at Posted at 2026-02-03

はじめに

こんにちは!shiroです(^o^)/

みなさん、SalesforceからSMSを送信したことはありますか??
私はないです\(^o^)/
というわけで、今回はSalesforceからSMSLINKのAPIに接続してSMSを送信してみようと思います🏁

Salesforce開発を始めたばかりのエンジニアさんで外部サービス連携してみたい方や、
営業活動の効率化・生産性向上に興味のある方の参考になりますと幸いです!

※ 現在はSMSに加えメールと印刷発送もできる CPaaS NOW が主流です 👉[リファレンス]

ゴール 🏁

Salesforceの取引先責任者(Contact)画面から、SMSLINKのAPIを経由して、ボタン1つでSMSを送信できる状態を作ります!

▼ 完成イメージ
スクリーンショット 2025-09-29 11.57.52.png

【全体像】

マーメイド図

To Do

  • STEP0 ▌ 事前準備(開発環境を整える)
  • STEP1 ▌ External Credential(外部ログイン情報)の作成
  • STEP2 ▌ 権限セットを割り当てる
  • STEP3 ▌ Named Credential(指定ログイン情報)の作成
  • STEP4 ▌ Apex実装(SMS送信APIコールアウト)
  • STEP5 ▌ LWC (Lightning Web Components) 実装
  • STEP6 ▌ レコードページ配置
  • STEP7 ▌ テスト送信(SMSLINK側で確認)

STEP0 ▌ 事前準備(開発環境を整える)

■ SMSLINK① 利用登録

アカウントがない人は作ってもらうところから!
👉 SMSLINK公式サイト

  • 初期費用や月額固定費がない(送信件数に応じた従量課金)ので比較的ハードルは低め?👀

■ SMSLINK② APIトークンを取得する

Salesforceに登録するAPIトークンを事前に確認しておきます!

  1. メニューバーの「設定管理」から「設定情報」ページを開き、APIトークンをコピーしておく
    スクリーンショット 2026-01-23 19.53.59.png

■ Salesforce① 開発環境へサインアップ

今回はSFが学習用に提供してくれている無償プラットフォームを使います!
下記リンクから画面に従ってSalesforce Developer Edition(DE)のアカウントを発行します💪

👉️ SalesForce開発アカウント発行用リンク

■ Salesforce② CLI (sf/sfdx)を使えるようにセットアップ

  • Salesforce CLI のダウンロード
    ※ 最新バージョンのコマンドはsfコマンドですが、今回は旧バージョンのsfdxコマンドで作成してうまくいったためそのまま書き出しています
    brew install sf
    
    # バージョン確認できればインストール完了!
    # @salesforce/cli/2.105.6 darwin-arm64 node-v24.8.0 みたいな結果が返ってくる
    sf --version
    sfdx --version
    

 

  • 組織を認証する
    # 以下コマンドの実行でブラウザが自動で開くので、先ほど作成したDEアカウントでログイン
    sfdx auth:web:login -r https://login.salesforce.com -a dev-ed
    
    # 認証後、組織の一覧を確認、dev-ed という名前で組織が登録されていればOK
    sf org list
    
    # ┌──┬────────┬──────────────────────────────────┬────────────────────┬───────────┐
    # │  │ Alias  │ Username                         │ Org Id             │ Status    │
    # ├──┼────────┼──────────────────────────────────┼────────────────────┼───────────┤
    # │  │ dev-ed │ ********@agentforce.com          │ ****************** │ Connected │
    # └──┴────────┴──────────────────────────────────┴────────────────────┴───────────┘
    
    

STEP1 ▌ External Credential(外部ログイン情報)の作成

このステップではSMSLINKの認証に使う情報(トークン等)をSalesforce側で管理できるように設定していきます!

⭐️ External Credential(外部ログイン情報)とは?

外部サービスに接続するための認証情報の入れ物(コンテナ)です。
このコンテナの中にPrincipal(プリンシパル)という単位の箱を作り、実際の認証情報(APIキー/トークン等) を保管しておきます

SttingExternalCredential.gif

  1. 「設定」を開く
  2. 検索窓で「指定ログイン情報」を検索して開く
    ※「指定ログイン情報」の項目はサイドバーの「セキュリティ」タブからも開けます
  3. 「外部ログイン情報」のタブを開き、接続情報を登録する
    • 表示ラベル:SmsLinkToken
    • 名前:SmsLinkToken
    • 認証プロトコル:カスタム
  4. 画面をスクロールして「プリンシパル」を開き、SMSLINKのAPIトークンを登録
    ※ プリンシパル:外部サービスに接続する際の個々の認証情報(ユーザー名/トークン情報など)を書く
    • パラメーター名:testtoken
    • 連番:1
    • 認証パラメーター:「追加」をクリック
      • 認証パラメーター1
        • 名前:token ← トークンのkey名を書き込みます
        • 値:******************** ← STEP0で取得したAPIトークンを貼り付け

これで認証情報の設定は完了です!

STEP2 ▌ 権限セットを割り当てる

このステップでは、先ほど作った External Credential の Principal をユーザーが使えるように、権限の設定をしていきます!

⭐️ 権限セット とは?

Salesforceでは設定値を登録しただけではまだその設定を使えません。
権限セットという箱の中に 設定値の箱を入れることで、その設定値を実行したり、参照、利用する許可をしておく必要があります。
またこの時、「誰に許可するか」という設定も必要です。
ここでは、External Credential の Principal を権限セットの箱に入れ込み、APIを使わせたいユーザーとの紐付けを行います!

Permission.gif

  1. まずは「権限セット」を作成
  2. 作成した「権限セット」にSTEP1で作成した Principal を追加
  3. 最後に、この「権限セット」を使うことのできるユーザーを選択
    ※これをやらないと「権限不足エラー」になるため注意!

これで権限の設定は完了です!

🏆 shiroは トークンの利用権限 をてにいれた!

STEP3 ▌ Named Credential(指定ログイン情報)の作成

このステップではSMSLINKへの接続情報を具体的に設定していきます!

⭐️ Named Credential(指定ログイン情報) とは?

外部サービスの「接続先(URL)」と、その接続先で使う「認証情報(External Credential)」の紐付けルールを定義するものです。

※ ApexではURLを直接書かず、callout:<指定ログイン情報名>を使ってAPIを呼び出します(【STEP4】のコード参照)。
External Credential と設定情報を分けて保管することで、
・URLに変更があれば Named Credential だけ変更
・トークン変更があれば External Credential だけ変更
といった形で、セキュリティと運用性を両立できるわけですね!

SettingNamedCredential.gif

  1. 「指定ログイン情報」のタブを開く
  2. 「新規」ボタンをクリックし、「新規指定ログイン情報」を登録する
    ※ 旧仕様UIでは「カスタムトークン」が使えないため、新仕様の項目を利用します
    • 表示ラベル:SmsLinkDev
    • 名前:SmsLinkDev
    • URL:https://********************* ←api接続したいリンク
    • 認証
      • 外部ログイン情報:SmsLinkToken ← ここで【STEP1】で作成したExternalCredential(外部ログイン情報)を選択
    • コールアウトオプション
      • 認証ヘッダーを生成:チェックそのままでOK
      • HTTPヘッダーの数式を許可:チェックを入れる
  3. カスタムヘッダ-の項目で「新規」をクリックして2つのヘッダーを設定する
  • tokenの設定
    • 名前:token
    • 値:{!$Credential.SmsLinkToken.token}
    • 連番:1
  • acceptの設定
    • 名前:Accept
    • 値:application/json
    • 連番:2

これでログイン情報の設定も完了しました!
あとは誰がどこで使えるのかを設定すれば Apex でcalloutが使えるようになります!

STEP4 ▌ Apex実装(SMS送信APIコールアウト)

このステップでは、Apex を使ってSMSLINKのAPIを呼び出す処理を実装していきます!

⭐️ Apex とは?

Salesforceが提供している独自のプログラミング言語です。
Salesforceのサーバーからデータを取得したり、外部サービスのAPIを呼び出すことができます。
ここでは、SalesforceからSMSLINKのAPIを呼び出して、SMSを送信できるように作り込んでいきます。
SMSLINK の送信 API に対して、電話番号と SMS本文をJSON形式で送信しています。

  1. 設定のサイドメニューの「カスタムコード」から「Apexクラス」を選択する

    スクリーンショット 2026-01-16 13.47.54.png

  2. 「新規」を開く

    スクリーンショット 2026-01-16 13.50.16.png

  3. ウィンドウに以下を貼り付け、実装する
    ※認証に必要なAPIトークンは、Named / External Credential の設定によりHTTPヘッダーに自動付与されるため、コードには直接記述しません。

    public with sharing class SmsLinkService {
        @AuraEnabled
        public static String sendSms(String phone, String message) {
            HttpRequest req = new HttpRequest();
            req.setEndpoint('callout:SmsLinkDev/v1/messages');
            req.setMethod('POST');
            req.setHeader('Content-Type', 'application/json');
            req.setBody(JSON.serialize(new Map<String, Object>{
                'to' => phone,
                'body' => message
            }));
    
            Http http = new Http();
            HttpResponse res = http.send(req);
            if (res.getStatusCode() >= 200 && res.getStatusCode() < 300) {
                return res.getBody();
            }
            throw new AuraHandledException('SMS送信失敗: ' + res.getStatus() + ' ' + res.getBody());
        }
    }
    

これで、電話番号とメッセージさえ受け取れればSMS送信できる状態になりました!
あとは送信ボタンの作り込みのみ…!

STEP5 ▌ LWC (Lightning Web Components) 実装

このステップでは、Apex の処理を呼び出すUIを作っていきます!

⭐️ LWC (Lightning Web Components) とは?

Salesforce 上で動くフロントエンドのコンポーネント技術です。
画面(HTMLのUI)、処理(JavaScriptのロジック)、配置設定(メタ情報:公開設定や対象ページ)の3つのファイルで1つのコンポーネントを構成します。
今回は以下の3ファイルを作ります!

  • smsSendAction.html
  • smsSendAction.js
  • smsSendAction.js-meta.xml
  1. smslnk-uiプロジェクトを作成する

    sfdx force:project:create -n smslink-ui
    cd smslink-ui
    
    # Developer Edition(本番ドメインなら login.salesforce.com)
    sfdx auth:web:login -r https://login.salesforce.com -a dev-ed
    # ブラウザが開く → DE org でログイン → 許可
    
    # コンポーネントの雛形を作成する
    sf lightning generate component --name smsSendAction --type lwc --output-dir force-app/main/default/lwc
    
  2. リポジトリ内に自動生成された3つのファイルに、それぞれ以下を記述

    smsSendAction.html
    <template>
      <lightning-card title="SMS送信">
        <div class="slds-p-around_medium">
          <lightning-input label="電話番号" value={phone} onchange={handlePhone}></lightning-input>
          <lightning-textarea label="本文" value={body} onchange={handleBody}></lightning-textarea>
          <lightning-button variant="brand" label="送信" onclick={handleSend}></lightning-button>
        </div>
      </lightning-card>
    </template>
    
    smsSendAction.js
    import { LightningElement, track } from 'lwc';
    import sendSms from '@salesforce/apex/SmsLinkService.sendSms';
    import { ShowToastEvent } from 'lightning/platformShowToastEvent';
    
    export default class SmsSendAction extends LightningElement {
      @track phone = '';
      @track body = '';
    
      handlePhone(e) { this.phone = e.target.value; }
      handleBody(e)  { this.body  = e.target.value; }
    
      async handleSend() {
        try {
          await sendSms({ phone: this.phone, message: this.body });
          this.dispatchEvent(new ShowToastEvent({ title: '成功', message: 'SMS送信しました', variant: 'success' }));
        } catch (e) {
          this.dispatchEvent(new ShowToastEvent({ title: '失敗', message: e.body?.message || e.message, variant: 'error' }));
        }
      }
    }
    
    smsSendAction.js-meta.xml
    <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
      <apiVersion>61.0</apiVersion>
      <isExposed>true</isExposed>
      <targets>
        <target>lightning__RecordPage</target>
      </targets>
      <targetConfigs>
        <targetConfig targets="lightning__RecordPage">
          <objects>
            <object>Contact</object>
          </objects>
        </targetConfig>
      </targetConfigs>
    </LightningComponentBundle>
    
  3. ファイルを保存したらデプロイ!

    sf project deploy start --source-dir force-app/main/default/classes -o dev-ed
    sf project deploy start --source-dir force-app/main/default/lwc/smsSendAction -o dev-ed
    

これでSalesforce上にSMS送信ボタンが設置できる状態になりました!

STEP6 ▌ レコードページ配置

このステップでは、先ほど作成したSMS送信ボタンを実際の画面上に設置していきます!

  1. SMS送信 のアクションを作成する
    (1). 設定のサイドメニューの「オブジェクトおよび項目」から「オブジェクトマネージャー」を選択する
    (2). 右上検索窓で「取引先責任者(Contact)」を検索して選択
    (3). 左メニュー 「ボタン、リンク、およびアクション」を開き、「新規アクション」をクリック
    (4). 以下の設定をして保存

    • アクションの種類:Lightning Web コンポーネント
    • Lightning Web コンポーネント:smsSendAction を選択
    • 表示ラベル:SMS送信(任意)
    • 名前:SendingSMS

    CreateNewAction.gif

  2. 取引先責任者画面のレイアウトへ設置できる項目として追加
    (1). サイドメニューの「ページレイアウト」を開き、「Contact Layout」を選択する
    (2). 「Contact Layout」セクション内の「モバイルおよび Lightning のアクション」を選択
    (3). 作成した SMS送信 のアクションをドラッグ&ドロップで「モバイルおよび Lightning Experienceのアクション」 セクションに保存

    Set_SendingSMSAction.gif

  3. 取引先責任者を用意する
    (1). 設定画面のメニューから「セールスコンソール」を開く
    (2). グローバルアクションから「新規取引先責任者」を開く
    (3). 適当な名前を入力して保存する

    CreateContacts.gif

  4. 取引先責任者画面に先ほど追加したSMS送信アクションを設置する
    (1). 取引先責任者画面を開き、作成した責任者を選択して開く
    (2). 設定メニューを開き、「ページを編集」をクリックする
    (3). 編集画面に移行したら、サイドバーのカスタム項目から、「smsSendAction」をドラッグ&ドロップで、責任者画面に配置して「保存」
    (4). 「有効化」をクリックし、「組織のデフォルトとして割り当て」をクリック
    (5). 「デスクトップおよび電話」を選択して「完了」をクリック
    (6). 念のためもう一回「保存」をクリック

    Set_Action_AtContactView.gif

    取引先責任者の画面に戻ってみると、SMS送信用のフォームがちゃんとできている:tada:

    スクリーンショット 2025-09-29 11.52.32.png

STEP7 ▌ テスト送信(SMSLINK側で確認)

  • 送信成功のレスポンス文字が緑で表示されればOK!

    スクリーンショット 2025-09-29 11.57.52.png

  • SMSLINK の管理画面からも配信結果を確認 👀

    スクリーンショット 2026-01-23 20.13.45.png

つまずいたポイントまとめ

◼︎ デプロイが失敗した

  • デプロイコマンド実行時、-o dev-ed を付けなかったことでエラーが出てしまいました

◼︎ tokenがコード内に展開できない

  • External Credentialで設定したtokenが、Named Credentialの設定で、Apexコードに展開される想定が、値が渡される気配がなく原因特定に数日かかりました

◼︎ SMSが送信できなかった

  • External / Named Credential の設定値に不備がないか指差し確認!
  • 権限不足、権限セットの割当忘れがないか確認!

さいごに

先輩が丁寧に手引きを作ってくれたので、なんとかSMS送信するところまでこぎつけました!

が、External CredentialNamed Credentialの存在意義が理解できなかったことで、
作業内容が腑に落ちなかったために、全体の構造理解にかなり難航しました汗

改めて、Salesforceは必要な学習範囲が広く奥も深いことが分かりました🥹
専門のエンジニアがいるのが本当頷けます。すごい。

ところで当方お勉強チーム、なんと社内にSalesforceの専門エンジニアがいたことに今さら気が付きました…!!(知らなかった…!)
次回は専門家様にアドバイスいただきつつ、うまくいかなった部分の整理や、配信予定日時UI改善、配信履歴管理ができるのかなどを深堀り予定です(๑•̀ㅁ•́๑)9

最後まで読んでくださり、ありがとうございました!
また読みに来ていただけると嬉しいです(ㆁωㆁ*)

3
0
1

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
3
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?