【第75回】 Salesforce Marketing Cloud で SMS 配信する際の注意点
Salesforce Marketing Cloud で SMS 配信する際に注意すべき点がいくつかあります。まずは、基本的な Marketing Cloud からの SMS 配信の流れをサッと確認して、その後、注意すべき細かい点を確認して行きましょう。
基本的な SMS 配信の流れ

この図の中の上段の ①~⑤ が「メッセージ配信時」の流れで、下段の ⑥~⑨ が「配信結果が戻される時」の流れになります。Salesforce 社と通信事業者の間にはアグリゲーターが居て、Salesforce の場合は NTT コム オンライン・マーケティング・ソリューション株式会社 がその役割を務めます。
レポートについて
顧客ベースの配信結果に関しては、基本的には標準レポートの「SMS メッセージ詳細レポート」を使用することになるかと思いますが、このレポートで確認できる配信結果の報告のタイミングや戻されるデータの内容は、通信事業者に依存しています。そして、個々の開封やクリックについては確認することはできません。あくまで、配信の到達・不達のみが戻されます。
例えば、SoftBank に関しては、到達・不達情報が戻されるが、Y!mobile に関しては戻されないなどの違いがあったりします。
メッセージを受信できる電話番号について
SMS 受信端末としては SMS(Cメール、ショートメッセージ)が受信可能なガラ携とスマートフォンになります。かつては、PHS に対してメッセージを送れないという問題もありましたが、現在は、PHS のサービスが世の中的に終了していますので、この検討は不要かと思います。
また、受信ができる番号は 070, 080, 090 から始まる 11桁の国内電話番号です。03 始まりの様な固定電話の番号は対象外となりますし、020, 050 始まりの電話番号も対象外となります。
もし 03 や、020, 050 始まりの番号に送信をしてもメッセージは届きませんが、課金対象にはなりますので、事前に除外できるものは除外してしまうことをオススメします。必要があれば、以下の SQL を活用してください。
① 070, 080, 090 始まりのみに限定する場合
CASE
WHEN LEFT(
(
CASE
WHEN LEFT(Phone, 3) = '+81' THEN
CONCAT('0', REPLACE(REPLACE(REPLACE(Phone, '-', ''), '+81', ''), ' ', ''))
ELSE
REPLACE(REPLACE(Phone, '-', ''), ' ', '')
END
), 3
) IN ('070', '080', '090') THEN
CASE
WHEN LEFT(Phone, 3) = '+81' THEN
CONCAT('0', REPLACE(REPLACE(REPLACE(Phone, '-', ''), '+81', ''), ' ', ''))
ELSE
REPLACE(REPLACE(Phone, '-', ''), ' ', '')
END
ELSE
NULL
END AS [Phone]② 8170, 8180, 8190 始まりのみに限定する場合
CASE
WHEN LEFT(
(
CASE
WHEN LEFT(Phone, 3) = '+81' THEN
CONCAT('0', REPLACE(REPLACE(REPLACE(Phone, '-', ''), '+81', ''), ' ', ''))
ELSE
REPLACE(REPLACE(Phone, '-', ''), ' ', '')
END
), 3
) IN ('070', '080', '090') THEN
CASE
WHEN Phone IS NOT NULL THEN
CONCAT(
'81',
SUBSTRING(
CASE
WHEN LEFT(Phone, 3) = '+81' THEN
CONCAT('0', REPLACE(REPLACE(REPLACE(Phone, '-', ''), '+81', ''), ' ', ''))
ELSE
REPLACE(REPLACE(Phone, '-', ''), ' ', '')
END,
2,
LEN(
CASE
WHEN LEFT(Phone, 3) = '+81' THEN
CONCAT('0', REPLACE(REPLACE(REPLACE(Phone, '-', ''), '+81', ''), ' ', ''))
ELSE
REPLACE(REPLACE(Phone, '-', ''), ' ', '')
END
) - 1
)
)
END
ELSE
NULL
END AS [InternationalPhone1]③ +8170, +8180, +8190 始まりのみに限定する場合
CASE
WHEN LEFT(
(
CASE
WHEN LEFT(Phone, 3) = '+81' THEN
CONCAT('0', REPLACE(REPLACE(REPLACE(Phone, '-', ''), '+81', ''), ' ', ''))
ELSE
REPLACE(REPLACE(Phone, '-', ''), ' ', '')
END
), 3
) IN ('070', '080', '090') THEN
CASE
WHEN Phone IS NOT NULL THEN
CONCAT(
'+81',
SUBSTRING(
CASE
WHEN LEFT(Phone, 3) = '+81' THEN
CONCAT('0', REPLACE(REPLACE(REPLACE(Phone, '-', ''), '+81', ''), ' ', ''))
ELSE
REPLACE(REPLACE(Phone, '-', ''), ' ', '')
END,
2,
LEN(
CASE
WHEN LEFT(Phone, 3) = '+81' THEN
CONCAT('0', REPLACE(REPLACE(REPLACE(Phone, '-', ''), '+81', ''), ' ', ''))
ELSE
REPLACE(REPLACE(Phone, '-', ''), ' ', '')
END
) - 1
)
)
END
ELSE
NULL
END AS [InternationalPhone2]この SQL の 2 つ目と 3 つ目の違いは、81 の前に「+」が付くか、付かないかの違いとなります。SMS の Journey Builder 送信のためには、2 つ目の「+」が付かないもの(8170, 8180, 8190 始まり)が必要 です。
※ 上記 SQL が複雑に見えるのは、下のサンプルのように、電話番号の項目 である「Phone」 の中に 「+81」始まりの電話番号や、不要な「-」や「半角スペース」などが含まれている場合を想定して、それらを除外したり補正しているためです。

