見出し画像

Googleフォームを使ってZoomリンクをTwitterDMで送る

【最終更新日】2022/4/15 (コードを微修正)

最近Zoom雑談するときに希望者へ会議URLをTwitter(DM)で送るのがめんどくさいという声をきいたので作ってみました。

コード(GAS)

今回はこちらを使用します。
★マークの場所は各自の環境に合わせて変更して下さい(別途説明します)

// Twitter API認証情報
var CONSUMER_KEY = 'xxxxxxxxxxx'; //★1 API Key
var CONSUMER_SECRET = 'xxxxxxxxxxx'; //★ 2API Key Secrret
var TOKEN = 'xxxxxxxxxxx'; //★3 Access Token
var TOKEN_SECRET = 'xxxxxxxxxxx'; //★4 Access Token Sercret

//アンケート内容収集
function onFormSubmit(e){
  const itemResponses = e.response.getItemResponses();      //フォームの全内容取得
  const email = e.response.getRespondentEmail();            //回答者メールアドレス取得  
  const screenName = itemResponses[0].getResponse();       //TwitterID 

getUserId(screenName)
}

//Twitter NameからIDを特定させる
function getUserId(screenName) {
  var service = getService();
  var requestURL = "https://api.twitter.com/1.1/users/lookup.json?screen_name=" + screenName
  var response = service.fetch(requestURL, {
    method: "get",
    contentType: 'application/json'
  });
  var o = JSON.parse(response.getContentText());
  var user_id = o[0].id_str //配列で帰ってくるのでそのうちの最初の要素のuser_idを取得する
  getZoomInfo(user_id)
}

//ZoomID記載シートからZoom情報を取得してメッセージ作成
function getZoomInfo(user_id) {
  const sheet = SpreadsheetApp.openById('xxxxxxxxxxx').getSheetByName('zoomid'); //★5 スプレッドシートID
  const time = sheet.getRange(2,1).getValue();
  const url = sheet.getRange(2,2).getValue();
  const id = sheet.getRange(2,3).getValue();
  const pass = sheet.getRange(2,4).getValue();
  const topic = sheet.getRange(2,5).getValue();

  //zoomURLが記載されていない場合はメッセージを変更
  if(url.indexOf('https://') > -1){
    var message = 'ご登録ありがとうございます' + '\n'  + '\n' 
          + 'トピック: ' + topic + '\n'
          + '日時: ' + time + '\n'  + '\n' 
          + 'Zoomミーティングに参加する' + '\n' 
          + url  + '\n'
          + 'ミーティングID: '+ id + '\n'
          + 'パスコード: ' + pass + '\n'+ '\n'
          + 'このメッセージに心当たりのない方はお手数ですがご連絡お願いします。';
  }else{
    var message = 'zoomの予約が存在しません。' + '\n'  + '主催者に連絡願います。'
  }
  newDirectMessage(user_id,message) 
}

//TwitterDM送信
function newDirectMessage(user_id,message){
  try{
    var service = getService();
    var payload = JSON.stringify({
      event: {
        type: 'message_create',
        message_create: {
          target: {
            recipient_id: String(user_id)  //先ほど取得したuserId
          },
          message_data: { text: message
          }  
        }
      }
    });
    var response = service.fetch('https://api.twitter.com/1.1/direct_messages/events/new.json',{
      method: 'POST',
      contentType: 'application/json',
      payload: payload
    });
    return response;
  } catch(e) {
    Logger.log('Exception:'+e);
  }
}

//doGet
function doGet() {
  return HtmlService.createHtmlOutput(ScriptApp.getService().getUrl());
}

//認証リセット関数。デバッグ時の初期化用
function reset() {
  var service = getService();
  service.reset();
}

// OAuthサービス設定
function getService() {
  return OAuth1.createService('Twitter')
      .setConsumerKey(CONSUMER_KEY)
      .setConsumerSecret(CONSUMER_SECRET)
      .setAccessToken(TOKEN, TOKEN_SECRET)
      .setAccessTokenUrl('https://api.twitter.com/oauth/access_token')
      .setRequestTokenUrl('https://api.twitter.com/oauth/request_token')
      .setAuthorizationUrl('https://api.twitter.com/oauth/authorize')
      .setCallbackFunction('authCallback') // コールバック関数名 
}
 
// OAuth CallBack
function authCallback(request) {
  var service = getService();
  var authorized = service.handleCallback(request);
  if (authorized) {
    return HtmlService.createHtmlOutput('success');
  } else {
    return HtmlService.createHtmlOutput('failed');
  }
}

事前準備

1.Twitter Developerの登録
2.Googleアカウント作成

Twitter APIを使用するのでこちらから利用申請を行います。
参考にしたブログを以下に記載するので合わせて参照下さい。

