Power AutomateからLINE Notifyへ画像付きメッセージを送る方法【multipart/form-data・BASE64】
この記事の内容
- Power AutomateのHTTPアクションを使って、LINE Notifyにメッセージと画像を同時に送信する方法を解説します
- 画像データはBase64エンコードすることでJSONのボディに埋め込みます
- 複数のデータを同時に送るために
multipart/form-dataというコンテンツタイプを使用します - OneDriveからファイルコンテンツを取得し、そのまま送信する手順を紹介します
- LINE Notify APIのドキュメントの読み方と、スタンプ送信など他のパラメーターについても触れます
はじめに
以前の動画では、Power AutomateからLINE Notifyへメッセージだけを送る方法を紹介しました。今回はリクエストにお応えして、メッセージと画像を同時に送る方法を解説します。
この方法を使うと、LINEのトーク画面にメッセージと画像が一緒に届きます。届いた画像はLINE側にアップロードされているため、保存することも可能です。
全体の流れ
Power AutomateのフローはHTTPアクションを中心に構成されます。基本的な構成は前回のメッセージ送信と同じです。
- OneDriveからファイルコンテンツを取得する
- HTTPアクションでLINE Notify APIにPOSTする
- 認証ヘッダーにBearerトークンを設定する
- コンテンツタイプを
multipart/form-dataにする - メッセージと画像の2つのパートを送信する
認証のBearerトークンの取得方法については、前回の動画をご参照ください。
なぜmultipart/form-dataを使うのか
メッセージだけを送る場合は、ボディに message=〇〇 という単純な形式で送ることができます。しかし、メッセージと画像の両方を同時に送りたい場合は、複数のデータを1つのリクエストにまとめる必要があります。
このような場面で使われるのが multipart/form-data です。Webのフォームで、テキスト入力と画像アップロードを同時に送信するときの仕組みと同じものです。Power AutomateのHTTPアクションでも、このリクエスト形式を再現できます。
フローの設定方法
HTTPアクションのコンテンツタイプ
HTTPアクションのコンテンツタイプを以下のように設定します。
このコンテンツタイプを指定すると、ボディを複数のパート(配列)として記述できるようになります。
ボディの構造
ボディは配列形式になっており、それぞれのパートに headers(ヘッダー)と body(本体)を記述します。今回は以下の2つのパートを用意します。
パート1: メッセージ
{
"headers": {
"Content-Disposition": "form-data; name=\"message\""
},
"body": "送信されるメッセージの内容"
}
Content-Disposition の値の中で、パラメーター名(name)を指定します。LINE Notify APIの仕様上、テキストメッセージのパラメーター名は message と決まっています。
値の中でダブルクォーテーション(")を使いたい場合は、バックスラッシュでエスケープして \" と記述します。これはJSONの文字列内でダブルクォーテーションを表現するための書き方です。
パート2: 画像
{
"headers": {
"Content-Disposition": "form-data; name=\"imageFile\"; filename=\"dummy.png\"",
"Content-Type": "image/png"
},
"body": "@base64(body('ファイルコンテンツの取得'))"
}
画像パートでは以下の点に注意してください。
nameは LINE Notify APIの仕様でimageFileと決まっていますfilenameはLINEへ送信後にファイル名が影響することは少ないため、dummy.pngのような固定値でも動作しますContent-Typeでimage/pngを指定しますbodyには、OneDriveのファイルコンテンツ取得アクションで取得したコンテンツをBase64エンコードして埋め込みます
Base64エンコードとは
JSONやHTTPのボディはテキストデータが基本です。画像のようなバイナリデータをそのまま埋め込むことはできません。
Base64エンコードとは、バイナリデータをASCII文字列に変換する手法の一つです。これにより、画像データをJSONの文字列として埋め込めるようになります。メールの添付ファイルも同じ仕組みで送受信されています。
Power Automateでは、OneDriveのファイルコンテンツ取得アクションで取得したデータに対して base64() 関数を使うことでエンコードできます。
実際には、Power Automateがファイルを取得した時点でBase64エンコード済みの状態になっていることもありますが、エンコード処理を加えておいても問題なく動作します。
動作確認
フローを保存してテスト実行すると、実行ログで各アクションの詳細を確認できます。
- ファイルコンテンツの取得のログでは、ファイルの中身が文字列として表示されます。これはBase64エンコードされたデータです。
- HTTPアクションのログでは、送信したリクエストの内容と、LINEからのレスポンスコードを確認できます。レスポンスが
200であれば送信成功です。
LINEのトーク画面を確認すると、メッセージと画像が同時に届いていることを確認できます。
LINE Notify APIドキュメントの参照先
LINE Notify APIのドキュメントを読むと、利用可能なパラメーターを全て把握できます。主なパラメーターは以下の通りです。
| パラメーター名 | 必須/省略可 | 説明 |
|---|---|---|
message | 必須 | 送信するメッセージ(最大1000文字) |
imageFile | 省略可 | 送信する画像ファイル(PNG/JPEG対応) |
imageThumbnail | 省略可 | サムネイル画像のURL(JPEG形式) |
imageFullsize | 省略可 | フルサイズ画像のURL(JPEG形式) |
stickerPackageId | 省略可 | スタンプのパッケージID |
stickerId | 省略可 | スタンプのID |
notificationDisabled | 省略可 | true で通知をオフにする(デフォルト: false) |
imageFile と imageThumbnail/imageFullsize を同時に指定した場合は、imageFile が優先されます。また、1時間あたりのアップロード量に制限がある点にも注意してください。
スタンプを送りたい場合は、stickerPackageId と stickerId の2つのパートをmultipartに追加するだけで対応できます。本記事で解説した構造と全く同じ方法で追加できます。
学習のポイント
画像付き送信は少し複雑に見えますが、以下の順序で理解を深めると応用が広がります。
- まずメッセージのみの送信(シンプルなPOSTリクエスト)を理解する
- Bearerトークンによる認証の仕組みを理解する
- Base64エンコードでバイナリデータをテキスト化する仕組みを理解する
multipart/form-dataで複数データを1リクエストにまとめる仕組みを理解する
この仕組みはLINE Notify以外のAPIでも同様に使われています。APIドキュメントを自分で読んで理解できるようになると、他のサービスとの連携も自分で設計できるようになります。
まとめ
Power AutomateからLINE Notifyにメッセージと画像を同時に送るには、以下の点が重要です。
- コンテンツタイプに
multipart/form-dataを指定することで、複数のデータを1つのリクエストにまとめられます - 画像データはBase64エンコードすることでJSONのボディに文字列として埋め込めます
- パラメーター名(
message・imageFileなど)はLINE Notify APIの仕様に従います - フローの基本構造はメッセージ送信と同じで、ボディのパートを追加するだけです
スタンプの送信など他の機能も、同じ構造にパートを追加するだけで実現できます。LINE Notify APIのドキュメントを参照しながら、ぜひさまざまな機能を試してみてください。