2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

定期的に Twitter で特定の内容を検索して通知してくれる Bot を作った話(続編)

Posted at

大変お待たせいたしましたが、ようやく続編書けました!
見捨てないで読んでくださっている方々、本当に感謝です。ありがとうございます!( ;∀;)

念のため。
これは 定期的に Twitter で特定の内容を検索して通知してくれる Bot を作った話(前編) および 定期的に Twitter で特定の内容を検索して通知してくれる Bot を作った話(後編) の続きです。

書ききれなかった、「共有するボタンを押したら全体のトークルームに送信する方法」を解説していきます。
どうぞよろしくお願いいたします。

「共有する」ボタンを押したら別のトークルームに送信

前回の記事で実装した「共有する」ボタンは メッセージ送信 (buttonTemplate) を使用しています。

1583810815.png

メッセージ内の「共有する」ボタンを押すと、Bot の CallbackURL 宛にメッセージが送信されます。
詳しくは メッセージ受信 - Callback 形式 を参考にしてください。

CallbackURL は、実は前編で設定していたのです!

・・・わかってますって?
ですよねー(*‘∀‘)

なので、GoogleAppsScripts のコードに、Callback を受信したときの処理を追加します!

app.gs
function doPost(e) {
  if (e == null || e.postData == null || e.postData.contents == null) return;
  const requestJSON = e.postData.contents;
  const requestObj = JSON.parse(requestJSON);
  var text = requestObj.content.text;
  text = text.replace(/.*?text=/,""); // 不要な部分の削除
  const sendMsg = text.replace("\n\n\">全体のトークルームに共有します。",""); // 不要な部分の削除
  const keys = {
    "apiId" : "API ID",
    "consumerKey" : "Server API Consumer Key",
    "serverId" : "Server List(ID登録タイプ) の ID",
    "privateKey" : "Server List(ID登録タイプ) の認証キー",
    "botNo" : "botNo"
  };
  const roomId = "1234567890"; // 送信したいトークルームの roomId
  const uri = "https://apis.worksmobile.com/r/" + keys.apiId + "/message/v1/bot/" + keys.botNo + "/message/push";
  const headers = {
    "Content-type": "application/json",
    "consumerKey": keys.consumerKey,
    "Authorization": "Bearer " + LINEWORKS.getToken(keys)
  };
  const options = {
    "method": "post",
    "headers": headers,
    "payload": JSON.stringify({
      "roomId": roomId,
      "content": {
        "type": "text",
        "text": sendMsg
      }
    })
  }
  UrlFetchApp.fetch(uri, options); 
}  
  • 8行目の keys には自身の DeveloperConsole 画面で確認した API ID などを入れてください
  • 15行目の roomId には共有先のトークルームの roomId を入れてください。

トークルームの roomId を取得するにはいくつか方法があるのですが、良かったら過去の記事「トークルームの roomId を取得する bot」を参考にしてくださいませ('ω')

6、7行目ではテキストの不要な部分を削除しています。
何もしないと以下のような文章が送られてきます。

<postback callbackBotNo="xxxxxx" data="action=share&text=Thu Mar 05 03:32:02 +0000 2020
こぐまのケーキ屋さんはほっこりするなぁ
クリームちゃん

">全体のトークルームに共有します。

text= よりあとの文章が必要なので、前半部分を6行目で、後半部分を7行目で削除しています。

コードをコピペして、keysroomId を修正したら、GoogleAppsScript を公開して完成です!
公開の仕方は前編で紹介した GoogleAppsScript の作成 で説明している手順と同様に行えば更新版を公開できます。

公開したのち、Bot から送られてきたメッセージの「共有する」ボタンを押すと・・・

1583810843.png

全体のトークルームに共有できました!

おわりに

ここまでお付き合いいただき、本当に、本当にありがとうございました!(*´Д`)
ようやく書き終わることができました。。。
長い文章書くのって本当に大変だなぁ。諸先輩方の凄さに感服している次第です。

今回の失敗を反省し、次回に生かす所存であります!('◇')ゞ

あと、Keys の値はいくつかの function で使用するのでどこかで Getter を作っておいた方が楽な気がします。

それから、あんまり使ったことなかったのですが、LINEWORKS API の URL スキーム を使うと roomId を指定せず、好きなトークルームをユーザが指定できるみたいです。

色々と精進しないとなー。頑張ります('ω')

ではまた!(^^)/

参考にさせていただきましたm(_ _)m

GoogleAppsScript 公式
Twitter Developers 公式
LINEWORKS Developers 公式

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?