Chatworkに対し、メッセージやファイルを投稿したいというリクエストがあったので、調査。
カスタムコネクタを作ってもよかったんだけど、まずは簡単に試せるHTTPアクションから実行。
必要な情報
今回使用するChatworkのAPIに必要な情報は以下2つ。
- Room ID
- APIトークン
RoomID
メッセージやファイルを投稿するチャット(ルーム)のID、これはチャットを開いたときのURLから確認が可能。


APIトークン
続いてAPIトークン。これは右上のアイコンの[サービス連携]から、


[APIトークン]タブを選択すれば確認可能。


メッセージを投稿する
まずはメッセージの投稿から。使用するのはこのAPI。
![]()

Chatwork APIドキュメント
クラウド型ビジネスチャットツール「Chatwork」における開発者向けAPIの仕様詳細について記載しています
Power Automateのリクエストアクションをこのように設定する。


■URI
![]()
【Room ID】/messages
https://api.chatwork.com/v2/rooms/
■Headers
{
"Accept": "application/json",
"Content-Type": "application/x-www-form-urlencoded",
"X-ChatWorkToken": "【APIトークン】"
}
■Queries
{
"body": "【送りたいメッセージ】",
"self_unread": 0
}
このフローを実行するとメッセージが投稿できる。


ファイルを投稿する
ファイルの投稿では以下のAPIを使用して、multipart/form-dataとしてファイルを送信する。
![]()

Chatwork APIドキュメント
クラウド型ビジネスチャットツール「Chatwork」における開発者向けAPIの仕様詳細について記載しています
まずはトリガーの引数などからファイルを取得し、


拡張子をもとにContent-Typeを取得する。こんな感じで使用する可能性のあるcontent-typeを定義しておいて、


ファイル名から取得できる拡張子をもとに、対応するcontent-typeを定義済みの配列から取得(フィルター)する。
last(split(triggerBody()?['file']?['name'], '.'))
取得したContent-typeとファイルの情報をmultipart/form-dataとして送信する。


■URI
![]()
https://api.chatwork.com/v2/rooms/361224277/files
■Headers
{
"Accept": "application/json",
"Content-Type": "multipart/form-data",
"X-ChatWorkToken": "【APIトークン】"
}
■Body
{
"$content-type": "multipart/form-data",
"$multipart": [
{
"headers": {
"Content-Disposition": "form-data; name=\"file\"; filename=\"@{triggerBody()?['file']?['name']}\""
},
"body": {
"$Content-type": "@{first(body('アレイのフィルター処理'))['content-type']}",
"$Content": @{triggerBody()?['file']?['contentBytes']}
}
}
]
}
このPower Automateを実行するとファイルを送信できる。


ファイルの投稿と一緒にメッセージも送信できるはずだけど。。
ファイル投稿のAPIを見ると、ファイルと一緒にメッセージの投稿もできるらしい。
そこでフローをのBody部分にmessageを追加して、メッセージを送信してみると、

フロー自体は成功するんだけど、


なぜかメッセージとファイルは投稿されない。。


multipart/form-dataの使い方が違う可能性があるが、現時点では解決策見つからず。
{
"$content-type": "multipart/form-data",
"$multipart": [
{
"headers": {
"Content-Disposition": "form-data; name=\"file\"; filename=\"@{triggerBody()?['file']?['name']}\""
},
"body": {
"$Content-type": "@{first(body('アレイのフィルター処理'))['content-type']}",
"$Content": @{triggerBody()?['file']?['contentBytes']}
}
},
{
"headers": {
"Content-Disposition": "form-data; name=\"message\""
},
"body": "Hello World"
}
]
}