なお登録時にいくつか質問があってAPIを使用する理由を英語で200文字以上書く必要があります(これがめんどくさい)

自分はGoogle翻訳で適当に書いたら、日本語でいいから理由をちゃんと書いてメールで返信くれって言われてしまった(悲しみ)

Twitterからのメール

最終的に日本語で「こういうアプリ作る予定ですっ」
って返信したら審査通りました。

Googleアカウントの作成についてはほとんどの人が作成していると思うので説明は割愛します。

手順

1 Googleフォーム作成

1.自身のGoogleドライブ内にGoogleフォームを新規作成する
2.以下のようなフォームを作成してください。

- 1つ目の設問は記述式にして回答は必須にする
※ それ以外(タイトルや2個目以降の質問)はお好みで

3. "設定”タブにて以下の通り設定

メールアドレスを収集する:OFF
デフォルトでメールアドレスを収集する:ON ※
※悪戯防止のため収集必須にしています

2スプレッドシート設定

  1.  フォームの"回答"タブにてスプレッドシートのアイコンクリック

2. 新しいスプレッドシートを作成を選択して[作成]クリック
3. スプレットシートを開いたら[zoomid]という名前で新しいシートを作成
4. 新しいシートの1行目に以下項目を入力
 日時,URL,ID,Password,topic
5. 2行目にZoomの予約情報を入力して下さい(以下参照)

完成したシート(参考)

6. 完成したらURLからスプレッドシートIDを取得して下さい。

https://docs.google.com/spreadsheets/d/ スプレッドシートIDはこの部分 /edit?

3 スクリプト登録

1. フォームの右上[ ⁝ ] > [ スクリプトエディタ ] クリック

2. App  Scriptにて左メニューライブラリから以下2つを追加して下さい。

 ↓ ①OAth1ライブラリ

1CXDCY5sqT9ph64fFwSzVtXnbjpSfWdRymafDrtIZ7Z_hwysTY7IIhi7s

 ↓ ②TwitterWebServiceライブラリ

1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF

3. 次に上記に記載したコード(GAS)を張り付けて適当な名前を付けて保存
※追加パラメーターは別途追加します

4. 左メニュー「⏰」>[+トリガーを追加]クリック

5. 以下の通り設定して[保存]クリック

実行する関数を選択:onFormSubmit
イベントの種類を選択:フォーム送信時

6. google認証が表示されるので認証実行
※以下アラートが出た場合は[詳細]>[安全でないページに移動]クリック

7. 左メニュー「⚙」>IDにて[スクリプトID]をコピーして控えて下さい。

4 Twitter Developer - Project作成

1. Twitter Developerにログイン
2. Dashboardにて [+Create Project] クリック

3. Name Your Project画面にてProject nameを入力して[Next]クリック

4. Use caseにて使用用途を選択して[Next]クリック
(今回はMaking a bot )

5. Project descriptionにて説明文を入力して[Next]クリック

6. App Environmentにて適切なものを選択して[Next]クリック

7. App nameにてアプリ名を入力して[Next]クリック
 ※ここは全ユーザーで一意の名前にする必要があります。

8. すべて入力が終わるとAPIキーが発行されますがひとまずコピーは行わず[App settings]クリック

5 Twitter Developer - Project設定

  1. 作成したアプリの左側[ ⚙ ]クリック

2. User authentication settingsにて[Set up]クリック

3. User authentication settings画面にて以下の通り設定して[Save]クリック

OAuth 1.0a : 有効化
App permissions:Read and write and Direct message 選択
Callback URL / Redirect URL:https://script.google.com/macros/d/[GASスクリプトID]/usercallback と入力 ※スクリプトIDは項番3参照
Website URL:今回は使用しないので適当なURLを入力

4. 以下ポップアップが出たら[Yes]クリック

6 Twitter Developer - APIキー生成

1. Twitter Developerにログイン
2. Dashboardにて作成したAPPの「⚙」クリック
3. User authentication settingsにて”Keys and tokens”タブ”クリック
4. 以下参考に各キー取得して下さい。

API Key
API Key Secrret
Access Token
Access Token Sercret

7 スクリプト修正

作成したGASを開いて各パラメーター(★1~5)のxxxxxxxの部分を穴埋めして保存。
→それぞれ何を入れるかはスクリプトのコメント欄に記載しています。

動作確認

Googleフォームを回答してDMが届いたら成功です。
お疲れ様でした。

参考にしたサイト

補足

今回は1つの会議URLをDMのみにい来るシンプルな機能にしましたが
今後はSlackに通知されたりメールとDM選択できる機能をいつか作りたいなと思ってます。

あと不備があればツイッターのDM等でご連絡いただけると助かります。
うまく動かない場合も適宜ご相談下さい。

それでは楽しいオンラインミーティングライフを~~~~!

この記事が気に入ったらサポートをしてみませんか?