メッセージの送信
コミュニケーションに使用するメッセージの種類とチャネルを定義したら、 メッセージAPIメッセージの送信 (opens in a new tab) を使ってリクエストを作成します。
使用するチャネルとメッセージの種類に応じて、送信リクエストにオプションを追加することを忘れないでください。
メッセージAPIリクエストの検証
メッセージAPIは、専用エンドポイントを使用したリクエストの検証をサポートします。このエンドポイントを使用すると、送信前にメッセージペイロードをテストして、各チャネルに必要な要件を満たしていることを確認できます。リクエストを事前に検証することで、潜在的な問題を早期に発見し、解決に関する詳細なフィードバックを受け取ることができます。 この機能は、各チャネルに特定の要件があるため、1つのリクエストで複数のチャネルを処理する場合に特に便利です。検証エンドポイントは、スタンドアロンAPIに対するメッセージの検証、各フェールオーバー手順に対する追加チェックの適用、不明なフィールドのフラグ設定など、より詳細なフィードバックを提供します。
検証エンドポイント
このエンドポイントを使用すると、メッセージAPIリクエストの詳細な検証を実行できます。これにより、メッセージペイロードがプラットフォームへの送信に有効かどうかに関するフィードバックが即座に得られるようになります。リクエストが有効な場合、エンドポイントは 200 OK を返します。問題がある場合は、修正が必要な内容に関する情報を含む 400 BAD REQUEST 応答を返します。
リクエストを検証するには、次の手順に従います:
- 検証エンドポイント (
POST/resource-management/1/messages/validate) にメッセージペイロードを含むPOSTリクエストを送信します。 - メッセージが検証に合格すると、送信の準備ができたことを示す
200 OK応答を受け取ります。 - 検証に失敗した場合は、エラーの詳細が記載された
400 BAD REQUEST応答を受け取ります。
サンプルリクエスト
{
"messages": [
{
"channel": "SMS",
"sender": "447491163443",
"destinations": [
{
"to": "111111111"
}
],
"content": {
"body": {
"text": "May the Force be with you.",
"type": "TEXT"
}
}
}
]
}エラー応答の例
{
"description": "Request cannot be processed.",
"action": "Check the syntax, violations and adjust the request.",
"violations": [
{
"property": "messages[0].content.body",
"violation": "invalid value"
}
]
}エンドポイント検証の追加機能:
- スタンドアロンAPIモデルの検証: メッセージが各スタンドアロンAPIによって設定された基準に準拠していることを確認します。
- フェールオーバーチェック: 各フェールオーバー手順が正しく構成されていることを確認します。
- 不明なフィールドの検出: リクエストの送信時に問題を引き起こす可能性のあるフィールドにフラグを立てます。
検証エンドポイントはメッセージを送信しません。ペイロードの有効性のみをチェックします。
エンドポイント検証の技術的な詳細については、 APIのドキュメント (opens in a new tab)をご参照ください。
adaptationMode (アダプテーションモード)
メッセージAPIの デフォルト動作が adaptationMode=true になりました。これは、明示的に無効化されない限り、APIが各チャネルでサポートされている形式に、本来サポートされていないメッセージの種類に適合するメッセージを自動的に適応させようとすることを意味します。
adaptationMode を有効にすると、APIはメッセージを送信できるように調整します。ただし、APIは適応可能なエレメントを類似のサポートされているエレメントに変換するため、メッセージの見た目が若干異なる場合があります。
メッセージAPIの adaptationMode パラメーターを使用すると、指定したチャネルがサポートしていないエレメントが含まれている場合でも、メッセージを送信および配信できます。
デフォルトでは、adaptationMode が有効になっており、APIは受信者チャネルの機能に合わせてメッセージを自動的に調整し、配信が成功するようにします。適応可能なメッセージエレメントは変換され、適応不可能なエレメントはスキップされます。
適応例
- ヘッダーがチャネルでサポートされていない場合、APIはヘッダーと本文を1つのメッセージにマージし、ヘッダーを最初の行として書式設定し、続く本文のテキストを新しい行に移って書式設定します。
- 画像がネイティブにサポートされていない場合、APIは代わりにテキストの一部としてURLを送信します (例えば、メッセージにプレーンテキストとして追加されます)。
- ボタンがチャネルでネイティブにサポートされておらず、適応できない場合、そのボタンはスキップされます。
adaptationMode が無効 (false として設定) の場合、APIはメッセージを適応させません。チャネルがサポートしていないエレメントがメッセージに含まれている場合、そのメッセージは拒否され、エラーが返されます。
デフォルトの動作では、可能な限りメッセージが配信されます。ただし、メッセージの書式設定を正確に制御する必要があり、エレメントがサポートされていない場合にエラーを受け取りたい場合は、APIリクエストで adaptationMode を true から false に設定することで、この機能を無効にすることができます。
adaptationMode を有効にしたリクエストの例 (デフォルト動作)
{
"messages": [
{
"channel": "WHATSAPP",
"sender": "441234567890",
"destinations": [
{
"to": "440987654321"
}
],
"content": {
"body": {
"text": "Thank you for joining us on Athleete Unlocked! Would you like to subscribe for future Athleete events?",
"type": "TEXT"
},
"buttons": [
{
"type": "REPLY",
"text": "Yes",
"postbackData": "true"
},
{
"type": "REPLY",
"text": "No",
"postbackData": "false"
}
]
}
}
]
}
出力
adaptationMode の無効化
APIでメッセージを適応させず、エレメントがサポートされていない時にエラーを受信するようにしたい場合は、APIリクエストで adaptationMode を false に明示的に設定する必要があります。
adaptationMode を無効にしたリクエストの例
{
"messages": [
{
"channel": "SMS",
"sender": "441234567890",
"destinations": [
{
"to": "440987654321"
}
],
"content": {
"body": {
"text": "Here is a link to our latest updates!",
"type": "TEXT"
},
"buttons": [
{
"type": "OPEN_URL",
"text": "Visit",
"url": "https://example.com"
}
]
},
"options": {
"adaptationMode": false // Explicitly disabling adaptation
}
}
]
}
この例では、チャネルがボタン (SMS など) をサポートしていない場合、APIはエラーを返します。
サポートされているメッセージの種類
| メッセージングチャネル | テキスト | 画像 | ビデオ | ドキュメント | リッチリンク | 認証リクエスト | List (リスト) | カルーセル | テンプレート |
|---|---|---|---|---|---|---|---|---|---|
| Apple Messages for Business | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅* |
| Instagram Direct | ✅ | ✅ | 🔄 | 🔄 | ✅ | ❌ | 🔄 | ✅ | ❌ |
| LINE | ✅ | 🔄 | 🔄 | 🔄 | ❌ | ❌ | ❌ | ❌ | ❌ |
| Messenger | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | 🔄 | ✅ | ❌ |
| MMS | ✅ | ✅ | ✅ | ✅ | 🔄 | ❌ | ❌ | ❌ | ❌ |
| RCS | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | 🔄 | ✅ | ✅* |
| SMS | ✅ | 🔄 | 🔄 | 🔄 | ❌ | ❌ | ❌ | ❌ | ❌ |
| Viber Bots | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | 🔄 | ✅ | ❌ |
| Viber Business Messages | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| ✅ | ✅ | ✅ | ✅ | 🔄 | ❌ | ✅ | ❌ | ✅ |
説明
✅ : チャネルがエレメントをネイティブにサポートし、メッセージがそのまま配信されることを示します。
❌: エレメントがサポートされていないことを示し、エラーが返されます (adaptationMode はエレメントを適応させることができません)。
🔄 : チャネルがエレメントをネイティブにサポートしていないことを示しますが、adaptationMode はチャネルをよりシンプルでネイティブにサポートされている形式 (テキストや URL など) に変換できます (サポートされていないフィールドをスキップ/適応させる)。
Apple Messages for Business テンプレート とRCSテンプレート用の\*については、テキストテンプレートのみがサポートされます。
adaptationMode を true に設定すると、APIは様々なメッセージングチャネルの制限に合わせてメッセージを適応させようとし、チャネルがすべてのエレメントをサポートしていない場合でもメッセージが送信されるようにします。ただし、特定の厳密なチャネルルールや例外 (ボタンの制限や必須テキストなど) が適用される場合、adaptationMode はそれらをオーバーライドできず、エラーが返されます。
ボタン
| メッセージングチャネル | trueに設定したadaptationMode | false に設定したadaptationMode |
|---|---|---|
| Apple Messages for Business | テキスト ボタン (個別メッセージ) | テキスト ボタン (個別メッセージ) |
| Instagram Direct | ボタン付きテキスト | ボタン付きテキスト |
| LINE | ボタン付きテキスト | ボタン付きテキスト |
| Messenger | ボタン付きテキスト | ボタン付きテキスト |
| MMS | テキスト | エラー: ボタンはサポートされていません |
| RCS | ボタン付きテキスト | ボタン付きテキスト |
| SMS | テキスト | エラー: ボタンはサポートされていません |
| Viber Bots | ボタン付きテキスト | ボタン付きテキスト |
| Viber Business Messages | ボタン付きテキスト | ボタン付きテキスト |
| ボタン付きテキスト | ボタン付きテキスト |
画像
| メッセージングチャネル | trueに設定したadaptationMode | false に設定したadaptationMode |
|---|---|---|
| Apple Messages for Business | 画像 画像キャプション | 画像 画像キャプション |
| Instagram Direct | 画像 画像キャプション | 画像 画像キャプション |
| LINE | 画像キャプション 画像のURL | エラー:画像はサポートされていませんが、適応可能です |
| Messenger | 画像 画像キャプション | 画像 画像キャプション |
| MMS | 画像 画像キャプション | 画像 画像キャプション |
| RCS | 画像 画像キャプション | 画像 画像キャプション |
| SMS | 画像キャプション 画像のURL | エラー:画像はサポートされていませんが、適応可能です |
| Viber Bots | 画像 画像キャプション | 画像 画像キャプション |
| Viber Business Messages | 画像 画像キャプション | 画像 画像キャプション |
| 画像 画像キャプション | 画像 画像キャプション |
ヘッダー付き画像
| メッセージングチャネル | trueに設定したadaptationMode | false に設定したadaptationMode |
|---|---|---|
| Apple Messages for Business | メッセージヘッダー 画像 画像キャプション | メッセージヘッダー 画像 画像キャプション |
| Instagram Direct | メッセージヘッダー 画像 画像キャプション | メッセージヘッダー 画像 画像キャプション |
| LINE | メッセージヘッダー 画像キャプション 画像のURL | エラー:画像はサポートされていませんが、適応可能です |
| Messenger | メッセージヘッダー 画像 画像キャプション | メッセージヘッダー 画像 画像キャプション |
| MMS | メッセージヘッダー 画像 画像キャプション | メッセージヘッダー 画像 画像キャプション |
| RCS | メッセージヘッダー 画像 画像キャプション | メッセージヘッダー 画像 画像キャプション |
| SMS | メッセージヘッダー 画像キャプション 画像のURL | エラー:画像はサポートされていませんが、適応可能です |
| Viber Bots | メッセージヘッダー 画像 画像キャプション | エラー:メッセージヘッダーはサポートされていませんが、適応可能です |
| Viber Business Messages | メッセージヘッダー 画像 画像キャプション | エラー:メッセージヘッダーはサポートされていませんが、適応可能です |
| メッセージヘッダー 画像 画像キャプション | エラー:メッセージヘッダーはサポートされていませんが、適応可能です |
ドキュメント
| メッセージングチャネル | trueに設定したadaptationMode | false に設定したadaptationMode |
|---|---|---|
| Apple Messages for Business | ドキュメント ドキュメントのキャプション | エラー:ドキュメントのファイル名はサポートされていません |
| Instagram Direct | ドキュメントのキャプション ドキュメントの URL | エラー:ドキュメントはサポートされていませんが、適応可能です |
| LINE | ドキュメントのキャプション ドキュメントの URL | エラー:ドキュメントはサポートされていませんが、適応可能です |
| Messenger | ドキュメント | エラー:ドキュメントのキャプションはサポートされていません エラー:ドキュメントのファイル名はサポートされていません |
| MMS | ドキュメント ドキュメントのキャプション | エラー:ドキュメントのファイル名はサポートされていません |
| RCS | ドキュメント | エラー:ドキュメントのキャプションはサポートされていません エラー:ドキュメントのファイル名はサポートされていません |
| SMS | ドキュメントのキャプション ドキュメントの URL | エラー:ドキュメントはサポートされていませんが、適応可能です |
| Viber Bots | ドキュメント (ファイル名付き) | エラー:ドキュメントのキャプションはサポートされていません |
| Viber Business Messages | ドキュメント (ファイル名付き) | エラー:ドキュメントのキャプションはサポートされていません |
| ドキュメント (ファイル名付き) ドキュメントのキャプション | ドキュメント (ファイル名付き) ドキュメントのキャプション |
ビデオ
| メッセージングチャネル | trueに設定したadaptationMode | false に設定したadaptationMode |
|---|---|---|
| Apple Messages for Business | ビデオ ビデオキャプション | エラー:画像プレビューはサポートされていません |
| Instagram Direct | ビデオキャプション ビデオのURL | エラー:ビデオはサポートされていませんが、適応可能です |
| LINE | ビデオキャプション ビデオのURL | エラー:ビデオはサポートされていませんが、適応可能です |
| Messenger | ビデオ | エラー:ビデオキャプションはサポートされていません エラー:画像プレビューはサポートされていません |
| MMS | ビデオ ビデオキャプション | エラー:画像プレビューはサポートされていません |
| RCS | ビデオ(画像プレビュー付き) ビデオキャプション | ビデオ(画像プレビュー付き) ビデオキャプション |
| SMS | ビデオキャプション ビデオのURL | エラー:ビデオはサポートされていませんが、適応可能です |
| Viber Bots | ビデオ(画像プレビュー付き) ビデオキャプション | ビデオ(画像プレビュー付き) ビデオキャプション |
| Viber Business Messages | ビデオ(画像プレビュー付き) ビデオキャプション | ビデオ(画像プレビュー付き) ビデオキャプション |
| ビデオ ビデオキャプション | エラー:画像プレビューはサポートされていません |
テンプレート
| メッセージングチャネル | trueに設定したadaptationMode | false に設定したadaptationMode |
|---|---|---|
| Apple Messages for Business | テンプレート | テンプレート |
| Instagram Direct | サポートされていません | サポートされていません |
| LINE | サポートされていません | サポートされていません |
| Messenger | サポートされていません | サポートされていません |
| MMS | サポートされていません | サポートされていません |
| RCS | テンプレート | テンプレート |
| SMS | サポートされていません | サポートされていません |
| Viber Bots | サポートされていません | サポートされていません |
| Viber Business Messages | サポートされていません | サポートされていません |
| テンプレート | テンプレート |
フェイルオーバー
常にメッセージを配信するためのユーザーフェールオーバーです。このオプションは、最初のオプションが失敗した場合に、他のチャネルでメッセージを配信します。
以下のことができます:
- チャネル切り替えの自動化: メッセージAPIは、失敗したメッセージ配信のイベントでチャネルを自動的に変更します。
- 有効期間の構成:各チャネルの10秒から48時間までの期間を定義します。有効期間が終了すると、チャネルが切り替わり、新しいチャネルの有効期間が開始されます。
- フェールオーバーフローのカスタマイズ化: チャネルフェールオーバーの順序を定義して優先順位を付けます。
メッセージステータスレポート
ウェブフックオプションを使用して、message status reports (メッセージステータスレポート) を受信するURLを設定します。APIリクエストのdelivery reports (配信レポート) の場合は webhooks.delivery.url パラメーター、seen reports (既読レポート) の場合は webhooks.seen.url パラメーターの下にURLを定義します。なお、既読レポートは、すべてのチャネルでサポートされているわけではありませんので、ご注意ください。
{
"messages": [
{
"channel": "WHATSAPP",
"sender": "441234567890",
"destinations": [
{
"to": "440987654321"
}
],
"content": {
"body": {
"text": "Thank you for your registration!",
"type": "TEXT"
}
},
"webhooks": {
"delivery": {
"url": "https://notifyme.delivery"
},
"seen": {
"url": "https://notifyme.seen"
}
}
}
]
}
APIを使用した配信レポートのフェッチ
また、ウェブフックURLの設定に加えて、専用のGETリクエストを使用して、オンデマンドで配信レポートを取得することもできます。これにより、必要に応じてレポート情報をアクティブに引き出すことができます。
配信レポートをフェッチするには、メッセージAPIの GET /messages-api/1/reports エンドポイント (opens in a new tab) を使用します。次のパラメーターを使用して結果をフィルター処理できます:
channelmessageIDentityIDapplicationIDcampaignReferenceIDbulkID
callbackData によるメッセージのトラッキング
callbackData パラメーターには、メッセージの識別、管理、または監視に使用される追加データを格納できます。メッセージAPIにカスタムデータを添付してトラッキングし、その追跡結果を既読レポートと配信レポートに反映できるため、メッセージの汎用性が高まります。
このパラメーターは、アウトバウンドメッセージとインバウンドメッセージの両方に関連付けることができます。
- アウトバウンド (MT) メッセージ: メッセージの送信時に
callbackDataが指定されている場合、この値はメッセージに添付されます。 - インバウンド (MO) メッセージ: インバウンドメッセージを処理するためのセットアップで
callbackDataが定義されている場合、この値が使用されます。
キャンペーン参照ID
キャンペーン参照ID は、メッセージレベルで各APIコール内の各コミュニケーションキャンペーンに割り当てることができるユーザー定義の識別子です。これを使うことにより、キャンペーン管理機能の強化、データインサイトの向上、キャンペーンのパフォーマンスを最適化するためのプロセスの効率化が可能になります。
- 追跡と管理: コミュニケーションキャンペーンのパフォーマンスを効率的に追跡および管理します。各キャンペーンに一意のIDを割り当てることで、様々な成功指標に関する詳細なインサイトを得ることができます。
- 集計された概要: 様々なチャネルでのパフォーマンスに関する集計データをまとめて表示します。
- メトリクスAPIの統合: キャンペーン参照IDは メトリクス API に統合されています。この統合により、詳細な配信レポートにアクセスでき、キャンペーンのパフォーマンス関連のメトリクスの分析を簡素化できます。
URLのトラッキングと短縮
この機能を使用すると、URLを短縮し、クリック行動を監視して、エンゲージメントとメッセージの有効性を評価できます:
- URLの短縮:
shortenUrlオプションを使用して、短くてクリーンな URLを作成します。 - クリック数のトラッキング:
trackClicksオプションを利用して、送信されたURLのクリック行動を監視します。 - URLのカスタムトラッキング: 高度トラッキング用のカスタム
trackingUrlを指定します。 - プロトコルの削除:
removeProtocolオプションを使用して、URLからプロトコルを削除します。 - カスタムドメイン: ブランド化された短縮URLには
customDomainオプションを使用します。
URLのトラッキングと短縮機能の使用方法の詳細については、 メッセージAPIメッセージの送信 (opens in a new tab)について記載しているAPIドキュメントをご参照ください。
スケジュール設定
メッセージAPIのスケジュール設定機能を使用すると、チャネル内のメッセージの送信スケジュールの設定や送信の自動化ができるようになります。この機能は、コンテンツ、送信するタイミングやターゲットチャネルを指定することを可能にするため、コミュニケーションを効果的に管理しやすくします。例えば、この機能を使えば、エンゲージメントを最大化するために、最適なタイミングでプロモーションメッセージを送信するスケジュールを組めるようになります。
スケジュール設定シナリオ:
- 単一チャネル向けメッセージ: スケジュール設定によってメッセージ送信がトリガーされます。
- フェールオーバー: スケジュールは、最初に一覧表示されたチャネルからメッセージを開始し、その後のフェールオーバーシナリオは、設定されたフェールオーバーと有効性のロジックに従います。