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アクションを中心に構成されます。基本的な構成は前回のメッセージ送信と同じです。

  1. OneDriveからファイルコンテンツを取得する
  2. 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アクションのコンテンツタイプを以下のように設定します。

multipart/form-data

このコンテンツタイプを指定すると、ボディを複数のパート(配列)として記述できるようになります。

ボディの構造

ボディは配列形式になっており、それぞれのパートに 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-Typeimage/png を指定します
  • body には、OneDriveのファイルコンテンツ取得アクションで取得したコンテンツをBase64エンコードして埋め込みます

Base64エンコードとは

JSONやHTTPのボディはテキストデータが基本です。画像のようなバイナリデータをそのまま埋め込むことはできません。

Base64エンコードとは、バイナリデータをASCII文字列に変換する手法の一つです。これにより、画像データをJSONの文字列として埋め込めるようになります。メールの添付ファイルも同じ仕組みで送受信されています。

Power Automateでは、OneDriveのファイルコンテンツ取得アクションで取得したデータに対して base64() 関数を使うことでエンコードできます。

@base64(body(''))

実際には、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

imageFileimageThumbnail/imageFullsize を同時に指定した場合は、imageFile が優先されます。また、1時間あたりのアップロード量に制限がある点にも注意してください。

スタンプを送りたい場合は、stickerPackageIdstickerId の2つのパートをmultipartに追加するだけで対応できます。本記事で解説した構造と全く同じ方法で追加できます。


学習のポイント

画像付き送信は少し複雑に見えますが、以下の順序で理解を深めると応用が広がります。

  1. まずメッセージのみの送信(シンプルなPOSTリクエスト)を理解する
  2. Bearerトークンによる認証の仕組みを理解する
  3. Base64エンコードでバイナリデータをテキスト化する仕組みを理解する
  4. multipart/form-data で複数データを1リクエストにまとめる仕組みを理解する

この仕組みはLINE Notify以外のAPIでも同様に使われています。APIドキュメントを自分で読んで理解できるようになると、他のサービスとの連携も自分で設計できるようになります。


まとめ

Power AutomateからLINE Notifyにメッセージと画像を同時に送るには、以下の点が重要です。

  • コンテンツタイプに multipart/form-data を指定することで、複数のデータを1つのリクエストにまとめられます
  • 画像データはBase64エンコードすることでJSONのボディに文字列として埋め込めます
  • パラメーター名(messageimageFile など)はLINE Notify APIの仕様に従います
  • フローの基本構造はメッセージ送信と同じで、ボディのパートを追加するだけです

スタンプの送信など他の機能も、同じ構造にパートを追加するだけで実現できます。LINE Notify APIのドキュメントを参照しながら、ぜひさまざまな機能を試してみてください。