みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでチャットワークAPIを利用する方法をお伝えしております。
前回の記事はコチラ。
エクセルVBAからチャットワークAPIを経由して、自分自身の情報を取得する簡単なプログラムを作成できました。
ここまでくれば、あとは横展開していけばOKですので、じゃんじゃんいろいろと試していきましょう。
今回は、チャットワークを操作するならやりたい「メッセージ送信」。POSTリクエストを使うことで実現できます。
エクセルVBAでチャットワークにメッセージを送信する方法です。
では、行ってみましょう!
前回のおさらい
まずは前回のおさらいからです。
前回作成したプログラムはこちらでした。
Sub チャットワークにHTTPリクエスト()
Dim httpReq As XMLHTTP60
Set httpReq = New XMLHTTP60
With httpReq
.Open "GET", "https://api.chatwork.com/v2/me"
.setRequestHeader "X-ChatWorkToken", "xxxxx取得したAPIトークンxxxxx"
.Send
Do While .readyState < 4
DoEvents
Loop
Debug.Print .responseText
End With
Set httpReq = Nothing
End Sub
変数httpReqにHTTPリクエストを行うためのIXMLHTTPRequestオブジェクトにセットしています。
チャットワークAPIにリクエストを送るには
- メソッド:GET
- URL:「https://api.chatwork.com/v2/」をベースにに目的に応じたエンドポイントやパラメータを付与
- ヘッダー「X-ChatWorkToken」にAPIトークンを指定
が必要で、上記二つはOpenメソッドで、最後のヘッダーはsetRequestHeaderメソッドで実行をしています。
準備ができたらSendメソッドで、リクエスト送信ということになります。
エクセルVBAでチャットワークにメッセージを送る
メッセージ送信のPOSTリクエスト
チャットワークにメッセージを送る場合は、チャットワークAPIによると
- エンドポイント:/rooms/{room_id}/messages
- {room_id}:対象となるグループのルームID
- メソッド:POST
- リクエストボディのbodyにメッセージ本文を指定
という仕組みです。POSTリクエストですね。
つまり、ルームIDを定数ROOM_IDとすると、Openメソッドの箇所は以下のようになります。
httpReq.Open "POST", "https://api.chatwork.com/v2/rooms/" & ROOM_ID & "/messages"
ルームIDを取得
ルームIDは、グループチャットごとに固有に割り当てられているIDで、グループチャットを開いた際のURLから取得できます。
以下の{room_id}の部分にある、何桁かの数値列がルームIDです。
このルームIDを取得しておきましょう。
ヘッダーにContent-Typeを指定する
POSTリクエストでは、リクエストボディという領域に何らかのデータを載せてリクエストをすることができます。
今回はチャットワークに送るメッセージ内容をリクエストボディに載せて送りたいわけです。
その際にリクエストボディのメディアタイプを表す、「Content-Type」をヘッダーで指定する必要があり、「application/x-www-form-urlencoded」という値を指定します。
つまり、setRequestHeaderメソッドで
httpReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
という一文を追加する必要があります。
メッセージ内容をリクエストボディに載せる
application/x-www-form-urlencodedは、リクエストボディに載せるデータをキーと値のセットで渡すタイプです。
以下のような書式です。
エクセルVBAのPOSTリクエストでapplication/x-www-form-urlencodedタイプのデータをリクエストボディに載せて送信する場合は、Sendメソッドに引数を指定して以下のようにします。
チャットワークのメッセージ送信では、「body」というキーにメッセージの内容を指定しますので、例えば以下のようにすればOKです。
httpReq.Send "body=テスト"
チャットワークにメッセージを送信するVBAプログラム
以上を踏まえまして、完成したチャットワークにメッセージを送るVBAプログラムはこちらです。
Sub チャットワークにメッセージを送る()
Const API_TOKEN As String = "xxxxxAPIトークンxxxxx"
Const ROOM_ID As String = "xxxxxxxx" 'ルームID
Dim httpReq As XMLHTTP60
Set httpReq = New XMLHTTP60
With httpReq
.Open "POST", "https://api.chatwork.com/v2/rooms/" & ROOM_ID & "/messages"
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "X-ChatWorkToken", API_TOKEN
.Send "body=テスト"
End With
Set httpReq = Nothing
End Sub
実行すると、以下のようにチャットワークにメッセージを送ることができます。
まとめ
以上、エクセルVBAでチャットワークにメッセージを送る方法をお伝えしました。
- チャットワークへのPOSTリクエストの方法
- Content-Typeをヘッダーに指定する
- Sendメソッドでapplication/x-www-form-urlencoded形式でデータを送る
POSTリクエストは少しやるべきことが増えますが、わかってしまえばなんてことないと思います。
次回は、マクロの実行完了と処理時間をチャットワークに通知する方法をお伝えします。
どうぞお楽しみに!