メッセージは 70 文字まで
続いて、一つのメッセージにつき、送信可能な文字数は 70文字までです。これは、半角英数のような 1 バイト文字であろうが、かな漢字のような 2 バイト文字であろうが、すべて 1 文字としてカウントされます。
また、文章が「前半」と「後半」で 2 メッセージあり、それらを正しい順番で並べて配信したいと思い、Journey Builder 上に、順番通り 2 つ並べて送信したとしても、どちらが先に届くかは分かりません。よって、1 メッセージずつ、それぞれ完結したメッセージになっていることが望ましいです。
表示される電話番号に注意
配信時にユーザーの端末に表示される電話番号についても注意が必要です。SoftBank や Y!mobile の場合は「0032069000」という固定の番号で表示がされます。これは、つまり Salesforce Marketing Cloud を使用しているすべての企業の SMS がこの電話番号を使用して送信されることを意味します。
そのため、どの企業からのメッセージであるかを判別させるために「企業名」をメッセージの中に含ませておくことは必要かと思います。この件については、下記ブログをご参照ください。
双方向通信はできない
ユーザー側(お客様)からの返信を受け付けるような双方向通信は基本的にはできません。国内の携帯通信事業者は SMS の受信をサポートしないためです。これをサポートする国際 SMS 番号( 「+」「国番号」「電話番号」など)であれば、双方向通信も実現可能ですが、ユーザー側に対して、国際 SMS 送信料(文字数に応じて、1 通当たり 50 ~ 500 円の支払い)を強いることになるため、日本国内向けの利用では現実的ではありません。よって、一方向配信のみの使用がベストプラクティスとなります。
いかがでしたでしょうか?
このように有名どころの注意点を挙げただけでも、悪い言い方をすれば、トラップだらけというか、海外製品を無理やり日本で使えるようにしました感が満載なんですが、SMS 単独で配信できる配信ツールとは違って、メールや LINE やアプリプッシュとの併用ができるところが最大のメリットになってくるかと思いますので、その点は魅力的ですね。
では、最後に私がこの記事を書くと決めた「最重要注意点」をお知らせしたいと思います。
配信エラーを回避せよ
例えば、以下のような SMS メッセージを Content Builder 上で作ったとします。これまでの注意事項を参考に、メッセージに企業名も含めて、文字数も 69 文字とカウントされていますので、問題が無さそうなメッセージを作成しました。

一見問題が無いようには見えてはいるのですが、このまま送信してしまうと配信が失敗してしまいます。先ほど紹介した標準レポートの「SMS メッセージ詳細レポート」を確認しても、ステータスは「Undelivered」(不達)で戻されています。
これは何が原因かと言いますと「改行 1 つにつき、画面上ではカウントされない 1 文字が追加される」という仕様が関係しています。
この 1 文字が追加される事象は、バグではなく NTT コム オンライン・マーケティング・ソリューション株式会社側の仕様です。
つまり、この文章には 2つの改行がありますので 69 文字+2 文字で、全部で 71 文字となるわけです。
さらに知っておくべきことは、この 70 文字目と 71 文字目の間を超えてしまうときの文字列が半角英数だった場合にメッセージの分割が起こらず、配信エラーとなります。つまり、今回は「超えた文字が半角英数だった」ことが根本的な配信エラーの原因というわけですね。
では、この配信エラーを回避するには、どのようにすれば良いかと言いますと、単純です。下記のように 1 つの改行を削除します。すると、画面上のカウントでは 68 文字になり、使用されている改行が 1 つとなりますので、68 文字+ 1 文字で 69 文字とカウントされますので、無事 70 文字に収まり、配信が可能となります。

何だか良く原因は分からないけど配信ができないで困っているという場合は、この「改行」問題も疑ってください。
この 70文字目と 71 文字目の間を超えてしまうときの文字列が半角英数だった場合にメッセージの分割が起こらないという件は、SMS のメッセージ上で AMPscript を使ってお客様の名前などを差し込むような時にも注意しておいた方が良いです。想定していない長い名前の人を差し込むことになった場合、文面が予定より長くなり、70 文字目と 71 文字目の間を超えるときの文字列が半角英数となってしまうと、配信エラーになってしまいます。
皆さんには、このポイントで失敗をして欲しくないなと思いまして、今回記事にしましたが、SMS 配信の設定に関しては、まだまだ知っておくべきことがありますので、また別の記事で書いてみたいと思います。
今回は以上です。
