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

DropBox VS Googleドライブ はサムネイル対応が決め手で、こっちの勝ち

DropBoxは、会社PCにインストールしている。けどあまり有効に使っていない。 Googleドライブは未だ使ったことがない。 家のPCでデジカメ写真がたまっているのだが、相当な量になってきたのでバッ …

no image

ペースターno日付計算

便利に使わせていただいているシェアウェアの「ペースター」ですが、 カスタムメニューを使って、3日前とか、一週間前の日付計算をしてから貼り付ける方法が、わからなかった。 さっきGoogleで調べたら、な …

no image

来週やるExcelVBAセミナーの準備をしていて、

同じ「飛び物」でもロケットが好きな人とラジコンが好きな人がいるよな、とふと思った。 ロケットの好きな人は、 準備をきちんと整えて、万全を期して発射スイッチを押す・・・飛んだ!あんなに高く。感動! 飛ん …

no image

LogMeIn

Going My Way: 外出先のブラウザーから自宅や会社のPCをリモートコントロールできるLogMeIn http://kengo.preston-net.com/archives/002128. …

Windowsからたまに音が出なくなるのでタスクスケジューラを使った

会社でサーバ代わりにしているために起動しっぱなしにしているWindows7のLenovoのマシンで、度々(数日に一度)、音が出なくなる。 OSを再起動したら直る。 これまで、タスクスケジューラで2週間 …