IT仕事 PowerAutomate

PADからChatworkに画像ファイルを添付で送る

投稿日:2026年6月2日 更新日:

PADで、画像を添付ファイルでチャットワークに送る方法を調べたけど、見つからなかった。
代わりにPDFを送る方法は見つかったが、そのままのやり方ではうまくいかなかった。pdfとjpgで扱いが変わるのかな?

【Power Automate Desktop】ChatworkにPDFを自動アップロードする #PowerShell – Qiita

ChatGPTに相談したら、最初はフローで「テキストをバイナリに変換」しろだの、「バイナリを Base64 に変換する」だの、いろいろ注文されてその通りにフロー作成したが、うまくいかなかった。
だが最終的に、PADの「Webサービスを呼び出します」アクションを諦め、「PowerShell スクリプトの実行」アクションを使って、確実にJPGをそのまま無傷でチャットワークに送り届ける方法に変えましょう、となって、うまくいった。

以下を「PowerShell スクリプトの実行」アクションにコピペして必要箇所を書き換えるだけでOKと思うよ。

# --- 設定エリア(ここをご自身の環境に書き換えてください) ---
$token = "【あなたのAPIトークン】"
$roomId = "【あなたのルームID】"
$filePath = "【JPGファイルのフルパス(例 C:\Folder\image.jpg)】"
$message = "画像を添付します。"
# --------------------------------------------------------

# 送信処理(ここは書き換え不要です)
$URL = "https://api.chatwork.com/v2/rooms/$roomId/files"
$fileBytes = [System.IO.File]::ReadAllBytes($filePath)
$fileName = [System.IO.Path]::GetFileName($filePath)
$LF = "`n"
$boundary = [System.Guid]::NewGuid().ToString()

$bodyLines = (
    "--$boundary",
    "Content-Disposition: form-data; name=`"message`"",
    "",
    $message,
    "--$boundary",
    "Content-Disposition: form-data; name=`"file`"; filename=`"$fileName`"",
    "Content-Type: image/jpeg",
    ""
) -join $LF

$headerBytes = [System.Text.Encoding]::UTF8.GetBytes($bodyLines + $LF)
$footerBytes = [System.Text.Encoding]::UTF8.GetBytes($LF + "--$boundary--" + $LF)

$requestStream = [System.IO.MemoryStream]::new()
$requestStream.Write($headerBytes, 0, $headerBytes.Length)
$requestStream.Write($fileBytes, 0, $fileBytes.Length)
$requestStream.Write($footerBytes, 0, $footerBytes.Length)
$bodyBytes = $requestStream.ToArray()

$headers = @{
    "X-ChatworkToken" = $token
    "Content-Type"    = "multipart/form-data; boundary=$boundary"
}

Invoke-RestMethod -Uri $URL -Method Post -Headers $headers -Body $bodyBytes

追記:元画像が重たかったので、圧縮処理も追加した。以下がコード。

Add-Type -AssemblyName System.Drawing

# 画像の読み込み
$srcImg = [System.Drawing.Image]::FromFile("%FilePath%")

# 新しいサイズを計算(縦横比を維持)
$newWidth = 1024
$newHeight = [int]($srcImg.Height * $newWidth / $srcImg.Width)

# リサイズ処理
$bmp = New-Object System.Drawing.Bitmap($newWidth, $newHeight)
$graph = [System.Drawing.Graphics]::FromImage($bmp)

# 画質の設定(きれいに縮小するための処理)
$graph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic

# 描画
$graph.DrawImage($srcImg, 0, 0, $newWidth, $newHeight)

# 保存してメモリ解放
$bmp.Save("%DstFilePath%")
$graph.Dispose()
$bmp.Dispose()
$srcImg.Dispose()

-IT仕事, PowerAutomate

執筆者:

関連記事

no image

EPSON EP-4004の有線LAN(インフラストラクチャーモード)での接続方法

EPSON EP-4004のプリンタは、無線LANのアドホックでの接続は、とても簡単。 しかし、インフラストラクチャーでの接続となると、とても難しい。 マニュアルにも、丁寧なやり方は載っていない。 以 …

no image

決裁システム

取引先から、「簡単な決裁システムを使いたいんだけど、何かいいものを知らないか」と聞かれた。 うちの会社ではそんなイイモノは使っていないし、他の取引先に納入した事もない。 知りません、と返事しかけたとき …

no image

パラメータクエリにパラメータをセットして実行した結果をデータシートで表示する」というコードの実行で3065エラー

Accessの仕様として、パラメータクエリだけが駄目なのかと思ったら、なんと選択クエリが駄目なのだそう。 理由は、Executeメソッドはアクションクエリのもので、選択クエリのものではないからだそう。 …

no image

GoogleChromeの拡張機能を使ってGmailの本文中の文字を簡単に再検索する方法

Gmailの注文メールを開いて、お客様の注文番号や電話番号・メールアドレスをコピペして検索・・・といった操作は、よく使うと思うのですが、ちょっと面倒に思いませんか? GoogleChromeの拡張機能 …

no image

Googleドキュメントのスプレッドシートのリンク

Googleドキュメントのスプレッドシートで、あるセルからWebサイトにリンクを張ろうとしたのだが、メニューにコマンドがない。 ・・・と思ったら、数式の関数で指定するんだね、 =HYPERLINK(& …