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

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

新規登録して質問してみよう
ただいま回答率
85.37%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

5494閲覧

LINEWORKSのホームへGASから投稿

lazyAnt

総合スコア12

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2020/02/19 07:19

前提・実現したいこと

LINE WORKSを会社に導入が決定しました。
それに伴い今までLINEで行っていた周知的なものを
LINE WORKSのホームを利用していこうとなりました。

今まで、LINEへの通知などをGoogle Apps Script(以下、GAS)から
LINE Messaging APIを利用して行っていましたので
GASで試みようとしたところ、WEB上に参考文献も少なく
立ち行かなくなってしまいましたのでご教示願いたく投稿させていただきました。

発生している問題・エラーメッセージ

【LINE WORKS Developers[投稿作成]】
https://developers.worksmobile.com/jp/document/100180301?lang=ja

【GoogleAppsScript で LINEWORKS のチャット BOT を作る】
https://qiita.com/kunihiros/items/a94221ad7c9f4de84cf8

JWTの認証は上記を参考にさせていただきトークン発行までは無事できましたが、
以下の部分をどうUrlFetchAppで記述すればよいかがわかりませんでした。
HTTP Method
POST(Content-Type: multipart/form-data; boundary="$boundary”; charset=UTF-8)

GAS

1var res = UrlFetchApp.fetch(uri, { 2 'method' : 'post', 3 'headers' : { 4 'Content-Type' : 'multipart/form-data; boundary="$boundary”', 5 'consumerKey' : ---Server API Consumer Key---, 6 'Authorization' : 'Bearer ' + token, 7 }, 8 'payload': { 9 "domainId": domainId, //ドメインID 10 "boardNo": bordNo, // 掲示板の管理番号 11 "title": "タイトル", 12 "body": "内容", 13 "useComment": false, 14 "accountId": 'accountId',// LINEWORKS アカウントID 15 "memberName": null, 16 "department": null, 17 }, 18 muteHttpExceptions: true 19 });

わからないなりに上記のようなコードで実行してみると以下エラーが出て
必要なリクエストパーツ「article」が存在しませんと怒られました。

{"error":"Bad Request","message":"Invalid parameter","devMessage":"Required request part 'article' is not present","status":400,"domain":"home","code":"SERVICE_UNAVAILABLE"}

GASを使ってBacklog APIを叩く
https://teratail.com/questions/131775
GASとmultipart/form-dataという2点の共通点だけで参照しながら
Utilities.newBlobを用いて見様見真似でやってみましたが下記エラーがでてやはりだめでした

var requestBody = '--"$boundary”\r\n' + 'Content-Disposition: form-data; name="article"' + "\r\n\n" + '{' + '\r\n' + '"domainId": "' + domainId + '",' + '\r\n' + '"boardNo": "' + bordNo + '",' + '\r\n' + '"title" : "タイトル",' + '\r\n' + '"body" : "内容",' + '\r\n' + '"useComment" :' + false + ',' + '\r\n' + '"accountId" :' + 'accountId' + ',' + '\r\n' + '"memberName" :' + null + ',' + '\r\n' + '"department" :' + null + ',' + '\r\n' + '}' {"message":"Unknown error","domain":"common","code":"INTERNAL_SERVER_ERROR"}

LIEN WORKSに関するjavascriptの情報が少ないのと
私自身がAPIをきちんと理解できておらず勉強不足という点は否めないのですが
Content-Type: multipart/form-data; boundary="$boundary”の場合は
どのようにUrlFetchへ引き渡せばよいのかご教示いただきたいです。

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

自己解決

だいぶ時間が経過してしまいましたが、以下の形式で記述することで自己解決を致しました。
正直、理解はできていません。。。
もう少し勉強をしていきたいと思います。

GAS

1 const uri = "https://apis.worksmobile.com/r/" + apiId + "/home/v1/articles" 2 const boundary = "boundary" 3 const article ="{" 4 + "\"title\":\"" + title + "\"," 5 + "\"body\":\"" + body + "\"," 6 + "\"boardNo\":" + boardNo + "," 7 + "\"domainId\":" + domainId +"," 8 + "\"sendCreatedNotify\":" + sendCreatedNotify 9 + "}"; 10 11 const requestBody = Utilities.newBlob( 12 "--"+boundary+"\r\n" 13 + "Content-Disposition: form-data; name=\"article\"\r\n\r\n" 14 + article+"\r\n"+"--"+boundary) 15 16 const options = { 17 'method': 'POST', 18 'headers': { 19 'Content-Type': 'multipart/form-data; boundary='+boundary, 20 'consumerKey': ckey, 21 'Authorization': 'Bearer ' + token, 22 }, 23 'payload': requestBody, 24 'muteHttpExceptions': true, 25 };

投稿2020/05/12 08:09

lazyAnt

総合スコア12

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

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

0

引用元のLINE Developersがなかったので読んでないと思って回答します。

Worksの何がしたいのか分からないのですが、察するにMessagingAPIのpayload辺りを見てもらえば良いのではないかと思います。

投稿2020/02/26 07:07

編集2020/02/26 07:08
nomura

総合スコア116

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

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

lazyAnt

2020/02/26 07:15

nomura様 ご回答ありがとうございます。 今回、ご質問させていただいておりますのが「LINE WORKS」になりまして 「LINE」とはAPIの仕様が異なるようなのです。 公式サイト:https://line.worksmobile.com/jp/ Developers:https://developers.worksmobile.com/jp/?lang=ja 簡潔に行いたいことを申し上げますと 「LINE WORKS」にはホームという掲示板的機能がありまして そこにGASを用いてAPI 経由で投稿をおこないたい という事になります。 ホーム:https://line.worksmobile.com/jp/feature/home/
nomura

2020/02/26 07:57 編集

ちょっと切り分けたいので、一つずつ対応していきたいです。 ``` {"error":"Bad Request","message":"Invalid parameter","devMessage":"Required request part 'article' is not present","status":400,"domain":"home","code":"SERVICE_UNAVAILABLE"} ``` とあるので、headersにarticleがないと怒られています。 これは、最初に提示されているページのRequestの必須項目となっていることからも分かります。 requestBodyがarticleの内容だと思われるので、いったんこれを入れてみてもらえますか。 article内も必須項目だけあれば良いので、うまくいかなければ最小の構成で試してみてもらうと失敗も少ないかと思います。 私の手元にLINE WORKSの環境がないので検証できていません。 ご了承ください。
lazyAnt

2020/02/26 10:32

var requestBody = '--"$boundary”\r\n' + 'Content-Disposition: form-data; name="article"' + "\r\n\n" + '{' + '\r\n' + '"domainId": "' + domainId + '",' + '\r\n' + '"boardNo": "' + boardNo + '",' + '\r\n' + '"title" : "タイトル",' + '\r\n' + '"body" : "内容",' + '\r\n' + '}' var uri = "https://apis.worksmobile.com/r/" + apiId + "/home/v1/articles" var options = { 'method': 'POST', 'headers': { 'Content-Type': 'multipart/form-data', 'consumerKey' : consumerKey, 'Authorization' : 'Bearer ' + token }, 'payload': requestBody, muteHttpExceptions: true, }; var res = UrlFetchApp.fetch(uri, options); 今回特に添付ファイルはなく、テキストのみをアップロードしたいと思っています。 上記で実行をすると下記エラーが帰ってきてしまいました。 {"message":"Unknown error","domain":"common","code":"INTERNAL_SERVER_ERROR"} LINEWORKSのAPIでは「Content-Type: application/json」のメッセージの送信などはサンプルなどもあったので 何とか使用できているのですが「Content-Type: multipart/form-data」 こちらの記述の仕方がわかっていない状態です。 メッセージの送信 https://developers.worksmobile.com/jp/document/100500801?lang=ja
nomura

2020/02/27 05:47

name='article'ではなく、name='(json形式。article欄を参照)'ではないでしょうか? ちょっとうまく説明できないのですが、以下のmix-peachさんのコメントが参考になると思います。 https://teratail.com/questions/231287
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問