エクセルVBAでチャットワークに最もシンプルなメッセージを送る方法


airplane

photo credit: Scott Sanford Wings Over Houston80D.342-Edit via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでチャットワークAPIを利用する方法をお伝えしております。

前回の記事はコチラ。

エクセルVBAでチャットワークAPIにリクエストを送る最も簡単なプログラム
今回は、エクセルVBAでチャットワークAPIにリクエストを送る最も簡単なプログラムを紹介します。チャットワークAPIのリクエストURLについて、トークンの取得方法、ヘッダーのセットの方法などがポイントです。

エクセル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です。

https://www.chatwork.com/#!rid{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は、リクエストボディに載せるデータをキーと値のセットで渡すタイプです。

以下のような書式です。

キー1=値1&キー2=値2…

エクセルVBAのPOSTリクエストでapplication/x-www-form-urlencodedタイプのデータをリクエストボディに載せて送信する場合は、Sendメソッドに引数を指定して以下のようにします。

IXMLHTTPRequestオブジェクト.Send "キー1=値1&キー2=値2…"

チャットワークのメッセージ送信では、「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でチャットワークにメッセージを送る

まとめ

以上、エクセルVBAでチャットワークにメッセージを送る方法をお伝えしました。

  • チャットワークへのPOSTリクエストの方法
  • Content-Typeをヘッダーに指定する
  • Sendメソッドでapplication/x-www-form-urlencoded形式でデータを送る

POSTリクエストは少しやるべきことが増えますが、わかってしまえばなんてことないと思います。

次回は、マクロの実行完了と処理時間をチャットワークに通知する方法をお伝えします。

エクセルVBAでマクロの実行完了と処理時間をチャットワークに通知する方法
エクセルVBAでHTTP通信を行う方法についてあれこれお伝えしています。今回は一つ便利な使用例として、マクロの実行完了についてチャットワークへの通知してお知らせする方法についてお伝えします。

どうぞお楽しみに!

連載目次:エクセルVBAでチャットワークAPIにリクエストする方法

エクセルVBAではIXMLHTTPRequestオブジェクトを使うことでHTTP通信を行うことができます。このシリーズではエクセルVBAからHTTPリクエストを行うことで、チャットワークAPIを活用する方法を紹介していきます。
  1. エクセルVBAでHTTPリクエストをする最も簡単なプログラム
  2. エクセルVBAでIEを使わずにHTMLドキュメントを取得する方法
  3. エクセルVBAでチャットワークAPIにリクエストを送る最も簡単なプログラム
  4. エクセルVBAでチャットワークに最もシンプルなメッセージを送る方法
  5. エクセルVBAでマクロの実行完了と処理時間をチャットワークに通知する方法

タイトルとURLをコピーしました