質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

解決済

2回答

3309閲覧

Excel VBAからSlackWebhookを利用した画像投稿

Yoichinn

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

0クリップ

投稿2020/02/26 10:06

お世話になります。
どう直せばよいかをご教示いただけませんでしょうか。
ご助力のほどよろしくお願いいたします。

◆開発環境
Excel2016(32bit)
Windows10

◆やりたいこと
ExcelVBAからHTTPリクエストでSlackのIncoming Webhookを利用しSlackへ画像投稿をしたい。

◆現状
以下を実行してもSlackは無反応となっております。(何も表示されない)
エラー等も発生しておりません

◆参考にしたURL
参考にしたページ①
参考にしたページ②

◆現状のコード

VBA

1Sub slack() 2webhookURL = "incoming Webhook URL" 3Proxy = "Proxyアドレス:ポート" 4 5Set HTTPReq = CreateObject("WinHttp.WinHttpRequest.5.1") 6HTTPReq.Open "POST", webhookURL, False 7HTTPReq.setProxy 2, Proxy 8HTTPReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 9 10HTTPReq.send("payload={""type"": ""image"",""title"": {""type"": ""plain_text"",""text"": ""image1"",""emoji"": true},""image_url"": ""https://api.slack.com/img/blocks/bkb_template_images/beagle.png"",}") 11'画像の部分は最終的にローカルPC内にある画像のパスを指定して表示させたいと考えております 12End Sub

※上記のコードでPayload内をテキスト送信だけさせると問題なく動作いたしました
HTTPReq.send("payload={""text"":""Msg_Text"",}")

何か不足している情報等ございましたらご指摘いただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2020/02/26 10:38 編集

HTTPReq.Status で、 Slack API が返してきたエラーコードが確認できるのではないかと思いますが、HTTPReq.send の実行後に HTTPReq.Status を確認すると何が帰ってきていますか?
Yoichinn

2020/02/26 10:46

ご確認いただきありがとうございます。 HTTPReq.Statusを入れて確認したところ400が返ってきました。(Bad request) ※メッセージだけ送った方は200が返ってきておりました。 送信しているPayloadの構文が誤っていることなのでしょうか。
guest

回答2

0

ベストアンサー

HTTPReq.send("payload={""text"": ""a"",""attachments"":[{ ""image_url"":""http~~~

textかなにかと一緒に送る必要がありますが、
attachmentsの中にimage_urlで送れるかと思いますがどうでしょうか?
textの中にurlだけ入れても、1つなら、自動で画像表示してくれると思いますが
やりたいことと違いますか?

投稿2020/08/04 14:17

編集2020/08/18 04:08
weekendmagic

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yoichinn

2020/09/28 04:18

weekendmagicさん 回答いただきありがとうございます! 返信が遅くなってしまい申し訳ありませんでした。 >attachmentsの中にimage_urlで送れるかと思いますがどうでしょうか? →400が返ってきてしまいうまくいきませんでした。 >textの中にurlだけ入れても、1つなら、自動で画像表示してくれると思いますが →確かにこの方法でもよさそうです!  Web上の画像であれば表示できました。  最終的には、ローカルにある画像を送信したいのです。  WebサーバにアップロードしてURL発行すれば疑似的に可能だと思っています。  利用可能なWebサーバがないため、画像をGoogleドライブに入れてURLから表示できればと考えて試してみました。  しかし、URLを渡しても400で返ってきてしまいました。  おそらくURLの文字列内に?があるためじゃないかと考えております(※不確か) ※うまく表示できたコード ```VBA TargetURL = webhook URL Set HTTPReq = CreateObject("WinHttp.WinHttpRequest.5.1") HTTPReq.Open "POST", TargetURL, False HTTPReq.setProxy 2, Proxy HTTPReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" HTTPReq.send ("payload={""text"": ""https://www.fumira.jp/cut/syokugyo/img/kokkusan.gif""}") ```
weekendmagic

2020/09/28 05:53

''' HTTPReq.send ("payload={""text"": ""テキスト"",""attachments"":[{""fields"": [{""title"":""タイトル""}], ""image_url"":""https://画像のurl ""}]}") ''' fieldsはなくても大丈夫だと思いますが、よければお試しください。
Yoichinn

2020/09/28 07:46

ありがとうございます! うまくいきました。 あとはGoogleDriveから画像のURLをうまく取れるように頑張ってみます。 大変助かりました。
guest

0

HTTPReq.send("payload={""type"": ""image"", ""title"": {""type"": ""plain_text"",""text"": ""image1"",""emoji"": true}, ""image_url"": ""https://api.slack.com/img/blocks/bkb_template_images/beagle.png"", }")

としたら
/beagle.png"", カンマいりますか?

投稿2020/03/01 23:49

sinzou

総合スコア392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yoichinn

2020/03/02 05:41

回答いただきありがとうございます。 最後のカンマを抜いてみましたが、状況は変わりませんでした。 ※HTTPReq.Statusの返り値:400
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問